Паскаль тілінде программалау
бет 8/8 Дата 25.01.2017 өлшемі 131,77 Kb. #7898 түрі Программа
Паскаль тілінде программалау Тақырып 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 Достарыңызбен бөлісу: