русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Розробка програм реалізації циклічних алгоритмів


Дата додавання: 2014-05-08; переглядів: 1480.


Приклад 2.Знайти суму десяти введених значень.

       
 
   
#include <iostream.h> void main() { float x,s=0; int i; //x - значення, що вводиться // s - сума введених значень // i - змінна циклу} for (i=1;i<=10;i++) { cout<<”Введи наступне значення ”; cin>>x; s+=x; } cout<<setw(10)<<setprecision(2); cout<<”Сума введених значень =“<<s<<endl); }  
 


Варіант1.   #include <iostream.h> void main() { float X=10,Y,max; max=2*(X+3)+2*X; while (X<= 100) { Y= 2*(X+3)+2*X; If (Y>max) max=Y; X+=10; } cout<<setw(10)<<setprecision(2); cout<<”Максимальне значення функції=”<<max<<endl; }   Варіант1.   #include <iostream.h> void main() { float X,Y,max; max=2*(X+3)+2*X; for (X=10;X<= 100; X+=10) { Y= 2*(X+3)+2*X; If (Y>max) max=Y; } cout<<setw(10)<<setprecision(2); cout<<”Максимальне значення функції=”<<max<<endl; }  
Приклад 2.Знайти найбільше значення функції Y=2(X+3)+2X на проміжку [10,100] в точках з кроком 10.

 
 

 


Приклад 3.Вводиться послідовність символів. При введенні символу ´П´ - вивести своє прізвище, при введенні символу ´І´ - ім´я, при введенні символу ´к´ - завершити роботу.

 

       
 
   
  #include <iostream.h> void main() { char c; //c - символ, що вводиться do cout<<”Введи символ (для заверш.роботи символ *)”; cin>> c; switch ( c ) { case ’П’: case ’п’: cout<<”Іванов\n”; case ’I’: case ’i’: cout<<”Іван\n”; } while (c!=’к’); }  
 

 


Процедурно-орієнтоване програмування. Функції користувача

1) Визначення і опис функції

2) Вихід з функції

3) Передача параметрів

4) Звернення до функції

5) Розміщення функції

6) Аргументи по умовчуванню

7) Перевантаження функцій

8) Рекурсивні функції

9) Бібліотечні функції

Визначення і опис функції

Являють собою програмні блоки, які можуть бути викликаними з різних частин програми.Формат опису функції:<тип результату> <ім’я функції>(<список формальних параметрів>) { <оператори> }
       
 
   
 

<тип результату> - може бути довільного типу, крім масиву і функції.Функція може не повертати результату. В цьому випадку <тип результату> повинен бути void. По умовчанню <тип результату> є int.<список формальних параметрів> - являє собою перелік описів параметрів. Описи розділяються комами. Для кожного параметру вказується тип і ім’я. Наприклад, (double x,int y,int z)Формальних параметрів може не бути. В цьому випадку замість списку вказується тип void.Порядок і типи формальних параметрів повинні бути однаковими у визначенні функції й у всіх її оголошеннях. Типи фактичних параметрів при виклику функції повинні бути сумісні з типами відповідних формальних параметрів. Тип формального параметра може бути будь-яким основним типом, структурою, об'єднанням, перерахуванням, покажчиком або масивом.

 

Вихід з функції Якщо функція не повертає значення, то вона закінчується виконанням останнього оператора функції або для виходу використовується оператор return; без параметрів.Якщо функція повертає значення, то використовується той же оператор з параметром, яким є значення результату.return <результат>;результатом може бути значення або вираз, тип якого співпадає з типом результату в описі заголовку функції. Передача параметрів Параметри можуть передаватись по значенню і по посиланню. Щоб показати, що параметр передається по посиланню, в заголовку функції після типу параметру ставиться символ & . Проміжок можна ставити в довільному місці. Наприклад:int &xint& xint & x

Звернення до функції

 

Звернення до функції може бути використано у виразі і як окремий оператор.

Формат звернення

<ім‘я функції> ([<список фактичних параметрів>])

Елементи <список фактичних параметрів> відокремлюються комами.Якщо параметр передається по значенню, то в якості фактичного параметру може бути константа і змінна.. Якщо параметр передається по посиланню, то в якості фактичного параметру може бути тільки змінна.

Фактичний параметр може бути величиною будь-якого основного типу, структурою, об'єднанням, перерахуванням або покажчиком на об'єкт будь-якого типу. Масив і функція не можуть бути використані як фактичні параметри, але можна використати покажчики на ці об'єкти.

 

Розміщення функції

Функція може розміщуватись в тілі файлу основної функції або в іншому файлі. Функція не може бути описана в тілі іншої функції.В тілі файлу основної функції вона може бути розміщена до головної функції або після неї.Функція повинна бути об‘явленою до першого звернення до неї. Тому, якщо функція розміщена після головної функції, то необхідно до головної функції описати її прототип для того, щоб компілятор міг перевірити вірність викликів функції. Прототип функції вказує компілятору тип даних, що повертає функція, кількість параметрів, які очікує функція і їх тип і порядок їх слідування.Прототип - це заголовок функції без параметрів і символом ; в кінці. Імена формальних параметрів не вказуються. Наприклад: int ff1(int, int, &int); float ff2 (int, float []);Де float [] описує масив.

Аргументи по умовчуванню

При виклику функції їй передаються конкретні значення параметрів.Можна задати значення параметрів по умовчанню. Значення задається в заголовку функції. Це буде означати, що якщо значення параметра, який описаний як параметр по умовчанню, при виклику не буде вказано, то в тілі функції буде використано значення цього параметру, що вказано по умовчанню. Якщо такий параметр задано при виклику, то в тілі функції буде використовуватись вказане значення. Параметри по умовчанню записуються в заголовку функції останніми. При виклику можна опускати тільки крайні параметри.Наприклад, функції розраховує об‘єм паралелепіпеду: float Vbox(float len=1,float w=1,float h=1) {return len*w*h;} Можна викликати цю функцію наступним чином:Vbox () всі параметри будуть по умовчаннюVbox (2.5) len=2.5, інші по умовчаннюVbox (2.5,4) по умовчанню тільки hVbox (2.5,4,5.9) значень по умовчанню не буде Параметри по умовчанню повинні бути вказані при першому описі функції, як правило в прототипі.Значення по умовчанню можуть бути константами, глобальними змінними, викликами функцій. Перевантаження функцій Можна визначити кілька функцій з одним і тим же іменем, якщо ці функції мають різні набори параметрів. Ця особливість називається перевантаженням функцій. При виклику перевантаженої функції компілятор визначає відповідну функцію за допомогою аналізу кількості, типів і порядку слідування параметрів у виклику.Перевантаження, як правило, використовується для створення кількох функцій з однаковим імене призначених для виконання подібних задач, але з різними типами даних.Наприклад: int square (int x) {return x*x;} double square (double x) {return x*x;} Рекурсивні функції

Будь-яка функція в програмі мовою С++ може бути викликана рекурсивно, тобто вона може викликати саму себе. Компілятор допускає будь-яке число рекурсивних викликів. В кожен момент часу доступні тільки значення поточного виклику.

 

n! = 1 при n=0; n*(n-1)! при n>1 Класичний приклад рекурсії - це математичне визначення факторіала n!
long fakt(int n) { return ( (n= =1) ? 1 : n*fakt(n-1) ); }   Функція, що обчислює факторіал

Питання для самоперевірки

1) Записати прототип функції, яка визначає кількість парних чисел в заданому масиві з 15 цілих чисел

2) Записати прототип функції, яка вводить дані в масив 10 дійсних чисел

3) Описати функцію, яка в заданому масиві 20 дійсних чисел визначає кількість чисел додатніх, відємних і рівних нулю.

4) Який тип повинен мати результат функції, якщо вона не повертає значень. Привести приклад прототипу такої функції.

5) Функція знаходить суму двох дійсних чисел. Описати заголовок і тіло функції.

6) Написати функцію, яка визначає і повертає відповідь парне задане ціле число чи ні.

7) Записати функцію, яка виводить сповіщення "Робота закінчена."

8) Записати заголовок функції, яка не отримує жодного параметра і не повертає результату.

9) Знайдіть і опишіть помилку в функції:

int sum(int x,int y)

{

int result;

result=x+y;

}

10) Знайдіть і опишіть помилки в функції:

void fun( float a);

{

float a;

a=2*a;

cout<<a<<endl;

}

11) Напишіть функцію, яка визначає значення гіпотенузи прямокутнього триутника, якщо відомі його катети.

12) Напишіть функцію, яка визначає і повертає відповідь чи одне задане ціле число кратне іншому.

13) Записати заголовок функції, яка знаходить суму елементів двох заданих масивів розміром 15 дійсних елементів кожен.

14) Написати функцію, яка повертає символ проміжку, якщо переданий символ є символом крапки.

15) Написати прототип функції, яка до елементів одного заданого масиву 10 дійсних чисел додає відповідні елементи іншого заданого масиву 10 дійсних чисел .

16) Написати заголовок функції, яка визначає скільки разів вказаний символ зустрічається в масиві з 30 символів.

17) Написати функцію, яка визначає і повертає відповідь чи однакові два переданих їй символи.

18) Написати прототип функції, яка визначає чи однакові два переданих їй символи.

19) Знайти і пояснити помилки у функції:

void fun(int a; float b)

{

return a+b;

}

20) Знайти і пояснити помилки у функції:

int fun(float a,float &b);

{

b:=2*b;

return a+b;

}

Бібліотечні функції С++1. Математичні функції2. Обробка символів3. Робота з рядками символів4. Робота з екраном5. Використання графіки

У програмах широко використаються, так називані, бібліотечні функції, тобто функції, попередньо розроблені й записані в бібліотеки. Прототипи бібліотечних функцій перебувають у спеціальних заголовних файлах, що поставляють разом з бібліотеками в складі систем програмування, і включаються в програму за допомогою директиви #include.

Математичні функції

<math.h>

Звернення Пояснення
sin(x)
cos(x) X вимірюється в радіанах
tan(x)  
log(x) ln x
log10(x) lg x
exp(x) ex
sqrt(x) Корінь квадратний
max(<ціле Х>,<ціле Y>) Повертає максимальне ціле з двох цілих аргументів
min(<ціле Х>,<ціле Y>) Повертає мінімальне ціле з двох цілих аргументів
pow(<основа>,<ступінь>) Зведення в ступінь
fabs(<дійсне число>) Абсолютне значення. Результат дійсний
fmod(<дійсне х>,<дійсне y>) Залишок від ділення Х на Y. Результат дійсний
ceil(<дійсне х>) Округлення в більшу сторону. Результат дійсний сeil(8.1)=9 сeil(8.7)=9
floor(<дійсне х>) Округлення в меншу сторону. Результат дійсний floor(8.1)=8 floor(8.7)=8

<stdlib.h>

Звернення Пояснення
atof(<число в символьному представленні>) Перетворення з строкового представлення в число double. Якщо в рядку недопустимий символ, то перетворення відбувається до нього. atof(“78.56”)=78.56, atof(“78*56”)=78, atof(“*56”)=0,
atoi(<число в символьному представленні>) Аналогічно попередньому для int. atoi(“78”)=78, atoi(“78.56”)=78, atoi(“*56”)=0,
atol(<число в символьному представленні>) Аналогічно попередньому для long int
itoa(<ціле х>,<ім‘я масиву символів>, <система числення>) Перетворює ціле число в рядок символівint n; char s[15]; itoa(n,s,10);
ltoa(<довге Х>,<ім‘я масиву символів>, <система числення>) Перетворює довге ціле число в рядок символівlong int n; char s[15]; itoa(n,s,10);
randomize() Задає початкове значення для генерації випадкових чисел. Обов‘язкове підключення <time.h>
random(< ціле n>) Повертає випадкове ціле число з проміжку 0..n-1
rand() Повертає випадкове ціле число з проміжку 0..32767
abs(<ціле х>) Повертає абсолютне значення. Результат цілий
labs(<довге ціле х>) Повертає абсолютне значення. Результат довге ціле

Обробка символів

<ctype.h>

Звернення Пояснення
isdigit(<символ>) Повертає істину(1), якщо <символ>) є цифра
isхdigit(<символ>) Повертає істину(1), якщо <символ>) є шістнадцятирічна цифра
isalfa(<символ>) Повертає істину(1), якщо <символ>) є буква
isalnum(<символ>) Повертає істину(1), якщо <символ>) є цифра або буква
islower(<символ>) Повертає істину(1), якщо <символ>) є буква нижнього регістру
isupper(<символ>) Повертає істину(1), якщо <символ>) є буква верхнього регістру
isspace(<символ>) Повертає істину(1), якщо <символ>) є пробіл
iscntrl(<символ>) Повертає істину(1), якщо <символ>) є управляючий символ
tolover(<символ>) Повертає <символ>) у нижньому регістрі
toupper(<символ>) Повертає <символ>) у верхньому регістрі

<stdio.h>

Звернення Пояснення
getchar() Повертає введений символ
putchar() Виводить символ

<conio.h>

Звернення Пояснення
getch () Повертає введений символ. Символ не відображається на екрані
getchе () Повертає введений символ. Символ відображається на екрані
putch() Виводить символ
kbhit() Повертає істину(1), якщо в буфері клавіатури є символ. Цикл while (!kbhit()); можна використати для очікування натискання клавіши.
Робота з рядками символів

Рядок - це послідовність символів, що обробляється як єдине ціле. Рядок може містити довільні символи., обмежені подвійними лапками.

Рядок в С++ - це масив символів, що закінчується нульовим символом (‘\0‘).

Рядок може бути оголошений як масив символів. Наприклад, char R[30];

При оголошенні рядок може бути ініціалізованим як масив символів або простіше

char R[30]=”Масив символів”;

Крім того, масив можна оголосити як змінну указник на тип char: char *str; з ініціалізацією:

