Алгоритммен бағдарламалау ұғымы.
«Алгоритм» сөзі ІХ ғасырдағы Орта Азияның ұлы математигі әл-Хорезми атының algorithmi – латынша жазылуынан шыққан. Әл-Хорезми алғашқы рет арифметикалық амалдарды орындау ережелерін жазған.
Алгоритм – алғашқы берілген мәліметтерді пайдаланып, нақты нәтижеге қол жеткізетін шектеулі командалар тізбегін орындауда атқарушыға түсінікті және нақты жарлықтар.
Алгоритм дегеніміз - берілген мәндерді пайдаланып, қажетті нәтижеге жетуді жүзеге асыратын әрекеттердің орындалу тізбегі.
Алгоритм дегеніміз – алғашқы берілген мәліметтерді пайдаланып, қойылған мақсатқа жетуге н/е мәселені шешуге (есеп шығаруға) бағытталған әрекеттердің орындалуын жүзеге асыратын атқарушыға түсінікті және нақты нұсқаулар тізбегі.
Алгоритмді орындаушы – құрастырылған алгоритммен басқарылатын объект н/е субъект.
Алгоритм ұйғарымдары команда деп те аталады. Орындаушы орындауы мүмкін командалар жиынтығы орындаушының командалар жүйесі деп аталады.
Алгоритм қасиеттері:
1. Алгоритм анық, аяқталған әрекеттерден тұратын жеке қадамдарға бөлінуі керек. Орындаушының келесі қадамға өтуі алдыңғысын аяқтағаннан кейін ғана мүмкін болады. Алгоритмнің жеке қадамдардан тұру қасиеті дискреттілігі деп аталады
2. Алгоритмнің әр ұйғарымы н/е командасы орындаушыға түсінікті болуы тиіс, яғни олар бірмәнді ұғынылып, бір ғана бастапқы деректер бойынша бір ғана нәтижелерге әкелуге тиіс. Алгоритмнің бұл қасиеті анықтығыдеп аталады.
3. Алгоритмнің нақтылы бір мәселені ғана емес, бүкіл біртипті мәселелерді шешу мүмкіндіктері бар. Мысалы, квадрат теңдеуді шешу алгоритмі оның түбірін коэффициенттердің кез келген мәндерінде табуға мүмкіндік береді, ал жол жүру ережелері баршаға ортақ. Алгоритмнің бұл қасиеті жалпылығы деп аталады.
4. Нәтижелілігі. Айқын белгіленген әрекеттер тізімінің бәрі бірдей нәтижеге жеткізе бермейді.
Алгоритмнің формалды (қалыпты) әрекет жасап, команданы үйреншікті орындауға мүмкіндік беретін өте маңызды ерекшелігі.
Егер алгоритмдердің жасалу құрылымын қарастырсақ, олардың жасалуының үш негізгі типін ерекшелеуге болады: сызықты, тармақталған және циклдік.
Егер орындаушы командалары бірінен соң бірін олардың берілу ретімен орындайтын болса, алгоритм сызықты деп аталады.
Егер орындаушының әрекеттері қайсібір шартарды тексеру нәтижелерімен анықталатын болса, алгоритм тармақталған деп аталады.
Егер алгоритмдегі жеке командалар н/е командалар топтары орындау кезінде көп рет қайталанатын болса, алгоритм циклдік деп аталады.
Программалау тілінің командалары өңдейтін деректер шамалар деп аталады. Шамалар сандық (бүтін, нақты), символдық және логикалық болады. Шама
(типімен), және мәнімен сипатталады.
Алгоритмдік тіл – алгоритмдерді бірыңғай, анық жазуға және оларды орындауға арналған белгілеулер мен ережелер жүйесі. Алгоритмдік тілдің өзінің сөздігі болады. Оның негізін осы тілдің командалары болатын сөздер құрайды. Алгоритмдік тілде мағынасы мен қолдану әдісі өзгермейтңн сөздер пайдаланылады. Олар қызметші сөздер деп аталады. Turbo Pascal
Программалар белгілі бір мәселені, есепті шешуге арналған. Есеп шығару барысында компьютерге бастапқы мәліметтер енгізіледі., оларды қалай өңделетіндігі көрсетіледі және нәтиже қандай түрде, қандай құрылғыға шығарылатыны айтылады. Паскаль тілінде программа жеке-жеке жолдардан тұрады. Оларды теру, түзету арнайы мәтіндік редакторлар атқарылады. Программа алдындағы азат жол немесе бос орын саны өз қалауымызша алынады. Бір қатарда бірнеше команда немесе оператор орналаса алады, олар бір-бірімен нүктелі үтір арқылы ажыратылып жазылады, бірақ бір жолда бір ғана оператор тұрғаны дұрыс, л түзету жеңіл, әрі оқуға ыңғайлы. Паскаль тілнде программа үш бөліктен тұрады:
• Тақырып;
• Сипаттау бөлімі;
• Операторлар бөлімі;
Кез келген программаның алғашқы жолы PROGRAM сөзінен басталатын оның тақырыбынан тұрады. Одан кейін программаның ішкі объектілерінің сипаттау бөлімі жазылады. Бұл бөлім программадағы айнымалылар, тұрақтылар тәрізді объектілердің жалпы қасиеттерін алдын ала анықтап алуға көмектеседі. Сипаттау бөлімі бернеше бөліктерден тұрады, бірақ программаның күрделілігіне байланысты көбінесе ол бір немесе екі ғана бөліктен тұруы мүмкін. Программаның соңғы және негізгі бөлімі операторлар бөлімі – болып табылады. Орындалатын іс-әрекеттер, командалар осы бөлімде орналасады. Ол begin түйінді сөзінен басталып, бірақ атқарылатын операторлар тізбегі жеке-жеке жолдарға жазылып біткен соң end түйінді сөзімен аяқталады. Операторлар бөлімінде командалар ретімен орналасады. Операторлар бөлімінде орнатылатын негізгі әрекеттерді қарастырайық. Деректер – сан мәндері мен мәтін түріндегі сөз тіркесін мән ретінде қабылдай алатын тұрақтылар, айнымалылар т.б. осы иәрізді құрылымдар немесе солардың адрестері.
Программада пайдаланылатын мәліметтердің немесе шамалардың мәндері Паскаль тіліндегі алдын ала келісілген типтердің біріне тән болуы тиіс. Мәліметтердің немесе шамалардың типі деп, олардың қабылдай алатын мәңдерінің және олармен орындауға болатын амалдардың жиының анықтауды айтады, яғни тип дегеніміз – шамалардың қабылдайтын мәндеріне берілетін сипаттама. Мәліметтердің әр типі тек өзіне ғана сәйкес келетін операциялар жинын орындата алады. Мысалы, 1 мен 2 мәндері бүтін сандар типіне жатады, оларды қосуға, азайтуға, көбейтуге және бөлуге болады. Паскаль тілінде төмендегі қарапайым типтер пайдаланылады:
• Бүтін типтер – Byte, Shortint, Integer, Longint, Word;
• Нақты типтер – Real, Single, Double, Extended, Comp;
• Логикалық тип – Boolean;
• Символдық тип – Char;
• Ауқымды тип – Саналатын тип;
Turbo Pascal орындаған тапсырмалар
Тапсырма №1
Паскаль тілінде қолданушының енгізген санын ақшаға айналдыру бағдарламасын құру қажет. Мысалы : 90.45 — 90 рублей 45 копеек.
program Dengi;
var
d: Real;
r, k: Real;
begin
Write('Введите число: ');
Read(d);
r := Int(d);
k := Round(Frac(d) * 100);
Write(r, ' руб. ');
WriteLn(k, ' коп.');
end.
Тапсырма №2
Паскаль бағдарламасында қолданушының енгізген минутын сағатқа, минутқа айналдыратын бағдарлама құру керек. Мысалы: 3 сағат 18 минут.
program timer;
var
t,h,m: Integer;
sm,sh: String;
begin
sm := 'minut';
sh := 'sagat';
Write(Minutty engyz: ');
Read(t);
h := t div 60;
m := t mod 60;
case h of
1, 21: sh := sh + '';
2..4, 22..24: sh := sh + 'а';
5..20: sh := sh + 'а';
end;
case m of
1, 21, 31, 41, 51: sm := sm + 'а';
2..4, 22..24, 32..34, 42..44, 52..54: sm := sm + 'ы';
end;
Write(h, sh, ' ', m, sm);
end.
Тапсырма №3
А(x1, y1), B(x2, y2), C(x3, y3) нүктелер бір түзу бойында жатады ма? анықтаңыз
program z3;
var
x1, x2, x3, y1, y2, y3, z, n:real;
Begin
write (‘А нүктесі енгіз ');
readln (x1,y1);
write (‘В нүктесі енгіз ');
readln (x2,y2);
write (‘C нүктесі енгіз ');
readln (x3,y3);
z:=(x3-x1)/(y3-y1);
n:=(x3-x2)/(y3-y2);
if (z=n) and (z=(x2-x1)/(y2-y1)) then
writeln ('Бір түзуде жататын нүктелер’);
else
writeln ('Бір түзуде жатпайтын нүктелер’);
end.
Тапсырма №4
Роботтар ұжымы келесі заңдар бойынша өмір сүреді: жылына бір рет олар толығымен жинақталған 3 немесе 5 роботтан құралған топтарға біріктіріледі (топтарға қабылдаудың максималды мүмкіндігі 3 роботтан). Жылына 3 роботтан жиналған топтар 5, ал 5 роботтан құралған топ 9 жаңа робот қосады. Әр робот жинақталғаннан кейін 3 жыл өмір сүреді. Бастапқы роботтар саны (К>7) белгілі, олардың барлығы жаңа жинақталғандар. N ші жылдан кейін қанша робот болатынын анықтау керек.
program z4;
var k, i, n, p:integer;
s, x, y:longint;
r:array [1..3] of longint;
Begin
write('Роботтар саны k='); readln(k);
write(‘Жылдар саны n='); readln(n);
r[1]:=k; r[2]:=0; r[3]:=0; s:=k;
for i:=1 to n do
begin
x:=s div 3;
p:=s mod 3;
if p=0 then y:=0
else if p=1 then begin x:=x-3; y:=2 end
else begin x:=x-1; y:=1 end;
r[3]:=r[2]; r[2]:=r[1]; r[1]:=5*x+9*y;
s:=r[1]+r[2]+r[3];
end;
writeln (‘Роботтар саны - ’,s);
end.
Тапсырма №5
Сиырдың күнделікті азығы а кг шөпті, в кг жем және с кг комбикорм құрайды. Сиырдың к басын асырайтын шаруашылықта, х центнер шөп, у тонна жем, 50 кг-нан z қап комбикорм қалды. Шаруашылық толық азық қорымен сиырларды қанша күн тамақтандыра алады.
program z5;
var
a,b,c,x,y,z,kol,r:real;
Begin
readln (a,b,c);
readln (x,y,z);
readln (r);
x:=int(x*100/a);
y:=int(y*1000/b);
z:=int(z*50/c);
kol:=0;
if (x>=r) and (y>=r) and (z>=r) then
begin
if (x<=y) and (x<=z) then kol:=int(x/r);
if (y
if (z
end;
writeln (kol);
end.
Тапсырма №6
Қабылдаушы жобаны бастар алдында, к теңге көлемінде, жылына р процентке кредит алып оны өзінің жобасына салды. Болжам бойынша оның жобасы жылына с теңге кіріс ақша беру керек. Ол кредитін жабу үшін керекті қаражатты жинай алады ма? Жинай алатын болса, қанша жалдан кейін?
program z6;
var
k,p,r,s, h:real;
kol: integer;
Begin
readln (k,p,r);
kol:=0;
while (k>0) and (kol<50) do
begin
kol:=kol+1;
k:=k+k*(p/100);
k:=k-r;
end;
if kol>=50 then writeln ('no') else writeln (kol);
end.
Тапсырма №7
Екі бүтін сан берілген: а мен в. a^b санына аяқталатын санды табатын программа жазу керек.
program z7;
var
a,b,d:integer;
c:byte;
Begin
writeln ('Енгіз a'); readln (a);
writeln ('Енгіз b'); readln (b);
d:=a;
if b=1 then writeln (a)
else
begin
for c:=2 to b do
d:=d*a;
d:=d mod 10;
end;
writeln (d);
end.
Тапсырма №8
Бір айлақтан екінші айлаққа 15 түрлі жүк жеткізу керек. Тасымал жасалатын кеменің жүк көтерімі 50 тонна. Жүктер нөмірленген, және жүктің салмағы туралы ақпарат М(15) массивінде сақталған. Егер жүктер бөлінбеген және нөмірленген реттілік бойынша ғана тасымалданатын болса, кемеге қанша рейс жасау керектігін анықтау керек. Жүктің салмағы 50 тоннадан аспайды деген болжам бар.
program z8;
type
mas=array[1..15] of integer;
var
m:mas;
k,i,s:integer;
Begin
for i:=1 to 15 do
begin
writeln ('Енгіз m','[',i,']');
readln (m[i]);
end;
k:=1; i:=1; s:=0;
repeat
if s+m[i]<=50 then
begin
s:=s+m[i];
i:=i+1;
end
else
begin
k:=k+1;
s:=0;
end;
until i>15;
writeln ('Қажетті , k,'рейс');
Тапсырма №9
Бастапқы капиталы k теңге болатын саудагер ай сайын капиталы p%ке өсіп отыратын саудамен айналысқан. Жеке магазин сатып алу үшін с қаржыны қанша жыл жинайды?
program z9;
var
s,k,p:real;
n:integer;
Begin
writeln ('Бастапқы ақша');
readln(k);
writeln ('Өсетін пайызы');
readln(p);
writeln ('Ақшаны енгіз, сатып алуға жеткілікті');
readln(s);
while k
begin
k:=k+k*(p/100);
n:=n+1;
end;
writeln ('Жылдар саны -',int(n/12));
end.
Тапсырма №10
Цукерман саны өзінің жасайтын сандарына бөлінетін натурал сан. Мысалы: 175 , 1*7*5=35 ке бөлінеді. Цукерманның 3 негізді санын экранға шығаратын программа құр.
program z10;
var i,a,b,c: integer;
Begin
for i := 111 to 999 do
begin
a := i div 100;
b := (i div 10) mod 10;
c := i mod 10;
if (b <> 0) and (c <> 0) and (i mod (a * b * c) = 0) then writeln (i);
end;
end.