2
-
п -
}
x:=xO,xfc,dx
4
y.= f(x)
с
соны
3.2-су рет. Модификаторлы
циклдік алгооитм
Мүнда х=хО - цикл айнымалысынын бастапкы мәні,
x<=xk - циклдің орындалу шарты, x=x+dx - цикл айны
малысынын кадамы. х=хО цикл операторы орындапарда
бір рет есептеледі, x<=xk акикат болса немесе 0-ге тен
болмаса, цикл тұлгасы ретіндегі операторлар атқары-
лады. Содан сон x=x+dx есептеледі жэне x<=xk мэні
қайта аныкталады. x<=xk мэні жалган болса немесе
жалпы жагдайда ол 0-ге тең болса, for операторының
х=хО, хк^ dx
х<~хк
х>хк
1 -оператор;
2-оператор;
жұмысы аяқталады. Сонымен, цикл тұлгасының келесі
3.3-сурет. For циклінің
орындалуы немесе орындалмауы оның атқарылуы
орындалу алгоритмі
алдында аныкталады,
Арифметикалык циклдерде, циклдін санауышы рөлін аткаратын, ягни оны
баскаратын айнымалы (х) көмегімен есептеулердін кайталану саны аныкталады.
Әрбір келесі есептеуде санауыш мэні белгілі бір шамага (dx) өзгертіледі де, ол
алдын ала берілген айнымалының соңгы мэнімен (хк) салыстырылады. Егер
айнымалының жаңа мэні осы қайталану санымен дэл келсе, цикл аяқталады да,
63
келесі эрекеттер орындала бастайды, яғни санауыш мәні бойынша циклден шығу
ісі жүзеге асады. Егер циклдің басында берілген санауыш мэні оның көрсетілген
соңгы мәнінен артық болса, цикл мүлде орындалмайды. Сонымен қатар циклден
белгілі бір шарт арқылы оның аяғына жетпей, шыгып кету мүмкіндігі де ( b r e a k
операторы) қарастырылган. Мысалы, 1-ден 100-ге дейінгі сандар косындысын
табу алгоритмі (3.4-сурет):
/* 1-ден 100-гө дейінгі сандар
* /
басы
# i n c l u d e < s t d i o . h >
# i n c l u d e < c o n io .h >
m ain ()
{ i n t s = 0 , i ;
p r i n t f ( " s u m o f n u m b ers
(1+2+...+100) : ") ;
f o r ( i = l ; i < = 1 0 0 ; i + + )
s + = i ;
p r i n t f ("s*% d"
f s ) ;
( ) ;
СОНЫ
>
3.4-сурет. Қосынды табу
алгоритмі
Итерациялық типтегі циклдерде, оның қайталану
3.2 W h ile операторы
While цикл операторыньщ орындалу схемасы 3.5-
суретте көрсетілген. Оның жазылуы:
w h i l e (ш ар т-е р н ек )
{
while
саны бастапқы кезде белгісіз болып табылады. Оның жұмысының аякталуы
(циклден шығу) белгілі бір шарт орындалғанда гана жүзеге асады.
Әдетте бұл шарт, мысалы, мынадай теңсіздік:
х < с
орындалып тұрғанша
(акиқат
болғанша)
қайталану
жүргізіле
береді,
мұндагы с тұракты, ал
х
циклдің әрбір қайталануы
сайын белгілі бір шамаға өзгеріп отыратын цикл
параметрі, ягни санауыш рөлін атқаратын айнымалы.
Қайталану 'шарты цикл басында тексерілетін жагдайда,
цикл алғышартты (шарты алдын ала тексерілетін)
while цикліне жатады.
1-оператор;
2-оператор;
▼
іі
А,
п-оператор;
1 -
2 -
п - о п е р а т о р
І *
3.5-сурет.Шарты алдын
ала тексерілетін цикл
>
Мұнда шарт ретінде
болуы
64
оператор болса, онда операторлар жиыны жүйелі жакшага алынып жазылады.
While операторы орындалганда, алдымен, жакша ішіндегі өрнек есептепіп
тексаріледі. Егер өрнек мәні ақикат болса немесе жалпы жагдайда 0-ге тең
болмаса, онда
оператор
атқарылады. Содан соң жақшадагы өрнек тагы да есеп-
теледі. Егер өрнек мәні жалган болса (немесе жаппы жағдайда 0-ге тең болса),
онда while цикл операторы өз жұмысын аяқтайды.
While операторының орындалу саны шексіз болып кетпес үшін, мұнда шарт-
ернек құрамына кіретін айнымапы цикл ішінде өзгеріп отырады.
Мысал (3.6-сурет).
/ * 1 -д е н 1 0 0 - г е д е й і н г і б ү т ін
с а н д а р қосындысы * /
# in c lu d e < s t d i o . h >
#i n c l u d e < c o n io .h >
m ain ()
<
i n t . s , k ;
s = 0 ; k = l ;
w h ile (k<=100)
{ s+ = k ;
k++;
}
p r i n t f ( " s = %d”
, s ) ;
p r i n t f ( f,\ n P r e s s a n y key\n**)
g e t c h () ;
s = s+k
k = k+1
}
Ал егер циклдің қайталану шарты итерация
сонында тексерілетін болса, онда ол соңгышартгы
циклге жатқызылады.
соны
3.6-сурет. Бүтін сандарды
қосу алгоритмі
3 3
D o ., w h ile операторы
Шарты соңынан тексерілетін do
while циклінің
орындалу схем асы 3.7-суретте көрсетілген. Осыган сэй-
оператордын жалпы
жазылу түрі:
do
{
1 -
2-оператор;
п -
}
w h i l e ( е р н е к ) ;
Цикл түлғасы ретінде карапайым немесе кұрама
оператор қолданылуы мүмкін. Жакшадагы орнек
кес
3.7-сурет. Шарты соңынан
тексерілетін цикл
65
цикл тұлға-
сынан кейін тексеріледі. Сондыктан do while цикл тұлра
сы ең болмағанда бір рет орындалады. Цикл тұлгасынан кейін жазылган өрнек
ақиқат болса (немесе жалпы
жагдайда ол 0-ге тең болмаса), цикл түлгасы қайтадан орындалады. Ал өрнек
жапған болса (немесе О-ге тең болса), цикл аяклгалады.
do ... while циклінің соңында міндетті түрде нүктелі үтір қойылатынына
назар аудару керек.Цикл ішіңдегі операторлардың орындалу реттілігін өзгерту
мақсатында b r e a k жэне c o n t i n u e операторларын пайдалану қажет.
Енді мысалдар келтірейік. Сандардың үлкенін
табу алгоритмін қарастырайық (3.8 сурет).
// Еыгізілген сандардьщ улкенін табу
#include
#include
ain()
int a, max;
printf ("\n Сандар максимумын табу \ n ”) ;
p r i n t f ("Аяқтау ушін 0 енгізіңіз \n");
max = -32000;
/
/ алдын ала максимумды ең кіші бүтін
// санға (-32000)
do
теңеимхз
{ pri n t f <"Сан енгізіңіз: ”);
s c a n f (н%і",& а ) ;
if (a > max) max
max = a
иэ
a ;
}
while (a!=0);
p r i n t f
("Сандардьщ максимумы:
% i
" ,m) ;
g e t c h ( ) ;
max шыгару
}
Алгышартты циклдер үшін, шарт жап5ан болса,
программанын цикл ішіндегі бөлігі мүлде орындалмайды,
ап екінші соңгышартты цикл үшін, ол кем дегенде, бір рет
орындалады.
Арифметикалық
циклдер
алгышартты
циклдерге жатады.
соны
3.8-сурет. Сандардың
үлкенін аныктау
Ескерту:
өсетіндітен, оны нақгы сан ретінде алған дұрыс
\
з.ч
ц и клдік алгоритмдер мен программалар кұруға берілген есептер
3.1 есеп. п! функциясын есептеу алгоритмін кұру. п! — бұл п натурал сандардың
көбейтіндісі екені белгілі 1-2-3* ... • п. Мұнда 1 !=1 деп аламыз. Сондыктан п! мәнін
есептеуді F факториалының алдынгы мэнін келесі натурап санга көбейту
операциясын қайталау арқылы жүзеге асыруга болады.
п! есептеу алгоритмі 3.9 суретінде көрсетілген.
66
Оның мәтіндік формасы мынадай:
1-кадам. п
енгізу
2-кадам.
f = 1 деп алу
3-қлдам.
і=2 деп меншіктеу
4-қад ам.
Егер і>п болса, онда 7-қадамға көшу.
5-қадам.
F=F*i есептеу
6-
кадам.
і=і+1 деп алып, 4-кадамга көшу
7-қадам.
f мәнін шығару
8-кадам.
Соңы
Осы алгоритмнің С тіліңде жазылу нұсқасы:
#include
ta in ()
{
int: i,f,n;
puts("n:") ;
scanf (n%d", &n) ;
f=l; i=2;
while (i <= n)
{ f = f * i ;
Ш
1=
}
printf("% d !=%d",n ,f) ;
>
Осыган карап 2n, an мәндерін шыгару апгорит-
мдерін кұруга да болады, мұнда
а —
бөлшек, ал я -
бүтін сандар.
алгоритмі
3.2 есеп. k
2 + ^|2 *+ V 2 + • • • + v 2
п
тубір
өрнепн есептеу алгоритмін кұру керек.
Егер бастапқы мәнін k=V2 деп алсақ, онда қайтапанатын әрекет ү 2 +
к
өрнегін
есептеу болады. Сондыктан бұл есепті шешу алгоритмі 3.10 суретте көрсетіл-
гендей түрде бейнеленеді. Онын мәтіндік формасы мынадай болады:
1-
кадам.
пенгізу.
2-
кадам.
к - у/2
есептеу.
3-
кадам.
і =2 деп алу.
4- кадам.
Егер
/ > п
болса, 7- кадам га кешу
5-
кадам.
к
- \f2
+
к
есептеу
67
>- қадам. і = I +1 деп алып, 4-қадамға кешу.
- кадам.
к
шығару
1- кадам. Соңы.
Құрылған алгоритмге сәйкес есептің С тілінде жазылган профаммасы:
♦ in c lu d e < s t d io .h >
#i n c l u d e < c o n io .h >
# in c lu d e < m ath.h>
m ain ()
{ i n t i , n ;
f l o a t k ;
c l r s c r O ;
p r i n t f (" n : ”) ;
s c a n f ( l,%d
w,
fin) ;
k = s q r t ( 2 ) ; i= 2 ;
w h ile ( i <= n)
{ k = s q rt(2 + k ) ;
басы
n
енпзү
i=
>
p r i n t f ("k a® %f” ,k ) ;
g e t c h ( ) ;
II
1
II
2
ЖОК
}
Профамма жұмысынын нәтижелері:
3.3 есеп. Енді Фаренгейт фадустарын Цельсий фадус-
тарына ауыстыратын профамма мәтінін келтірейік,
мұндағы ғ = | с + 32.
/* Градустарды Фаренгейт бірлігінен
Цельсий бірлігіне алмастыру,
f = 0, 20, ... ,300 */
#include
#include
main()
{
int tO, tn, step;
float f,c;
tO = 0;
/*
/
шыгару
/
^
СОҢЫ
у
3.10 сурет.
к
өрнегін
есептеу алгоритмі
төменгі температура
tn =300;
/* жогаргы температура
step = 2 0 ; /* өзгеру қадамы */
clrscr(); f = tO;
p r i n t f ("ГрадФ ГрадЦ\пи);
while (f <= tn)
68
* /
* /
}
{ с = ( 5 . 0 / 9 . 0 ) * ( f - 3 2 . 0 ) ;
p r i n t f ( и%4.Of % 6 . 1 f \ n " , f , c
f * f +
)
printf
(" \п А яқ тау үш ін ENTER басыңыз11) ;
getch() ;
3.4a есеп. Берілген бүтін сан (
n
) таңбаларын кері бағытта экранға шыгарып,
оның неше цифрдан тұратынын аныктау қажет (3.11а сурет).
/ Сан цифрларын к е р і
#in c lu d e < с о п іо .һ >
# in c lu d e < s t d io .h >
#in c lu d e
main ()
{
i n t i = 0 , n ,m ,k = 0 ;
c l r s c r () ;
p r i n t f ( " \п Б е р іл г е н
s c a n f ( " %d", &n);
m=n ;
w h ile { k=m%10;
p r i n t f ( " K e p i
m=(m-k)/ 1 0 ;
i+ + ;
)
p r i n t f ( " \пЦифрл
g e tc h () ;
багы тта жазу жэне цифрлар санын аны^тау
сан : \ п п) ;
жазылуы: %iM, k ) ;
ары саны: % i " , i ) ;
)
3.4ә есеп. Берілген бүтін сан цифрларын кері
багытта жазу жэне цифрлар саны мен
косындысын аныктаудын келесі нұсқасы
(3.11э сурет).
# in c lu d e < io s tr e a m .h > / / C++ т іл ін д е
v o id m a in (v o id )
(
i n t k , s , n ;
lo n g a ;
c o u t « "Б е р іл ге н б ү т ін с ан : " ;
c i n » n ;
k= s=a=0;
do
k + + ;s= s % 10;
a=a*10 % 10;
ЗЛІа-сурет.Бүтін сан
цифрларын өңдеу
69
>
while
(n==0);
c o u t « "цифрлар саны: n « к ;
c o u t « "цифрлар қосындысы: n « s ;
c o u t « "Сан к е р і б а ғ ы т т а : "
« a ;
n * n /1 0 ;
Программа жұмысы нәтижесі:
Берілген бутін сан: 7614
цифрлар саяы: 4
цифрлар қосындысы: 18
Сан кері бағытгта: 4167
Осы тәрізді есепті функция арқылы шығару
4.9 есепте көрсетілген.
3.4
б есеп. Берілген бүтін санның («)
алғашқы жэне соңғы цифрын анықтау қажет.
#include
#include
void m a i n ()
{
long n, m; // үзын бутін сан
int cp;
O r
/ /
э к р а н д ы т а з а л а й м ы э
m l :
printf (11
\пБүтін сан енх*ідіңід: ”) ;
scanf (n%ldn ,&n) ;
while (m>9) m/=10;
printf(”\n %ld санының алғашқы
цифры - %ld,aA соңғысы - %d" ,n,m,cp) ;
p r i n t f ("\пЖалғастырамыз ба ?
Иэ болса - 7 енгізіңіз: ");
scanf (" %d'*, &cp) ;
i f ( c p = 7 ) goto ml;
}
3.5 есеп. Градуспен берілген бұрыш косинусын табу
# in c lu d e < i o s t r e a m . h>
#in c l u d e < io m a n ip . h>
# in c lu d e < c o n io . h>
#i n c l u d e < m ath. h>
v o id m a in (v o id )
{
= l e - 7 ; / / е с е п т е у д ө л д іг і
float x ,s ,u ;
int n;
ЗЛІә-сурет. Бүтін сан
цифрларын өңдеу
п
енгізу
жок
саны:
к
Қосыңдьісы:5
Санды кері
шыгару:
а
соны
70
clrscr () ;
cout « "Градуспен берілген бүрыш: ";
сіп » х;
х=х*М__РІ
/180; // бүрыпггы радиан
г
а ауыстыру
a=s=l; п = 0 ;
do
{ n=n+2;
u=-u*x*x/((n-1)*n);
s=s+u
;
>
while (fabs(u)>eps);
cout « "cos ("«setprecision (2) <
c o u t « " ) = " « setprecision (4) « s « endl;
getch () ;
Профамма жұмысы нәтижесі:
Градуспен берілген бұрыш: 45
c o s (45)=0.7071
3.6 есеп.
к
санын жуық шамамен есептеу мысалы. Ол мына формуланы
пайдалану арқылы жүзеге асырылады:
+
#include
♦include
int main()
{
double x , sum;
int n,i;
clrscr();
printf("Calculation of the series sum 1-1/3+1/5-1/7+...\n")
printf ("Enter quantity of series members to be summed (>1000) -> 1
scanf("%dn # &n);
sum=0;
for(i=l; i<=n; i++)
{
x=(double)l/(2*i-l);
i f ((i%2)==0) x=-x;
sum+=x;
printf("Series sum is % 2 .15f\n",sum);
printf(" PI number = % 2 .15f\n",sum*4);
getch () ;
return 0;
71
Программа жұмысы нәтижесі:
Calculation of the series sum 1-1/3+1/5-1/7+.
Enter quantity of series members to be summed (X
Series sum is 0.785189830100284
P T
n n m b o r
3.7 есеп. Анықталған интегралды тіктөртбұрыштар, трапециялар жэне Симпсон
тәсілдерімен жуық шамамен есептеу мысапы.
// интегралды сандық тэсілдермен есептеу
// берілген функция у=3*х*х
#include
#include
#include
main ()
{float a,b,
h ,
s i ,s 2 ,s3
// кесіндінің төменгі шегі
/
/ интервал нәні
// интегралдың жуық мәні
х ,х і ,х 2 ;
// аргумент
int n
// интервалдар саны
// цикл санауышы
clrscr () ;
cout « "Интегралды жуықтап есептеу\пи ;
cout « "кесіндінің төменгі ш е г і : ";
cin » a;
cout « "кесіндінің жогаргы шегі:
cin » b;
cout « "кесіндіні неше бөлікке бөлесіз
cin » n;
һ= (b-a) /п;
xl=a+h/2; х2=а;
sl=3*xl*xl;
s 2 = ((3*х2*х2)+ (3*b*b))/2;
f o r (і=1;i
{ xl=xl+h;x2=x2+h;
IV
sl=sl+(3*xl*xl); s2=s2+(3*x2*x2)
}
sl=h*sl; s2=h^s2; s3=(2*sl+s2)/ 3 ;
cout « "Интегралды формулалар бойынша есептеу:\nH ;
cout « "TiKTepT6YpbnnTap\t трапеция\t Симпсон тәсілдері\п";
cout « setprecision(4); // шыгару дәлдігі 4 таңба
cout « "si = ,?« s l « " \ t s2
m
e,« s 2 « n\t s3 = "
0 ;
}
72
Интегралды жуықтап есептеу
кесіндінід төменгі шегі: 0
кесіндінің жогаргы шөгі: 4.5
кесіндіні неше белікке белесіз: 25
Интех*ралды формулалар бойынша есептеу:
тіктөртбүрьші трапеция
Симпсон тэсілдері
si — 91.0886 s2 = 91.1979 s3 = 91.125
Программа жұмысы нәтижесі:
Осы программаны функция арқылы құру мысалы 4.6 есепте келтірілген.
3.8 есеп. Көбейту кестесін тексеруге арналған тест программасын құру.
// Көбейту бойынша тест
tinclude
#include
#include
void main (void)
{
int s i ,s 2
,
otvet,kol=0,prav=0;
char yn;
randomize (); // кездейсоқ сандарды өзгертіп отыру
clrscr () ;
cout « "Тестті бастаймыз ба? (Y/N) 11; // Иэ - Yes, Жоқ
сіп » уп;
while(уп!=,п' && у п !=’N ')
{ k.ol++;
sl=random(18)+2; // 0-19 арасындага кеддейсох; сан
s2=random(18)+2;
cout « "Нәтижесі қанша: " « si « и* п « s2 « и? и
cin » otvet;
if (otvet==sl^s2)
{ cout « "Дурыс.\n";
else cout « "Дурыс емесДп";
cout « "Тестті жалғастырамыз ба? (Y/N)\n";
cin » yn;
if (kol>0)
{ clrscr () ;
cout « "Тест нәтижелері: \n";
cout « "------------------ \n";
cout « kol « " сұрақ қойылды ";
cout « "\пДүрыс жауаптар саны: " « prav;
getch () ;
>
73
Программа жұмысы нәтижесі:
отті бастаймыэ ба? (Ү/Н)у
м т и п с і цанша: 16*4? 64
Дурнс.
Төстті жалгастнрамыі ба? (Y/N)
Нвтижөсі қанша: 10*12? 120
Дүрыс.
Тестті жалгасгырамыа ба? (T/N)
Ү
Нөтиэюөсі қаяжа: 19*19? 371
Дүрыс емес.
Твстті жал
г
а
стырамыз ба? (Y/N)
3 сүрақ қойылды
Дүрыс жауаптар саны: 2
3.9 есеп. Натурал санды рим цифрларымен жазу.
// Натурал санды рин цифрларымен жаэу
♦include
< іо
s t r ea m
.һ>
/ / C++ ф іл і
стилінде
♦include <сопіо.һ>
void main(void)
{
int I ;
clrscr () ;
cout « "Бутін сан енгіэіңіэ(<900):
c i n » i ;
cout « i « n -> ";
while (i>=500)
while (i>=100)
while (i>=50)
cout « 'D ' ;
i-=500;
cout « •С *;
i-=100;
cout « 1L * ;
i-=50;
while (i>=10)
cout « 1X' ;
i-=10;
while (i>=5)
cout « ‘V' ;
74
)
і - = 5 ;
)
switch (i)
{ case 0: breaki
*
m
case 1: cout
«
" I " ;
case 2: cout
«
П Ц П
case 3: cout
«
" I I I
case 4: cout
«
" I V "
}
getch () ;
»
/
«I
Профамма жұмысының орындалу нэтижесі
3.10 есеп.
Сандар тізбегінің ең үлкенін
(max),
ең кішісін
(min),
арифметикалык
ортасын
(average)
табу.
// 3.28 Сандар тізбегі
#include
#include
main ()
үшін max
tin
t
average табу
{float a ,
sum, average
m i n ,m a x ;
int n,
// тізбектің кезекті саны
// қосынды мен арифметикалық орта
/ /
/ /
/ /
ең үлкен жэне ең кіші сан
тіэбектегі сандар санауышы
цикл санауышы
х ;
clrscr () ;
cout « "Тізбекте қанша сан болады:
«V
cin » n ;
cout « "Сандарды енгіэіңіз:\n";
cout «
cin » a; // 1-санды енгізу
min=a; // уақытша 1-сан max болсын делік
max=a; // уақытша 1-сан min болсын делік
s\im—а; // 1-санды қосындыға меншіктеу
// қалған сандарды енгіэуді бастау
f o r (і— 1 ;і<п;і++)
{ cout «
; cin » a; // келесі санды енгізу
// келесі санды қосындылау
sum-f= а ;
if (a
if (a>max) max=a;
// келесі сан алдыңғылардың кішісі
// келесі сан алдыңғылардың үлкені
}
average=sum/п ;
cout « "Енгізілген
II
Достарыңызбен бөлісу: |