char *str=”Масив символів”;

 

Для ведення даних у рядок можна використовувати потік cin

cin>>str; cin>>R;

Ці оператори будуть вводити набір символів до тих пір, поки не зустрінеться символ проміжку, символ табуляції, символ нового рядку або указник кінця файлу. При цьому, якщо кількість введених символів буде більше ніж розмір оголошеного масиву мінус один(так як в кінці нульовий символ), то символи будуть записуватись за межі оголошеного масиву, що приведе до помилок. Тому, щоб мати гарантію вводу потрібної кількості символів, необхідно використовувати маніпулятор setw().

cin>>setw(30)>>R;

Маніпулятор необхідно використовувати для кожного рядка.

Якщо необхідно вводити повни й текст(тобто з проміжками), то потрібно використовувати функцію getline().

cin.getline(R,30);

<string.h>

Звернення Пояснення
strcat(<рядок 1>,<рядок 2>) Приєднує <рядок 2> в кінець <рядок 1>
strncat(<рядок 1>,<рядок 2>) Приєднує n символів з <рядок 2> в кінець <рядок 1>
stpcpy(<рядок 1>,<рядок 2>) Копіює <рядок 2> в <рядок 1>. Функція повертає указник на кінець сформованого рядка
strcpy(<рядок 1>,<рядок 2>) Копіює <рядок 2> в <рядок 1>. Функція повертає указник на початок сформованого рядка
strncpy(<рядок 1>,<рядок 2, <кількість>) Аналогічно попередньому, але копіюється n перших символів
strchr(<рядок>,<символ>) Функція повертає указник на позицію першого входження заданого символу. Якщо символ не знайдено - NULL
strrchr(<рядок>,<символ>) Функція повертає указник на позицію останнього входження заданого символу. Якщо символ не знайдено - NULL
strcmp(<рядок 1>,<рядок 2>) Зрівнює два рядки в лексикографічному порядку з врахуванням великих і малих літер. Повертає значення <0, якщо перший рядок менше другого, значення >0 - якщо більше, 0 - якщо рядки однакові
strncmp(<рядок 1>,<рядок 2>) Аналогічно попередньому, але зрівнює n символів
stricmp(<рядок 1>,<рядок 2>) Аналогічно попередньому, але без врахування великих і малих літер.
strnicmp(<рядок 1>,<рядок 2>) Аналогічно попередньому, але зрівнює n символів
strcspn(<рядок 1>,<рядок 2>) <рядок 2> вміщує послідовність символів які відшукуються в першому рядку. Повертає номер першого знайденого символу (починаючи з нуля). strcspn(“book”,”aso”)=1
strpbrk(<рядок 1>,<рядок 2>) <рядок 2> вміщує послідовність символів які відшукуються в першому рядку. Повертає указник на перший знайдений символ.
strlen(<рядок>) Повертає довжину рядка без врахування \0
strlwr(<рядок>) Перетворює всі символи рядку в малі літери
strupr(<рядок>) Перетворює всі символи рядку в великі літери
strnset(<рядок>,<символ>, <кількість>) Замінює перші n символів рядка на вказаний символ.char s[10]=“qwertyui”; strnset(s,’9’,4); в результаті s=”9999tyui”
strset(<рядок>,<символ) Замінює всі символи рядка на вказаний символ.
strew(<рядок>) Реверсує рядок. До “вікно”, після “онків”
strstr(<рядок 1>,<рядок 2>) Відшукує місце першого входження <рядок 2> в <рядок 1>. Якщо рядок не знайдено - NULL.
strtok(<рядок 1>,<рядок 2>) Повертає указник на лексему, що обмежена вказаним роздільником(знак табуляції \t, кома пробіл).

 

 

Приклад 1.

Розібрати рядок на лексеми, тобто вивести окремо кожне слово з рядка, які можуть відокремлюватись пробілом або комою.

 

#include <iostream.h>

#include <string.h>

void main()

{

int k;

char t[40]="qwer asdfg zxcv, asdfg",r[2]=" ,";

char *tok;

tok=strtok(t,r);

while(tok!=NULL)

{

cout<<tok<<endl;

tok=strtok(NULL,r);

}

}

 

Приклад 2.

Вивести всі букви латинського алфавіту.

#include <iostream.h>

#include <string.h>

void main()

{

char c;

for (c='a';c<='z';c++)

cout<<c;

}

Приклад 3.

Підрахувати скільки раз в заданому тексті зустрічається буква «а» .

#include <iostream.h>

#include <iomanip.h>

#include <string.h>

void main()

{

char c,*k;

int kol=0;

k=strchr("qwer tyui asdf axcvb ggha",'a');

while (k)

{

kol++;

k=strchr(k+1,'a');

}

cout<<kol<<endl;

}

 

