Professional Documents
Culture Documents
Programiranje Vo CPP
Programiranje Vo CPP
преку стандарден
структурен
програмски јазик
Процес на изработка
на една програма
Дали природните јазици (македонскиот, англискиот, германскиот,
францускиот јазик) се погодни за комуникација на човекот со компјутерот?
Зошто?
1. Исклучи го знакот за
потврдување кај опцијата:
Show tips at startup и
кликни на копчето Close;
2. Затвори го прозорецот
Scripting Console;
3. Кликни на знакот x до
копчето Start Here;
4. Во мени View отвори ја
листата Toolbars и подеси
така што ќе останат
вклучени само опциите:
Compiler и Debager.
Сега на работната околина ќе бидат прикажани: Мени со наредби
Текст
едиторот за
внесување на
изворниот код
Прозорецот за
Лентата Management испишување на
пораките за грешки
Креирање, преведување и
извршување на програма
Програмите во C++ можат, но не мора да бидат дел од проект.
и кликлнуваме
на копчето Go
Ја одбираме опцијата
Console Application
Во следниот прозорец кликнуваме на копчето
Next, а потоа го одбираме јазикот во кој
сакаме да програмираме (во нашиот случај
одбираме C++) и кликнуваме на копчето Next.
Ќе се отвори следниов прозорец:
Тука го внесуваме
името на проектот
(Пр. My Project)
Со кликнување
на ова копче ја
одбираме
папката во која
ќе го чуваме
нашиот проект и
кликнуваме на
копчето Next.
Ќе се отвори прозорецот:
Тука ја одбираме
опцијата: GNU GCC
Compiler
и кликнуваме на
кочето Finish за да
го завршиме
процесот на
креирање нов
проект.
Сега работниот простор (Workspace) изгледа вака:
Ова е содржината на
првата C++ програма која
обично ја гледаме кога
започнуваме со учење на
јазикот C++
а потоа
кликнуваме на
копчето Go
Ја бираме
опцијата: C/C++
source
Бираме место каде ќе ја
Во прозорецот на C/C++ file wizard сочуваме нашата прва програма
кликнуваме на копчето Next и (Пр. Креираме папка 7-1)
повторно за јазик во кој ќе ја
пишуваме програмата одбираме
јазик C++
Задача1:
Што ќе се прикаже на екранот од компјутерот со следниов исказ?
cout<<“J”<<endl<<“A”<<endl<<“N”<<endl<<“A”<<endl:
Затоа
За да може да ги користиме променливите најпрвин мора да резервираме место
во меморијата на компјутерот каде нивните вредности ќе се чуваат.
Тој процес се нарекува декларација на променливи.
tip_na_promenliva ime_na_promenliva;
Пример: int a;
Со оваа наредба на преведувачот му се кажува дека треба да се резервира
место во меморијата на компјутерот каде ќе се чуваат вредностите кои ќе ги
има променливата a, а тоа ќе бидат некои цели броеви.
Кои се другите типови на вредности кои променливите можат да ги имаат?
Примери:
Ако поделиме два цели броја дали и резултатот мора да биде цел број?
Пример за
големина на
Ознака Тип на променлива вредности на
меморија во бајти
променливата
int целобројна променлива 4, 7, 125 4B
float реална променлива со точност 3,1415 4B
до 7 децимални места
double реална променлива со точност 24,3685. . . 8B
до 15 децимални места
char променлива од тип знак a, b, 4, %, #,! 1B
string променлива од тип низа од “Dobar den”
знаци
bool логичка променлива true, false 1B
Константи
Зошто е ова подобро? Што ако се смени данокот? Пример: ако се намали
од 0.18 на 0.05.
Тогаш во вака организирана програма се менува само првиот
програмски ред, инaку секаде во програмата каде сме напишале
0.18 ќе треба да замениме со 0.05 што е прилично макотрпна
работа во која се можни многу грешки (багови) во програмата.
char a,b,c;
a = ‘b’;
b = ‘c’; bcb
c = a;
cout<<a<<b<<c;
Што ќе се прикаже на екранот од компјутерот по извршувањето на
следнава програма?
#include<iostream>
#include<cstdlib>
using namespace std;
int main() c=7
{
int a, b, c;
a=2.5;
b=5;
c=a+b;
cout<<”c= ”<<c<<endl;
system(“PAUSE”); Зошто наместо 7.5 програмата
return 0; пресмета резултат 7 ?
}
cin>>promenliva;
Кога ќе дојде до оваа наредба програмата
Пример1: ќе застане и ќе чека да внесеме некој
податок од тастатурата.
cin>>x;
Податокот што ќе го внесме ќе се зачува
во меморијата на компјутерот на некое
место означено со променливата x
Пример2:
cin>>a;
cin>>a>>b; е еквивалентно со наредбите:
cin>>b;
Ако внесеме:
Променливата a ќе добие вредност 1,
1 а во променливата b ќе се зачува
2 вредноста 2.
Одговор:
#include<iostream>
#include<cstdlib>
using namespace std; 2.1
int main()
{ 3
float a, b, c; c=5.1
cin>>a;
cin>>b;
c=a+b;
cout<<”c= ”<<c<<endl;
system(“PAUSE”); Прашање:
return 0;
Што ако некој друг ја користи програмата?
}
Ќе знае ли какви податоци треба да внесе и што треба
да пресмета програмата?
Задача:
Напишете програма слична на претходната која ќе пресметува разлика на два
реални броја, кои ги внесуваме од тастатурата.
Пример:
Програма која за внесен цел број (a) го пресметува неговиот
претходник и следбеник:
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
int a;
cout<<”Vnesi cel broj “;
cin>>a;
cout<<”Prethodnikot na brojot “<<a<<” e “<<a-1<<endl;
cout<<”Sledbenikot na brojot “<<a<<” e “<<a+1<<endl;
system(“PAUSE”);
return 0; Прашање:
} Што ќе се прикаже на екранот по извршување на следните
наредби, ако од тастатурата по ред ги внесеме вредностите:
1, 2, 3?
int i, j, k; 3, 1, 2
cin>>j>>k>>i;
cout<<i<<“, ”<<j<<“, “<<k;
Изработка на едноставни програми
со редоследна структура
Да ја разгледаме следнава програма: Ако за променлива a внесеме вредност
#include<iostream> 8, а за b вредност 4, по извршувањето
#include<cstdlib> на програмата екранот ќе изгледа вака:
using namespace std;
int main()
{
float a, b;
cout<<”Vnesi go prviot broj: “;
cin>>a;
cout<<”Vnesi go vtoriot broj: “;
cin>>b;
cout<<”Zbirot na broevite: “<<a<<”i “<<b<<” iznesuva ”<<a+b<<endl;
cout<<”Razlikata na broevite: “<<a<<”i “<<b<<” iznesuva ”<<a-b<<endl;
cout<<”Proizvodot na broevite: “<<a<<”i “<<b<<” iznesuva ”<<a*b<<endl;
cout<<”Kolicnikot na broevite: “<<a<<”i “<<b<<” iznesuva ”<<a/b<<endl;
system(“PAUSE”);
return 0;
}
Обидете се да се ставите во улога на компјутер и да ја извршите претходната
програма, наредба по наредба. Програмерите често ја спроведуваат оваа постапка
кога ја „тестираат програмата“.
Што ќе се добие на екранот ако за вториот број внесеме нула?
Зошто?
Затоа што делењето со нула не е
дефинирано.
Задача 1
Составете програма која ќе пресмета плоштина и периметар на квадрат со
страна a. Бројот а е некој реален број кој го внесуваме од тастатурата.
Задача 2
Претходната програма преправете ја така што ќе пресметува плоштина и
периметар на правоаголник со страни a и b кои ги внесуваме од тастатура.
Променливите a и b се реални променливи (float).
Решение на задача 1:
Програма за плоштина и периметар на квадрат со страна a
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
float a;
cout<<”Vnesi ja vrednosta za stranata a na kvadratot “;
cin>>a;
cout<<“Plostinata na kvadratot so strana “<<a<<“ iznesuva: “<<a*a<<endl;
cout<<“Perimetarot na kvadratot so strana “<<a<<“ iznesuva: “<<4*a<<endl;
system(“PAUSE”);
return 0;
} a 3 a 8
За размислување (дома): b 8 b 3
Напишете програма со која вредностите на променливите a и b кои ги внесуваме
од тастатуата ќе бидат заменети.
Пример:
Ако за а внесеме вредност 3, а за b вредност 8 тогаш по извршувањето на
програмата за замена на вредностите а треба да биде 8, а b да биде 3.
Оваа операција кога две променливи треба да си ги заменат своите вредности
честопати се користи во алгоритмите и програмирањето.
Притоа најчесто се користи следната техника:
Користиме трета променлива t во која привремено ќе сочува едната од двете
вредности, за да не се загуби при промената на вредностите.
Низата од инструкции е: t
3 3
t=a;
a=b;
b=t; a 3 8 b
8
Што ќе се случува во меморијата на компјутерот при извршувањето на наредбите
може да се види во следнава табела:
Наредба Содржина на променливата
a b t
cin>>a; 3
cin>>b; 3 8
t=a; 3 8 3
a=b; 8 8 3
b=t 8 3 3
Споредбени изрази, структура за избор од две можности
Претходната учебна година се запознавме со операторите за споредување во
програмската околина Scratch:
Научивме дека како резултат на споредувањето се добива
логичка вредност точно (true) или логичка вредност неточно
(false).
Во програмскиот јазик C++ множеството на оператори за
споредување е поголемо од она во Scratch.
Операторите за споредување во C++ се дадени во следната табела:
Оператор математички опис
симбол
< < помало
<= ≤ помало или еднакво
== = еднакво
> > поголемо
>= ≥ поголемо или еднакво
!= ≠ различно
Важно: Треба да правиме разлика помеѓу операторот за доделување на
вредност (=) и операторот за споредување (==)
Пример:
a=5; Променливата a добива вредност 5. (Во a се меморира
вредност 5)
Се споредува дали вредноста во a е еднаква на 5, и како
a==5;
резултат на тоа споредување се добива вредност точно
или неточно.
Да ги разгледаме следниве изрази за споредување:
Услов a>b
чекор C
Крај
Во програмскиот јазик C++ структурата неточно точно
за избор од две можности се
логички
реализира со наредбата: израз
наредба после if
наредба после if
Соодветната C++ програма на претходно разгледаниот графички алгоритам за
пресметување на поголемиот од два цели броја a и b внесени со помош на
тастатурата е дадена подолу:
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
int a, b, Pog;
cout<<”Vnesi go prviot broj: “;
cin>>a;
cout<<”Vnesi go vtoriot broj: “;
cin>>b;
if(a>b)
Pog=a;
else
Pog=b;
cout<<“Od brojot “<<a<<“ i brojot “<<b<<“ Pogolem e “<<Pog<<endl;
system(“PAUSE”);
return 0;
}
Важно:
Во делот else од наредбата if (a==b) имаме две наредби, па затоа ги користиме
знаците { и }. Овие знаци означуваат почеток и крај на блок (група) од наредби.
Друго можно решение на истиот проблем е следново:
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
int a, b;
cout<<”Vnesi go prviot broj: “;
cin>>a;
cout<<”Vnesi go vtoriot broj: “;
cin>>b;
if (a==b)
cout<<”Broevite se ednakvi “<<endl;
else
if (a>b)
cout<<”Od brojot “<<a<<”i brojot “<<b<<”pogolem e brojot “<<a<<endl;
else
cout<<”Od brojot “<<a<<”i brojot “<<b<<”pogolem e brojot “<<b<<endl;
system(“PAUSE”);
return 0;
}
A B A И B A ИЛИ B A НЕ (A)
1 0
0 0 0 0
0 1
0 1 0 1
1 0 0 1
Тука 1 претставува точно (True), а
1 1 1 1 0 претставува неточно (False).
А и B се некакви логички изрази кои како вредности можат да имаат точно (true)
и неточно (false).
Од табелите може да се забележи дека логичко И (AND) е точно само кога и
двата израза (А и B) се точни. Затоа AND се нарекува и логичко множење.
Од друга страна логичко ИЛИ (OR) е неточно само кога и двата логички
изрази (А и B) се неточни. Затоа OR се нарекува уште и логичко собирање.
Од втората табела забележуваме дека ако логичкиот израз А е точен тогаш
НЕ(А) е неточен и обратно.
Во програмскиот јазик C++ ознаките за овие оператори се:
Задача:
Пресметај ја вредноста на вистинитост (точно или неточно) на следниве
логички изрази:
Домашна задача :
10>7 && 5==5 10>7 && 9<5
Составете програма која за некој агол кој го
5>3 || 9<5 5<1 || 4>8 внесуваме од тастатурата ќе пресмета дали е
14 != 7 !(14 != 7) остар или не е остар?
Помош:
Еден агол е остар ако е поголем од 0 степени и помал од 90 степени односно
треба да важи: Ова е условот кој треба да биде
зададен во наредбата if од
agol>0 && agol<90 програмата.
if (agol>0 && agol<90)
Графички алгоритам:
Почеток
Внеси
Agol
Напиши Напиши
Аголот не Аголот е
е остар остар
Крај
Структура за повторување на
циклус дури е исполнет услов
Досега научивме дека кај програмите со редоследна структура наредбите се
извршуваат една по една, додека структурата за избор од две можности му
овозможува на компјутерот да донесе некоја одлука врз основа на тоа дали некој
услов е исполнет (точен) или не е исполнет (неточен).
Но, што да правиме ако некоја група наредби треба да се изврши повеќе пати?
Дали има логика тие наредби да ги пишуваме онолку пати колку што треба да се
извршат?
Што ако не знаеме однапред колку пати треба да се извршат?
За решавање на ваков тип проблеми се измислени тн. структури за повторување.
Да разгледаме неколку примери од секојдневието каде некои дејства се
повторуваат повеќе пати:
Додека имаме сок во шишето ќе пиеме.
Додека имаме пари ќе трошиме.
Ќе го чекам другарчето до завршување на часовите.
Вакви слични ситуации на повторување на некои дејства додека е исполнет некој
услов или до исполнување на некој услов се јавуваат и во алгоритмите.
Да ја разгледаме следнава структура:
циклус Едно извршување на чекорите (А, Б, . . ., М) се нарекува
чекор А еден циклус
чекор Б
..... Повторувањето на извршувањето на чекорите (А, Б, до М)
чекор М се нарекува циклично повторување.
крај_на_циклус
Во програмскиот јазик C++ една од наредбите која
овозможува циклично повторување на дејствата е не
услов
наредбата за повторување на циклус дури е
исполнет условот да
Општиот облик на оваа наредба изгледа вака: блок_од_наредби
while (услов)
{
блок_од_наредби;
} наредба_после_циклусот
наредба_после_циклусот;
Како што може да се забележи од графичкиот блок дијаграм блокот од наредби
помеѓу големите загради се извршува се додека логичкиот услов има вредност
точно (true).
Кога условот ќе престане да биде точен те. кога ќе добие вредност неточно
(false) програмата продолжува со првата наредба после циклусот.
Одговор:
Ако на почетокот од повторувањето не е исполнет условот групата наредби
воопшто нема да се изврши.
Ваков вид на наредби за повторување на циклусот се нарекуваат наредби со тест
(проверка) на врвот.
int i=1;
while (i<=5) А А А А А
{
cout<<’A’<<\t;
i++;
}
Во програмскиот јазик C++ наредбата: i=i+1; може да се напише и вака: i++
i++ значи бројачот i да се зголеми за 1 (да се инкрементира).
i-- значи бројачот i да се намали за 1 (да се декрементира).
\t е таканаречен табулатор, служи за подредување на текстот, слично на копчето Tab
Пример2:
int i=1;
while (i<=10)
{ 1 2 3 4 5 6 7 8 9 10
cout<<i<<\t;
i++;
}
Задача 1:
Составете програма во C++ со која компјутерот ќе брои до некој природен број
N кој претходно го внесуваме од тастатурата.
поч.
include<iostream>
#include<cstdlib>
ч: n
using namespace std;
int main()
{ i=1
int i, n;
cout<<“Do koj broj sakas da brojam?“<<endl;
не
cin>>n;
i<=n
i=1;
while(i<=n) да
{
cout<<i<<“\t”; п: i
i++;
}
system(“PAUSE”); i=i+1
return 0; Задача 2:
}
Претходната програма преправете ја така што
компјутерот ќе брои наназад од некој природен број N
до бројот 1. крај
Изработка на програми со структура за повторување
на циклус дури е исполнет услов
Задача1: поч.
Составете програма која ќе го пресметува збирот на
првите N природни броеви: 1+2+3+ . . . +N. Бројот zbir=0; i=1
N се внесува од тастатурата.
include<iostream> ч: n
#include<cstdlib>
using namespace std;
int main() не
{ i<=n
int n, i=1, zbir=0;
cout<<“Do koj broj sakas da sobiram?“<<endl; да
cin>>n;
while(i<=n) zbir=zbir+i
{
zbir=zbir+i;
i=i+1
i++;
}
cout<<“zbirot na broevite od 1”;
cout<<“ do “<<n<<“ iznesuva: “<<zbir<<endl;
system(“PAUSE”);
return 0;
п: zbir
} Zbir=1+2+3+4+5+ . . . +N
крај
Задача 2:
Составете програма која ќе го пресметува производот на првите N природни
броеви: 1 * 2 * 3 * . . . * N. Бројот N се внесува од тастарурата.
Помош:
Оваа наредба треба да се
Proizvod=Proizvod * i; повторува во while циклусот.
Proizvod=0; бидејќи било кој број помножен со нула како резултат дава нула
Пример 1:
int i=2;
while (i<=10) 2 4 6 8 10
{
cout<<i<<” “;
i=i+2;
}
Пример 2:
int x=0;
while (x<=10) 2 4 6 8 10 12
{
x=x+2;
cout<<x<<” “;
}
Веќе кажавме дека кај наредбата while проверката дали да се извршат наредбите
во циклусот е на врвот од циклусот те. првин се врши проверката, а потоа се
извршуваат наредбите.
Значи ако уште на почетокот условот не е точен наредбите воопшто нема да се
извршат, туку програмата ќе продолжи со следната наредба после циклусот.
Во програмскиот јазик C++ постои и друга структура за повторување каде
проверката не се врши на врвот (на почетокот) од циклусот туку на дното (на
крајот) од циклусот. Соодветниот блок дијаграм на
Таа е реализирана со наредбата do-while. наредбата do-while е прикажан
подолу:
Општиот облик на наредбата do-while
изгледа вака:
блок_од_наредби
do
{
да не
блок_од_наредби;
услов
}
while (услов);
наредба_после_циклусот;
Напомена:
После условот кај while мора да има точка и
запирка (;) за да „знае“ преведувачот дека наредба_после_циклусот
тука наредбата завршува.
Да ја разгледаме подетално структурата за повторување do-while:
int i=1;
do
{
cout<<i<<” “\t; 1 2 3 4 5 6 7 8 9 10
i=i+1;
}
while (i<=10);