Паскаль тілінде программалау - Тақырып 12. Кездейсоқ сандар
- Кездейсоқ көріністер: барлық жерде…
- тиынды лақтыру ("орел" немесе "решка")
- қардың түсуі
- броундық қозғалыс
- телефон байланысында болатын ақаулар
- радиоэфирдің шуы
- Кездейсоқ сандар – бұған дейінгі сандардың ретін біліп отырсақ та, келесі санның қандай екені белгісіз болатын сандардың тізбегін айтады.
- Проблема: компьютерде осыны қалай алуға болады?
- Мүмкін болатын шешімдері:
- шу ақауларының сыртқы көздерін пайдалану
- математикалық түрлендірулерді пайдалану
- Жалған кездейсоқ сандар – бойында кездейсоқ сандардың қасиеті бар, бірақ әрбір келесі сан алдын ала берілген формула бойынша есептелетін сандардың тізбегін айтады.
- Мысалдар:
- Кездейсоқ бүтін сандар [0,m) (сызықты конгруэнтті әдіс)
-
- Кездейсоқ нақты сандар [0,1]
- Кездейсоқ сандардың орналасуы
- Модель: қар бұршақтары [a,b] кесіндісінің аралығына түседі
- Әр түрлі орналастырулардың саны қанша болуы мүмкін?
- Кездейсоқ сандардың орналасуы
- Ерекшеліктері:
- орналасу – бұл бір ғана санның емес бүкіл тізбектің сипаттамасы
- бірқалыпсыздардың саны – көп
- кез келген бірқалыпсыз орналасуды бірқалыпты орналасудың көмегімен алуға болады.
- Паскальдегі кездейсоқ сандардың генераторы
- [0,N] интервалындағы бүтін сандар:
- var x: integer;
- ...
- x := random ( 100 ); { интервал [0,99] }
- [0,1] интервалындағы бүтін сандар:
- var x: real;
- ...
- x := random; { интервал [0,1] }
- Есеп: 400х300 пиксельді тіктөртбұрыштың ішін түстері кездейсоқ нүктелермен бірқалыпты етіп толтыру.
- Нүктенің кездейсоқ координаталарын қалай алуға болады?
- x := random ( 400 );
- y := random ( 300 );
- Бірқалыптылықты қалай алуға болады? random функциясы қолданылса автоматты түрде қамтамасыз етіледі
- Кездейсоқ түстерді қалай алуға болады?
- Pen (1, random(256), random(256), random(256));
- Point ( x, y );
- program qq;
- var x, y, k, code, i: integer;
- stop: boolean;
- begin
- stop := False;
- repeat
- x := random(400);
- y := random(300);
- Pen(1, random(256), random(256), random(256));
- Point(x, y );
- if IsEvent then begin
- Event(k, code, i);
- if (k = 1) and (code = 27) then stop := True;
- end;
- until stop;
- end.
- Esc пернесін басып шығып кету
- "4": Пернетақтадан тіктөртбұрыш бұрыштарының координаталарын енгізіп, тіктөртбұрыштың ішін түстері кездейсоқ нүктелермен толтыру керек.
- "5": Үшбұрыштың ішін түстері кездейсоқ болатын нүктелермен толтыру. (бірқалыпты немесе бірқалыпты емес).
- Қосымша көмек: бұрышы 45о болатын теңбүйірлі үшбұрышты алу керек .
Паскаль тілінде программалау - Функция – нәтижесі қандай да бір мәнге ие болатын көмекші алгоритм (қосалқы программа).
- Мысалдар:
- , , есептеу
- өрнектерді күрделі формулалармен есептеу
- сұраққа жауап (жай сан ба, әлде жай сан емес пе?)
- Неліктен?
- программаның әр жерінде орналасқан бірдей есептеулерді орындау үшін
- функциялардың жалпыға бірдей кітапханаларын құру үшін
- Процедурадан айырмашылығы неде?
- Есеп: екі санның үлкенін анықтайтын функция құру және оны қолдануға мысал келтіру
- Функция:
- function Max (a, b: integer): integer;
- begin
- if a > b then Max := a
- else Max := b;
- end.
- Ерекшеліктері:
- тақырыбы function сөзімен басталады
- функцияда формальды параметрлер процедурадағыдай сипатталады
- айнымалы параметрлерді пайдалануға болады
- тақырыптың соңында қоснүктеден кейін нәтиженің типі көрсетіледі
- функциялар негізгі программадан ЖОҒАРЫ орналасады
- Max (a, b: integer): integer;
- function Max (a, b: integer): ;
- function qq( a, b: integer; x: real ): real;
- function Max ( a, b: integer): integer;
- Ерекшеліктері:
- жергілікті айнымалыларды жариялауға және пайдалануға болады
- нәтиже болатын мән - аты функцияның атымен сәйкес келетін айнымалыға жазылады; оны жариялаудың ҚАЖЕТІ ЖОҚ:
- function Max (a, b: integer): integer;
- begin
- ...
-
- end;
- function qq (a, b: integer): float;
- begin
- ...
- end;
- program qq;
- var a, b, max: integer;
- begin
- writeln(‘Екі сан енгіз');
- read(a, b);
- max := Max ( a, b );
- writeln(‘Санның үлкені ', max );
- end.
- function Max (a, b: integer): integer;
- begin
- ...
- end;
- Айнымалылардың, функциялардың және процедуралардың аттары бірдей болмауы керек!
- Есеп: енгізілген санның - жай сан екендігін анықтайтын функция құру.
- Ерекшеліктері:
- жауабы – логикалық мән (True немесе False)
- функцияның нәтижесін if, while шарттарында логикалық шама ретінде қолдануға болады
- Алгоритм: 2-ден N-1-ге дейінгі аралықтағы бөлгіштердің санын есептейміз, егер олардың саны нөлге тең болмаса енгізілген санның - құрама сан болғаны.
- count := 0;
- for i := 2 to N-1 do
- if N mod i = 0 then
- count := count + 1;
- if count = 0 then
- { N саны – жай сан }
- else { N саны – құрама сан }
- for i := 2 to N-1 do
- if N mod i = 0 then
- count := count + 1;
- program qq;
- var N: integer;
- begin
- writeln(‘Бүтін сан енгіз');
- read(N);
- if Prime(N) then
- writeln(N, ' – жай сан')
- else writeln(N, ' – құрама сан');
- end.
- function Prime (N: integer): boolean;
- var count, i: integer;
- begin
- i := 2; count := 0;
- while i*i <= N do
- if N mod i = 0 then count := count + 1;
- i := i + 1;
- end;
- Prime := (count = 0);
- end;
- шарт дегеніміз – логикалық мән
- "4": 1-ден N-ге дейінгі сандардың қосындысын анықтайтын функция құру және оны қолдануға мысал келтіру.
- Мысал:
- Сан енгіз:
- 100
- қосынды = 5050
- "5": Шахматты ойлап шығарған адамның N-ші торға неше бидайдың қоюын сұрағанын анықтайтын функция құру. ( 1-шісіне – 1 дән, 2-шісіне – 2 дән, 3-шісіне – 4 бидай дәнін, …)
- Мысал:
- Тордың нөмірін енгіз:
- 28
- 28-шісі торда 134217728 бидай дәні.
- "4": Екі натурал санның ең үлкен ортақ бөлгішін анықтайтын функция құру және оны қолдануға мысал келтіру.
- Мысал:
- Екі сан енгіз:
- 14 21
- ЕҮОБ(14,21)=7
- "5": Синус функциясын қатардың қосындысы секілді есептейтін функция құру. (0.001 дәлдікпен)
- Мысал:
- Градус түріндегі бұрышты енгіз:
- 45
- sin(45) = 0.707
Достарыңызбен бөлісу: |