Приклад 4.

Текст складається з слів, що розділені проміжками. Підрахувати скільки раз в тексті зустрічається перше слово.

 

#include <iostream.h>

#include <iomanip.h>

#include <string.h>

void main()

{

char c,*k,*k1;

int kol=0;

char t[40]="qwer tyui asdf qwer axcvb ggha";

k=strtok(t," ");

k1=k;

while (k)

{

if (strcmp(k,k1)==0)

kol++;

k=strtok(NULL," ");

}

cout<<kol<<endl;

}

 

Приклад 5.

Текст складається з слів, що розділені проміжками. Вивести довжину кожного слова.

#include <iostream.h>

#include <iomanip.h>

#include <string.h>

void main()

{

char c,*k,*k1;

int kol=0;

char t[40]="qwer tyui asdf qwer axcvb ggha";

k=strtok(t," ");

k1=k;

while (k)

{

cout<<strlen(k)<<endl;

k=strtok(NULL," ");

}

}

 

Приклад 6.

Сформувати фразу з введених слів. Слова розділяти проміжком.

#include <iostream.h>

#include <iomanip.h>

#include <string.h>

void main()

{

char t[40]="",sl[15];

for (int i=1;i<=5;i++)

{

cout<<"vvod slova ";

cin>>sl;

strcat(t,sl);

strcat(t," ");

}

cout<<t<<endl;

}

 

Приклад 7.

Текст складається з слів, що розділені проміжками. Вивести кожне слово, що починається з цифри.

 

#include <iostream.h>

#include <ctype.h>

#include <string.h>

void main()

{

char t[40]="qwer 1qwer sdff 4dffg",*k;

k=strtok(t," ");

while (k)

{

if (isdigit(k[0]))

cout<<k<<endl;

k=strtok(NULL," ");

}

}

 

Приклад 8.

Текст складається з фраз розділених символом "крапка з комою". Кожна фраза складається з двох слів розділених проміжком. Вивести друге слово з кожної фрази.

 

#include <iostream.h>

#include <ctype.h>

#include <string.h>

void main()

{

char t[40]="qqq qwer;www2 sdff;rtrtrtr3 dffg;",*k,*h;

int r;

k=strtok(t,";");

while (k)

{

h=strchr(k,' ');

r=h-k;

cout<<k+r+1<<endl;

k=strtok(NULL,";");

}

}

 

Питання для самоперевірки

 

1) Опишіть і ініціалізуйте два рядки. Напишіть оператор, який перевіряє чи однакові ці рядки і виводить відповідне сповіщення.

2) Опишіть і ніціалізуйте рядок. Напишіть оператор, який перевіряє чи є в рядку вказаний символ і виводить відповідне сповіщення.

3) Опишіть і ініціалізуйте два рядки. Напишіть оператор. який перевіряє чи співпадають в цих рядках перші три символи і виводить відповідне сповіщення.

4) Описати масив з 50 символів. Записати в цей масив фразу "Ученье свет, а не ученье тьма".

5) Описати два рядки і ініціювати їх. Об'єднати їх в один рядок.

6) Описати і ініціалізувати рядок символів. Записати оператор, який визначає чи є в цьому рядку вказаний підрядок і вивести відповідне сповіщення.

7) Написати функцію, яка визначає і повертає відповідь чи є два заданих символи символами цифр.

8) Записати прототип функції, яка визначає і повертає відповідь чи є два заданих символи символами цифр.

9) Написати функцію, яка визначає і повертає відповідь чи заданий символ є маленькою літерою латинського алфавіту.

10) Написати функцію, яка визначає і повертає відповідь чи є заданий символ цифрою

Робота з екраном

<conio.h>

Звернення Пояснення
wherex() Повертає поточне значення Х
wherety() Повертає поточне значення Y
gotoxy(<x>,<y>) Переміщення курсора в (х,у).
window(<x1>,<y1>,<x2>,<y2>) Вікно, де х,y – лівий верхній кут, а х1,y1 – правий нижній
clrscr() Очистка екрану
textcolor(<колір>) Встановлення кольору символів
textbackground(<колір>) Встановлення кольору фону
sound(<частота в гц>) Включити звук з вказаною частотою
nosound() Віключити звук
delay(<час в млсек>) Затримка на вказаний час

 

 

Використання графіки

<graphics.h>

Попередньо необхідно ініціалізувати графіку. Для цього можна використати функцію:

void ingr(void)

{

int gdriver = DETECT, gmode, errorcode;

initgraph(&gdriver, &gmode, "d:\\turboc~1\\bgi");

errorcode = graphresult();

if (errorcode != grOk)

{

cout<<"Graphics error: “<<grapherrormsg(errorcode);

exit(1);

}

}

