Мова програмування С++

Характеристика методів та етапів створення простих програм на мові програмування С++. Особливості структури та порядку запуску програми. Функції вводу і виводу та маніпулятори мови С++. Робота з одновимірними масивами. Символьна інформація та рядки.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 19.06.2010
Размер файла 91,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Розбиває рядок на лексеми.

strtok(s1, s2);

Функція повертає вказівник на лексему в s1, відокремлену символом з набору s2 (пробілами або розділовими знаками).

Для роботи з символами у файлі <ctype.h> стандартної бібліотеки визначено функції, наведені в таблиці 8.2:

Таблиця 8.2 Функції стандартної бібліотеки для роботи з символами-файл <ctype.h>

Прототип функції

Короткий опис та використання

Пояснення

int isalnum(int ch)

Перевіряє чи є символ ch буквою або цифрою (A-Z, a-z, 0-9).

isalnum(ch);

Повертається true, якщо ch є буквою або цифрою, інакше false

int isalpha(int ch)

Перевіряє чи є символ ch буквою (A-Z, a-z). isalpha(ch);

Повертається true, якщо ch є буквою, інакше false

int isspace(int ch)

Перевіряє чи є символ ch пропуском (пробіл, табуляція, символ нового рядка, нової сторінки). isspace(ch);

Повертається true, якщо ch є узагальненим пробілом, інакше false

int isdigit(int ch)

Перевіряє чи є символ цифрою (0-9).

isdigit(ch);

Повертається true, якщо ch є цифрою, інакше false

int islower(int ch)

Перевіряє чи є символ буквою нижнього регістру (a-z).

islower(ch);

Повертається true, якщо ch є буквою нижнього регістру, інакше false

int isupper(int ch)

Перевіряє чи є символ буквою верхнього регістру (A-Z).

isupper(ch);

Повертається true, якщо ch є буквою верхнього регістру, інакше false

int ispunct(int ch)

Перевіряє чи є символ символом пунктуації (. , : ; ? ! тощо).

ispunct(ch);

Повертається true, якщо ch є символом пунктуації, інакше false

int tolower (int ch)

Повертає символ у нижньому регістрі.

tolower (int ch);

Одержує символ ch і повертає його у нижньому регістрі

int toupper(int ch)

Повертає символ у верхньому регістрі.

toupper(int ch);

Одержує символ ch і повертає його у верхньому регістрі

Приклад 1:

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

#include <iostream.h>

#include <string.h>

#include <ctype.h>

void main()

{const int n=250;// розмірність рядкового масиву

char s[n], // вихідний рядок

w[25], // проміжний масив для збереження слова з рядка

*mas[10];// масив вказівників для збереження слів з рядка

cout<<“\nBведiть рядок:\n”;

cin.getline(s, n);

int k=0, t=0, i, len, j;

len=strlen(s);

while(t<len)

{ for(j=0,i=t; isspace(s[i])==0; i++,j++)

w[j]=s[i]; // виокремлюємо слово до пробілу

w[j]='\0';// формуємо кінець слова

strcpy(mas[k],w);// копіюємо слово у масив

k++;// збільшуємо лічильник слів у рядку

t=i+1;// перехід через пробіл до наступного слова у

// вихідному рядку s

}

strcpy(s,” ”);// очищуємо вихідний рядок

for(t=0; t<k; t++)// заповнюємо рядок

if(isalpha(mas[t][0])!=0){// якщо перший символ не цифра

{strcat(s,mas[t]);// дописуємо слово в оновлений рядок

strcat(s,” “);// додаємо пробіл після слова

}

cout<<”\nНовий рядок:\n”<< s;// виводимо результат

}

Приклад 2:

Програма яка підраховує скільки разів задане слово зустрічається у тексті файлу. Наприклад, у англійській поговірці “Don't trouble trouble until trouble troubles you” слово “trouble” у чистому вигляді зустрічається 3 рази.

#include <fstream.h>

#include <string.h>

# include<ctype.h>

void main()

{const int len=81;

char word[len], line [len];// масиви для слова і рядка

cout<< “Введiть слово для пошуку:”; cin>> word;

int_lword=strlen(word);// визначення довжини слова

ifstream fin (“text.txt”, ios:: in | ios:: nocreate);

if(!fin) {cout<< “Помилка відкриття файлу.”<<endl;return 1;}

int count=0;

// поки не досягнуто нуль-символу

while(fin.getline(line, len))

{char *p=line;// вказівникові присвоєно адресу рядка

while(p=strstr(p,word))/* якщо слово знайдено

вказівник стає на позицію

початку слова у рядку*/

{ // адреса початку входження слова передається с

char * c=p;

p+=l_word;// перехід вказівника р через слово

// слово не на початку рядка

if(c!=line)

/* Чи є символ перед словом розділювачем? Інакше -

перейти до наступної ітерації */

if(!ispunct(*(c-2))&& isspace(*(c-1))) continue;

// Чи є символ після слова розділювачем?

if (ispunct(*p)|| isspace(*p)|| (*p=='\0')) count ++;

}

}

cout << “Слово зустрічається в тексті ”<< count;

<<” разів”<<endl;

}

9. Функції користувача

9.1 ФУНКЦІЇ: ВИЗНАЧЕННЯ, ОПИС, ВИКЛИК

Функцію в С++ можна розглядати:

як один з похідних типів даних (поряд з масивами і вказівниками);

як мінімальний виконуваний модуль програми (підпрограму).

Всі функції мають однаковий формат визначення:

<тип><ім'я_функції>(<список_формальних_параметрів>)

<тіло_функції>,

де <тип> - тип результату, який повертається функцією; в разі, якщо функція не повертає ніякого значення, її специфікують типом void і називають “порожньою”. Найчастіше, це функції, які виводять на екран повідомлення чи виконують деякі зміни параметрів, проте не можуть передати певний результат іншим змінним при виклику.

<ім'я_функції> - або main для головної функції, або довільний ідентифікатор;

<список_формальних_параметрів> - або порожній ( ), або список, кожен елемент якого записується як:

<тип> <ім'я_формального_параметру>

Наприклад:

(int k )

(char i, char j, int z)

<тіло_функції> - це набір операторів, що виконуються у фігурних дужках {} при виклику функції. Тіло функції може бути складовим оператором або блоком. Визначення функцій не можуть бути вкладеними.

Для передачі результату з функції у функцію, що її викликала, використовується оператор return. Його можна використовувати у двох формах:

1) return 0; - завершує функцію, яка не повертає ніякого значення (тобто перед її іменем вказано тип void);

2) return <вираз>; - повертає значення виразу, тип виразу повинен співпадати з типом функції.

Приклад 1:

int op (char c, int x, int y)

{switch (c)

{case `+' : return x+y;

case `-' : return x-y;

case `*' : return x*y;

case `/' : return x/y;

default: cout<<“\nОперація не визначена!”;

return 0;

}

}

Приклад 2.

float cube(float d)

{return d*d*d;}

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

Виклик функції має наступний вигляд:

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

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

Наприклад:,

void main(){float s, f=0.55; s=cube(f);…}

В якості фактичних параметрів також можуть виступати явно задані константні значення:

Наприклад, виклик функції з прикладу 1 має наступний вигляд:

c = op ( `+', 5 ,4 );

Оскільки визначення функцій не можуть міститися всередині блоків та складових операторів, тобто в інших функціях, у програмі вони можуть розміщуватися як до, так і після функції, яка їх викликає. В останньому випадку перед використанням функції у програмі необхідно розмістити її опис, або прототип, інакше виникатимуть проблеми. Компілятор передусім послідовно перевіряє коректність виклику та використання обєктів у програмі, при виявленні функції, яка не була описана чи визначена раніше, видасть повідомлення про помилку і вказівку про те, що функція повинна містити прототип. Те саме повідомлення Ви побачите на екрані, якщо використаєте у програмі функцію зі стандартних бібліотек і не підєднаєте заголовний файл, у якому вона описана. Прототип функції користувача багато в чому нагадує заголовок функції і має наступний формат:

<тип><ім'я_функції>(<список_формальних_параметрів>);

Головною відмінністю є наявність в кінці опису крапки з комою.

Так, прототипи функцій з прикладів 1 та 2 матимуть вигляд:

cube(float);

op(char c, int, int);

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

9.2 ПЕРЕДАЧА МАСИВІВ У ФУНКЦІЮ

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

Приклад 3: Обчислення суми елементів масиву

int sum (int n, int a[] )

{ int i, s=0;

for( i=0; i<n; i++ )

s+=a[i];

return s;

}

void main()

{ int a[]={ 3, 5, 7, 9, 11, 13, 15 };

int s = sum( 7, a );

cout<<s;

}

Рядки в якості фактичних параметрів можуть визначатися або як одновимірні масиви типу char[], або як вказівники типу char*. На відміну від звичайних масивів, для рядків немає необхідності явно вказувати довжину рядка, оскільки будь-який рядок обмежується нуль-символом.

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

а) явним чином (а[3][4] тоді функція працюватиме з масивами лише заданої розмірності);

б) можна спробувати для квадратної матриці через додатковий параметр ввести розмірність (void matrix(double x[][], int n)), де n - порядок квадратної матриці, а double x[][] - спроба визначення двовимірного масиву зі заздалегідь невизначеними розмірами. В результаті на таку спробу компілятор відповість: Error…: Size of type is unknown or zero;

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

Приклад 4.

# include<iostream.h>

//Функція транспонування квадратної матриці

void trans (int n, double*p[])

{double x;

for (int i=0; i<n-1; i++)

for(int j=i+1; j<n; j++)

{x=p[i][j];

p[i][j]=p[j][i];

p[j][i]=x;

}

}

void main(){

// Задано масив для транспонування

double A[4][4]={11, 12, 13, 14

21, 22, 23, 24

31, 32, 33, 34

41, 42, 43, 44};

// Допоміжний двовимірний масив вказівників

double * ptr[]={(double*)&A[0], (double*)&A[1],

(double*)&A[2], (double*)&A[3]};

// Виклик функції

int n=4;

trans(n, ptr);

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

{cout<<”\n Рядок ”<<(i+1)<<”:”;

for(int j=0; j<n; j++)

cout<<”\t”<< A[i][j];

}

}

9.3 ПЕРЕВАНТАЖЕННЯ ФУНКЦІЙ У С++

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

Приклад 5:

#include <iostream.h>

int max_element ( int n, int a[])

// знаходить максимальний елемент для масиву типу int

{

int max=a[0];

for ( i=1; i<n; i++)

if (a[i]>max) max=a[i];

return max;

}

long max_element ( int n, long a[])

// знаходить максимальний елемент для масиву типу long

{

long max=a[0];

for ( i=1; i<n; i++)

if (a[i]>max) max=a[i];

return max;

}

double max_element ( int n, double a[])

// знаходить максимальний елемент для масиву типу double

{

double max=a[0];

for ( i=1; i<n; i++)

if (a[i]>max) max=a[i];

return max;

}

float max_element ( int n, float a[])

// знаходить максимальний елемент для масиву типу float

{

float max=a[0];

for ( i=1; i<n; i++)

if (a[i]>max) max=a[i];

return max;

}

void main ( )

{

int x[]={10, 20, 30, 40, 50, 60};

long y[]={12L, 44L, 22L, 37L,30L};

int m1=max_element(6, x );

long m2=max_element(5, y);

}

9.4 ФУНКЦІЇ ЗІ ЗМІННОЮ КІЛЬКІСТЮ ПАРАМЕТРІВ

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

<тип> <ім'я> (<специфікація_формальних_параметрів, …>)

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

1) Передача у функцію значення реальної кількості фактичних параметрів за допомогою одного або декількох обов'язкових параметрів;

2) Додавання до списку фактичних параметрів спеціального параметру-індикатора з унікальним значенням, яке буде сигналізувати про кінець списку.

Підхід (1) демонструє програма у прикладі 6, яка містить функцію зі змінним списком параметрів, перший з яких визначає кількість фактичних параметрів, що використовуються при викликанні функції:

Приклад 6:

# include <iostream.h>

// Функція сумує значення параметрів типу int

long summa (int k,…)// k - кількість параметрів, що додаються

{int *pik=&k;// вказівник, що звертається до параметрів функції

long total = 0;

for (;k;k--)// поки не вичерпано список параметрів

total+=*(++pik);// відбувається додавання

return total;// повернення результату

}

void main()

{// додаватимуться два параметри

cout<<”\n summa(2, 6, 4)=”<< summa(2,6,4);

// кількість параметрів, які потрібно додати - 6

cout<<”\n summa(6, 1, 2,3,4,5,6)= ”<< summa(6, 1,2,3,4,5,6);

}

Результат виконання:

summa(2,6,4)=10

summa(6,1,2,3,4,5,6)=21

Наступний приклад 7 ілюструє 2-й підхід до обмеження змінного списку параметрів. Програма містить функцію для визначення добутку змінної кількості параметрів. Ознакою кінця списку фактичних параметрів служить параметр з нульовим значенням.

Приклад 7:

# include <iostream.h>

double prod (doble arg, … )

{double aa=1.0;// початкове значення добутку

double *prt=&arg;// вказівник на перший елемент у списку

if (*ptr==0) return 0.0;// чи є перший елемент нулем?

for (; *ptr; ptr++) aa*=*ptr;// знаходження добутку

return aa;

}

void main()

{cout<< “\n prod(2.0, 4.0, 3.0, 0.0)=”<< prod (2.0, 4.0, 3.0, 0.0);

cout<<”“\n prod(1.4, 3.0, 0.0, 16.0)=”<< prod (1.4, 3.0, 0.0, 16.0);

cout<<“\n prod(0.0)=”<< prod (0.0);

}

Результат виконання:

рrod (2.0, 4.0, 3.0, 0.0)=24

рrod (1.4, 3.0, 0.0, 16.0)=4.2

рrod (0.0)=0.0

10. Структури

Структура об'єднує логічно зв'язані дані різних типів. При описі структури програміст створює новий тип, на основі базових або інших складових типів, за допомогою якого можна в подальшому описувати реальні об'єкти програми, які зберігатимуться у пам'яті. Склад цих об'єктів визначатиметься типом структури, за допомогою якої вони описуються. Структурний тип даних визначається описом:

struct <ім'я структури> {

<опис елементів>

};

Для виділення пам'яті під структуру необхідно визначити структурну змінну:

<ім'я структури> <ім'я змінної>;

Приклад 1.

struct lab{

int num;

char* name;

};// визначення структурного типу з іменем lab

lab Lаb_10;// опис конкретної структуриз іменем Lab_10.

Можна одночасно визначати структурний тип і описувати за допомогою нього структуру:

Приклад 2.

struct gr // ім'я структурного типу

{ char [10];// елемент структури

int year, nomer;// однотипні елементи структури

} grupa1; // ім'я структурної змінної

Елементи структури називають полями (num, name). Поля можуть бути будь-якого базового чи похідного типу, наприклад, масивом, вказівником, об'єднанням або іншою структурою.

Для звернення до полів структури використовуються уточнені імена через операцію вибору: “крапка” (“.”) при зверненні через ім'я структури і операцію непрямого доступу “->” при зверненні через вказівник.

Приклад 3.

Lab_10.num=10;

lab*ptrlab=&Lab_10;

ptrlab->name=”Структури”;

Ввід/вивід структур виконується поелементно (cin>>Lab_10.num;).

Структури одного типу можна копіювати.

Структури, пам'ять під які виділяється на етапі компіляції, можна ініціалізувати, перераховуючи значення їх елементів:

lab Lab10={10, “Структури”}.

Можна створювати масиви структур.

Приклад 4.

// структура для опису дати

struct date { int day,month,year;};

/* масив з 5-ти структур типу date , кожна з яких складається з 3-х елементів типу int, яким надаються початкові значення*/

date d[5]={ { 1,3,1980}, { 5,1,1990}, {1,1,2002}};

Приклад 5.

Програма, що демонструє використання структур для ведення обліку успішності студентів деякої академічної групи:

#include <conio.h>

#include <iostream.h>

struct Spysok {

char PIB[20];// масив для зберігання прізвищ студентів

char Grup[10];// номер групи

int Ot[3];// масив з трьох оцінок

float S_Bal;// середній бал

} *vid;// вказівник, на структуру

void Vvid(int nom, Spysok *vid)

{ cout << "\n Vvedit vidomosti \n" << (nom+1);

cout << "\n PIB - "; cin>>vid->PIB;

cout << " Nomer Gr - "; cin >> vid->Grup;

float s=0;

for(int i=0;i<3;i++) {

cout << "\n Otsinki - "; cin >> vid->Ot[i];

s+=vid->Ot[i];

}

vid->S_Bal=s/3;

}

void main()

{ struct Spysok Stud[50]; int i, N; char Litera;

clrscr();

cout << "\n Vvedit kilkist studentiv u grupi < 50 "; cin >> N;

for(i=0;i<N;i++) Vvid(i,&Stud[i]);

cout << "\n Spysok studentiv”;

for(i=0;i<N;i++)

cout<<"\n"<<Stud[i].PIB<<endl<<Stud[i].Grup<<endl<<Stud[i].S_Bal;

cout << "\n Poshuk vidomostey pro studentiv za pershoyu\ literoyu prizvyscha\n";

cin >> Litera;

if (islower(Litera)) toupper(Litera);

cout << "\n Vidomosti pro Students:";

int kod_p=0;

for(i=0;i<N;i++)

if(Stud[i].PIB[0]==Litera)

{ kod_p=1;

cout<<”\n"<<Stud[i].PIB

<<endl<<Stud[i].Grup<<endl<<Stud[i].S_Bal;

}

if(kod_p==0) cout << " Takyx nemae!";

getch();

}

Список використаної літератури

Подбельский В.В. Язык СИ++: Уч. Пособие. -5-е издание. -М.: Финансы и статистика, 2001. -560 с.

Подбельский В. В., Фомин С. С. Программирование на языке Си: Учеб. пособие. -М.:Финансы и статистика, 1998. -600с.

Павловская Т.А. С/С++. Программирование на языке высокого уровня: Учебник для ВУЗов. -СПб.:Питер, 2003. -461 с.

Павловская Т.А., Щупак Ю.А. С/С++. Практикум. -СПб.: Питер, 2002. -204 с.

Дейтел Х., Дейтел П. Как программировать на С++: Пер. с англ. -М.: Бином, 2000. -1024 с.

Прата С. Язык программирования С++. Лекции и упражнения. Учебник: Пер. с англ. -СПб.: ДиаСофтЮП, 2003. -1104 с.

Либерти Дж. Освой самостоятельно С++. -М.: Вильямс, 2001. -456 с.

Культин Н. С/С++ в задачах и примерах. -СПб.:БХВ-Петербург, 2001. -288 с.


Подобные документы

  • Розробка програми на мові програмування С++ з використанням об'єктно-орієнтованого програмування. Робота з файлами, графікою, класами, обробка числової інформації. Графічні засоби мови програмування. Алгоритм задачі та допоміжні програмні засоби.

    курсовая работа [102,5 K], добавлен 14.03.2013

  • Методика та порядок програмування алгоритмів циклічної структури із заданим числом повторень за допомогою мови програмування VAB. Алгоритм роботи з одновимірними масивами. Програмування алгоритмів із структурою вкладених циклів, обробка матриць.

    курсовая работа [27,7 K], добавлен 03.04.2009

  • Прості та умовні оператори мови С++. Робота з двовимірними масивами. Пошук та сортування даних. Робота з файлами та з динамічними структурами даних. Опис мови програмування Delphi. Складення програми до розроблених алгоритмів. Організація циклів.

    отчет по практике [4,3 M], добавлен 28.08.2014

  • Сутність і призначення мови програмування С++, історія її створення та розвитку, значення на сучасному етапі. Створення програм на мові С++, її структура та особливості. Охорона праці при роботі з обчислювальною технікою, вимоги до техніки безпеки.

    курсовая работа [1,2 M], добавлен 29.03.2009

  • Мова C++ є як одна з найпоширеніших сучасних мов програмування. Базові засоби мови С++, її специфічні риси. Технологія складу програм, специфіка організації процесу програмування. Модульне програмування. Особливості об’єктно-орієнтованого програмування.

    курсовая работа [49,6 K], добавлен 26.03.2010

  • Концепції об'єктно-орієнтованого програмування. Методи створення класів. Доступ до методів базового класу. Структура даних, функції. Розробка додатку на основі діалогових вікон, програми меню. Засоби розробки програмного забезпечення мовами Java та С++.

    курсовая работа [502,5 K], добавлен 01.04.2016

  • Характеристика мов програмування. Історія виникнення мови C#, її особливості, версії та нові можливості. Приклад програм виведення на екран, виведення поточної дати та часу та програми музичного програвача. Програмний код та результат виконання програм.

    контрольная работа [321,3 K], добавлен 13.06.2012

  • Характеристика мови програмування VBA (Visual Basic for Application): можливості й засоби. Використання редактора Visual Basic. Створення та виконання VBA-програм. Типи даних, змінні й константи, операції й вирази. Керуючі оператори, процедури й функції.

    реферат [29,9 K], добавлен 28.06.2011

  • Мова Асемблера, її можливості та команди. Розробка алгоритму програми, його реалізація в програмі на мові Асемблера. Введення елементів матриці та обчислення cуми елементів, у яких молодший біт дорівнює нулю. Методи створення програми роботи з матрицями.

    контрольная работа [50,3 K], добавлен 12.08.2012

  • Загальні відомості про мову програмування, історія створення та використовування. Програма мовою Паскаль складається з лексем і символів – розділювачів. Робота з масивами, створення алгортимів. Складання програм з використанням процедур та функцій.

    реферат [18,3 K], добавлен 22.10.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.