
- Форум
- По малко от всичко
- Информационни технологии
- Уроци по С++
2.4. Структура на програмата на C++
Когато програмата е малка, естествено е целият й код да бъде записан в един файл. Когато програмите са по-големи или когато се работи в колектив, ситуацията е по-различна. Налага се да се раздели кодът в отделни изходни (source) файлове. Причините, поради които се налага разделянето, са следните. Компилирането на файл отнема време и е глупаво да се чака компилаторът да транслира отново и отново код, който не е бил променян. Трябва да се компилират само файловете, които са били променяни.
Оператор за изход <<
Синтаксис
cout << <израз>;
където
- cout е обект (променлива) от клас (тип) ostream и предварително свързан с екрана на компютъра;
- <израз> е израз от допустим тип. Представата за израз продължава да бъде тази от математиката. Допустими типове са bool, int, short, long, double, float и др.
Семантика
Операторът << изпраща (извежда) към (върху) cout (екрана на компютъра) стойността на <израз>. Конструкцията
cout << <израз>
е израз от тип ostream и има стойност първия му аргумент, т.е. резултатът от изпълнението на оператора << в горния случай е cout. Това позвалява чрез верига от оператори << да бъдат изведени стойностите на повече от един <израз>, т.е. допустим е следният по-общ синтаксис:
cout << <израз> { << <израз>};
Операторът << се изпълнява отляво надясно (ляво асоциативен е). Така операторът
cout << израз1 << израз2 << … << изразn
е еквивалентен на редицата от оператори:
cout << израз1;
cout << израз2;
…
cout << изразn;
Фиг. 7.
Друга причина е работата в колектив. Би било трудно много програмисти да редактират едновременно един файл. Затова кодът на програмата се разделя така, че всеки програмист да отговаря за един или няколко файлове.
Ако програмата се състои от няколко файла, трябва да се каже на компилатора как да компилира и изгради цялата програма. Това ще направим в следващите раздели. Сега ще дадем най-обща представа за структурата на изходните файлове. Ще ги наричаме още модули.
Изходните файлове се организират по следния начин:
<изходен_файл> ::= <заглавен_блок_с_коментари >
<заглавни_файлове>
<константи>
<класове>
<глобални_променливи>
<функции>
Заглавен блок с коментари
Всеки модул започва със заглавен блок с коментари, даващи информация за целта му, използвания компилатор и операционна среда, за името на програмиста и датата на създаването му. Заглавният коментар може да съдържа забележки, свързани с описания на структури от данни, аргументи, формат на файлове, правила, уговорки.
Заглавни файлове
В тази част на модула са изброени всички необходими заглавни файлове. Например
#include <iostream.h>
#include <cmath.h>
Забелязваме, че за разделител е използван знакът за нов ред, а не ;.
Константи
В тази част се описват константите, необходими за модула. Вече имаме някаква минимална представа за тях. По-подробно описание на синтаксиса и семантиката им е дадена на Фиг. 8. За да бъде програмата по-лесна за четене и модифициране, е полезно да се дават символични имена не само на променливите, а и на константите. Това става чрез дефинирането на константи.
Задача 3. Да се напише програма, която въвежда радиуса на окръжност и намира и извежда дължината на окръжността и лицето на кръга с дадения радиус.
Една програма, която решава задачата е следната:
Program Zad3.cpp
#include <iostream.h>
const double PI = 3.1415926535898;
int main()
{ double r;
cout << “r= “;
cin >> r;
double p = 2 * PI * r;
double s = PI * r * r;
cout << “p=” << p << “\n”;
cout << “s=” << s << “\n;
return 0;
}
В тази програма е дефинирана реална константа с име PI и стойност 3.1415926535898, след което е използвано името PI.
Дефиниране на константи
Синтаксис
const <име_на_тип> <име_на_константа> = <израз>;
където
const е запазена дума (съкращение от constant);
<име_на_тип> е идентификатор, означаващ име на тип;
<име_на_константа> е идентификатор, обикновено състоящ се от главни букви, за да се различава визуално от променливите.
<израз> е израз от тип, съвместим с <име_на_тип>.
Семантика
Свързва <име_на_константа> със стойността на <израз>. Правенето на опит да бъде променяна стойността на константата предизвиква грешка.
Фиг. 8.
Примери:
const int MAXINT = 32767;
const double RI = 2.5 * MAXINT;
Предимства на декларирането на константите:
- Програмите стават по-ясни и четливи.
- Лесно (само на едно място) се променят.
- Вероятността за грешки, възможни при многократното изписване на стойността на константата, намалява.
Забележка: Тъй като в програмата Zad3.cpp е използвана само една
функция (main), декларацията на константата PI може да се постави във функцията main, преди първото нейно използване.
Класове
Тази част съдържа дефинициите на класовете, използвани в модула.
В езика C++ има стандартен набор от типове данни като int, double, float, char, string и др. Този набор може да бъде разширен чрез дефинирането на класове.
Дефинирането на клас въвежда нов тип, който може да бъде интегриран в езика. Класовете са в основата на обектно-ориетираното програмиране, за което е предназначен езика C++.
Дефинирането и използването на класове ще бъде разгледано по-късно.
Глобални променливи
Езикът поддържа глобални променливи. Те са променливи, които се дефинират извън функциите и които са “видими” за всички функции, дефинирани след тях. Декларират се както се дефинират другите (локалните) променливи. Използването на много глобални променливи е лош стил за програмиране и не се препоръчва. Всяка глобална променлива трябва да е съпроводена с коментар, обясняващ предназначението й.
Функции
Всеки модул задължително съдържа функция main. Възможно е да съдържа и други функции. Тогава те се изброяват в тази част на модула. Ако функциите са подредени така, че всяка от тях е дефинирана преди да бъде извикана, тогава main трябва да бъде последна. В противен случай, в началото на тази част на модула, трябва да се декларират всички функции.
Задачи
Задача 1. Кои от следните редици от знаци са идентификатори, кои не и защо?
а) a б) x1 в) x1 г) x’ д) x1x2
е) sin ж) sin x з) cos(x) и) x-1 к) 2a
л) min 1 м) Beta н) a1+a2 о) k”m п) sin’x
Задача 2. Намерете синтактичните грешки в следващата програма:
include <iostream>
int Main()
{ cout >> “a, b = “;
cin << a, b;
cout << “The product of “ << a << “and” << b << “is: “
<< a*b < “\n”
return 0;
}
Задача 3. Напишете програма, която разменя стойностите на две числови променливи.
Задача 4. Напишете програма, която намира минималното (максималното) от две цели числа.
Задача 5. Напишете програма, която изписва с главни букви текста Hellow World.
Упътване: Голямата буква H може да се представи така:
о о
о о
о о
ооооо
о о
о о
о о
и да се реализира по следния начин:
char* let_H = “o o\no o\no o\nooooo\no o\no o\no o\n”;
където char* означава тип низ.
Допълнителна литература
Г. Симов, Програмиране на C++, С., СИМ, 1993.
К. Хорстман, Принципи на програмирането със C++, С., СОФТЕХ, 2000.
П. Лукас, Наръчник на програмиста, С., Техника, 1994.
Аз съм МОМЧЕ R.I.P. липсваш ми боже колко ми липсваш защо трябваше да става така мамкаму