Звернення Пояснення
getmaxx() Повертаї максимальне значення Х
getmaxy() Повертає максимальне значення Y
getx() Повертає поточне значення Х
gety() Повертає поточне значення Y
moveto(<x>,<y>) Переміщення курсора в (х,у).
moverel(<dx>, <dy>) Переміщення в (х+dx, y+dy)
putpixel(<x1>,<y1>,<колір>) Точка
line(<x1>,<y1>,<x2>,<y2>) Лінія, де х,y – точка початку, а х1,y1 – кінця
lineto(<x>,<y>) Лінія від поточної точки до вказаної
linerel(<dx>, <dy>) Лінія від поточної до точки, що визначається (х+dx, y+dy)
rectangle(<x1>,<y1>,<x2>,<y2>) Прямокутник
circle(<x>,<y>,<радіус>) Коло
arc(<x>,<y>,<початковий кут>, <кінцевий кут>,<радіус>) Дуга кола. Х,y - координати центру
ellipse(<x>,<y>,<початковий кут>, <кінцевий кут>, <радіусX>,<радіусY>) Дуга еліпсу
drawpoly(<кількість вузлів>,<м.‘я масиву з координатами вузлів>) Ломана лінія або багатокутник. В другому випадку перша вершина описується вдруге як і остання. Масив типу int, розмір=2*<кількість вузлів>. Елементи масиву послідовно містять координати вузлів. Наприклад для трикутника int M[6]={50,20,100,100,50,20}; drawpoly(3,M);
setlinestyle (<тип лінії>, <шаблон>,<товщина>) Встановлення стилю лінії <тип лінії> 1 - пунктирна 2 – штрихпунктирна 3 – 4 - визначається шаблоном Для типу лінії 0-3 шаблон 0. <Товщина>: 1 - в 1 піксел, 3 - в 3 пікселі
setbkcolor (<колір>) Колір фону (від 0 до 7)
setcolor (<колір>) Колір ліній (від 0 до 15)
getbkcolor() Повертає поточне значення кольору фону
getcolor() Повертає поточне значення кольору ліній
setFillStyle (<шаблон>, <колір>) Встановлення шаблону заливки <шаблон>: 0 - суцільна заливка кольором фона; 1 - " ; 2 - ============ ; 3 - //////////// ; 4 - жирні //////// ; 5 - " \\\\\\\\\\\\ ; 6 - тонкі \\\\\\\\\ ; 7 - рідкий штрих ; 8 - густий штрих
bar(<x1>,<y1>,<x2>,<y2>) Прямокутник, залитий по поточному шаблону
bar3d(<x1>,<y1>,<x2>,<y2>, <глибина>,<0 або 1>) Паралелепіпед. Верхня грань залита по поточному шаблону
fillpoly(<кількість вузлів>,<ім‘я масиву з координатами вузлів>) Багатокутник, залитий по поточному шаблону
fillellipse(<x>,<y>, <радіусX>,<радіусY>) Еліпс, залитий по поточному шаблону
sektor (<x>,<y>,<початковий кут>, <кінцевий кут>, <радіусX>,<радіусY>) Сектор еліпсу, залитий по поточному шаблону
floodfill(<x>,<y>, <колір лінії контуру>) Заливка замкнутої області по поточному шаблону. <x>,<y> - точка в середині області.
outtext (<текст>) Виведення тексту з поточної точки
outtextxy(<x1>,<y1>,<текст>) Виведення тексту з вказаної позиції
settextstyle (<номер шрифта>, <положення текста>, <розмір символів>) Вибір шрифта <номер шрифта>: 0 - матричний 8х8; 1 - полужирний ; 2 - тонкий ; 3 - рублений; 4 - готичний. <положення текста>: 0 - горизонтальне, зліва - направо; 1 - вертикальне знизу-вверх; 2 - букви повернуто на 90, але вивід горизонтальний.   <розмір символів> - 0.....10
cleardevice() Очистка екрану. Курсор встановлюється у початок координат
closegraph() Вийти з графічного режиму

Приклад 1:Побудувати правильний багатокутник.

 

#include <iostream.h>

#include <math.h>

#include <conio.h>

#include <graphics.h>

#include <stdlib.h>

#define n 6 // кількість кутів

#define n1 2*n

void main()

