1. Ñèíòàêòè÷íè ãðåøêè. Ïðîãðàìèñòúò å íàïðàâèë “ãðàìàòè÷åñêà
ãðåøêà” ñïîðåä åçèêà Ñ++. Íàïðèìåð:
int main(
{ // error:
missing ‘)’
readIn: // error: illegal character ‘:’
sort();
compact();
print();
return 0 // error: missihg
‘;’
}
2. Ãðåøêè çà òèïîâå. Äàííèòå â Ñ++ ñå ñâúðçâàò ñ òèïîâå.
Ñòîéíîñòòà 10, íàïðèìåð, å öÿëà. Äóìàòà “hello”, çàãðàäåíà îò äâîéíè êàâè÷êè å
ñèìâîëåí íèç. Àêî íà äàäåíà ôóíêöèÿ î÷àêâàùà àðãóìåíò îò öÿë òèï ñå ïîäàäå
àðãóìåíò òèï íèç, êîìïèëàòîðúò ùå ñèãíàëèçèðà çà ãðåøêà ïðè
òèïîâåòå.
Âñÿêî ñúîáùåíèå çà ãðåøêà ñúäúðæà íîìåð íà ðåä è êðàòêî
îïèñàíèå íà ïðè÷èíàòà, ïîðàäè êîÿòî ñå ñ÷èòà, ÷å âèå ñòå ñãðåøèëè. Ïðåïîðú÷âà ñå
ãðåøêèòå äà ñå êîðèãèðàò â ïîñëåäîâàòåëíîñòòà, â êîÿòî ñå ïîÿâÿâàò. ×åñòî
åäèíè÷íà ãðåøêà ìîæå äà ïðåäèçâèêà ëàâèíîîáðàçåí åôåêò è êîìïèëàòîðúò äà ñúîáùè
çà ïîâå÷å ãðåøêè, îòêîëêîòî ôàêòè÷åñêè ñúùåñòâóâàò. Ñëåä êàòî êîðèãèðàòå òåêñòà
íà ïðîãðàìàòà ñè, ìîæåòå äà ÿ êîìïèëèðàòå îòíîâî.
Çà îïåðàöèîííàòà
ñèñòåìà MS-DOS, îáà÷å, ðàçøèðåíèåòî “.c” íå å äîïóñòèìî - MS-DOS íå ïðàâè
ðàçëèêà ìåæäó ìàëêè è ãîëåìè áóêâè.
Ðåàëèçàöèÿòà íà Ñ++ ïîä óïðàâëåíèåòî
íà MS-DOS ïîääúðæà ñëåäíèòå ðàçøèðåíèÿ íà ôàéëîâå:
cxx (x å + çàâúðòÿí íà
90 ãðàäóñà).
cpp (p ñúîòâåòñòâóâà íà “ïëþñ”-à).
Âòîðàòà ÷àñò îò ðàáîòàòà
íà êîìïèëàòîðà å äà ïðåâåäå ôîðìàëíî êîðåêòíèÿ ïðîãðàìåí òåêñò. Òîçè ïðåâîä,
íàðå÷åí ãåíåðàöèÿ íà êîä, ôàêòè÷åñêè ãåíåðèðà îáåêòîâ èëè àñåìáëåðåí òåêñò,
ðàçáèðàåì çà êîìïþòúðà íà êîéòî ïðîãðàìàòà ùå áúäå
èçïúëíÿâàíà.
Ðåçóëòàòúò îò óñïåøíà êîìïèëàöèÿ å èçïúëíèì ôàéë. Ïî
ïîäðàçáèðàíå, ïðè ñèñòåìàòà íà àâòîðà òîçè ôàéë ñå íàðè÷à a.out. Òîé ìîæå äà
áúäå èçïúëíåí êàêòî ñëåäâà:
$ a.out
Èçõîäúò íà ïðîãðàìàòà èçãëåæäà
òàêà:
readIn()
sort()
compact()
print()
Êîìàíäíàòà îïöèÿ
“-î èìå” ïîçâîëÿâà íà ïðîãðàìèñòà äà äàäå èìå íà ïðîãðàìíèÿ ôàéë, ðàçëè÷íî îò
a.out. Íàïðèìåð, êîìàíäíèÿò ðåä
$ CC prog1 prog1.C
ùå ñúçäàäå
èçïúëíèì ôàéë prog1. Çà äà ñå èçïúëíè òàçè ïðîãðàìà òðÿáâà äà ñå
íàïèøå:
$ prog1
Îñâåí åçèêîâèÿ êîìïèëàòîð ðåàëèçàöèÿòà íà Ñ++
ïðåäëàãà è íàáîð îò ñòàíäàðòíè áèáëèîòåêè. Áèáëèîòåêèòå ñà ñúâêóïíîñò îò
ïðåäâàðèòåëíî äåôèíèðàíè ôóíêöèè. Â Ñ++, íàïðèìåð, âõîäúò è èçõîäúò ñå ïîääúðæàò
îò ñòàíäàðòíà Ñ++ áèáëèîòåêà. Ïðîãðàìèñòèòå ìîãàò äà èçïîëçóâàò áèáëèîòå÷íèòå
ôóíêöèè â ïðîãðàìèòå ñè ïî ñúùèÿ íà÷èí, ïî êîéòî èçïîëçóâàò ôóíêöèèòå, êîèòî ñà
íàïèñàëè.
Íàé-ãîëÿìîòî ïðåäèìñòâî íà ïðîãðàìíèòå áèáëèîòåêè å òîâà, ÷å
ïîçâîëÿâàò íà äîáðè ïðîãðàìèñòè äà îêîìïëåêòîâàò ñâîèòå çíàíèÿ çà èçïîëçóâàíå îò
ìíîæåñòâî äðóãè ïðîãðàìèñòè. Ìàëêî îò íàñ, íàïðèìåð, çíàÿò êàê ðàáîòè
åëåêòðè÷åñòâîòî, íî ïîâå÷åòî çíàÿò êàê äà âêëþ÷àò îñâåòëåíèåòî. Äîáðàòà
áèáëèîòåêà ìîæå äà áúäå èçïîëçóâàíà òàêà ëåñíî, êàêòî è êëþ÷à çà îñâåòëåíèå. Â
ñëåäâàùàòà ÷àñò ñå ïðàâè åäèí êðàòúê ïðåãëåä íà âõîäíî-èçõîäíàòà
áèáëèîòåêà.
1.3. Ïúðâîíà÷àëåí ïîãëåä âúðõó
âõîä-èçõîäà.
Âõîäúò è èçõîäúò íå ñà ÷àñò îò åçèêà Ñ++, íî ñå
ïîääúðæàò îò áèáëèîòåêà, íàïèñàíà íà Ñ++ è ïîçíàòà êàòî iostream (âõ/èçõ.
ïîòîê). Ïðèëîæåíèå À ðàçãëåæäà ïîäðîáíî òàçè áèáëèîòåêà(¢). Â òîçè äÿë å äàäåíà
äîñòàòú÷íà èíôîðìàöèÿ çà íà÷èíàåùèÿ ÷èòàòåë.
Âõîäúò, ïîñòúïâàù îò
ïîòðåáèòåëñêèÿò òåðìèíàë, íàðå÷åí ñòàíäàðòåí âõîä, å ñâúðçàí ñ ïðåäâàðèòåëíî
äåôèíèðàíèÿ âúâ âõ/èçõ. ïîòîê âõîä cin (ïðîèçíàñÿ ñå “see-in”). Èçõîäúò, íàñî÷åí
êúì ïîòðåáèòåëñêèÿ òåðìèíàë, ñå íàðè÷à ñòàíäàðòåí èçõîä è ñå ñâúðçâà ñ
ïðåäâàðèòåëíî äåôèíèðàíèÿ âúâ âõ/èçõ. ïîòîê èçõîä cout (ïðîèçíàñÿ ñå
“see-out”).
Îïåðàòîðúò çà èçõîä (“<<”) ñå èçïîëçóâà çà èçïðàùàíå íà
ñòîéíîñò êúì ñòàíäàðòíèÿ èçõîä. Íàïðèìåð:
cout << "The sum of 7 + 3
= ";
cout << 7 + 3;
cout << "n";
Ïîñëåäîâàòåëíîñòòà îò
ñèìâîëè n ïðåäñòàâÿ ñèìâîëà íîâ ðåä. Ïðè ïèñàíå òîé ïðåäèçâèêâà íàñî÷âàíå íà
ïå÷àòà íà ñëåäâàùèÿ ðåä. Ïîñëåäîâàòåëíîñò îò âõîäíî-èçõîäíè îïåðàòîðè ìîæå äà
áúäå îáåäèíåíà â åäèí îïåðàòîð. Íàïðèìåð,
cout << "The sum of 7 + 3
= " << 7 + 3 << "n";
Âñåêè ñëåäâàù èçõîäåí îïåðàòîð ìîæå äà
áúäå äîáàâåí íà ñâîé ðåä êúì cout. Çà ÷åòèìîñò îáåäíåíèòå èçõîäíè îïåðàòîðè
ìîãàò äà ñå ðàçïîëîæàò íà íÿêîëêî ðåäà. Íà ñëåäâàùèòå òðè ðåäà å çàïèñàí åäèí
èçõîäåí îïåðàòîð.
×èòàòåëÿò, ðàçïîëàãàù ñ ðåàëèçàöèÿ íà Ñ++, êîÿòî íå ñå
îñíîâàâà íà âåðñèÿ 2.0, èìà ïî-ðàííàòà âåðñèÿ íà áèáëèîòåêàòà, íàðå÷åíà stream.
Ïðèìåðèòå â òàçè êíèãà èçïîëçóâàò ïîäìíîæåñòâî, îáùî çà äâåòå
âåðñèè.
cout << "The sum of ";
<< v1 << " +
";
<< v2 << " = " << v1 + v2 <<
"n";
Ñúîòâåòíî îïåðàòîðúò çà âõîä (“ >> “) ñå èçïîëçóâà çà ÷åòåíå
íà ñòîéíîñò îò ñòàíäàðòíèÿ âõîä. Íàïðèìåð, ñëåäíàòà ïðîãðàìà ðåàëèçèðà ïðîñò
àëãîðèòúì çà ÷åòåíå íà äâå ñòîéíîñòè, îïðåäåëÿíå íà ïî-ãîëÿìàòà îò òÿõ è
îòïå÷àòâàíåòî é.
#include <stram.h>
void read2 ( int1&,
int2& );
int max( int, int );
void writeMax( int );
main()
{
int val1, val2;
read2( val1, val2 );
int maxVal = max(
val1, val2 );
writeMax( maxVal );
return 0;
}
void
read2(int& v1, int& v2); {
cout << "nPlease enter two
numeric values: ";
cin >> v1 >> v2;
}
int max( int
v1, int v2); {
if ( v1 > v2 )
return v1;
else
return
v2;
}
viod writeMax( int val ) {
cout << val << " is
the largest value.n";
}
Ïî òàçè ïðîãðàìà ìîãàò äà áúäàò íàïðàâåíè
íÿêîëêî çàáåëåæêè. Îïèñàíè ñà òðè èìåíà íà ôóíêöèè ïðåäè äà áúäå äåôèíèðàíà
ôóíêöèÿòà main(). Ïúðâîíà÷àëíèÿò ñïèñúê ñå íàðè÷à ïðåäâàðèòåëíà äåêëàðàöèÿ,
ñúîáùàâàùà íà ïðîãðàìàòà, ÷å òåçè ôóíêöèè ñúùåñòâóâàò è îïèñàíèÿòà èì ìîãàò äà
áúäàò íàìåðåíè íÿêúäå â òåêñòà íà ïðîãðàìàòà, ïðåäñòàâåíà îò òîçè ôàéë èëè â
îòäåëåí ôàéë. Âñÿêà ôóíêöèÿ òðÿáâà äà áúäå äåêëàðèðàíà ïðåäè äà ìîæå äà áúäå
âèêàíà. Ïðåäâàðèòåëíàòà äåêëàðàöèÿ å åäèí îò íà÷èíèòå äà ñå íàïðàâè òîâà. val1 è
val2 ñå íàðè÷àò ïðîìåíëèâè. Îïåðàòîðúò
int val1, val2;
äåôèíèðà
òåçè ïðîìåíëèâè çà ïðîãðàìàòà. È ïðîìåíëèâèòå òðÿáâà äà áúäàò îáÿâåíè ïðåäè äà
ìîãàò äà áúäàò èçïîëçóâàíè. Ïîäðîáåí ïðåãëåä íà ïðîìåíëèâèòå å íàïðàâåí â ãëàâà
1.
v1 è v2, íàðè÷àíè ôîðìàëíè ïàðàìåòðè, èçãðàæäàò ñïèñúêà îò àðãóìåíòè
íà ôóíêöèèòå read2() è max(). val å åäèíñòâåíèÿ ôîðìàëåí ïàðàìåòúð íà
writeMax(). Ñúùíîñòòà íà äåôèíèöèÿòà èì å ðàçãëåäàíà â äÿë 4.6, êúäåòî ñå
îáñúæäà êàê ñå îïèñâàò ïàðàìåòðèòå íà ôóíêöèè.
×èòàòåëÿò ñèãóðíî å
çàáåëÿçàë, ÷å main() e îïèñàíà ìàëêî ïî- ðàçëè÷íî òîçè ïúò. Íå å îïèñàí ÿâíî
òèïà íà âðúùàíèÿ ðåçóëòàò. Òîâà å ðàçðåøåíî â Ñ++: ôóíêöèÿ, çà êîÿòî íå å
çàäàäåí òèï çà âðúùàíå, âðúùà òèï öÿëî ÷èñëî ïî ïîäðàçáèðàíå. Êîãàòî ïðîãðàìàòà
áúäå êîìïèëèðàíà è èçïúëíåíà ñå ïîëó÷àâà ñëåäíèÿ èçõîä (ïîòðåáèòåëÿò å âúâåë
ñòîéíîñòèòå 17 è 124):
Please enter two numeric values: 17 124
124 is
the largest value.
Äâåòå ñòîéíîñòè, 17 è 124, ñà ðàçäåëåíè ñ èíòåðâàë.
Èíòåðâàëèòå, òàáóëàöèèòå è íîâèòå ðåäîâå ñà ïðàçíî ïðîñòðàíñòâî (white space) çà
Ñ++. Îïåðàòîðúò
cin >> v1 >> v2;
ïðàâèëíî ÷åòå äâåòå
ñòîéíîñòè, çàùîòî îïåðàòîðúò çà èçõîä (“>>”) ïðîïóñêà öÿëîòî ïðàçíî
ïðîñòðàíñòâî, êîåòî å âúâåäåíî.
Ïðåäâàðèòåëíàòà äåôèíèöèÿ íà cin è cout
ñå ñúäúðæà â stream.h. Àêî ïðîãðàìèñòúò çàáðàâè äà âêëþ÷è òîçè ôàéë, âñè÷êè
îáðúùåíèÿ êúì cin è cout ùå áúäàò îòáåëÿçàíè îò êîìïèëàòîðà êàòî ãðåøêè.
Âêëþ÷âàíåòî íà ïðåäâàðèòåëíèòå äåêëàðàöèè ïîêàçâà ïúðâè÷íàòà óïîòðåáà íà
çàãëàâíèÿ ôàéë. ( ×àñò 5.5 ðàçãëåæäà çàãëàâíèòå ôàéëîâå â
ïîäðîáíîñòè).
Ñúùåñòâóâà è åäèí òðåòè âõ/èçõ. ïîòîê, cerr (ïðîèçíàñÿ ñå
“see-err”), íàðå÷åí ñòàíäàðòíà ãðåøêà, êîéòî ñúùî ñå ñâúðçâà ñ ïîòðåáèòåëñêèÿ
òåðìèíàë. cerr ñå èçïîëçóâà çà äà óâåäîìÿâà ïîòðåáèòåëÿ îòíîñíî íÿêîè îñîáåíè
ñúñòîÿíèÿ íà ïðîãðàìàòà ïî âðåìå íà èçïúëíåíèå. Íàïðèìåð, ñëåäíàòà ÷àñò îò
ïðîãðàìà ïðåäïàçâà ïðîãðàìèñòà îò äåëåíèå íà íóëà:
if (v2 == 0 ) {
cerr << "nerror: attempt to divide by zero";
return;
}
v3 = v1/v2;
#include
void read() { cout pact() { cout n"; }
void write() { cout n() {
read();
sort();
compact();
write();
return 0;
}
Ïðè ìåí Ñ ìè èçâåæäà ãðåøêà îùå â ïúðâèÿ ðåä, äåìåê ïðè #include