Unit 8. computer programming 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Unit 8. computer programming



Text A

Pre-reading task. Match the meaning of the following English words with their Russian definitions.

1. assumption a) программа - отладчик

2. event driven b) сетка, таблица

3. gridc) предположение, допущение

4. paradigm d) управляемое событие

5. debugger e) система понятий, модель

6. flowchart f) постановка задачи

7. problem statement g) графическая схема программы

 

Reading. Read the text and try to guess the meaning of the words in bold. Check your variants in the dictionary.

 

PROGRAM PLANNING

The programming process begins with a problem statement that helps you clearly define the purpose of a computer program. In the context of programming, a problem statement defines certain elements that must be manipulated to achieve a result or goal. A good problem statement for a computer program has three characteristics:

1. It specifies any assumptions that define the scope of the problem.

2. It clearly specifies the known information.

3. It specifies when the problem has been solved.

In a problem statement an assumption is something you accept as true in order to proceed with program planning. The “ known information ” is the information that you supply to the computer to help it solve a problem. There are also variables (values that can change) and constants (factors that remain the same) in computer programs.

Formulating a problem statement provides a minimal amount of planning, which is sufficient for only the simplest programs. A typical commercial application requires far more extensive planning, which includes detailed program outlines, job assignments, and schedules. To some extent, program planning depends on the language and paradigm used to code a computer program. The phrase programming paradigm refers to a way of conceptualizing and structuring the tasks a computer performs. For example, whereas one programmer might focus on the steps required to complete a specific computation, another one might focus on the data that forms the basis for the computation. Quite a number of programming paradigms exist, and a programmer might use techniques from multiple paradigms while planning and coding a program.

There are different program planning tools, such as flowcharts, structured English, pseudocode, UML diagrams, and decision tables, which are used to provide sufficient planning.

Regardless of the tools used, when planning is complete, programmers can begin coding, testing, and documenting. The process of coding a computer program depends on programming language you use, the programming tools you select, and the programming paradigm that best fits the problem you are trying to solve. Programmers typically use a text editor, a program editor, or a VDE to code computer programs.

A text editor is any word processor that can be used for basic editing tasks, such as writing e-mail, creating documents, or coding computer programs. When using a text editor to code a computer program, you simply type in each instruction.

A program editor is a type of text editor specially designed for entering code for computer programs.

A VDE (visual development environment) provides programmers with tools to build substantial sections of a program by pointing and clicking rather than typing lines of code. A typical VDE is based on a form design grid that a programmer manipulates to design the user interface for a program. By using various tools provided by the VDE, a programmer can add objects, such as controls and graphics, to the form design grid. In the context of a VDE, a control is a screen-based object whose behavior can be defined by a programmer.

In visual development environment, each control comes with predefined set of events. Within the context of programming, an event is defined as an action, such as click, drag, or key press, associated with the form or control. A programmer can select the events that apply to each control. An event usually requires the computer to make some response. Programmers write event-handling code for the procedures that specify how the computer responds to each event.

A programmer’s choice of development tools depends on what is available for a particular programming language and the nature of the programming project. Text editors and program editors provide a fine tool set for programs with minimal user interfaces. A visual development environment is a powerful tool for programming software applications for GUI environments, such as Windows. Most GUI applications are “ event-driven ”, which means that when launched, the program’s interface appears on the screen and waits for the user to initiate an event.

A computer program must be tested to ensure that it works correctly. Testing often consists of running the program and entering test data to see whether the program produces correct results.

When a program doesn’t work correctly, it is usually the result of an error made by the programmer. A syntax error occurs when an instruction doesn’t follow the syntax rules, or grammar of the programming language. Syntax errors are easy to make, but they are usually also easy to detect and correct.

Another type of program bug is a runtime error,which, as its name indicates, shows up when you run a program. Some runtime errors result from instructions that the computer can’t execute.

Some runtime errors are classified as logic errors. A logic error is an error in the logic or design of a program. It can be caused by an inadequate definition of the problem or an incorrect formula for a calculation, and they are usually more difficult to identify than syntax errors.

Programmers can locate errors in a program by reading through lines of code, much like a proofreader. They can also use a tool called debugger to step through a program and monitor the status of variables, input, and output. A debugger is sometimes packaged with a programming language or can be obtained as an add-on.

Anyone who uses computers is familiar with program documentation in the form of user manuals and help files. Programmers also insert documentation called remarks or “comments” into the programming code. Remarks are identified by language-specific symbols.

A well-documented program contains initial remarks that explain its purpose and additional remarks in any sections of a program where the purpose of the code is not immediately clear.

 

Comprehension сheck. Mark the following statements as True or False.

1. The programming process begins with coding.

2. A typical commercial application requires a minimal amount of planning.

3. A programmer might use techniques from multiple paradigms while planning and coding.

4. Programmers typically use a program editor to code computer programs.

5. A visual development environment provides programmers with tools to build substantial sections of a program by pointing and clicking.

6. Text editors and program editors provide a fine tool for programming software interfaces.

7. Syntax errors result from instructions that the computer can’t execute.

 

Vocabulary practice

1. Match up the words that are similar in meaning.

computation medium

bug scheme

to execute error, mistake

environment calculation

outline carry out

to launch instrument

tool to start (up)

 

2. Fill in the blanks choosing from the variants given.

1. Microsoft Visual Basic was one of the first programming languages to feature a visual development ….

a) medium b) environment c) tool

2. If program testing doesn’t produce the expected results, the program contains a (an) …, sometimes called a “...”.

a) mistake b) error c) problem d) bug

3. Program planning... depends on the language and paradigm used to code a computer program.

a) instruments b) options c) tools

4. When the user … GUI application, the program interface appears on the screen and waits for the user to initiate an event by clicking a menu, dragging an object, or typing text.

a) starts up b) begins c) launches

5. A typical commercial program requires extensive planning, which includes detailed program ….

a) plans b) outlines c) schemes

6. Some runtime errors result from instructions that computer can’t....

a) execute b) make c) carry out

7. Programmers approach problems in different ways: while one programmer might focus on the steps to complete specific …, another programmer might focus on the data that forms the basis for the ….

a) tasks b) calculations c) computations

3. Make two-word combinations using the words in columns and then fill in the following sentences.

A: programming B: planning

problem error

runtime statement

structured manual

event driven

program paradigm

user English

 

1. Anyone who uses computers is familiar with program documentation in the form of... and help files.

2 The process of coding a computer program depends on programming language you use, the programming tools you select, and the … that best fits the problem you are trying to solve.

3. The programming process begins with a … that helps you clearly define the purpose of a computer program.

4. Most GUI applications are …, which means that when launched, the program’s interface appears on the screen and waits for the user to initiate an event.

5. An assumption is something you accept as true in order to proceed with ….

6. There are different program planning tools, such as flowcharts, … pseudocode, UML diagrams, and decision tables.

7. … shows up when you run a program.

 

4. Fill in the gaps in the text.

Computer programmers focus on ___ computer programs, but also plan, test, and document computer programs. Before program code can be written, a programmer needs a clear problem ___, which includes a list of assumptions, a description of known information, and a specification for what constitutes a solution. With a clear plan, a programmer can begin coding using a generic text editor, a program editor, or a ___ development environment. A program is not complete until it has been tested to ensure that it contains no ___ errors or runtime errors. Programmers can use software called a ___ to step through a program. All computer programs should include internal documentation in the form of ___, which are explanatory comments inserted into a computer program along with lines of code.

 

Speaking. Discuss the following questions.

 

1. What is a problem statement?

2. What is an assumption?

3. Does the problem statement provide sufficient planning to begin coding?

4. How does a programmer code a computer program?

5. What is a text editor and a program editor?

6. What is a VDE?

7. How does a programmer know if a program works?

8. What can cause program errors?

9. How do programmers find errors?

10. Do computer programs contain any special documentation?

Text B

Pre-reading. Match the English words with their Russian equivalents.

1. sequence a) образец, шаблон

2. walkthrough b) последовательность

3. pattern, sample c) цикл, повтор

4. loop, iteration d) сквозной контроль

5. notational e) применять

6. implement f) цифровая запись

Reading. Read the text and try to guess the meaning of the words in bold. Check your variants in the dictionary.

PROCEDURAL PROGRAMMING

 

The traditional approach to programming uses a procedural paradigm (sometimes called “imperative paradigm”) to conceptualize the solution to a problem as a sequence of steps. A program written in a procedural language typically consists of self-contained instructions in a sequence that indicates how a task is to be performed or a problem is to be solved.

A programming language that supports the procedural paradigm is called a procedural language. Procedural languages are well suited for problems that can be easily solved with a linear, or step–by-step, algorithm. Programs created with procedural languages have a starting point and an ending point. The flow of execution from the beginning to the end of the program is essentially linear – that is, the computer begins at the first instruction and carries out the prescribed series of instructions until it reaches the end of the program.

An algorithm is a set of steps for carrying out a task that can be written down and implemented. An algorithm for a computer program is a set of steps that explains how to begin with known information specified in a problem statement and how to manipulate that information to arrive a solution. In a later phase of the softwaredevelopment process, the algorithm is coded into instructions written in a programming language so that a computer can implement it.

To design an algorithm, you might begin by recording the steps you take to solve the problem manually. The computer also needs the initial information, so the part of your algorithm must specify how the computer gets it. Next, your algorithm should also specify how to manipulate this information and, finally, how the computer decides what to display as the solution.

You can express an algorithm in several different ways, including structured English, pseudocode, and flowcharts. These tools are not programming languages, and they cannot be processed by a computer. Their purpose is to give you a way to document your ideas for program design.

Structured English is a subset of the English language with a limited selection of sentence structures that reflects processing activities. Another way to express an algorithm is with pseudocode. Pseudocode is a notational system for algorithms that has been described as a mixture of English and your favorite programming language.

A third way to express an algorithm is to use a flowchart. A flowchart is a graphical representation of the way a computer should progress from one instruction to the next when it performs a task.

Before finalizing the algorithm for a computer program, you should perform a walkthrough toverify that your algorithm works.To perform a walkthrough for a simple program, you can use a calculator, paper, and pencil to step through a sample problem using realistic “test” data.

For more complex programs, a walkthrough might consist of a verbal presentation to a group of programmers who can help identify logical errors in the algorithm and suggest ways to make the algorithm more efficient.

The algorithm specifies the order in which program instructions are performed by the computer. Unless you do otherwise, sequential execution is the normal pattern of program execution. During sequential execution,the computer performs each instruction in the order it appears – the first instruction in the program is executed first, then the second instruction, and so on, to the last instruction in the program.

Some algorithms specify that a program must execute instructions in an order different from the sequence in which they are listed, skip some instructions under certain circumstances, or repeat instructions. Control structures are instructions that specify the sequence in which program is executed. Most programming languages have three types of control structures: sequence controls, selection controls, and repetition controls.

A sequence control structure changes the order in which instructions are carried out by directing the computer to execute an instruction elsewhere in the program. A sequence control structuredirects the computer to the statements they contain, but when these statements have been executed, the computer neatly returns to the main program.

A selection control structure, also referred to as a “decision structure” or “branch”, tells a computer what to do, based on whether a condition is true or false. A simple example of a selection control structure is the IF…THEN…ELSE command.

A repetition control structure directs the computer to repeat one or more instructions until certain condition is met. The section of code that repeats is usually referred to as a loop or “ iteration ”. Some of the most frequently used repetition commands are FOR…NEXT, DO…WHILE, DO…UNTIL, and WHILE…WEND (which means “while ends”).

All the first programming languages were procedural. The first widely used standardized computer language, FORTRAN, with its procedural paradigm set the pattern for other popular procedural languages, such as COBOL, APL, ALGOL, PL/1, PASCAL, C, ADA, and BASIC.

The procedural approach is best suited for problems that can be solved by following a step-by-step algorithm. It has been widely used for transaction processing, which is characterized by the use of a single algorithm applied to many different sets of data. For example, in banking industry, the algorithm for calculating checking account balances is the same, regardless of the amounts deposited and withdrawn. Many problems in math and science also lend themselves to the procedural approach.

The procedural approach and procedural languages tend to produce programs that run quickly and use system resources efficiently. It is a classic approach understood by many programmers, software engineers, and system analysts. The procedural paradigm is quite flexible and powerful, which allows programmers to apply it to many types of problems.

The downside of the procedural paradigm is that it does not fit gracefully with certain types of problems – those that are unstructured or those with very complex algorithms. The procedural paradigm has also been criticized because it forces programmers to view problems as a series of steps, whereas some problems might better be visualized as interacting objects or as interrelated words, concepts, and ideas.

 

Comprehension check. Indicate the paragraph where the following ideas are found in the text.

1. A program written in a procedural language contains the prescribed series of instructions.

2. An algorithm shows the steps how to manipulate the information to arrive at a solution.

3. There are different tools to express an algorithm.

4. To make sure that your algorithm works, you should verify it.

5. Program instructions can be executed in order they are listed or some instructions can be skipped or repeated.

6. Many problems in banking industry lend themselves to the procedural approach.

Vocabulary practice

1. Match up the words that are opposite in meaning.

sequential parallel algorithm

downside problem

to focus written

solution advantage

to deposit to distract

linear algorithm random

verbal to withdraw

 

2. Fill in the blanks choosing from the variants given.

1. During … execution,the computer performs each instruction in the order it appears – the first instruction in the program is executed first, then the second instruction, and so on, to the last instruction in the program.

a) random b) sequential c) direct d) reverse

2. The main... of procedural paradigm is that it forces programmers to view problems as a series of steps, whereas some problems might better be visualized as interacting objects or as interrelated words, concepts, and ideas.

a) benefit b) advantage c) drawback d) downside

3. The fact that algorithms are usually written in a format that is not specific to a particular programming language allows you … on formulating a correct algorithm.

a) to concentrate b) to focus c) to distract

4. The traditional approach to programming uses a procedural paradigm to conceptualize the … a problem as a sequence of steps.

a) problem b) decision c) solution

5. The algorithm for calculating checking account balances is the same, regardless of the amounts … and.....

a) invested, placed, deposited b) drawn out, withdrawn, taken away

6. Procedural languages are well suited for problems that can be easily solved with … algorithm.

a) chain b) linear c) parallel

7. For complex programs, a walkthrough might consist of a... presentation to a group of programmers who can help identify logical errors in the algorithm and suggest ways to make the algorithm more efficient.

a) written b) graphical c) verbal

3. Make three-word combinations using the words in columns and then fill in the gaps in the following sentences.

A: selection B: account C: instruction

self step-by-step algorithm

software computer balances

standardized development language

checking control process

linear contained structure

 

1. The procedural approach is best suited for problems that can be solved by following a ….

2. A …, also referred to as a “decision structure” or “branch”, tells a computer what to do, based on whether a condition is true or false.

3. The first widely used …, FORTRAN, with its procedural paradigm set the pattern for other popular procedural languages.

4. In banking industry, the algorithm for calculating … is the same.

5. A program written in a procedural language typically consists of... in a sequence that indicates how a task is to be performed or a problem is to be solved.

6. The algorithm is coded into instructions written in a programming language which a computer can implement in a later phase of the ….

 

4. Fill in the gaps in the text.

Languages such as COBOL and FORTRAN support a traditional approach to programming called the ___ paradigm, which is based on a step-by-step ___. Procedural languages provide a variety of ___ structures that allow programmers to specify the order of program execution. A ___ control structure directs the computer to execute instructions, not coded as a simple succession of steps. A ___ control provides a choice of paths, based on whether a condition is true or false. A ___ control, or “loop”, repeats one or more instructions until a certain condition is met. Procedural languages produce programs that run quickly and use ___ resources efficiently.

 

Speaking. Discuss the following questions.

 

1. What is proceduralprogramming?

2. What is an algorithm?

3. How do you write an algorithm?

4. What is the best way to express an algorithm?

5. How do you know if your algorithm is correct?

6. In what order does a computer perform program instructions?

7. Can the computer make decisions while it executes a program?

8. What are the most popular procedural languages?

9. What kinds of problems are best suited to the procedural approach?

10. What are the advantages and disadvantages of the procedural paradigm?

Text C

Reading. Read the text and try to guess the meaning of the words in bold. Check your variants in the dictionary.

OBJECT-ORIENTED PROGRAMMING

The abbreviation “OO”, which stands for object oriented, is used to describe a programming paradigm as well as a variety of computer programming languages.

Objects and classes

The object-oriented paradigm is based on the idea that the solution for a problem can be visualized in terms of objects that interact with each other. In the context of this paradigm, an object is a unit of data that represents an abstract or a real world entity, such as a person, place, or thing. For example, an object can represent a $10.99 small pepperoni pizza. Another one can represent a pizza delivery guy named Jack Flash. Yet another object can be a customer living at 22 Pointe Rd.

The real world contains lots of pizzas, customers, and delivery guys. These objects can be defined in a general way by using classes. Whereas an object is a single instance of an entity, a class is a template for a group of objects with similar characteristics. For example, a Pizza class defines a group of gooey Italian snacks that are made in a variety of sizes, crafted into rectangular or round shapes, and sold for various prices. A class can produce any number of unique objects.

When taking the object-oriented approach to a problem, one of the first steps is to identify the objects that pertain to a solution. As you might expect, the solution to the pizza problem requires some pizza objects. Certain characteristics of pizzas provide information necessary to solve the problem. This information – the price, size, and shape of a pizza – provides the structure for the Pizza class. A class is defined by attributes and methods. A class attribute defines the characteristics of a set of objects.

Each class attribute typically has a name, scope and data type. One class attribute of the Pizza class might be named “pizzaPrice”. Its scope can be defined as public or private. A public attribute is available for use by any routine in the program. A private attribute can be accessed only from the routine in which it is defined. The pizzaPrice attribute’s data type can be defined as “double”, which means that it can be any decimal number. OO programmers often use UML (Unified Modeling Language) diagrams to plan the classes for a program. Although a programmer completes the overall program plan before coding, jump ahead to take a quick look at the Java code for the attributes in the Pizza class. The first line of code defines the name of the class. Each subsequent line defines the scope, data type, and name of an attribute. The curly brackets simply define the start and end of the class.

Class Pizza

{

public string pizzaShape;

public double pizzaPrice;

public double pizzaSize;

}

Inheritance

The object-oriented paradigm endows classes with quite a bit of flexibility. For the pizza program, objects and classes make it easy to compare round pizzas to rectangular pizzas rather than just to square pizzas.

Suppose you want to compare a 10-inch round pizza to a rectangular pizza that has a length of 11 inches and a width of 8 inches. The Pizza class holds only one measurement for each pizza—pizzaSize. This single attribute won't work for rectangular pizzas, which might have a different length and width. Should you modify the class definition to add attributes for pizzaLength and pizzaWidth? No, because these attributes are necessary only for rectangular pizzas, not for round pizzas. An OO feature called “inheritance” provides flexibility to deal with objects’ unique characteristics.

In object-oriented jargon, inheritance refers to passing certain characteristics from one class to other classes. For example, to solve the pizza problem, a programmer might decide to add a RoundPizza class and a RectanglePizza class. These two new classes can inherit attributes from the Pizza class, such as pizzaShape and pizzaPrice. You can then add specialized characteristics to the new classes. The RectanglePizza class can have attributes for length and width, and the RoundPizza class can have an attribute for diameter.

The process of producing new classes with inherited attributes creates a superclass and subclasses. A superclass, such as Pizza, is any class from which attributes can be inherited. A subclass (or “derived class”), such as RoundPizza or RectanglePizza, is any class that inherits attributes from a superclass. The set of superclasses and subclasses that are related to each other is referred to as a class hierarchy. Java uses the “extends” command to link a subclass to a superclass. The statement class RectanglePizza extends Pizza means “create a class called RectanglePizza that’s derived from the superclass called Pizza”.

class RectanglePizza extends Pizza

{

double pizzaLength;

double pizzaWidth;

}

Methods and messages

An OO program can use objects in a variety of ways. A basic way to use objects is to manipulate them with methods. A method is a segment of code that defines an action. The names of methods usually end in a set of parentheses, such as compare() or getArea().

A method can perform a variety of tasks, such as collecting input, performing calculations, making comparisons, executing decisions, and producing output. For example, the pizza program can use a method named compare () to compare the square-inch prices of two pizzas and display a message indicating the best pizza.

A method begins with a line that names the method and can include a description of its scope and data type. The scope—public or private—specifies which parts of the program can access the method. The data type specifies the kind of data, if any, that the method produces. The initial line of code is followed by one or more lines that specify the calculation, comparison, or routine that the method performs.

A method is activated by a message, which is included as a line of program code, sometimes referred to as a “call”. In the object-oriented world, objects often interact to solve a problem by sending and receiving messages. For example, a pizza object might receive a message asking for the pizza’s area or price per square inch.