{

float a;

int x=200,y=200,r=100; // координати центру і радіус описаного кола

int m[n1]; // масив вершин багатокутника. Послідовно //заносяться значення x1, Y1, X2, Y2, ... ,x6, y6, x1, y1

 

// Перехід в графічний режим

int r0=DETECT, r1;

initgraph(&r0,&r1,"d:\\turboc~1\\bgi");

if (r0<0)

{ cout<<"ERROR GRAPH!!!"<<endl;

exit(1);

}

// Формування координат вершин багатокутника

for (int i=0;i<n*2;i+=2)

{

/* аргумент у функцій sin, сos повинен бути в радіанах. Кути у багатокутника вимірюються в градусах. Тому значення в градусах необхідно перевести в радіани:

Кут в радіанах= Рі/180*(кут в градусах)

*/

a=360/n*i/2; //кут кожної вершини багатокутника

m[i]=x+(int)(cos(3.14/180*a)*r);

m[i+1]=y+(int)(sin(3.14/180*a)*r);

cout<<a<<endl<<m[i]<<" "<<m[i+1]<<endl;

}

// Додатково задається перша вершина як остання

m[12]=m[0];

m[13]=m[1];

 

drawpoly(n+1,m);

}

 


Організація даних в мові С++

1) Масиви

2) Структури

3) Об¢єднання

4) Розробка програм з використанням структурованих типів даних

 

Масиви

 

1) Одновимірні масиви. Ініціалізація одновимірних масивів

2) Двовимірні масиви. Ініціалізація двовимірних масивів

3) Питання для самоперевірки

4) Розробка програм з використанням масивів

 

Масив - це обмежена послідовність даних однакового типу. Масив характеризується іменем, типом елементів і розміром. Нумерація елементів завжди починається з нуля. До елементів масиву можна звернутись за допомогою індексу. Індексом може бути ціле число або вираз. Індекс є номером елементу.

Елементи масиву можуть мати довільний тип, крім типу void.

Масиви можуть бути одновимірними і багатовимірними.

 

Одновимірні масиви

 

Формат опису масиву:

<тип елементів> <ім¢я масиву>[<розмір>];

Наприклад:

int mas1[10]; float mas2[5]; char mas3[15];

 

Опис масиву тільки відводить необхідний розмір пам¢яті для елементів масиву, але не заповнює їх ніякими значеннями - елементи масиву можуть мати довільне значення. Тільки для зовнішніх і статичних масивів компілятор заповнює їх елементи нулями.

При описі масиву може бути виконана ініціалізація його елементів. Для цього після опису розміщується перелік значень елементів масиву, обмежений фігурними дужками.

Формат ініціалізації:

<тип елементів> <ім¢я масиву>[<розмір>]={<знач.1>,<знач.2>,...<знач.n>};

 

Наприклад: int mas1[3]={2,34,189};

Можливі різні варіанти ініціалізації:

 

1) Кількість вказаних елементів співпадає з розміром масиву;

2) Кількість вказаних елементів менше розміру масиву. В цьому випадку перші елементи масиву будуть ініціалізовані вказаними значеннями, а значення інших буде дорівнювати нулю.

Наприклад: int mas[10]={3,5,7,9}; Перші чотири елементи набудуть вказаних значень, а значення інших буде 0.

Якщо необхідно заповнити всі елементи масиву нулями, достатньо вказати в фігурних дужках лише один ноль: int mas[10]={0}; Значення всіх елементів масиву буде 0.

Для масивів типу char не ініціалізовані елементи набувають значення коду нуля, а саме ‘\x0’.

Для визначення пустого рядка можна записати: char m[10]={“”}; або

char m[10]=“”;

3) Кількість вказаних елементів більше розміру масиву. В цьому випадку при трансляції формується сповіщення про помилку.

4) Розмір масиву встановлюється по кількості заданих значень при ініціалізації. В цьому разі при описі масиву його розмір в квадратних дужках не вказується. Наприклад: int mas[]={3,5,7,9}; Буде створено масив з чотирьох цілих елементів і ці елементи отримують початкові значення з списку ініціалізації.

Двовимірні масиви

Двовимірний масив можна розглядати як масив, елементам якого є масив.

Формат опису двовимірного масиву:

<тип елементів> <ім¢я масиву>[<розмір1>][<розмір2>];

 

Наприклад:

int mas4[10][10]; float mas5[5][6]; char mas6[3][15];

 

Для звернення до елементу двовимірного масиву необхідно вказувати два індекси. Наприклад,

mas[0][0], mas[5][7].

Елементи двовимірних масивів зберігаються в пам¢яті по рядках. Перший індекс - це номер рядку, а другий - номер елементу в рядку, тобто номер стовпця.

Правила ініціалізації для двовимірних масивів такі ж, як і для одновимірних.

 

Наприклад:

1) int mas[3][3]={ 1,2,3,

4,5,6,

7,8,9};

Елементи заповнюються послідовно по рядкам. Можна явно вказувати поділ на рядки:

int mas[3][3]={ {1,2,3},

{4,5,6},

{7,8,9}};

 

