Download as ppsx, pdf, or txt
Download as ppsx, pdf, or txt
You are on page 1of 68

Програмирање

преку стандарден
структурен
програмски јазик
Процес на изработка
на една програма
Дали природните јазици (македонскиот, англискиот, германскиот,
францускиот јазик) се погодни за комуникација на човекот со компјутерот?
Зошто?

Природните јазици (англискиот, германскиот и др.) се непрецизни,


недоволно строги за да може со нив да се задаваат прецизни инструкции
на машината (компјутерот).

Поради ова за комуникација човек – компјутер се користат вештачки


јазици со помош на кои се пишуваат компјутерските програми те.
софтверот.

Овие специјално измислени вештачки јазици за пишување на


компјутерски програми ги викаме програмски јазици.
Поделба на програмски јазици

Java C++ Scratch


Виши програмски јазици
Симболички јазик (Assembler)
Машински јазик

Машинскиот јазик е јазик во кој наредбите се напишани со нули и единици


кои компјутерот ги разбира. Но пишувањето на програми со нули и единици е
многу тешка задача за човекот.
Најпрвин машинските наредби со 1 и 0 биле заменети со симболички имиња
(Пр. ADD, SUB, PUSH, POP) и настанале тн. симболички јазици. Но логиката
на програмирањето кај овие јазици останала иста како и кај машинскиот јазик.
За да се програмира машината требало детално да се познаваат нејзините
составни делови. За секој тип на компјутер постоел посебен симболички јазик.
И ова било голем проблем за програмерите.
Затоа се измислени тн. виши програмски јазици во кои наредбите се слични
на секојдневниот јазик со кој зборуваат луѓето. Овие јазици се лесно
разбирливи за човекот
Програмата напишана во некој програмски јазик се нарекува
изворна програма (source code).
Таа е разбирлива за човекот но не и за компјутерот.

Компјутерот разбира само единици и нули.

Изворна програма Извршна


програма преведувач програма
(source code) (compiler) (executable code)

Поради тоа изворната програма мора да се претвори во низа од единици и


нули кои ги разбира компјутерот. Ваквата програма запишана со цифрите 1 и
0 кои се разбирливи за компјутерот се нарекува извршна програма
(executable code).
Преведувањето на изворната програма во извршна не го врши човекот туку
специјална компјутерска програма наречена преведувач или компајлер
(compiler).
При преведувањето на програмите пишувани во современите програмски јазици
се користат и тн. поврзувачи, па процесот би изгледал вака:
Изворна преведувач Објектна поврзувач Извршна
програма програма програма
(compiler) (linker)
(source code) (object code) (executable code)
Изработката на компјутерска програма која решава
одредена задача или проблем е процес кој се одвива низ
неколку фази:
1. Aнализа на проблемот и разгледување можни решенија.
2. Aлгоритамско претставување на чекорите за можното
решение на проблемот (графички или со тн. псевдо код).
3. Kодирање на алгоритамот (пишување на програма).
4. Преведување на изворната програма во извршна
програма (компјалирање).
5. Корекција на грешки (синтаксни, логички)
6. Тестирање на програмата
Синтаксичките грешки се однесуваат на погрешно напишани зборови од
програмскиот јазик или интерпункциски знаци. Кога има синтаксички
грешки програмата не работи (не се извршува).

Логичките грешки се однесуваат на погрешно зададени наредби во


програмта. Програмата работи, но погрешно. Не го решава проблемот туку
дава погрешни резултати.
Логичките грешки се нарекуваат багови (bugs).
Програмата која ни помага да ги откриеме логичките грешки се вика
дебагер (debuger).
Изворната програма најчесто се пишува во облик на текстуални
наредби со помош на тн. едитор.

Потоа изворната програма се преведува во машински инструкции


со специјална програма наречена компајлер.

Исправањето на грешките во програмата се врши со посебна програма дебагер

За да се олесни програмирањето постојат тн. библиотеки со готови програми


чии програмчиња програмерите ги користат во вид на готови наредби. Такви се
наредбите за математички функции, графика и слично.

Едиторот, компајлерот, дебагерот заедно со тн. библиотека на готови програми


сочинуваат еден пакет од програми кои програмерите ги користат при
програмирањето и тие се продаваат заедно како една целина од програми
наречена интегрирана околина за програмирање (Integrated Development
Enironment) .
Примери:
IDE - Integrated Development Environment
• Turbo Pascal
• Code Blocks
• Scratch
Инегрирана развојна околина
Интегрирана околина за
програмирање Code Blocks
и избери програмата веднаш
Инсталирање на Code Blocks да се стартува
Може да се симне од сајтот: www.codeblocks.org
Во следниот прозорец остави ги сите
опции онака како што се предложени:

На крај означи ја првата опција и


кликни на копчето ОК:
Прилагодување на работната околина
Code Blocks

По стартување на програмата ќе се прикаже следниот прозорец:

Треба да се направат следниве


акции:

1. Исклучи го знакот за
потврдување кај опцијата:
Show tips at startup и
кликни на копчето Close;
2. Затвори го прозорецот
Scripting Console;
3. Кликни на знакот x до
копчето Start Here;
4. Во мени View отвори ја
листата Toolbars и подеси
така што ќе останат
вклучени само опциите:
Compiler и Debager.
Сега на работната околина ќе бидат прикажани: Мени со наредби

Текст
едиторот за
внесување на
изворниот код

Прозорецот за
Лентата Management испишување на
пораките за грешки
Креирање, преведување и
извршување на програма
Програмите во C++ можат, но не мора да бидат дел од проект.

Во интегрираната околина за програмирање Code Blocks нов проект се креира


со наредбата: File -> New Project
По задавањето на оваа наредба ќе се отвори следниов прозорец:

и кликлнуваме
на копчето Go

Ја одбираме опцијата
Console Application
Во следниот прозорец кликнуваме на копчето
Next, а потоа го одбираме јазикот во кој
сакаме да програмираме (во нашиот случај
одбираме C++) и кликнуваме на копчето Next.
Ќе се отвори следниов прозорец:

Тука го внесуваме
името на проектот
(Пр. My Project)

Со кликнување
на ова копче ја
одбираме
папката во која
ќе го чуваме
нашиот проект и
кликнуваме на
копчето Next.
Ќе се отвори прозорецот:

Тука ја одбираме
опцијата: GNU GCC
Compiler

и кликнуваме на
кочето Finish за да
го завршиме
процесот на
креирање нов
проект.
Сега работниот простор (Workspace) изгледа вака:

Ова е содржината на
првата C++ програма која
обично ја гледаме кога
започнуваме со учење на
јазикот C++

Во папката Sources ќе ја видите датотеката: main.cpp


Креирање нова датотека со изворен код
За да почнеме со пишување на програмскиот код (наредбите) на
нашата прва C++ програма ќе треба да ја зададеме наредбата:
File -> New -> File
Во прозорецот што ќе се отвори:

а потоа
кликнуваме на
копчето Go

Ја бираме
опцијата: C/C++
source
Бираме место каде ќе ја
Во прозорецот на C/C++ file wizard сочуваме нашата прва програма
кликнуваме на копчето Next и (Пр. Креираме папка 7-1)
повторно за јазик во кој ќе ја
пишуваме програмата одбираме
јазик C++

Во прозорецот за снимање на програмата на нашата прва програма и даваме


име: prva и кликнуваме на копчето Finish.

Со ова ќе се отвори прозорецот во кој ќе може да го внесеме изворниот код


во програмскиот јазик C++ на нашата прва програма.
По внесувањето на програмата прозорецот ќе изгледа вака:
Беше внесен следниот програмски код:
// mojata prva programa
#include<iostream>
using namespace std;
int main()
{
cout<<"Ti posakuvam uspeh vo ucenjeto!"<<endl;
return 0;
}
Со кликнување на копчето Save ќе ја сочуваме внесената програма.

За да ја преведеме програмата и поврземе со библиотеката на готови програми


треба да ја зададеме наредбата: Build -> Build (Кратенката е: Ctrl+F9)
Ако се е во ред ќе се создадат 3 датотеки: на изворната програма (source
code), објектната програма (object code) и извршната програма (executable
code).

prva.cpp prva.exe prva.obj


Да ја разгледаме подетално внесената програма:
Ова е главната
// mojata prva programa програма
#include<iostream>
using namespace std;
int main()
{
cout<<"Ti posakuvam uspeh vo ucenjeto!"<<endl;
return 0;
}

Со наредбата: #include<iostream> главната програма се поврзува со


библиотеката на готови програми со име iostream. Оваа библиотека ја содржи
наредбата cout која ќе ја користиме во главната програма.
Во програмскиот јазик C++ може во различни библиотеки со готови програми да
имаме две функции (кои во главната програма ги користиме како наредби) со
исто име но кои вршат сосема различна работа.
За да не дојде до забуна потребна ни е наредбата: using namespace std;
Со ова на преведувачот му се кажува дека ќе се користат наредби од
стандардниот простор со имиња наречен std.
Наредбите што ги разгледавме се пишуваат пред главната програма и се
нарекуваат предпроцесорски наредби.
Главната програма започнува со наредбата int main()

Големите загради: { и } го означуваат почетокот и крајот на програмата.


Со наредбата:
cout<<"Ti posakuvam uspeh vo ucenjeto!"<<endl;
Текстот: Ti posakuvam uspeh vo ucenjeto! ќе се прикаже на екранот и поради
endl покажувачот ќе помине во нов ред.

Наредбата return 0 ќе прати порака (вредност 0) до оперативниот систем


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

За да не се случи ова се користи наредбата: system( “PAUSE”) која е дел


од библиотеката со стандардни наредби со име cstdlib.

Оваа наредба се пишува пред наредбата return 0 и му кажува на системот


(компјутерот) да застане се додека не притиснеме некое копче од тастатурата.
По додавењето на наредбата: system( “PAUSE”) и предпроцесорската
наредба: #include<cstdlib> програмата ќе изгледа вака:
// mojata prva programa
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
cout<<"Ti posakuvam uspeh vo ucenjeto!"<<endl;
system (“PAUSE”);
return 0;
} #include<iostream>
#include<cstdlib>
Обидете се да ја using namespace std;
анализирате следната int main()
програма! {
int god;
cout<<"Kolku godini imas?"<<endl;
Што ќе се прикаже на cin>>god;
екранот ако на cout<<”I jas imam “<<god<<” godini”<<endl;
прашањето: Kolku godini system (“PAUSE”);
imas? внесеме број 12? return 0;
}
Основни елементи на
програмскиот јазик
Во природните јазици луѓето комуницираат со реченици.
Речениците се состојат од зборови, а зборовите од букви.
Правилата на јазикот кажуваат каков треба да биде редоследот на зборовите
во реченицата.
Пример: Одам ќе утре училиште на. Утре ќе одам на училиште. 

Што претставува реченица во


Дали истото важи и за програмските јазици?
програмскиот јазик?
Компјутерот го управуваме со помош на наредбите. Тие му кажуваат на компјутерот
што да работи и ја вршат функцијата на речениците во природните јазици.
Затоа наредбите ги нарекуваме искази.
Како природните јазици така и програмскиот јазик C++ си има своја азбука.
Таа се состои од буквите од англиската абецеда, цифрите (0 до 9),
специјалните знаци (Пр. +, -, *, /, < ,=, >, %, #, & . . .) и знакот за празно место.
Исказите (наредбите) во програмскиот јазик C++ се составуваат од следните
градбени делови:
• резервирани зборови (Пр. if, then, else, do, while, return, true, false . . .)
• идентификатори (имиња) (Пр. имиња на променливи, константи, функции)
• оператори (Пр. <, >, = =, and, or, = . . . )
• интерпункциски знаци (. , ; : )
• коментари
Зборовите како: if, then, else, do, while, return, true, false имаат однапред
определено значење и не смеат да се користат како имиња на променливи,
бидејќи тоа би довело до забуна при преведувањето на програмата.

Затоа овие зборови ги викаме резервирани зборови .


Во програмскиот јазик C++ резервираните зборови се пишуваат со мали букви.
Во C++ име може да биде било каква комбинација од букви, цифри и знакот
долна црта ( _ ).
Имињата ги составуваат самите програмери и служат да означат нешто па затоа
се викаат уште и идентификатори.
Според правилата на програмскиот јазик C++ името не смее да почнува со
некоја цифра, туку првиот знак мора да биде буква или долна црта.
Во C++ се прави разлика помеѓу мали Пример. Zbir, zbir, ZBIR се три
и големи букви. различни имиња.
Исказ за приказ на екран
Пополнете ги празните места во програмскиот код така што ќе се добијат
точни наредби според правилата на програмскиот јазик C++ :

#include <_________> #include <iostream>


_________ <cstdlib> #include <cstdlib>
using _____________ std; решение using namespace std;
int _______() int main()
{ {
cout<<”Zdravo!”____endl; cout<<”Zdravo!”<<endl;
_____<<”Kako si?”<<endl; cout <<”Kako si?”<<endl;
system(”______”); system(”PAUSE”);
return ____; return 0;
} }

Да ја разгледаме наредбата за приказ на екран cout


Во следната табела се дадени неколку примери за примена на исказот за
прикажување на податоците на екранот (cout):
наредба (исказ) дејство што се извршува
cout<<25; ќе се прикаже бројот 25
cout<<”a”; ќе се прикаже буквата а
cout<<a; ќе се прикаже вредноста која е меморирана
(запомнета) во променливата а
cout<<2*a; ќе се прикаже вредноста која е меморирана во
променливата а помножена со бројот 2
cout<<”Zdravo” ќе се прикаже текстот Zdravo

По извршување на програмата од левата страна


#include<iostream> екранот на компјутерот ќе изгледа вака:
#include<cstdlib>
using namespace std;
int main()
{
cout<<"Zdravo!”; Ако ја замениме со cout<<"Zdravo!”<<endl;
cout<<”Jas sum C++ programa.”;
system (“PAUSE”); Екранот ќе изгледа вака:
return 0;
}
Во претходно разгледаните програми наредбите (исказите) се извршуваат
по ред, една по една.
Вака напишаните искази се нарекуваат редоследни искази или секвенца од
искази.

Задача1:
Што ќе се прикаже на екранот од компјутерот со следниов исказ?

cout<<“J”<<endl<<“A”<<endl<<“N”<<endl<<“A”<<endl:

Што ќе се прикаже на екранот од компјутерот со следниов исказ?


Решение: И во двата случаја ќе се прикаже:
cout<<“J”<<endl;
cout<<“A”<<endl;
J
cout<<“N”<<endl;
A
cout<<“A”<<endl;
N
Задача2: A

Напиши програма со која ќе го добиеш следниов приказ на екранот:


Zdravo!
Kakov prerkrasen den!
Odam na prosetka.
Променливи, исказ за доделување, аритметички операции
Да ја разгледаме следнава програма:
#include<iostream> Што ќе се прикаже на екранот по извршувањето
#include<cstdlib> на програмата?
using namespace std;
int main() Што ќе се прикаже на екранот ако во наредбата
{ cout ги избришеме наводниците те ако
cout<<"5+2”<<endl; наредбата изгледа вака: cout<<5+2<<endl; ?
system (“PAUSE”); Одговор: Во првиот случај ќе се прикаже текстот
return 0; 5+2, а во вториот случај броевите ќе се
} соберат и ќе се прикаже резултатот 7.

И во програмирањето се користат аритметички изрази. Тие изгледаат слично на


оние во математиката.
Примери: 2*3+8 (15-5)*100 2/a a-b a+b+c
Дали некогаш сте вршеле истражување колкава е температурата во точно
определено време (пр. 14 часот) секој ден?
Дали таа секој ден е иста или се менува? Пр. t=10C, t=12C, t=8C
Величините кои со текот на времето ги менуваат своите вредности ги викаме
променливи.
Со која формула се пресметува плоштината на правоаголникот?
P=a*b Во формулата имаме три променливи: a, b и P.
И во програмирањето користиме променливи, но за да може да ги користиме
најпрвин мора да резервираме место во меморијата на компјутерот каде
нивните вредности ќе се чуваат.
Таа постапка се нарекува декларирање на променливи.
Во овој случај ако вредностите на променливите се цели бореви наредбата за
декларирање на променливите би изгледала вака:
int a,b,P;

На променливите може да им даваме различни имиња, но притоа треба да ги


почитуваме правилата на јазикот C++ за давање имиња.
Имињата може да содржат букви од англиската абецеда, цифри од 0 до 9 и знак за
долна црта ( _ ) и не смеат да почнуваат со цифра.
Да го разгледаме изразот: c=a+b Ако a=5 и b=2 колку ќе биде c?
Во програмирањето знакот = има поинакво значење.
Во програмскиот јазик C++ изразот : c=a+b означува дека откако ќе се соберат a и b,
таа вредност (Пр.7) ќе се запомни на некое место во меморијата на компјутерот
означено со променливата c, па велиме дека променливата c добила вредност 7.
За други вредности на a и b и променливата c ќе има друга (различна) вредност.
Да го разгледаме сега изразот: a=a+1
Дали во математиката ваков израз би имал смисла?
Во програмирањето овој израз значи дека вредноста на променливата a
најпрвин ќе се зголеми за 1, а потоа новата вредност (зголемена за 1) повторно
ќе се меморира во променливата a.

Што ќе се случува во меморијата на компјутерот при извршување на секвенцата


од изрази:

Исказ Содржина на променливата


a b zbir
a=3; 3
b=7; 3 7
a=a+1 4 7
zbir=a+b 4 7 11
Типови на променливи, константи

Компјутерот мора однапред да знае каков вид на податоци ќе се помни


во променливата.
Зошто?
Дали е потребен ист мемориски простор кога треба да се запомни една буква
или цела реченица?
Со цели броеви може да вршиме аритметички операции (+, -, *, /).

Дали истите аритметички операции имаат смисла ако податоците се зборови?

Затоа
За да може да ги користиме променливите најпрвин мора да резервираме место
во меморијата на компјутерот каде нивните вредности ќе се чуваат.
Тој процес се нарекува декларација на променливи.

Тоа се прави на почетокот на програмата со наредбите за декларирање на


променливи.
Општиот облик на наредба за декларирање на променлива е:

tip_na_promenliva ime_na_promenliva;

Пример: int a;
Со оваа наредба на преведувачот му се кажува дека треба да се резервира
место во меморијата на компјутерот каде ќе се чуваат вредностите кои ќе ги
има променливата a, а тоа ќе бидат некои цели броеви.
Кои се другите типови на вредности кои променливите можат да ги имаат?
Примери:
Ако поделиме два цели броја дали и резултатот мора да биде цел број?

1/2=0,5 3/4=0,75 Друг тип на податоци се реалните бореви.

a, b, c, . . . z Буквите од азбуката, заедно со другите


знаци кои ги гледаме на копчињата од
+, -, *, /, !, %, # тастатурата го сочинуваат множеството од
знаци (карактери - char).
Zdravo, kako si? Повеќе знаци прават некоја низа од знаци (string)
3<7 True (точно) Вредностите точно и неточно се
4>5 False (неточно) нарекуваат логички вредности.
Типови на променливи во програмскиот јазик C++

Пример за
големина на
Ознака Тип на променлива вредности на
меморија во бајти
променливата
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

Забележуваме дека и променлива од тип integer и променлива од тип char


можат да добијат вредност 4. Но всушност се работи за два различни видови
податоци кои во меморијата на компјутерот се помнат на сосема различни
начини. Во првиот случај (integer) 4-ката се помни како број, а во вториот случај
(char) таа е зпомнета како знак.
Примери на декларации на променливи:

int a; целобројна променлива

float br; реална променлива

char zn; променлива од тип знак

bool uslov1; логичка променлива

string txt; променлива од низа од знаци


int a, b, c;

Константи

Во програмирањето често се користат и тн. константи.


Тоа се големини чии вредности не се менуваат.
Пример: const float DDV=0.18;
Подолу во програмата наместо вредноста 0.18 се користи името DDV.

Зошто е ова подобро? Што ако се смени данокот? Пример: ако се намали
од 0.18 на 0.05.
Тогаш во вака организирана програма се менува само првиот
програмски ред, инaку секаде во програмата каде сме напишале
0.18 ќе треба да замениме со 0.05 што е прилично макотрпна
работа во која се можни многу грешки (багови) во програмата.

Константите можат да бидат од истите типови како и променливите.

Тие се декларираат на следниот начин:

const tip_na_konstanta ime_na_konstanta;


Пример:
const float PI=3.14;
Иако не постои стриктно синтаксичко правило програмерите вообичаено
константите ги пишуваат со големи букви, за да ги разликуваат од променливите.

Што ќе се прикаже на екранот со следниот програмски код?

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 ?
}

Одговор: Бидејќи променливите a, b и c се


декларирани како целобројни променливи,
Заради програмскиот ред: компјутерот едноставно го отфрлува
int a, b, c; децималниот дел.
За да се прикаже и децималниот дел, променлвите a, b и c треба да бидат
декларирани како реални променливи.
Програмата со правилно декларирани променливи изгледа вака:
#include<iostream>
Што да правиме ако сакаме програмата
#include<cstdlib>
да пресмета збир на други два броја?
using namespace std;
int main() Дали има смисла да правиме програма која
{ ќе пресмета збир само за овие вредности
float a, b, c; или треба да направиме програма која ќе
a=2.5; пресметува збир на било кои два броја кои
b=5; ние ќе ги зададеме (внесеме)?
c=a+b;
cout<<”c= ”<<c<<endl; Програмите треба да бидат интерактивни те.
system(“PAUSE”); да му овозможат на корисникот самиот да ги
return 0; внесува вредностите според неговите
} потреби, а програмата да ги прикажува
резултатите од пресметувањето.

За внесување на податоци во програма се користи следниот исказ (наредба):

cin>>promenliva;
Кога ќе дојде до оваа наредба програмата
Пример1: ќе застане и ќе чека да внесеме некој
податок од тастатурата.
cin>>x;
Податокот што ќе го внесме ќе се зачува
во меморијата на компјутерот на некое
место означено со променливата x

По внесувањето на податокот корисникот мора да притисне на копчето Enter,


за да го потврди внесувањето. Се додека не притисне Enter програмата нема
да продолжи со работа.

Пример2:
cin>>a;
cin>>a>>b; е еквивалентно со наредбите:
cin>>b;

Ако внесеме:
Променливата a ќе добие вредност 1,
1 а во променливата b ќе се зачува
2 вредноста 2.

Значи, податоците што ги внесуваме се зачувуваат во променливите редоследно,


од лево кон десно.
Што ќе се прикаже на екранот од компјутерот при извршувањето на долната
програма ако за променлива a внесеме вредност 2.1, а за променлива b
вредност 3?

Одговор:
#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;
Што ако некој друг ја користи програмата?
}
Ќе знае ли какви податоци треба да внесе и што треба
да пресмета програмата?

На корисникот треба да му се даде појаснување што се очекува од него при


внесувањето на податоците.
Затоа вообичаено програмерите ја користат следната техника за внесување на
податоците во програмата:
Пример:
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
float a, b, c;
cout<<”Vnesi go prviot broj: “;
cin>>a;
cout<<”Vnesi go vtoriot broj: “;
cin>>b;
c=a+b;
cout<<”Zbirot na broevite: “;
cout<<a<<”i “<<b<<” iznesuva ”<<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;
}
Обидете се да се ставите во улога на компјутер и да ја извршите претходната
програма, наредба по наредба. Програмерите често ја спроведуваат оваа постапка
кога ја „тестираат програмата“.
Што ќе се добие на екранот ако за вториот број внесеме нула?
Зошто?
Затоа што делењето со нула не е
дефинирано.

Штотуку најдовме една логичка


грешка (bug) во програмата.

Во една добра компјутерска програма програмерите мора да ги земат предвид


и ваквите ситуации и на екранот да се испише соодветна порака.

Задача 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;
резултат на тоа споредување се добива вредност точно
или неточно.
Да ги разгледаме следниве изрази за споредување:

Израз вредност Веќе кажавме дека вредностите


точно или неточно се викаат
7 >= 5 точно (true)
логички вредности и тие се
4 >= 4 точно (true) многу значајни кога компјутерот
3+5 < = 6 неточно (false) треба да донесе некоја одлука,
да изврши една низа од наредби
5==6-2 неточно (false) или некоја друга.
3 != 0 точно (true)

Во реалниот живот и луѓето честопати се наоѓаат во ситуација да донесат некоја


одлука. Притоа обично проверуваат некој услов.
Пример: Ако цената е помала од 1000 денари тогаш ќе ја купам блузата.
Ако времето е сончево тогаш ќе одиме на излет инаку ќе имаме настава во
училиштето.
За разрешување на вакви и слични ситуации во алгоритмите се користи посебна
контролна структура наречена структура за избор. Како што кажува нејзиното
име, со ова се избира една од можностите кои се на располагање во зависност
од некој услов.
Претходната учебна година веќе ја разгледаме структурата за избор од две
можности (if – then- else) Пример:

неточно точно неточно точно

Услов a>b

чекор B чекор А Pogb Poga

чекор C

Ако условот е исполнет (ако е точен) се извршува чекор А, а ако условот не е


исполнет (ако не е точен) се извршува чекор B.

И во едниот и во другиот случај алгоритмот продолжува со извршување на


чекорот C.
Минатата учебна година го разгледавме алгоритмот кој пресметуваше кој од
два внесени броја a и b е поголем:
Почеток
Да го тестираме алгоритмот.

Нека за бројот a од тастатурата внесеме


Внеси а вредност 5, а за бројот b вредност 3.
Бидејќи 5>3 условот ќе биде точен па ќе се
изврши чекорот Poga те. Pog5
Внеси b
односно во променливата Pog ќе се сочува
вредноста на a (5)
неточно точно
a>b За а=4 и b=8 условот a>b те. 4>8 не
е точен па ќе се изврши чекорот
Pogb односно во променливата
Pog  b Pog  a Pog ќе се сочува вредноста на b (8).

Забележуваме дека и во првиот и во


вториот случај во променливата
Прикажи
Pog Pog ќе се сочува вредноста на
поголемиот од двата броја.

Крај
Во програмскиот јазик C++ структурата неточно точно
за избор од две можности се
логички
реализира со наредбата: израз

if (логички израз) наредба 2 наредба 1


наредба1;
else
наредба2;

наредба после if

Во некои случаи делот else може да


биде и изоставен, па наредбата го
добива обликот: неточно точно
логички
израз

if (логички израз) наредба 1


наредба1;

наредба после 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;
}

Но, всушност алгоритмот има мала грешка (bug). Што е грешка?


Не е разгледан случајот кога двата броја се еднакви.
Обидете се дома да составите алгоритам и напишете програма која ќе го реши
овој проблем и која во случај двата цели броја да се еднакви ќе напише порака:
Broevite se ednakvi.
Едно можно решение:
#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)
cout<<“ Broevite se ednakvi”;
else
{
if(a>b)
Pog=a;
Овие две наредби се
else
Pog=b; дел од изразот else на
cout<<“Od brojot “<<a<<“ i brojot “<<b<<“ Pogolem e “<<Pog; првата if наредба.
}
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;
}

Во овој случај втората if наредба се содржи во делот else на првата наредба.


Ваквите искази (наредби) се нарекуваат вгнездени искази.
Видовме дека еден ист проблем можеме да го решиме со повеќе различни
програми, на повеќе различни начини. На кој начин ќе го решиме проблемот
зависи од тн. техника на програмирање. Различни програмери програмираат на
различен начин, односно имаат различна техника на програмирање.
Претходната учебна година се запознавме со
логичките оператори: И (AND), ИЛИ (OR) и НЕ (NOT).
Во Scratch тие изгледаа вака

Табелите на вистинитост на овиe оператори се дадени подолу:

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++ ознаките за овие оператори се:

Оператор ознака во C++


AND (логичко И) - конјункција &&
OR (логичко ИЛИ) - дисјункција ||
NOT (логичко НЕ) - негација !

Задача:
Пресметај ја вредноста на вистинитост (точно или неточно) на следниве
логички изрази:
Домашна задача :
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

Agol > 0 AND Agol<90

Напиши Напиши
Аголот не Аголот е
е остар остар

Крај
Структура за повторување на
циклус дури е исполнет услов
Досега научивме дека кај програмите со редоследна структура наредбите се
извршуваат една по една, додека структурата за избор од две можности му
овозможува на компјутерот да донесе некоја одлука врз основа на тоа дали некој
услов е исполнет (точен) или не е исполнет (неточен).
Но, што да правиме ако некоја група наредби треба да се изврши повеќе пати?
Дали има логика тие наредби да ги пишуваме онолку пати колку што треба да се
извршат?
Што ако не знаеме однапред колку пати треба да се извршат?
За решавање на ваков тип проблеми се измислени тн. структури за повторување.
Да разгледаме неколку примери од секојдневието каде некои дејства се
повторуваат повеќе пати:
Додека имаме сок во шишето ќе пиеме.
Додека имаме пари ќе трошиме.
Ќе го чекам другарчето до завршување на часовите.
Вакви слични ситуации на повторување на некои дејства додека е исполнет некој
услов или до исполнување на некој услов се јавуваат и во алгоритмите.
Да ја разгледаме следнава структура:
циклус Едно извршување на чекорите (А, Б, . . ., М) се нарекува
чекор А еден циклус
чекор Б
..... Повторувањето на извршувањето на чекорите (А, Б, до М)
чекор М се нарекува циклично повторување.
крај_на_циклус
Во програмскиот јазик C++ една од наредбите која
овозможува циклично повторување на дејствата е не
услов
наредбата за повторување на циклус дури е
исполнет условот да
Општиот облик на оваа наредба изгледа вака: блок_од_наредби
while (услов)
{

блок_од_наредби;

} наредба_после_циклусот
наредба_после_циклусот;
Како што може да се забележи од графичкиот блок дијаграм блокот од наредби
помеѓу големите загради се извршува се додека логичкиот услов има вредност
точно (true).
Кога условот ќе престане да биде точен те. кога ќе добие вредност неточно
(false) програмата продолжува со првата наредба после циклусот.