Polymorphism, sometimes called “overloading”, is the ability to redefine a method in a subclass. It allows programmers to create a single, generic name for a procedure that behaves in unique ways for different classes. Polymorphism provides OO programs with easy extensibility and can help simplify program code.

 

Comprehension check. Choose the ending for each sentence out of the two or three given.

1. The statement “class RectanglePizza extends Pizza” means

a) create a class called Pizza that is derived from the superclass called RectanglePizza.

b) create a class called RectanglePizza that is derived from the superclass called Pizza.

2) Inheritance refers to passing certain characteristics from one

a) method to another method.

b) class to other classes.

c) class to a superclass.

3) A public attribute

a) can be accessed only from the routine in which it is defined.

b) is available for use by any routine in the program.

c) can't be created in a class which contains private attributes.

4) A class attribute

a) defines the characteristics of a set of objects.

b) is available for use by any routine in the program only if it is private.

5) The process of producing new classes with inherited attributes creates

a) only a superclass. b) a superclass and subclasses.

6) In the object-oriented world, objects

a) don't interact.

b) often interact to solve a problem by sending and receiving messages.

 

Vocabulary practice

1. Which word does not belong to the group?

a) class, object, function, method;

b) overloading, inheritance, polymorphism, lambda expression;

c) static, private, protected, public;

d) Smalltalk, Prolog, C++, Java;

e) Boolean, String, Multivalued, Double;

f) overclass, class, subclass, superclass.

 

2. Fill in the missing words choosing from the variants given.

1. … allows programmers to create a single, generic name for a procedure that behaves in unique ways for different classes.

a) inheritance b) paradigm c) polymorphism

2. The OO paradigm defines a(an) … as a unit of data that represents an abstract or real-world entity.

a) method b) object c) class d) attribute

3. Which type of diagrams are often used to plan the OO classes for a program?

a) HTML b) UML c) XML d) Flowchart

4. Which of the following items is not a typical feature of an object-oriented language?

a) polymorphism b) inheritance c) classes d) relationships

5. In the context of OO, a class attribute ….

a) defines the characteristics of a set of objects

b) defines the behavior of an object

c) is used to determine if an object exists

d) is another name for an object

6. The set of superclasses and subclasses related to each other is referred to as ….

a) a class hierarchy b) a set of independent classes

c) a set of classes with a common parent

 

3. Transform the following sentences without any change in meaning. Use the prompts as they are given (words in brackets, parts of sentences).

1. For the pizza program, objects and classes make it easy to compare round pizzas to rectangular pizzas rather than just to square pizzas (comparison).

2. A method begins with a line that names the method and can indicate a description of its scope and data type (describe).

3. The abbreviation “OO” is used to describe a programming paradigm as well as a variety of computer programming languages (description).

4. In the object-oriented world, objects interact to solve a problem by sending and receiving messages (interaction).

5. When taking the object-oriented approach to a problem, one of the first steps is to identify the objects that pertain to a solution (identification).

6. A basic way to use objects is to manipulate them with methods (manipulation).

 

4. Fill in the gaps in the text.

The object-oriented paradigm is based on the idea that the solution to a problem can be visualized in terms of objects that ___ with each other. An object is a single instance of an entity. Programmers can use a ___ as a template for a group of objects with similar characteristics. Classes can be derived from other classes through a process called ___. The set of superclasses and subclasses that are related to each other is referred to as a class ___. OO programmers often use ___ Modeling Language diagrams to plan the classes for a program. Objects interact to solve problems by exchanging ___ which initiate an action, process, or procedure. OO programmers can create ___ to define what happens once an action is initiated.

 

Speaking. Discuss the following questions.

 

1. What is the basic focus of the objected-oriented paradigm?

2. What’s the difference between an object and a class?

3. How do I define the classes I need to solve a problem?

4. How do I code a class when writing a program?

5. How flexible are classes for defining different types of objects?

6. What is inheritance?

7. How do I code a subclass?

8. How does an OO program use objects?

9. What can a method do?

10. What does a method look like when it has been coded in Java?

 

Text D

Reading. Read the text and try to guess the meaning of the words in bold. Check your variants in the dictionary.

 



Поделиться:


Последнее изменение этой страницы: 2016-08-01; просмотров: 538; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.30.118 (0.263 с.)