2) Кількість рядків можна не вказувати, кількість визначиться по заданим даним:

int mas[][3]={ {1,2,3},

{4,5,6},

{7,8,9}};

Буде сформовано матрицю 3х3.

3) Щоб заповнити всю матрицю нулями: int mas[3][3]={0};

4) Можна вказувати не всі значення в рядках:

int mas[3][3]={ {1},

{4,5},

{7,8,9}};

Не ініціалізовані елементи заповняться нулями.

5) Для масиву рядків, в кінці кожного рядка буде записано код нуля.

char str[3][50]={ “Рядок 1”,

“Рядок 2”,

“Рядок 3”};

 

Визначення масиву пустих рядків char str[3][50]={“”};

 

Для двовимірних масивів можна використовувати рядки матриці, як масиви. Тобто, наприклад, mas[i] може бути передано як масив у функцію.

 

 

Питання для самоперевірки

 

1) Описати масив з 10 цілих значень. П'ятому елементу цього масиву присвоїти значення.

2) Описати масив з 10 символів. Другому елементу цього масиву присвоїти значення.

3) Описати масив з 20 дійсних значень. Першому елементу цього масиву присвоїти значення.

4) Описати двовимірний масив 5х8, що містить дійсні значення. Елементу цього масиву, що знаходиться в третьому рядку і шостому стовбці присвоїти значення.

5) Описати двовимірний масив 4х4, що уміщує символьні значення. Елементу цього масиву, що знаходиться в другому рядку і першому стовбці присвоїти значення.

6) Описати двовимірний масив 5х8, що містить дійсні значення. Першому елементу головної діагоналі цього масиву присвоїти значення.

7) Описати масив з трьох цілих значень і ініціалізувати всі його елементи.

8) Описати масив з 10 символів і ініціалізувати перші три його елементи.

9) Описати і ініціалізувани нулями масив з 30 цілих значень.

10) Описати і ініціалізувати двовимірний масив дійсних чисел, розміром 2х2.

11) Описати двовимірний масив цілих елементів розміром 3х13. Ініціалізувати його таким чином, щоб в кожному рядку перший елемент мав значення номеру рядку, а інші дорівнювали нулю.

12) Описати двовимірний масив символів, 3х10. Ініціалізувати його таким чином, щоб перший рядок містив першу літеру латинського алфавіту, другий рядок - першу і другу, третій - три перші літери.

13) Описати двовимірний масив, розміром 5х15. Написати фрагмент програми, що заповнює другий рядок цього масиву числами від 1 до 15.

14) Описати двовимірний масив, розміром 20х10. Написати фрагмент програми, що заповнює четвертий стовбець цього масиву числами від 1 до 20.

15) Описати двовимірний масив, розміром 10х10, що містить символи. Написати фрагмент програми, що заповнює перший рядок цього масиву символами цифр від 0 до 9.

16) Описати двовимірний масив, розміром 10х10, що містить символи. Написати фрагмент програми, що заповнює перший стовбчик цього масиву символами цифр від 0 до 9.

17) Напишіть оператори, за допомогою яких знаходять суму елементів другого рядка масиву 3х3.

18) Напишіть оператори, за допомогою яких знаходять суму елементів третього стовбця масиву 3х3.

19) Опишіть і ніціалізуйте два рядки .

20) Підрахуйте середнє арифметичне елементів масиву. Кількість елементів дорівнює 10 і значення елементів задаються із клавіатури користувачем.

21) Підрахуйте суму непарних елементів масиву. Кількість елементів дорівнює 10 і значення елементів задаються із клавіатури користувачем.

22) Запропонуєте користувачеві ввести із клавіатури 15 цілих чисел, збережете їх у масиві й виведіть на екран номера тих елементів масиву, значення яких кратно 3.

23) Написати програму, що змінює порядок проходження елементів масиву на протилежний (тобто перший елемент стає останнім, а останній - першим; другий елемент стає передостаннім, а передостанній - другим і так далі) і вивідний результуючий масив на екран. Елементи масиву вводяться користувачем із клавіатури.

24) Використайте одномірний масив для рішення наступного завдання. Прочитайте 20 чисел, кожне з яких перебуває в діапазоні від 10 до 100 включно. Після того, як прочитали чергове число, надрукуйте його, але тільки в тому випадку, якщо воно дублює раніше прочитані числа. Передбачите "найгірший випадок", коли всіх 20 чисел різні. Використайте найменший можливий масив для рішення цього завдання.

25) Написати програму, що міняє значення двох однотипних змінних без використання додаткової змінної.

 

 


<== попередня лекція | наступна лекція ==>
Розробка програм реалізації розгалужених алгоритмів | Розробка програм з використанням масивів


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн