#include
#include
main ()
( f l o a t a , b , s , r , p , h ;
p r i n t f ( ”a f b : " ) ;
s c a n f ( ,,%f%f” , &a, &b) ;
s =
a-b; p=a*b;
printf("s =%5 .2f\nr=%5.2f\n
printf("\nh=%6.3f",h);
>
getch() ;
}
h
шыгару
p = % 7 .3f\n” ,s,r,p);
(b=0) puts (
u
b=0 ,һ=швксіздік") ;
else
{ h=a/b;
s,
r , p
ш ы гару
i
СОНЫ
b=0, h=oo
шыгару
2.1-сурет. Нақты сандармен
арифметикалык амалдар орындау
32
а = 8 , 7 5 жэне b = 3 , 1 2 болған кездегі программа жұмысы нәтижесі:
a,b: 8.75 3.12
s=*ll. 87
г* 5.63
h= 2.804
Ал b = 0 болган кездегі программа жұмысы нәтижесі:
a , b : 4 . 3 5 0
s = 4 , 3 5
I
r = 4 . 3 5
S
p=
0 . 0 0 0
b = 0 ,
һ=шөксіздік
Ә) Нақты a, b, cy d сандары берілген. Солардың косындысын sum, айырмасын
аігта және көбейтіндісін kobeit табу керек.
Есептің С тіліндегі программасының коды:
# ± n c lu d e < s t d i o . h >
# ± n c lu d e < c o n i o . h >
p r i n t f ( " s u m = % 7 .2 fи , s u m );
k o b e it= a * b * c * d ;
p r i n t f ( " \ n k o b e i t = %7. 2 f " , k o b e i t ) ;
a ir m a = a - b - c - d ;
p r i n t f (n\nairma = % 7 .2 f " ,a i r m a ) ;
getch() ;
Профамма жұмысы нэтижесі:
a,b,c,d : 3.45 -5.1 6.45 2.3
sum p 7.10
kobeit = -261.02
airma = -0.20
Б) Накты x, у сандары берілген. Келесі өрнекті есептеу программасын жазуды
float a,b,c,d;
float sum,kobeit,airma;
clrscri);
printf
(”a,b,c,d : ");
s c a n f ("%f%f%f%fи ,& a ,& b ,& c ,& d ) ;
sum=a+b+c+d;
}
қарасты рай ы к:
С тіліндегі профаммасы коды:
зв
// Бұл программа
да а-ньщ мәні. бөрілген х ,
у ушін өсөптөледі
#include
#include
void main()
{
double a, al, a2, a3, x , y;
p u t s ("Enter x :"
) ;
scanf("%lf", &x) ; // %lf - double типінің форматы
printf("x = %7.41f\n
" ,
x ) ;
puts ("Enter y:");
scanf("%lf", fiy) ;
printf("y = %7.41f\n", y) ;
al = p o w (2,-x);
a2 = sqrt (x+pow(fabs (y)
,
(1. /4 .))) ;
a3 = sqrt (exp (x-l/sin (x))) ;
a = al * a2 * a3;
printf ("\nResult = %lf\nH ,a);
}
Берілген x = 4,1 жэне у = 5,2 мәндері үшін программа жұмысы нәтижесі:
Enter х:
4.1
х = 4.1000
Enter у:
5.. 2
у = 5.2000
Result = 1.976681
Келесіх, у мәндерін енгізіп, нәтижені аныктайық:
3.981Е-2
-1.625ЕЗ
Enter х
3.981E-2
х = 0.0398
Enter у
'
-1.625ЕЗ
у = -1625.0000
Result = 0.000009
В) Накты х ,у сандары берілген. Келесі өрнекті есептеу программасын жасауды
қарастырайық:
М+ІУІ
1+\*У\
Есептін С тіліндегі программасының бір нұсқасы:
/ *
программада берілген х ,у үшін өрнек мәні есептеледі */
#include
#include
#include
34
m ain ()
float x,y,rez;
printf("x,y : ") ;
scanf("
%f
%f
",fix, fiy) ;
printf("x= %6.2f y=%6.2f",x,y);
rez=(fabs(x)+f
abs(y))/ (fabs(x*y)+1);
printf("\nrez = %f",rez);
getch() ;
Программаны орындау нәтижесі:
х,у : -23.56 41.34
х= -23.56 у= 41.34
rez = 0.066566
Г) Нақты х, у және z сандары берілген. Олардың мәндерін пернетақтадан енгізе
отырып, төмендегі Ь өрнегінің мәнін табу керек.
I
Ііг- .& П“2\
Щ і
Іж-УІСі+7---)
■
. . v
_
-■ ~
I
: '
■ ■
:
. ,
3)
—
-
у
V 1^1 4- Г/ІШУ
■
------------------------------------- ^
-----------------------------—
D
у
і
C O S у
е \ х - у
]+х / 2
>
осы өрнекті х = 5,324, у = 0,5281, z = 23,654 болған кезде есептеу керек болсын.
/ *
b өрнегін х, у
, z мәндері арқылы есептеу */
#include
#include
void main ()
{ double x, у , z
,
al, a 2 , a 3 , a 4 , b;
p u t s ( "input x , y , z : n );
/* бүл функция ces тіркесін
(put string) экранга шыгарады, тақырыптық файлы stdio.h */
scanf ("%lf%lf%lf",fix,fiy,fiz);
// %lf - double форматы
al = pow(y,pow(fabs(x),1./3));
a2 = pow(cos(y),3) ;
a3 = fabs(x - у) * (1 + pow(sin(z),2)/sqrt(x + y ) );
a 4 = exp(fabs(x - y ) ) + x/2;
b = al + a2 * a3 / a 4 ;
printf ("\n for x = %lf, у = %lf, z = %lf, b = %lf\n", x, y,
z , b) ;
input x, у, z:
5.324 0.5281 23.654
for x = 5.324000, у = 0.528100, z = 23.654000, b = 0.363196
Д) Келесі / (л*) функциясын пайдаланып, t өрнегінің мәнін аныктайтын
профамма жазу керек.
/ ( х ) = s i n x - c o s 2 x — s in Z x • co s
t -
W
tf
#include
#include
#include
/* £ функциясының сипатталуы
+/
float f(float x)
{ float f1;
fl=sin(x)*cos(2*x)-sin(2*x)*cos(2/x)
return fl;
f ( a + b )
Па)
)
m ain ()
{ f l o a t a , b , t ;
c l r s c r () ;
p r i n t f ("\ n a , b
") ;
/ a=b болмауы
s c a n f ( " % f " , 6 a ) ; / / a=b
s c a n f ("%f'•, &b) ;
t = f ( a + b ) - f ( a ) / f ( a - b ) ;
p r i n t f ( " \ n t = % 5 . 2 f H, t ) ;
>
2.2
есеп. Нақты а жэне b он сандары берілген. Осы сандардын арифметикалық
ортасы мен геометриялық ортасын табу керек.
Бұл сандарының арифметикалық ортасы
s
= ( a + b ) / 2 , ал геометриялык
ортасы
д — \ а ■ Һ болып табылады. Сондыктан онын алгоритмi 2.2-суретте
көрсетілгендей түрде болады. Ал мәтін түрінде берілген шығару жолы мынадай:
1-кадам. а, Ъ енгізу.
2-кадам. s = (a # b )/2, д = V a • 6 есептеу.
3-қадам. s, д шығару.
4-кадам. Соңы.
Осы алгоритмнің С тіліндегі программасы
# i n c l u d e < s t d i o . һ>
# i n c l u d e < c o n io .h >
# i n c l u d e < m a th .h >
m a i n ()
{ f l o a t a , b , s , g ;
c l r s c r ( ) ;
p r i n t f ( " a , b : ° ) ;
s c a n f ( " % f% f " , & a,& b );
p r i n t f (" a = % 5 .2 f b = % 5 .2 f,,/ a / b) ;
s = ( a + b ) / 2 ; g = s q r t ( a * b ) ;
p r i n t f ( " \n s= % 5 . 2 f\n g = % 5 . 2 f ” ,
s , g ) ;
0 ;
2.2-сурет. Екі нақты санның ариф-
метикалық жэне геометриялык орта-
)
сын табу алгоритмі
36
Программа жұмысының нэтижесі
I a , b : 5 . 3 4 7 . 7 8
a
=
5 . 3 4 b= 7 . 7 8
s = 6 . 5 6
g= 6 . 4 5
a, b енпзу
max
a,b,c енпзу
max=b
max шыгару
соны
2 3 есеп. а) Нақты а жэне b сандары
берілген. Сандардың үлкенін аныктайггын
есептің алгоритм схемасы мен программа-
сын құру керек. Есепті шығару алгоритмі
2.3 суретте көрсетілген.
Оның С тіліндегі программасының бірін-
ші нұсқасы:
# 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 ()
(float a,b,max;
printf("a
, b :
");
scanf(■%f%f",&a,
& b)
;
if(a>k) max=a;
else max=b;
max = a
ЖОҚ
ЖОҚ
max=c
-
- - -
-
-
-------------
басы
2.4-сурет.
Үш санның
үлкенін табу алгоритмі
max шығ
жоқ
23-сурет. Екі санның
үлкенін табу алгоритм!
соңы
Ос есепті шыгару программасының
тернарлық (үш орынды) операцияны пайдалану
жолымен берілген екінші нұскасының соңғы
бөлігі:
p r i n t f (" а ^ Ь : " ) ;
s c a n f ( ” %f%f" , &а,
&b)
;
max=a>b?
a :b ;
printf("\nmax=%5.2 f",m ax );
э)
Нақты a, b, с сандары берілген. Солардың
үлкенін
анықтайтын
есептің
алгоритм
схемасы мен профаммасын кұру керек. Есепті
шыгару алгоритмі 2.4 суретте көрсетілген.
Осы алгоритмнің С тілінде жазылған
программасы кодынын нұсқасы:
#include
#include
main ()
{ f l o a t a , b , с , m ax;
37
printf("а,Ь,с: n) ;
scanf("%f%f%f",& a ,&b,&c);
max=a;
if(b>max) max=b;
if(c>max) max=c;
printf(”\nmax=%5.2f",m a x ) ;
ge£ch();
Программа жұмысы нәтижесі:
2.4 есеп.
Төмендегі у функциясының мәнін
есептеу алгоритм! мен профаммасын кұру кажет
(
1 — х,
егер х £ 1; v. ,vv , '.'МШ
1 / х 2,
егер 1 <
х Ш 2;
і------- -
Vi •+ х3,егер 2 <
х <>
3;
k 1 +
х
+
х 2,
егер
х
> 3.
функциясын есептеу алгоритм! 2.5 суретте
көрсетілген. Онын мәтін түріндегі алгоритмін
келесідей турде жазуға болады.
1-кадам. Берілген х мәнін енгізу.
2-қадам. Егер
jc
< 1 болса, 8-қадамға көшу.
3-кадам. Егер х < 2 болса, 7-қадамға көшу.
4-қадам. Егер л: < 3 болса, 6-қадамга көшу.
5-кадам. у =1 + х + л-2 мэнін есептеу жэне
9-кадамга көшу.
6-кадам. у = V1 + л 3 есептеу және 9-
--------
кадамға көшу.
7-кадам. у = 1 /х 2 есептеу жэне 9-қадамга
көшу.
8-кадам. у =1 - х есептеу.
9-кадам. jc, у мэндерін шыгару.
10-ка да м. Соңы.
Осы есептін С тіліндегі программасы:
__А__з
#include
#include
#include
m a i n ()
дгснпзу
жок
ЖОК
жок
дг,
у
ш ы г а р \
соны
2.5-сурет.Тармакты алгоритм
схемасы
38
i f
(х<=1) ү=1-х;
e l s e i f ( x < = 2 ) y = l / x / x ;
e l s e if ( x < = 3 )
y = s q r t (
1+pow
( x , 3 ) ) ;
e l s e y = l+ x + x * x ;
pr
i n t f ( "x=%5. 2 f \ty = % 5 . 2 f " , x , y ) ;
g e t c h ( ) ;
)
2.5
есеп. Нақгы a, b, с коэффициенттері берілген a x 2 + bx +c = 0 квадрат тең-
деуінің түбірлерін есептеу алгоритмін кұру керек (аФ 0,b
ф
О,
с
ф
0). Мұндағы а,
Ь, с накты коэффициенттеріне байланысты квадрат теңдеудің дискриминантынын
d= Ь1 —4 а с таңбасына қарай үш тұрлі түбірлердің болатыны
белгілі: егер d>0 болса, әртүрлі екі нақты түбірлер, егер d=0 болса, онда бір-
біріне тең нақты екі түбір, ал егер d<0 болса, комплекс түбірлер шығады.
Әртүрлі нақты түбірлер х г =
, х 2 = ■
Ь\ ~ формулаларымен,тең
түбірлер х г = х г = — ^-больга аныкталады. Комплекс түбірлер, накты түбірлер
сиякты есептеледі, тек сандар косарланып былаи жазылады —— ±
Ьірінші
кезеңде d дискриминантынын мәні есептеледі де, оның таңбасы тексеріледі.
Есептеу операцияларының аздаган көлемі орындалатын алгоритм нұсқапарының
бір түрі 2.6-суретте келтірілген. Төменде алгоритмнің мәтіндік формасы берілген.
1-қадам. а, Ь, с енгізу.
2-кадам. d= b2 — 4ас
,һ
= 2а ,к =
—Ь/һ
есетггеу.
3-кадам. Егер d<0 болса, 7-қадамға көшу.
4-қадам. Егер d>0 болса, 6-кадамға көшу.
5-кадам. х3 = х 2 = к қойып, 9-қадамға көшу.
6-кадам. g - yfd ,r т д ] һ ,х г т к + г ,х 2 Щ к — г есептеп, 9-кадамға көшу.
7-кадам. g = /f3 [, г = д /һ , х^ = к 4- іг ,х 2 = к —
hr
есептеу
8-кадам. Экранға: «Комплекс түбірлер х г = к -f ir ,x 2 = к — іг» деген мәлімет
шығарып, 10-кадамға көшу.
9-қадам. Экранга «накты түбірлер»
х ІР х 2 шыгару.
10-қадам. Соңы.
Көрсетілген алгоритм негізінен тармакталу эрекеттерін қамтиды, ягни блок-
схемада есептеулер бірнеше жолдар аркылы тармакталып шыгарылады. Бұлар
салыстыру блоктарымен анықталады. Әр салыстыру блогының екі шығу сызыгы
бар, оның біреуі шарт орындалганда («иә») атқарылады, ап екіншісі шарт орын-
далмаған
(«жок»)
жағдайда
жүзеге
асырылады.
Мұндай
алгоритмдер
тармакталган құрылымды алгоритмдер болып табылады (2.6 сурет).
Енді осы есептің С тіліндегі программапык кодын келтірелік.
39
#i n c l u d e
#include
iinclude
main()
{ float a,b,c,xl,x2,h,k,g,r,d;
printf (Ma,b,c: ") ;
scanf
(
"
%f
%f
%f" , & a , &fo, &c) ;
d=b*b-4*a*c; h=2*a; k=-b/h;
Cd<0)
{ g=sqrt(fabs(d)); r=g/h;
printf ("complex: \txl=»%f+i*%f" ,k, r)
printf ("\tx2«%f-i*%f,f ,
к , r) ;
else
if (d>0)
( g=sqrt(d); r=g/h;
printf("real:\txl=%f",k+r);
printf("\tx2=%f" ,k-r);
>
else
printf("xl
x2
%f" , k ) ;
)
Программа жұмысы нәтижелері:
а Щ4,56; b - 5,23; с = -8,12 болған кездегі экран
бейнесі:
а , b , с : 4 . 5 6 5 . 2 3 - 8 . 1 2
r e a l : x l = 0 . 8 7 8 9 6 9
x 2 = - 2 . 0 2 5 8 9 9
Ал тең түбірлер шығатын а = 1,0; b — -2,0;
= 1,0 болгандағы нұсқасы:
a , b , c : 1 . 0 - 2 . 0 1 . 0
r e a l : x l = l . 0 0 0 0 0 0
х 2 = 1 . 0 0 0 0 0 0
Комплекс түбірлер шығатын а = 1,25; b =2,56;
с = 45,8 болган кездегі нұсқасы:
а,Ь,с: 1.25 2.56 45.8
complex: xl =l.024 + і*5.
х 2 = 1 .024 - і*5.
2.6
есеп. Студенттердің тест тапсыруы нәтиже-
сінде алған ұпайлары (баллдары) 0-мен 100
аралығындағы бүтін сандар түрінде берілген. Сол
сандарды негізге ала отырып, эрбір студенттің
басы
а, b, с
енгізу
Хі = к + і г'
"X* = к - 2Г’
ШЬІҒ.
СОКЫ
2.6-сурет. Квадрат тендеу
түбірлерін табу алгоритмі
әріп жүйесіндегі багасын аныктау алгоритмі мен программасын кұру керек. Бұл
алгоритм төмендегі тармакталган өрнек бойынша анықталады.
40
bal енгізу
Есептің алгоритмі 2.7-суретте көрсетшген.
Алгоритмнің C++ тілінде жазылган нұсқасы
/* балл енгіэіп, А В С D F т\грінде
#include Ciostrea:
void main (void)
{ int bal;
жоқ
соңы
2.7-сурет. Тест багасын аныктау
алгоритм!
Программаның
жұмыс
істеу нэтижелері:
Ball: 64
Baga:
С
Алгоритмнің С тілінде жазылган екінші нұсқасы:
/* Балл енгідіп, бағаны анықтау ♦/
#include // С тілінде жазылган нүсқасы
#include
main ()
{ int x;
textcolor(RED);
41
2.7
есеп.
Келесі тармақты функцияны есептеу
гтрограммасын құру керек:
Г s i n 2 (5 к + Злііп \ к \) , 0 < к<т
р = J c o s 2 (5* + 3m I n I к | ) , к > т
I t g 2(5* + 3 m l n \ k \ ) , k<0
Есептің шыгару алгоритмі он жактағы суретге
көрсетілген. Үш per кайтапанатын аргументтін
жэне функциялардын да қыскаша түрде жазыл-
гандарына назар аударыңдар. Мұнда есептің
қай тармақпен шығарылғаны жайлы мәлімет
беру керек (2.8 сурет).
жок
С тілінде жазылган профамма
нұскасы:
#include
#include
void main ()
{ float p,k,m;
float rsin,rcos,
("Enter k:”
) ;
scanf( "%f” ,
6 k )
;
puts( "Enter
m :
"
scanf
("%f",6m);
rc=cos(arg);
rt=tan(arg);
ЖОК
СОҢЫ
2.8-сурет.
Тармакты
функцияны есептеу
алгоритм!
t e x t b a c k g r o u n d
(WHITE);
c l r s c r () ;
( " b a l l * " ) ;
s c a n f
( H i "
, 6x) ;
(x<50)
baga='
F '
;
else if (60<=x 66 x<75)
ііівШ
йііВііШ
else if (50
«•D* ;
else
if (75<=x 66 x<90) baga='B';
« 1
A* ;
printf("ball=%i\tbaga=%c”,x,baga);
getch() ;
Программаның жұмысы нәтижесі:
ball=94
bal1=94
Келесі мэн берілгенде шыккан нәтиже:
bal1=5б
bal1=56
arg = 5 * k + 3 * m * log (fabs (k)) ;
rs = sin(arg);
rc = cos(arg);
rt = tarn (arg) ;
i f ( (0<=k) 66 (k
{ p = rs*rs;
puts("The first line works");
)
else if(k >= m)
{ p = rc*rc;
puts("The second line works");
I
else
{ p = rt*rt;
puts("The third line works");
)
printf( "Result %f", p ) ;
}
Программаны орындау нәтижесі:
Enter к
2
Enter m
5
The first line works
Result 0.999464
Берілген басқа мәндер үшін программаны орындау нәтижелері:
Enter k
5
Enter m
4
The second line works
Result
0.894408
Enter k
-5
1
The third line works
Result
15.509675________________
2.8
есеп.
Программага бір жыл нөмірін енгізіп, сол жылдын кәбисә жыл
немесе қарапайым жыл екендігін аныктау керек. Бұл алгоритмде 100-ге және 4-ке
қалдықсыз бөлінетін жылдын кәбисә жыл екендігі анықталады (акпан айы 29
күннен т^ратын жыл). Мұнда С/С-Н- тілдерінде тек нөлге тең сан логикалық
тексеру кезінде
false
(ақиқат) мәнін беретіндігі қолданылган.
43
/* Көбисэ жылды анықтау */
#include <сопіо.һ>
#include
main <)
{int year, г ;
clrscr () ;
printf(”\nEnter year number -> ");
scanf("%d"r&year); // жылды енгізу
{ if (year%4)
printf("It is a standard year \n"); // қарапаиым жыл
else
printf(nIt is a bissextile year (leap-year)\n");
// кэбисэ жыл
is a standard year \n");
printf("It is a bissextile year (leap-year)\n");
getch () ;
>
t a g -
■
Программа жұмысының нәтижесі:
2.1 Горнер тәсілі бойы нш а көпм үш елікті есептеу алгоритм і
Көптеген математикалық есептерді шыгару кезінде алгоритм түсінігі маңызды
рөл атқарады. Мұндайда құрастырылган алгоритм сипаттайтын әрекеттер әртүрлі
объектілермен орындала береді. Есептін шыгарылу алгоритмін кұрастырып, онын
профаммасын жазып шыккан соң, есептің шарттарына көңіл бөлмей-ақ,
программаны көптеген мысалдарга пайдалана беруге болады.
Бір гана есепті шыгару үшін бірнеше түрлі алгоритм құрастыруга болады.
Олардың кейбірі компьютердің бірсыпыра ресурстарын (уақытын, жады көлемін,
т.с.с.) пайдаланса, екіншілері онын аз гана бөлігімен жұмые істеуі мүмкін.
Сондыктан алгоритмдерді қүрастыру кезінде ең тиімді әрі тез істейтін жолды
табуга тырыскан жөн. Бірнеше мысалдар қарастырайық.
р
Көпмүшелік мәнін есептеуді онайлатуга болады. Ол үшін берілген көп-
мүшелікті мынадай түрде қайта жазып шыгамыз: х4 + 2хъ + Зх2 — 5х - \5 = (х •+■ 2х~
+ Зх — 5) х — 15
В
((jc2 + 2х + 3) х - 5) jc —15 = (((x + 2) х + 3) х - 5) jc-15, содан кейін
амалдарды жақшалардын аныктауы бойынша рет-ретімен біртіндеп орындаймыз.
Мұнда тек жеті арифметикапық амап орындапады екен. Көпмүшелік мәнін
осылай есептеу тәсілі Г орнер схемасы деп аталады. Кез келген көпмүшелікке оны
қалай пайдалануга болатынын көрсетейік.
0>
Достарыңызбен бөлісу: |