Разгледајте го графичкиот блок дијаграм за наредбата while од претходниот


слајд и одговорете на прашањето:
Дали блокот од наредби мора да се изврши барем еднаш или може и воопшто да
не се изврши?

Одговор:
Ако на почетокот од повторувањето не е исполнет условот групата наредби
воопшто нема да се изврши.
Ваков вид на наредби за повторување на циклусот се нарекуваат наредби со тест
(проверка) на врвот.

Во продолжение на лекцијата да разгледаме неколку примери на програмски


кодови со структура за повторување на циклус дури е исполнет условот
(while).
Пример1:

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; бидејќи било кој број помножен со нула како резултат дава нула

Значи на променливата Proizvod треба да и доделиме почетна вредност 1


те треба:
Proizvod=1;
Proiz=1 * 2 * 3 * 4 * 5 * . . . * N

Во програмскиот јазик C++ наредбата: Аналогно:


zbir = zbir + i; Proiz = Proiz * i;
може да се напише и на следниот начин: е исто со:
zbir + = i; Proiz * = i;
Структура за повторување на циклус
do-while
Да се потсетиме на начинот на функционирање на наредбата while, изучена на
претходниот час.
Што ќе се прикаже на екранот по извршување на следните програмски кодови?

Пример 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:

Забележуваме дека првин се извршува


блокот од наредби, па потоа се
блок_од_наредби проверува условот.

да не Значи, кај оваа структура блокот од


услов наредби мора да се изврши најмалку
еднаш.

Ако условот е исполнет (точен - True),


тогаш наредбите ќе се извршат
повторно, а ако не е точен (ако има
наредба_после_циклусот
вредност False), тогаш се излегува од
циклусот и извршувањето на
програмата продолжува со наредбата
после циклусот.

Во програмирањето оваа структура 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);

Забележуваме дека излезните податоци на екранот се исти како и во пример 2


од лекцијата за наредбата while, даден подолу:
int i=1; Веќе напоменавме дека еден ист проблем може да
while (i<=10) се реши на различни начини, со различни алгоритми
{ и програми.
cout<<i<<\t;
i++; Како ќе се реши зависи од тн. техника на програмирање
} на програмерот.
На наредниот слајд ќе прикажеме еден пример на програма со која компјутерот
брои наназад од некој природен број N до бројот 1. Програмата е реализирана со
користење на наредбата do-while.
Пример:
Програма за броење наназад од некој природен број N до бројот 1. Бројот N го
внесуваме од тастатурата.
include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
int n;
cout<<“Od koj broj sakas da odbrojuvam?”<<endl;
cin>>n;
do
{
cout<<n<<“ “\t;
n- -;
}
while (n>o);
system(“PAUSE”);
return 0;
}
Задача:
Преправете ја горната програма така што наместо до 1 да одбројува до бројот 0.
Користена литература

Данијела Ѓорѓевиќ – Информатика за I година на средното образование

Проф д-р Ѓорѓи Јованчевски – Информатичка технологија за I година


средно образование

Проф д-р Драган Михајлов – Предавања по предметот програмски јазици


на Електротехничкиот факултет - Скопје
Маја Лошаноска Тодоровска, Ирина Иванова – Прирачник за наставата по
изборниот предмет програмирање
Презентацијата е креирана за да овозможи полесно совладување на наставните
содржини од тема4: Програмирање преку стандарден структурен програмски
јазик на наставната програма по предметот информатика за 7-мо одделение, но
може да биде од корист за секој ученик кој има желба да се запознае со основите
на програмирањето во програмскиот јазик C++.

Наставник: Горан Арсовски - дипломиран инжeнер по електротехника, насока


компјутерска техника, информатика и автоматика на Електротехничкиот
факултет во Скопје

You might also like