Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


Device. put (char_var);, 1 страница




ћета роботи

 

ќсвоњти прийоми роботи з текстовими редакторами ≥ основними компонентами ≥нтегрованого середовища програмуванн€ — ++; отримати практичн≥ навички введенн€ - виведенн€ даних, складанн€ ≥ налагодженн€ програм ≥з простими зм≥нними; засвоњти правила опису тип≥в даних; отримати навички у використанн≥ оператор≥в керуванн€ й орган≥зац≥њ цикл≥в.

 

 

1.2 ¬каз≥вки до орган≥зац≥њ самост≥йноњ роботи студент≥в

 

ѕри п≥дготовц≥ до роботи повторити типи констант ≥ зм≥нних, способи њхнього опису, використанн€ оператор≥в керуванн€ й орган≥зац≥њ цикл≥в, а також використанн€ ≥нтегрованого середовища програмуванн€ на — ++ «вернути увагу, що в мов≥ — ++ немаЇ убудованих у мову засоб≥в введенн€ ≥ виведенн€. ”с≥ д≥њ, зв'€зан≥ з цими операц≥€ми, виконуютьс€ за допомогою функц≥й б≥бл≥отеки. ‘ункц≥њ введенн€ ≥ виведенн€ б≥бл≥отеки мови дозвол€ють читати дан≥ з файл≥в ≥ з пристроњв ≥ писати дан≥ у файли ≥ на пристроњ.

Ѕ≥бл≥отека мови — ++ п≥дтримуЇ так≥ три р≥вн≥ введенн€ Ц виведенн€ даних:

Ч введенн€ - виведенн€ потоку;

Ч введенн€ - виведенн€ нижнього р≥вн€;

Ч введенн€ - виведенн€ дл€ консол≥ ≥ порту.

ѕри введенн≥ - виведенн≥ потоку вс≥ дан≥ розгл€даютьс€ €к пот≥к окремих байт≥в. ƒл€ користувача пот≥к Ч це або файл на диску, або ф≥зичний пристр≥й, наприклад, дисплей, чи клав≥атура або друкувальний пристр≥й, з €кого чи на €кий направл€Їтьс€ пот≥к даних. ‘ункц≥њ введенн€ - виведенн€ дл€ потоку дозвол€ють обробл€ти дан≥ р≥зних розм≥р≥в ≥ формат≥в в≥д одиночного символу до великих структур даних. ѕрограм≥ст може використовувати функц≥њ чи б≥бл≥отеки, розробл€ти власн≥ ≥ включати њх у б≥бл≥отеку. ƒл€ доступу до б≥бл≥отеки цих клас≥в треба включити в програму в≥дпов≥дн≥ файли заголовк≥в, наприклад, #include <iostream.h>.

«а замовчуванн€м стандартн≥ введенн€, виведенн€ ≥ виведенн€ пов≥домлень про помилки в≥днос€тьс€ до консол≥ користувача (клав≥атура ≥ екран)

 

.

1.2.1 ¬икористанн€ оператор≥в введенн€

Ќайчаст≥ше в — ++ використовуЇтьс€ потокове введенн€ даних, операц≥њ €кого включен≥ до складу клас≥в istream а бо iostream. ¬оно може зд≥йснюватис€ з визначеним у цих класах вх≥дним потоком cin або вих≥дним потоком, визначеним користувачем. ƒл€ читанн€ символ≥в з цього потоку вказуЇтьс€ операц≥€ вит€гу з потоку, що позначаЇтьс€ за допомогою символ≥в У >> У. ÷е перевантажена операц≥€, визначена дл€ вс≥х простих тип≥в ≥ покажчика на char.

‘ормат запису оператора cin маЇ вигл€д:

cin [ >> values ];.

Ќаприклад, дл€ введенн€ значень зм≥нних x ≥ y можна записати:

cin >> x >> y;.

 ожна операц≥€ У >> У передбачаЇ введенн€ одного значенн€. ѕри введенн≥ даних необх≥дно виконувати наступн≥ вимоги:

¾ дл€ под≥лу двох чисел, що посл≥довно ввод€тьс€, використовуЇтьс€ пром≥жок (дан≥ типу сhаr розд≥л€ти пром≥жком не обов'€зково ) або ENTER;

¾ €кщо посл≥довно вводитьс€ символ ≥ число (або навпаки), пром≥жок треба записувати т≥льки в тому випадку, €кщо символ, що вводитьс€, (типу сhаr) Ї цифрою;

¾ пот≥к введенн€ ≥гноруЇ пром≥жки;

¾ при введенн≥ великоњ к≥лькост≥ даних одним оператором њх можна розташовувати в дек≥лькох р€дках (використовуючи ENTER);

¾ оператор введенн€ з потоку припин€Ї свою роботу тод≥, коли ус≥ включен≥ в нього зм≥нн≥ одержують значенн€. Ќаприклад, дл€ ран≥ше записаного оператора можна ввести значенн€ таким чином:

2.345 789

або

2.345

ќск≥льки в цьому приклад≥ пром≥жок Ї розд≥льником м≥ж значенн€ми, що ввод€тьс€, то при введенн≥ р€дк≥в, котр≥ м≥ст€ть пром≥жки у своЇму склад≥, цей оператор не використовуЇтьс€. ” такому випадку треба використовувати методи розгл€нутих клас≥в так≥ €к: getline(), read(), get() ≥ ≥н. (формати цих функц≥й розгл€немо при обробц≥ символьних даних). ” — ++ операц≥њ введенн€ - виведенн€ можуть виконуватис€ з використанн€м оператор≥в, а не функц≥й введенн€ - виведенн€.

1.2.2 ќрган≥зац≥€ виведенн€ даних у мов≥ —++

¬иведенн€ даних може бути неформатованим ≥ форматованим. Ќайчаст≥ше дл€ виведенн€ застосовуЇтьс€ операц≥€ <<, що записуЇтьс€ разом з ≥м'€м вих≥дного потоку cout. “обто, наприклад, запис

cout << x;

означаЇ виведенн€ значенн€ зм≥нноњ x (або запис в пот≥к). ÷ей оператор вибираЇ необх≥дну функц≥ю перетворенн€ даних у пот≥к байт≥в.

‘ормат запису cout в≥др≥зн€Їтьс€ в≥д форми запису команд — ++

cout << data << [ data ];,

де data ¾ це зм≥нн≥, константи, вирази або комб≥нац≥€ тип≥в.

«апис оператора cout може може мати, наприклад, такий вигл€д:

сout << "y=" << x + a - sin(x) << "\n";.

ќск≥льки у мов≥ —++ операц≥€ У\nФ р≥внозначна операц≥њ endl, тому розгл€нутий оператор виводу можна записати €к:

сout << "y=" << x + a - sin(x) << endl;

ѕри використанн≥ бульових операц≥й, вирази треба брати в дужки.

сout << "p =" << (a && b || c) << "\n";.

ћова — ++ не маЇ символьних значень. —имвол переводу на наступний р€док "\n" записуЇтьс€ €к строкова константа, ≥накше в≥н розгл€даЇтьс€ не €к керуючий символ, а €к число 10 (код символу). “аких помилок можна уникнути шл€хом присвоЇнн€ значенн€ керуючих символ≥в зм≥нним, наприклад:

#define sp " "

#define ht "\t"

#define hl "\n"

“епер оператор виведенн€ можна записати так:

сout << " y = " << x + a - sin(x) << hl;.

—л≥д пам'€тати, що cout не виконуЇ автоматичний перех≥д на наступний р€док. ўоб надрукувати строкову константу, треба пом≥стити њњ за оператором cout, тобто у такому вигл€д≥:

cout << " я вивчаю програмуванн€ \n";

або

cout << " я вивчаю програмуванн€Ф<< endl;.

 

ѕриклад 1.1 Ќаступний приклад м≥стить орган≥зац≥ю виведенн€ даних, по€снююч≥ пов≥домленн€, а також символи переводу р€дка:

//P1_1.CPP (роздрук значень зм≥нних

// с в≥дпов≥дними позначками

#include <iostream>

Using namespace std;

Int main ()

{

char first = 'W';

char middle = 'P';

char last = 'S';

int wozrast = 20;

int doplata = 2;

float zarplata = 309.75;

float prozent = 8.5;

// ¬иведенн€ результат≥в

cout << " ѕерев≥рка вих≥дних даних\n";

cout << first << middle << last << "\n\n";

cout << " ¬≥к доплата зарплата в≥дсоток: \n";

cout << wozrast << ' ' << doplata << ' ' << zarplata << ' ' << prozent;

Return 0;

}

¬ останн≥х двох операторах використаЇмо символи табул€ц≥њ. Ќаприклад, \t пом≥щаЇ кожне наступне ≥м'€ або число в наступну позиц≥ю табул€ц≥њ (кожн≥ в≥с≥м символ≥в), у цьому випадку маЇмо:

cout << " ¬≥к \t доплата\t зарплата\t в≥дсоток\t \n";

cout << wozrast<<"\t" << doplata<<"\t"<< zarplata<<"\t"<< prozent<<"\n ";

ƒл€ додаткового керуванн€ вих≥дними даними використовуютьс€ ман≥пул€тори: setw(n)setprecision(k). ћан≥пул€тор setw(n) служить дл€ вказ≥вки довжини пол€, що прид≥л€Їтьс€ дл€ виведенн€ наступних даних (тут n - к≥льк≥сть позиц≥й у р€дку). Setprecision(k) призначений дл€ вказ≥вки к≥лькост≥ позиц≥й у дробов≥й частин≥ дробових чисел.

ћан≥пул€тори зм≥нюють вид де€ких зм≥нних в об'Їкт≥ cout, що у потоц≥ випливають за ними. ÷≥ ман≥пул€тори називають прапорами стану.  оли об'Їкт посилаЇ дан≥ на екран, в≥н перев≥р€Ї прапори, щоб дов≥датис€, €к виконати завданн€, наприклад, запис:

cout << 456 << 789 << 123;

видасть значенн€ у вигл€д≥: 456789123, що ускладнюЇ визначити групи значень.

 

ѕриклад 1.2 Ќаписати програму з використанн€м ман≥пул€тора setw.

// P1_2.CPP (демонстрац≥€ р≥зних ман≥пул€тор≥в

// ширини виведенн€ ц≥лого числа

#include <iomanip>

#include <iostream>

Using namespace std;

Int main ()

{

cout << 456 << 789 << 123 << endl;

cout << setw(5) << 456 << setw(5) << 789

<< setw(5) << 123 << endl;

cout << setw(7) << 456 << setw(7) << 789

<< setw(7) << 123 << endl;

Return 0;

}

–езультати виконанн€ програми:

456 789 123

456 789 123

” цьому приклад≥ з'€вивс€ новий заголовний файл iomanip, що дозвол€Ї використовувати функц≥њ ман≥пул€тор≥в, таких €к setw. ѕри використанн≥ функц≥њ setw, — ++ вир≥внюЇ число вправо в границ€х заданоњ ширини пол€ виведенн€. якщо ширина недостатн€, — ++ ≥гноруЇ вказане значенн€.

‘ункц≥€ setprecision(2) пов≥домл€Ї — ++ про те, що число з крапкою, що плаваЇ, треба виводити з двома знаками п≥сл€ крапки з округленн€м дробовоњ частини, наприклад, при виконанн≥ оператора

сout << setw(7) << setprecision (2) << 123.456789;

буде отриманий наступний результат: 123.46.

ѕриклад 1.3 Ќаписати програму дл€ обчисленн€ податку на продаж.

// P1_3.CPP ¾ програма податок:введенн€ суми продаж≥в

// ≥ роздрук податку на продаж≥

#include <iostream>

#include <iomanip>

Using namespace std;

Int main ()

{

float prod_sum; // —юди буде записана сума продаж≥в

Float nalog;

// ¬иведенн€ п≥дказки дл€ користувача

cout << " ¬вед≥ть суму продаж≥в дл€ розрахунку податку ";

cin >> prod_sum;

nalog = prod_sum* 0.7; // ќбчисленн€ податку на продаж≥

cout << " " << setprecision(2) << prod_sum;

cout << " " << setprecision(2) << nalog<< "\n";

Return 0;

}

„ерез те, що в першому оператор≥ cout не м≥ститьс€ знак переводу р€дка, в≥дпов≥дь користувача на п≥дказку з'€витьс€ в≥дразу праворуч в≥д запиту.

ћова — ++ широко використовуЇ також форматоване введенн€ ≥ виведенн€ даних. ƒл€ форматованого введенн€ використовують функц≥ю scanf, а виведенн€ ¾ фукц≥ю printf. ўоб зв'€зати програму користувача з≥ стандартною б≥бл≥отекою, де знаход€тьс€ ц≥ функц≥њ, необх≥дно спочатку програми передбачити препроцесорне ствердженн€

#include <stdio.h>

 

1.3 ¬икористанн€ основних оператор≥в —++

” мов≥ — ++ прост≥ оператори зак≥нчуютьс€ символом ";", складен≥ пол€гають у ф≥гурн≥ дужки. –озгл€немо правила запису ≥ використанн€ основних оператор≥в — ++.

ќператор - вираз ¾ зак≥нчуютьс€ крапкою з комою, наприклад:

++i; // ≥нкремент

swap (&a, &y); // виклик функц≥њ

ќператори присвоюванн€ мають одну з форм запису:

p =a;

p =a = b = c;

де p ¾ ≥м'€ зм≥нноњ чи елемент масиву; а, b, с ¾ арифметичн≥ вирази,

значенн€.

ќператор умовного переходу маЇ наступний формат запису:

If (L)

ќператор 1;

Else

ќператор 2;,

де L ¾ лог≥чний вираз. якщо значенн€ цього виразу У≥стинаФ (не нуль), то виконуЇтьс€ оператор1, €кщо ж воно Уне ≥стинаФ(нуль), то виконуЇтьс€ оператор2; у випадку, коли вираз помилковий й в≥дсутнЇ else, ¾ виконуЇтьс€ наступний оператор.

Ќаприклад, оператор умовного переходу може мати вигл€д:

if (i < j)

i++;

Else

{ j = i - 3; i +=2; }

 

ќператор вибору використовують дл€ вибору одного з багатьох вар≥ант≥в вир≥шуванн€ ≥ маЇ наступну форму запису;

Switch (L)

{

case к.в.1: оператор 1; [break;]

case к.в.2: оператор 2; [break;]

.........................

case к.в.n: оператор n; [break;]

[default: оператор n+1;]

},

де switch, case, default ¾ службов≥ слова;

break ¾ оператор (необов'€зковий) перериванн€ виконанн€ оператор≥в switch;

L ¾ будь-€кий вираз одного з ц≥лих тип≥в;

к.в.1,Е,к.в.n ¾ константн≥ вирази, що не можуть повторюватис€ ≥ не можуть м≥стити зм≥нних чи виклик≥в функц≥й. «вичайно це ц≥ла чи символьна константа;

оператор 1;... ¾ будь-€к≥ оператори —++.

¬иконуЇтьс€ цей оператор у такий спос≥б: обчислюЇтьс€ значенн€ виразу L, пот≥м це значенн€ пор≥внюЇтьс€ (посл≥довно зверху вниз) з≥ значенн€ми константних вираз≥в к.в.1,.. ≥ при зб≥гу значень L ≥ одного з к.в. будуть виконаютьс€ вс≥ оператори починаючи з в≥дпов≥дного, €кщо наприк≥нц≥ немаЇ оператора break. ѕри на€вност≥ оператора break, виконуЇтьс€ т≥льки оператор, що знаходитьс€ у в≥дпов≥дн≥й к.в. ≥ управл≥нн€ передаЇтьс€ оператору, що знаходитьс€ за межами оператора switch. якщо значенн€ виразу L не зб≥гаЇтьс€ з жодним значенн€м к.в., то виконуютьс€ оператори з default ≥ зд≥йснюЇтьс€ вих≥д з оператора switch. ” випадку, коли в цьому оператор≥ немаЇ default (в≥н не обов'€зковий), ≥ значенн€ L не зб≥гаЇтьс€ з жодним з≥ значень к.в., зд≥йснюЇтьс€ вих≥д з оператора switch.

ћожна привести наступний фрагмент програми з використанн€м оператора switch:

int a=2;

Switch (a)

{

case 1: func1();

case 2: func2();

case 0:

case 4: func3();

default: printf ("gооd bay \n");

}

 

ѕри виконанн≥ цього оператора будуть реал≥зован≥ функц≥њ: func2, func3default: printf ("good bay \n");.

ƒаний приклад можна записати так само в наступному вигл€д≥:

int a=2;

Switch (a)

{

case 1: func1(); break;

case 2: func2(); break;

case 0:

case 4: func3(); break;

default: printf ("good bay \n");

}.

” так≥й реал≥зац≥њ буде виконана т≥льки case 2: func2(); break; ≥ вих≥д з оператора switch.

ћова —++ маЇ так≥ оператори циклу: while, do, for.

ќператор циклу while L ≥з предумовою

L ¾ будь-€кий простий, складений чи порожн≥й оператор(будь-€кий припустимий вираз).

¬иконуЇтьс€ цей оператор у такий спос≥б: €кщо результат виразу L не дор≥внюЇ нулю (У≥стинаФ), то виконуЇтьс€ цикл, а €кщо дор≥внюЇ нулю (Уне≥стина У), то цикл не виконуЇтьс€ ≥ керуванн€ передаЇтьс€ наступному за while оператору.

Ќаведемо приклад використанн€ оператора while.

 

ѕриклад 1.3: ќбчислити значенн€ функц≥њ:

Y= A*X*X-SIN(X), €кщо A=10.3; X[-1; +1]; hx=0.2.

 

// P1_6.CPP (обчисленн€ функц≥њ y = a* x* x Ц sin (x)

// с використанн€м оператора циклу while

#include <stdio.h>

#include <math.h>

Void main ()

{

Float a, x, y;

a = 10. 3;

x = - 1;

while (x <= 1)

{

y = a * x * x - sin(x)

printf ("x = % 4 f, y = % 6 f \n", x, y);

x = x + 0.2;

}

}

 

ќператор циклу for маЇ наступну форму запису:

 

for ([ вир1 ]; [ вир2];[ вир3 ]) оператор;,

де вир1 ¾ вираз ≥н≥ц≥ал≥зац≥њ, звичайно використовуЇтьс€ дл€ встановленн€ початкового значенн€; це вираз присвоюванн€ (необов'€зковий параметр);

вир2 ¾ вираз умови, що визначаЇ при €к≥й умов≥ цикл буде повторюватис€ (необов'€зковий параметр);

вир3 ¾ вираз ≥терац≥њ, що визначаЇ крок зм≥ни зм≥нних, керуючих циклом п≥сл€ кожного виконанн€ (необов'€зковий параметр).

÷ей оператор реал≥зуЇтьс€ в такий спос≥б:

¾ спочатку виконуЇтьс€ вираз ≥н≥ц≥ал≥зац≥њ (ц€ нотац≥€ може бути виконана до оператора for);

¾ обчислюЇтьс€ умовний вираз(€кщо результат умовного виразу У≥стинаФ (не дор≥внюЇ нулю), то виконуЇтьс€ оператор циклу;

¾ обчислюЇтьс€ вираз ≥терац≥њ;

¾ знову перев≥р€Їтьс€ умова;

¾ €к т≥льки умовний вираз стаЇ р≥вним нулю Уне≥стинаФ, керуванн€ передаЇтьс€ оператору, що знаходитьс€ за оператором циклу for.

ќск≥льки перев≥рка умови виконуЇтьс€ перед циклом, то цикл може жодного разу не виконуватис€, €кщо умова в≥дразу буде Уне≥стинаФ.

ѕро≥люструЇмо використанн€ оператора циклу for дл€ ран≥ше розгл€нутого приклада 1.3:

// P1_7.CPP (обчисленн€ функц≥њ y = a * x * x - sin(x)

// с використанн€м оператора циклу for

#include <stdio.h>

#include <math.h>

Void main ()

{

Float a, x, y;

a = 10.3;

for (x = -1; x <= 1; x = x + 0.2)

{

y = a * x * x - sin(x);

printf ("x = % 4 f, y = % 6 f \n", x, y);

}

}

 

¬ оператор≥ for може використовуватис€ к≥лька зм≥нних, керуючих циклом, а будь-€к≥ вирази можуть бути в≥дсутними, наприклад:

 

Int i;

for (; i < 4; i++)

або

Int k, n, y;

for (k = 0, n = 20; k <= n; k++, n--)

y = k * n;

” цьому оператор≥ використовуЇтьс€ два вирази ≥н≥ц≥ал≥зац≥њ ≥ два вирази ≥терац≥њ. ѕри виконанн≥ такого оператору спочатку присвоюютьс€ значенн€ зм≥нним k = 0n = 20. ѕот≥м в≥дбуваЇтьс€ пор≥вн€нн€ k <= n. якщо ц€ умова маЇ значенн€ У≥стинаФ,то буде виконуватис€ т≥ло циклу, а пот≥м вираз k++n--, €кщо ж умова не виконуЇтьс€, тод≥ цикл припин€Їтьс€.

ќператор циклу do звичайно використовуЇтьс€ в тих випадках, коли т≥ло циклу повинне виконуватис€ хоча б один раз, ≥ маЇ наступну структуру запису:

Do

{

ќператор

}while (L);,

де L ¾ умовний вираз.

¬иконуЇтьс€ оператор do наступним чином: спочатку зд≥йснюЇтьс€ вх≥д у т≥ло циклу ≥ виконуЇтьс€ оператор (в≥н може бути простий чи складний), п≥сл€ того перев≥р€Їтьс€ умова L ≥, €кщо вона У≥стинаФ (не дор≥внюЇ нулю), то цикл повторюЇтьс€, а €кщо Уне≥стина Ф ¾ зд≥йснюЇтьс€ вих≥д з циклу. « використанн€м оператора циклу do приклад 1.3 буде мати вигл€д:

 

// P1_8.CPP (обчисленн€ функц≥њ y = a * x * x - sin(x)

// с використанн€м оператора циклу do

#include <stdio.h>

#include <math.h>

Void main ()

{

Float a, x, y;

a = 10.3;

x = -1;

Do

{

y = a * x * x - sin (x);

printf (" x = % 4 f, y = % 6 f \n ", x, y);

x = x + 0.2;

}

while (x <= 1);

}

 

1.5  онтрольн≥ питанн€

 

1. як≥ правила запису програми мовою — ++?

2. як≥ дан≥ обробл€ютьс€ за допомогою мови — ++?

3. як задаютьс€ типи даних у — ++?

4. ўо таке константа в — ++, навед≥ть приклади констант?

5. ўо називаЇтьс€ зм≥нною в — ++?

6. як забезпечуЇтьс€ орган≥зац≥€ введенн€- виведенн€?

7. як орган≥зуЇтьс€ форматований висновок результат≥в?

8. ƒл€ чого потр≥бн≥ оператори умовного ≥ безумовного переходу ≥ €к вони працюють?

9. як працюЇ оператор switch?

10. як≥ оператори циклу ви знаЇте, €к працюЇ оператор циклу for?

11. як≥ особливост≥ роботи оператора циклу dowhile?

 

 

1.6 ¬ар≥анти ≥ндив≥дуальних завдань

 

ƒл€ приведених нижче вар≥ант≥в необх≥дно скласти програму обчисленн€ значенн€ функц≥й при р≥зних значенн€х аргумент≥в, заданих ≥нтервалом зм≥ни ≥ величиною кроку.

1.

2.

 

3.

а=5; b=3;

4.

 

5.

 

6.

 

7.

8.

 

9.

 

10.

 

11.

 

12.

 

13.

 

 

14.

 

15.

x ≥ a зм≥нюютьс€ одночасно.

 

16.

а - маЇ початкове значенн€ 0.1 ≥ зм≥нюЇтьс€ одночасно с x с кроком .

 

17.

 

 

18.

 

ѕри €к≥м значенн≥ х функц≥€ буде найменшою.

 

19. ѕ≥драхувати ск≥льки раз≥в функц≥€ приймаЇ негативне значенн€, €кщо .





ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2015-11-05; ћы поможем в написании ваших работ!; просмотров: 444 | Ќарушение авторских прав


ѕоиск на сайте:

Ћучшие изречени€:

Ќаука Ч это организованные знани€, мудрость Ч это организованна€ жизнь. © »ммануил  ант
==> читать все изречени€...

2035 - | 1848 -


© 2015-2024 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.216 с.