Рабочие листы
к вашим урокам
Скачать
1 слайд
1
Pascal dilində proqramlaşdırma
© Polyakov K.Y. 2006-2007
Giriş
Budaqlanma
Mürəkkəb şərt
Dövrler
Şərtə görə dövrlər
Seçım operatoru
Qrafika
Funksiyaların qrafikləri
Proseduralar
Rekursiya
Animasiya
Təsadüfi ədədlər
Funksiyalar
2 слайд
2
Pascal dilində proqramlaşdırma
Mövzu1.
Giriş
© Polyakov K.Y, 2006-2007
3 слайд
3
Alqoritm
Alqoritmin xassələr:
diskretlik: ayri-ayri addımlardan ibarətdir (komanda)
aydınlıq: ancaq istifadəçiyə tanışolan komandalardan ibarət olmalıdır (İSK aid olanlar)
Müəyyənlık: eynibir ilkin verilenelr üçün her zaman eyni cavabı verir
Nəticəlilik: müəyyən sayda addımlardan sonra sona çatır
Kütləvilik: müxtəlif ilkin verilənlərlə dəfələrlə yerinə yetirilə bilər
konkretlik: hər bir mümkün olan ikin verilənlər üçün dəqiq nəticə verilir
Alqoritm – istifadəçi üçün dəqiq planlaşdırılımış əməliyyatlar ardıcıllığıdır.
4 слайд
4
Proqram
Proqram –
hər hansı bir proqramlaşdırma dilində yazılmış alqoritmdir
Kompyuter üçün komandalar ardıcıllığıdır
Komanda– kompyuterin yerine yetirəcəyi əməliyyatların təsviridir.
ilkin verilənleəri haradan alaq?
onlarla ne etmək olar?
5 слайд
5
Proqramlaşdırma dilləri
Maşın yönümlü (aşağı səviyyəli) – hər bir komanda prosessorun bir əmrinə uygun gəlir (assembler)
Yüksek səviyyəli – istifadəçi tərəfindən asan başa düşülə bilən,danışıq dilinə (ingilis dilinə) yaxın olan və konkret olaraq kompyuterin növünden asılı olmayan
Yeni öyrənənlər üçün : Beyzik,Loqo,Pascal
Peşəkarlar üçün: Си, Фортран, Паскаль
Süni intilllekt meselelri üçün: Пролог, ЛИСП
Internet üçün: JavaScript, Java, Perl, PHP, ASP
6 слайд
6
Pascal dili
1970 – Niklaus Virt (Швейцария)
tələbələri öyretmek üçün istifadə edib
«yuxarıdan aşağıya» prinsipi ilə proqram tərtibi
müxtəlif strukturlu verilənlər(massıvlər, strukturlar, çoxluqlar)
Altməsələ1
Altməsələ2
Altməsələ3
1.1
1.2
1.3
2.1
2.2
2.3
3.1
3.2
3.3
Məsələ
7 слайд
7
Proqramın sturkturu necədir?
program <proqramın adı>;
const …;{sabitlər}
var …; {dəyişənlər}
begin
… {proqramın əsas hissəsi}
end.
{proseduralar və funksiyalar}
fiqurlu mötırizələrdə olan şərhlər emal olunmur
8 слайд
8
Proqramın sturkturu nədən ibarətdir?
sabit – adı olan sabit kəmiyyət.
Dəyişən – adı olan dəyişən kəmiyyət(yaddaşın oyuğu).
proseduralar – bəzi əməliyyatları təsvir edən yardımçı alqoritmlər (şevrənin çəkilməsi).
funksiya – hesablamaları aparmaq üçün yardımçı alqoritmlər (kvadrat kökün hesablanamsı, sin).
9 слайд
9
Proqramın,dəyişənlərin,sabitlərin adları (identifikatolar)
Adlar aşağıdakılardan ibarət ola bilər
Latın herifləri (A-Z)
Rəqəmlər
Altdan xətt _
Böyük və kiçik həriflər fərqlənmir
Adlarda istifadə oluna bilməz:
Rus əlifbasının hərifləri
boşluq
Mötərizələr(), +, =, !, ? və digər simvollar.
Adlar rəqəmlə başlaya bilməz
Hansı adlar düzgün sayıla bilər?
AXby R&B 4Wheel Вася “PesBarbos” TU154 [QuQu] _ABBA A+Bər
10 слайд
10
Sabitlər
const
i2 = 45; { tam ədəd }
pi = 3.14; { həqiqi ədəd }
qq = 'Вася'; { simvollar sətri }
L = True; { məntiqi kəmiyyət }
целая и дробная часть отделяются точкой
можно использовать русские буквы!
Iki qiymət ala bilər:
True (doğru , «hə»)
False (yalan, «yox»)
11 слайд
11
Dəyişənlər
Dəyişən – adı,tipi və qiyməti ola bilən kəmiyyətdir.Dəyişən qiymətini proqramın yerinə yetirləməsi zamanı dəyişə bilər.
Dəyişənin tipləri:
integer{tam }
real{ həqiqi }
char{ simvol }
string{ simvollar sətri }
boolean { məntiqi }
Dəyişənlərin elan edilməsi (yaddaşın ayrılması):
var a, b: integer;
Q: real;
s1, s2: string;
12 слайд
12
Dəyişənin qiymətini necə dəyişmək olar?
Operator– Yüksək səviyyəli proqramlaşdırma dilinin komandasıdır.
Mənimsətmə operatoru- dəyişənin qiymətini dəyişmək üçündür .
program qq;
var a, b: integer;
begin
a := 5;
b := a + 2;
a := (a + 2)*(b – 3);
end.
a
?
5
5
b
?
5+2
7
a
5
7*4
28
Hümunə:
13 слайд
13
Mənimsətmə operatoru
Umumi struktur:
Riyazi ifadəyə daxil ola bilər:
Sabitlər
Dəyişən adları
Riyazi işarələr:
+ - * / div mod
Fuksiyaya müraciət
Mötərizələr( )
vurma
Bölmə
Tam bölmə
Qalığın alınması
<dəyişənin adı> := <riyazı ifadə>;
14 слайд
14
program qq;
var a, b: integer;
x, y: real;
begin
a := 5;
10 := x;
y := 7,8;
b := 2.5;
x := 2*(a + y);
a := b + x;
end.
Hansı operatorlar doğru deyil?
Dəyişənin adı :=-işarəsindən solda yerləşməlidir
Ədədin tam və kəsir hissəsi nöqtə ilə ayrılmalıdır
Tam tipli dəyişənə həqiqi tipli ədəd mənimsətmək olmaz
15 слайд
15
Proqramın “əllə” yerinə yetirilməsi
program qq;
var a, b: integer;
begin
a := 5;
b := a + 2;
a := (a + 2)*(b – 3);
b := a div 5;
a := a mod b;
a := a + 1;
b := (a + 14) mod 7;
end.
16 слайд
16
Əməliyyatların yerinə yetirilmə ardıcıllığı
Mötərizənin içi hesablanır
vurma, bölmə, div, mod soldan sağa
Toplama və çıxma soldan sağa
z := (5*a*c+3*(c-d))/a*(b-c)/ b;
x:=(a*a+5*c*c-d*(a+b))/((c+d)*(d-2*a));
2 3 5 4 1 7 8 6 9
2 6 3 4 7 5 1 12 8 11 10 9
17 слайд
17
İki ədədin cəmi
Tapşırıq. İki ədədi daxil et və cəmi ekrana çapa ver
Sadə həll:
program qq;
var a, b, c: integer;
begin
read(a,b);
c:=a + b;
writeln(c);
end.
18 слайд
18
Giriş operatoru
read ( a ); { a dəyişənin qiymətini daxil etmək}
read ( a, b );{a və b dəyişənlərinin qiymətlərinin daxil etmək}
İki ədədi necə daxil etmək lazımdır?
boşluklarla:
25 30
Enter-lə:
25
30
a
25
b
30
a
25
b
30
19 слайд
19
Çıxış operatoru
write ( a ); {a dəyişəninin qiymətini çapa verilməsi}
writeln ( a );{a dəyişəninin qiymətini çapa verilməsi və yeni sətrə keçid}
writeln ( 'Привет!' ); { metnin çapı}
writeln ( 'Ответ: ', c ); { mətnin və c dəyişənin çapı}
writeln ( a, '+', b, '=', c );
20 слайд
20
Çapın formatları
program qq;
var i: integer;
x: real;
begin
i := 15;
writeln ( '>', i, '<' );
writeln ( '>', i:5, '<' );
x := 12.345678;
writeln ( '>', x, '<' );
writeln ( '>', x:10, '<' );
writeln ( '>', x:7:2, '<' );
end.
>15<
> 15<
>1.234568E+001<
> 1.23E+001<
> 12.35<
Cəmi simvolların sayı
Cəmi simvolların (ayrılan yer) sayı
Nöqtədən sonra rəqəmlərin sayı (kəsr hissə)
21 слайд
21
Məsələnin tam həlli
program qq;
var a, b, c: integer;
begin
writeln(‘İki tam ədəd daxil edin');
read ( a, b );
c := a + b;
writeln ( a, '+', b, '=', c );
end.
Протокол:
Введите два целых числа
25 30
25+30=55
Programın çap etdiyi sətir
Istifadəçinin daxil etdiyi verilənlər
22 слайд
22
Xətti alqoritmin blok-sxemi
başlanğıc
son
c := a + b;
Daxil et a, b
“başlanğıc” bloku
Giriş bloku
“əməliyyat” bloku
Çıxış bloku
“son” bloku
Çapa ver c
23 слайд
23
Məsələ
"4": Üç ədəd daxil edilir.Bu ədədlərin cəmini və hasilini hasablayan proqram yazın.
Nümunə:
üç ədəd daxil edin:
4 5 7
4+5+7=16
4*5*7=140
"5": üç ədəd daxil edilir.Bu ədədlərin cəmini ,hasilini və ədədi ortasını hesablayan proqram yazin.
nümunə:
Üç ədəd daxil edin:
4 5 7
4+5+7=16
4*5*7=140
(4+5+7)/3=5.33
24 слайд
24
Pascal dilində
proqramlaşdırma
Mövzu 2. Budaqlanma
© Polyakov K.Y, 2006-2007
25 слайд
25
Budaqlanan alqoritmlər
Tapşırıq. .Verilmiş iki tam ədəddən ən böyüyünü çapa verən proqram yazın
Məsələnin məqsədi: iki ədəddən birincisi böyük olarsa ,onu əks halda ikinci ədədi çapa vermək lazımdır.
osobennost: məslənin həlli müəyyən şərtdən asılsıdr (əgər … onda …).
Budaqlanan alqoritm-alqoritmin addımlarının yerinə yetirliməsi ardıcılığının müəyyən şərtdən asılı olmasıdır.
26 слайд
26
I variant . Blok-sxem
başlanğıc
max:= a;
Daxil et a,b
Çap max
a > b?
max:= b;
son
Hə
yox
Budaqlanmanın tam forması
“həll“ bloku
əgər a = b?
?
27 слайд
27
I variant. Proqram
max := a;
max := b;
Şərt operatorunun tam forması
program qq;
var a, b, max: integer;
begin
writeln(‘iki tam ədəd daxil et');
read( a,b );
if a > b then begin
end
else begin
end;
writeln(‘ən böyük ədəd', max);
end.
28 слайд
28
Şərt operatoru
if <şərt> then begin
{şərt ödənərsə yerinə yetirilən operatorlar}
end
else begin
{şərt ödənilmədikdə, yerinə yetirilən operatorlar}
end;
Əsas :
else açar sözündən sonra ; işarəsi qoyulmur
else …açar sözü istfadə olunmaya da bilər (şərt operatorunun tam olmayan forması)
Əgər blokda bir operator istifadə olunursa,begin-end açar sözlərini istifadə etməmək olar
29 слайд
29
Hansı səhvdir?
if a > b then begin
a := b;
end
else
b := a;
end;
if a > b then begin
a := b;
else begin
b := a;
end;
if a > b then begin
a := b;
end;
else begin
b := a;
end;
if a > b then begin
a := b;
end
else b > a begin
b := a;
end;
begin
end
begin
end
30 слайд
30
II variant. Blok-sxem
Tam olmayan forma
başlanğıc
max:= a;
Daxil et a,b
Çap max
max:= b;
son
да
нет
b > a?
31 слайд
31
II varinat .Proqram
program qq;
var a, b, max: integer;
begin
writeln(‘iki tam ədədi daxil et');
read ( a, b );
max := a;
if b > a then
max := b;
writeln (‘ən böyük ədəd ', max);
end.
Tam olmayan forma
32 слайд
32
Variant 2b. Program
program qq;
var a, b, max: integer;
begin
writeln(‘iki tam ədəd daxil et');
read ( a, b );
max := b;
if ??? then
???
writeln (‘ən böyük ədəd', max);
end.
max := a;
a > b
33 слайд
33
Səhvi tapın.
if a > b then begin
a := b;
else b := a;
if a > b then begin
a := b;
end;
else b := a;
if a > b then
else begin
b := a;
end;
if a > b then
a := b;
else b := a; end;
a := b
end
a := b
if b >= a then
b := a;
34 слайд
34
Tapşırıq
"4": Verilmiş üç ədədin ən böyüyünü tapın.
nümunə:
3 ədəd: daxil edin:
4 15 9
Ən böyüyü 15
"5": Verilmiş beş ədəddən ən böyüyünü tapın.
Пример:
Введите пять чисел:
4 15 9 56 4
Наибольшее число 56
35 слайд
35
Pascal dilində
proqramlaşdırma
Mövzu 3. Mürəkkəb şərtlər
© Polyakov K.Y, 2006-2007
36 слайд
36
Mürəkkəb şərtlər
Tapşırıq. Şirket işə 25-40 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ "подходит" или "не подходит").
Особенность: надо проверить, выполняются ли два условия одновременно.
Можно ли решить известными методами?
?
37 слайд
37
I variant.Alqoritm
başlanğıc
Daxil et x
‘uyğundur'
son
да
нет
x >= 25?
да
нет
x <= 40?
‘uyğun deyil
‘uyğun deyil
38 слайд
38
I variant. Proqram
program qq;
var x: integer;
begin
writeln(‘Yaş həddini daxil et');
read ( x );
if x >= 25 then
if x <= 40 then
writeln (‘uyğundur')
else writeln (‘uyğun deyil')
else
writeln (‘uyğun deyil');
end.
39 слайд
39
II variant.Alqoritm
başlanğıc
Daxil et x
‘uyğundur'
да
нет
x >= 25
и
x <= 40?
‘uyğun deyil
son
40 слайд
40
Вариант 2. Программа
Mürəkkəb şərt
program qq;
var x: integer;
begin
writeln(‘Yaş həddini d/et');
read ( x );
if (x >= 25) and (x <= 40) then
writeln (‘uyğundur')
else writeln (‘uyğun deyil')
end.
41 слайд
41
Mürəkkəb şərt
Mürəkkəb şərt – bir necə sadə şərtlərin məntiqi əməllərlə birləşməsidir:
not – deyil (inkar, inversiya)
and – VƏ (məntiqi vurma, konyuksiya, hər iki şərtin ödənməsi)
or – VƏ YA (məntiqi toplama, dizyunksiya,
heç olazsa bir şərtin ödənməsi)
xor – isklyu ИЛИ (her iki şərtin deyil,ancak bir şərtin ödənnilməsi)
Sadə şərtlər (münasibət)
< <= > >= = <>
Bərabər
Bərabər deyil
42 слайд
42
Mürəkkəb şərtlər
Yerinə yetirilmə ardıcılığı
Mötərizədə olan ifadələr
not
and
or, xor
<, <=, >, >=, =, <>
Əsas qaydalar – hər bir sadə şərt mötərızəyə alınmalıdır
Nümunə:
4 1 6 2 5 3
if not (a > b) or (c <> d) and (b <> a)
then begin
...
end
43 слайд
43
Doğru və yalan a := 2; b := 3; c := 4;
not (a > b)
(a < b) and (b < c)
not (a >= b) or (c = d)
(a < c) or (b < c) and (b < a)
(a < b) xor not (b > c)
x –ın hansı qiymətləri üçün doğrudur:
(x < 6) and (x < 10)
(x < 6) and (x > 10)
(x > 6) and (x < 10)
(x > 6) and (x > 10)
(x < 6) or (x < 10)
(x < 6) or (x > 10)
(x > 6) or (x < 10)
(x > 6) or (x > 10)
Mürəkkəb şərtlər
True
True
FALSE
(-, 6)
(6, 10)
(10, )
(-, 10)
(-, 6) (10,)
(-, )
(6, )
x < 6
x > 10
x < 10
x > 6
True
True
44 слайд
44
Tapşırıq
"4": Ayın nömrəsinə əsasən bu ayın hansı fəslə aid olduğunu çapa verin.
Nümune:
ayın nömrəsini daxil et:
4
yaz
"5": Ввести возраст человека (от 1 до 150 лет) и вывести его вместе с последующим словом "год", "года" или "лет".
Пример:
Введите возраст: Введите возраст:
24 57
Вам 24 года Вам 57 лет
45 слайд
45
Pascal dilində
proqramlaşdırma
Mövzu 4. Dövrler
© Polyakov K.Y, 2006-2007
46 слайд
46
Dövrlər
Dövr – eyni ardıcıllıglı əməliyyatların təkrarlanmasıdır.
Addımlarının sayı məlum olan dövrlər
Addımlarının sayı məlum olmayan dövrlər (şərtə görə dövr)
Tapşırıq. 1-dən 8 -ə qədər tam ədədlərin kvadratlarını və kublarını çapa verin (a –dan b-yə qədər).
Əsas xüsusiyyəti : eyni əməliyyatlar 8 dəfə təkrarlanır
Məlum metodlarla həll etmək olarmı?
?
47 слайд
47
Alqoritm
Başlanğıc
i, i2, i3
son
xeyir
Bəli
i <= 8?
i := 1;
i := i + 1;
i2 := i * i;
i3 := i2 * i;
Dövr dəyişəninə ilkin qiymət verək
Təkrarlanma sayını yoxlayaq
Kvadrat və kubu hesablayırıq
Nəticəni çapa veririk
Növbəti I dəyişəninə keçırık
48 слайд
48
Alqoritm (dövr bloku ile)
başlanğıc
i, i2, i3
son
i2 := i * i;
i3 := i2 * i;
i := 1,8
Dövr bloku
Dövrün gövdəsi
49 слайд
49
Program
program qq;
var i, i2, i3: integer;
begin
for i:=1 to 8 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
end.
Dövr dəyişəni
Ilkin qiymət
Son qiymət
50 слайд
50
Dəyişənin qiymətinin azalması ilə dövr
Tapşırıq. 8-dən 1- ə qədər olan tam ədədlərin kvadratlarını və kubunu çapa verən program yazın (yəni tərisnə).
Əsas xüsusiyyət :dövr parametrinin qiyməti azalmalıdırр.
Həlli:
for i:=8 1 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
downto
51 слайд
51
Dəyışənə görə dövr
for <dəyişən> := <ilkin qiymət> to
<son qiyməti> do begin
{dövrün gövdəsi}
end;
Dəyişənin qiymətinin 1 artırılır :
for <dəyişən> := <ilkin qiymət>
downto
<son qoymət> do begin
{dövrün gövdəsi}
end;
Dəyişənin qiymətinin 1 azaldılır:
52 слайд
52
Dəyişənə görə dövr
Əsas xüsusiyyətlər:
Dövr dəyişəni ancaq tam ədəd olmalıdır (integer)
Addım ancaq 1 ola bilər (to) və ya -1 (downto)
Dövrün gövdəsində bir operator istifadə olunursa , begin- end operatorlarını yazmamak da olar:
Dövrü dəyişənin son qiyməti ilkin qiymətdən kiçik olarsa,onda dövr bir dəfə də olsun yerinə yetirilmir (to) (bu şərt dövr yerine yetirilmədən yoxlanılır)
for i:=1 to 8 do
writeln(‘salam');
53 слайд
53
Parametra görə dövrlər
Əsas xüsusiyyətlər:
İ dövr dəyişənini qiymətini dəyişmək olmaz (niyə?)
Dəyişənin ilkin və son qoyməti dövrün gövdəsində dəyişdirildikdə addımların sayı dəyişməz:
n := 8;
for i:=1 to n do begin
writeln(‘salam');
n := n + 1;
end;
Dövr yoxdur
54 слайд
54
Dövr dəyişənə görə
Əsas xüsusiyyətlər:
Bəzi sisitemlərdə dəyişənin ilkin после выполнения цикла во многих системах устанавливается первое значение переменной цикла, при котором нарушено условие:
for i:=1 to 8 do
writeln('Привет');
writeln('i=', i);
for i:=8 downto 1 do
writeln('Привет');
writeln('i=', i);
i=9
i=0
НЕ ДОКУМЕНТИРОВАНО
?
55 слайд
55
Dövr neçə dəfə təkrarlanacaq
a := 1;
for i:=1 to 3 do a := a+1;
a = 4
a := 1;
for i:=3 to 1 do a := a+1;
a = 1
a := 1;
for i:=1 downto 3 do a := a+1;
a = 1
a := 1;
for i:=3 downto 1 do a := a+1;
a = 4
56 слайд
56
for i:=1 to 9 do begin
if ??? then begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
end;
Addımı necə dəyişək?
Tapşırıq. 1-9 qədər tək ədədlərin kvadrat və kublarını çapa verən program yazın.
Əsas xüsusiyyət: dövr dəyişəninin qiyməti 2 addımı ilə dəyişməlidir
Problem : Pascal dilində addım ancaq 1 və ya -1 ola bilər.
Həlli:
i mod 2 = 1
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
Ancaq tək ədədlər üçün yernə yetirilir
problem ?
?
57 слайд
57
Addımı necə dəyişək? – II
ideya: cəmi 5 ədəd şap olunmalıdır, k dəyişəni 1-dən 5 -ə kimi dəyişəcək , i dəyişəninin ilkin qiyməti 1 olacaq,və hər dəfə dövrdə i dəyişənin qiyməti 2 vahid artacaq
Həlli:
???
for k:=1 to 5 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
???
end;
i := i + 2;
i := 1;
58 слайд
58
Addımı necə dəyişək? – III
İdeya: Cəmi 5 ədəd çapa vermək lazımdır.адо вывести всего 5 чисел, переменная k изменяется от 1 до 5. Зная k, надо рассчитать i.
Решение:
i = 2k-1
for k:=1 to 5 do begin
???
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
i := 2*k – 1;
59 слайд
59
Задания
"4": Ввести a и b и вывести квадраты и кубы чисел от a до b.
Пример:
Введите границы интервала:
4 6
4 16 64
5 25 125
6 36 216
"5": Вывести квадраты и кубы 10 чисел следующей последовательности: 1, 2, 4, 7, 11, 16, …
Пример:
1 1 1
2 4 8
4 16 64
...
46 2116 97336
60 слайд
60
Pascal dilində
proqramlaşdırma
Mövzu 5. Şərtə görə dövrlər
© Polyakov K.Y, 2006-2007
61 слайд
61
Цикл с неизвестным числом шагов
Пример: Отпилить полено от бревна. Сколько раз надо сделать движения пилой?
Задача: Ввести целое число (<2000000) и определить число цифр в нем.
Идея решения: Отсекаем последовательно последнюю цифру, увеличиваем счетчик.
Проблема: Неизвестно, сколько шагов надо сделать.
Решение: Надо остановиться, когда n = 0, т.е. надо делать "пока n <> 0".
62 слайд
62
Алгоритм
начало
count
конец
нет
да
n <> 0?
count := 0;
count := count + 1;
n := n div 10;
обнулить счетчик цифр
ввод n
выполнять "пока n <> 0"
63 слайд
63
Программа
program qq;
var n, count: integer;
begin
writeln('Введите целое число');
read(n);
count := 0;
while n <> 0 do begin
count := count + 1;
n := n div 10;
end;
writeln('В числе ', n, ' нашли ',
count, ' цифр');
end.
while n <> 0 do begin
count := count + 1;
n := n div 10;
end;
, n1: integer;
n1 := n;
n1,
выполнять "пока n <> 0"
Что плохо?
?
64 слайд
64
Цикл с условием
while <условие> do begin
{тело цикла}
end;
Особенности:
можно использовать сложные условия:
если в теле цикла только один оператор, слова begin и end можно не писать:
while (a<b) and (b<c) do begin
{тело цикла}
end;
while a < b do
a := a + 1;
65 слайд
65
Цикл с условием
Особенности:
условие пересчитывается каждый раз при входе в цикл
если условие на входе в цикл ложно, цикл не выполняется ни разу
если условие никогда не станет ложным, программа зацикливается
a := 4; b := 6;
while a > b do
a := a – b;
a := 4; b := 6;
while a < b do
d := a + b;
66 слайд
66
Сколько раз выполняется цикл?
a := 4; b := 6;
while a < b do a := a + 1;
2 раза
a = 6
a := 4; b := 6;
while a < b do a := a + b;
1 раз
a = 10
a := 4; b := 6;
while a > b do a := a + 1;
0 раз
a = 4
a := 4; b := 6;
while a < b do b := a - b;
1 раз
b = -2
a := 4; b := 6;
while a < b do a := a - 1;
зацикливание
67 слайд
67
Замена for на while и наоборот
for i:=1 to 10 do begin
{тело цикла}
end;
i := 1;
while i <= 10 do begin
{тело цикла}
i := i + 1;
end;
for i:=a downto b do
begin
{тело цикла}
end;
i := a;
while i >= b do begin
{тело цикла}
i := i - 1;
end;
Замена while на for возможна только тогда, когда можно заранее рассчитать число шагов цикла.
Замена цикла for на while возможна всегда.
68 слайд
68
Задания
"4": Ввести целое число и найти сумму его цифр.
Пример:
Введите целое число:
1234
Сумма цифр числа 1234 равна 10.
"5": Ввести целое число и определить, верно ли, что в его записи есть две одинаковые цифры.
Пример:
Введите целое число: Введите целое число:
1234 1224
Нет. Да.
69 слайд
69
Последовательности
Примеры:
1, 2, 3, 4, 5, …
1, 2, 4, 7, 11, 16, …
1, 2, 4, 8, 16, 32, …
an = n
a1 = 1, an+1 = an+1
a1 = 1, an+1 = an + n
an = 2n-1
a1 = 1, an+1 = 2an
b1 = 1, bn+1 = bn+1
c1 = 2, cn+1 = 2cn
70 слайд
70
Последовательности
Задача: найти сумму всех элементов последовательности,
которые по модулю больше 0,001:
Элемент последовательности (начиная с №2):
b := b+1;
c := 2*c;
z := -z;
71 слайд
71
Алгоритм
начало
S
конец
нет
да
|a| > 0.001?
S := S + a;
S := 0; b := 1;
c := 2; z := -1;
a := 1;
начальные значения
a := z*b/c;
b := b + 1;
c := 2*c; z := -z;
первый элемент
a := 1;
S := 0;
новый элемент
изменение
Перестановка?
?
72 слайд
72
Программа
program qq;
var b, c, z: integer;
S, a: real;
begin
S := 0; z := -1;
b := 1; c := 2; a := 1;
while abs(a) > 0.001 do begin
S := S + a;
a := z * b / c;
z := - z;
b := b + 1;
c := c * 2;
end;
writeln('S =', S:10:3);
end.
z := - z;
b := b + 1;
c := c * 2;
переход к следующему слагаемому
S := 0; z := -1;
b := 1; c := 2; a := 1;
начальные значения
увеличение суммы
расчет элемента последовательности
73 слайд
73
Задания
"4": Найти сумму элементов последовательности с точностью 0,001:
Ответ:
S = 1.157
"5": Найти сумму элементов последовательности с точностью 0,001:
Ответ:
S = 1.220
74 слайд
74
Цикл с постусловием
Задача: Ввести целое положительное число (<2000000) и определить число цифр в нем.
Проблема: Как не дать ввести отрицательное число или ноль?
Решение: Если вводится неверное число, вернуться назад к вводу данных (цикл!).
Особенность: Один раз тело цикла надо сделать в любом случае => проверку условия цикла надо делать в конце цикла (цикл с постусловием).
Цикл с постусловием – это цикл, в котором проверка условия выполняется в конце цикла.
75 слайд
75
Цикл с постусловием: алгоритм
начало
конец
да
нет
n > 0?
тело цикла
условие ВЫХОДА
блок "типовой процесс"
ввод n
основной
алгоритм
76 слайд
76
Программа
program qq;
var n: integer;
begin
repeat
writeln('Введите положительное число');
read(n);
until n > 0;
... { основной алгоритм }
end.
repeat
writeln('Введите положительное число');
read(n);
until n > 0;
until n > 0;
условие ВЫХОДА
Особенности:
тело цикла всегда выполняется хотя бы один раз
после слова until ("до тех пор, пока не…") ставится условие ВЫХОДА из цикла
77 слайд
77
Сколько раз выполняется цикл?
a := 4; b := 6;
repeat a := a + 1; until a > b;
3 раза
a = 7
a := 4; b := 6;
repeat a := a + b; until a > b;
1 раз
a = 10
a := 4; b := 6;
repeat a := a + b; until a < b;
зацикливание
a := 4; b := 6;
repeat b := a - b; until a < b;
2 раза
b = 6
a := 4; b := 6;
repeat a := a + 2; until a < b;
зацикливание
78 слайд
78
Задания (с защитой от неверного ввода)
"4": Ввести натуральное число и определить, верно ли, что сумма его цифр равна 10.
Пример:
Введите число >= 0: Введите число >= 0:
-234 1233
Нужно положительное число. Нет
Введите число >= 0:
1234
Да
"5": Ввести натуральное число и определить, какие цифры встречаются несколько раз.
Пример:
Введите число >= 0: Введите число >= 0:
2323 1234
Повторяются: 2, 3 Нет повторов.
79 слайд
79
Pascal dilində
proqramlaşdırma
Mövzu 6. Seçim operatoru
© Polyakov K.Y, 2006-2007
80 слайд
80
Оператор выбора
Задача: Ввести номер месяца и вывести количество
дней в этом месяце.
Решение: Число дней по месяцам:
28 дней – 2 (февраль)
30 дней – 4 (апрель), 6 (июнь), 9 (сентябрь), 11 (ноябрь)
31 день – 1 (январь), 3 (март), 5 (май), 7 (июль),
8 (август), 10 (октябрь), 12 (декабрь)
Особенность: Выбор не из двух, а из нескольких
вариантов в зависимости от номера месяца.
Можно ли решить известными методами?
?
81 слайд
81
Алгоритм
начало
конец
оператор выбора
ни один вариант не подошел
ввод M
да
нет
M = 1?
D := 31;
нет
M = 2?
D := 28;
да
нет
M = 12?
D := 31;
да
вывод D
ошибка
82 слайд
82
Программа
program qq;
var M, D: integer;
begin
writeln('Введите номер месяца:');
read ( M );
case M of
2: begin D := 28; end;
4,6,9,11: begin D := 30; end;
1,3,5,7,8,10,12: D := 31;
else D := -1;
end;
if D > 0 then
writeln('В этом месяце ', D, ' дней.')
else
writeln('Неверный номер месяца');
end.
case M of
2: begin D := 28; end;
4,6,9,11: begin D := 30; end;
1,3,5,7,8,10,12: D := 31;
else D := -1;
end;
ни один вариант не подошел
83 слайд
83
Оператор выбора
Особенности:
после case может быть имя переменной или арифметическое выражение целого типа (integer)
или символьного типа (char)
case i+3 of
1: begin a := b; end;
2: begin a := c; end;
end;
var c: char;
...
case c of
'а': writeln('Антилопа');
'б': writeln('Барсук');
else writeln('Не знаю');
end;
84 слайд
84
Оператор выбора
Особенности:
если нужно выполнить только один оператор, слова begin и end можно не писать
нельзя ставить два одинаковых значения
case i+3 of
1: a := b;
1: a := c;
end;
case i+3 of
1: a := b;
2: a := c;
end;
85 слайд
85
Оператор выбора
Особенности:
значения, при которых выполняются одинаковые действия, можно группировать
case i of
1: a := b;
2,4,6: a := c;
10..15: a := d;
20,21,25..30: a := e;
else writeln('Ошибка');
end;
перечисление
диапазон
смесь
86 слайд
86
Что неправильно?
case a of
2: begin a := b;
4: a := c;
end;
case a of
2: a := b
4: a := c
end;
;
case a of
2..5: a := b;
4: a := c;
end;
case a of
0..2: a := b;
6..3: a := c;
end;
3..6:
case a+c/2 of
2: a := b;
4: a := c;
end;
case a of
2: a := b; d := 0;
4: a := c;
end;
begin
end;
87 слайд
87
Задания (с защитой от неверного ввода)
"4": Ввести номер месяца и вывести количество дней в нем, а также число ошибок при вводе.
Пример:
Введите номер месяца: Введите номер месяца:
-2 2
Введите номер месяца: В этом месяце 28 дней.
11 Вы вводили неверно 0 раз.
В этом месяце 30 дней.
Вы вводили неверно 1 раз.
"5": Ввести номер месяца и номер дня, вывести число дней, оставшихся до Нового года.
Пример:
Введите номер месяца:
12
Введите день:
25
До Нового года осталось 6 дней.
88 слайд
88
Pascal dilində proqramlaşdırma
Mövzu 7. Qrafika
© К.Ю. Поляков, 2006-2007
89 слайд
89
Система координат
(0,0)
(x,y)
X
Y
x
y
90 слайд
90
Управление цветом
Цвет и толщина линий, цвет точек:
Pen ( 1, 255, 0, 0 );
Цвет и стиль заливки:
Brush ( 1, 0, 255, 0 );
Цвет текста:
TextColor ( 0, 0, 255 );
толщина линии
R(red)
0..255
G(green)
0..255
B(blue)
0..255
0 – выключить
1 - включить
R
G
B
R
G
B
91 слайд
91
Точки, отрезки и ломаные
(x1, y1)
(x2, y2)
Pen (1, 0, 255, 0); Line (x1, y1, x2, y2);
(x, y)
Pen (1, 0, 0, 255);
Point (x, y);
(x1, y1)
(x2, y2)
(x3, y3)
(x4, y4)
(x5, y5)
Pen (1, 255, 0, 0); MoveTo (x1, y1);
LineTo (x2, y2);
LineTo (x3, y3);
LineTo (x4, y4);
LineTo (x5, y5);
92 слайд
92
Фигуры с заливкой
(x1, y1)
(x2, y2)
Pen (1, 0, 0, 255);
Brush (1, 255, 255, 0);
Rectangle (x1, y1, x2, y2);
(x1, y1)
(x2, y2)
Pen (1, 255, 0, 0);
Brush (1, 0, 255, 0);
Ellipse (x1, y1, x2, y2);
Brush (1, 100, 200, 255);
Fill (x, y);
(x, y)
Как отменить заливку?
?
93 слайд
93
Текст
TextColor (0, 0, 255);
Brush (1, 255, 255, 0);
Font (20, 30, 600);
MoveTo (x, y);
writeln ('Привет!');
Привет!
(x, y)
размер
10 пикселей
угол
поворота
насыщенность:
400 – нормальный
600 – жирный
30о
94 слайд
94
Пример
(200, 50)
(100, 100)
(300, 200)
program qq;
begin
Pen(2, 255, 0, 255);
Brush(1, 0, 0, 255);
Rectangle(100, 100, 300, 200);
MoveTo(100, 100);
LineTo(200, 50);
LineTo(300, 100);
Brush(1, 255, 255, 0);
Fill(200, 75);
Pen(2, 255, 255, 255);
Brush(1, 0, 255, 0);
Ellipse(150, 100, 250, 200);
end.
95 слайд
95
Задания
"4": "Лягушка"
"5": "Корона"
96 слайд
96
Штриховка
(x1, y1)
(x2, y2)
N линий (N=5)
h
Rectangle (x1, y1, x2, y2);
Line( x1+h, y1, x1+h, y2);
Line( x1+2*h, y1, x1+2*h, y2);
Line( x1+3*h, y1, x1+3*h, y2);
...
h := (x2 – x1) / (N + 1);
Rectangle (x1, y1, x2, y2);
x := x1 + h;
for i:=1 to N do begin
Line( round(x), y1, round(x), y2);
x := x + h;
end;
var x, h: real;
x
округление до ближайшего целого
x
97 слайд
97
Как менять цвет?
(x1, y1)
(x2, y2)
Brush ( 1, c, c, c );
Fill ( ???, ??? );
серый: R = G = B
Шаг изменения c:
x
(x-1, y1+1)
var c, hc: integer;
hc := 255 div (N + 1);
c := 0;
for i:=1 to N+1 do begin
Line (round(x), y1, round(x), y2);
Brush (1, c, c, c);
Fill (round(x)-1, y1+1);
x := x + h; c := c + hc;
end;
98 слайд
98
Штриховка
(x1, y1)
(x2, y2)
(x3, y2)
a
h
(x3+a, y1)
Line( x1+h, y1, x1+h-a, y2);
Line( x1+2*h, y1, x1+2*h-a, y2);
Line( x1+3*h, y1, x1+3*h-a, y2);
...
h := (x3 – x2) / (N + 1);
a := x1 – x2;
x := x1 + h;
for i:=1 to N do begin
Line( round(x), y1, round(x-a), y2);
x := x + h;
end;
x
x-a
99 слайд
99
Штриховка
(x1, y1)
(x2, y2)
hx
hy
y
x
y
Line( x1, y1+hy, x1+hx, y1+hy) ;
Line( x1, y1+2*hy, x1+2*hx, y1+2*hy);
Line( x1, y1+3*hy, x1+3*hx, y1+3*hy);
...
hx := (x2 – x1) / (N + 1);
hy := (y2 – y1) / (N + 1);
x := x1 + hx; y := y1 + hy;
for i:=1 to N do begin
Line( x1, round(y), round(x), round(y));
x := x + hx; y := y + hy;
end;
100 слайд
100
Задания
"4": Ввести с клавиатуры число линий штриховки и построить фигуру, залив все области разным цветом.
"5": Ввести с клавиатуры число окружностей и построить фигуру, залив все области разным цветом.
101 слайд
101
Pascal dilində
proqramlaşdırma
Mövzu 8. Funksiyaların qrafikləri
© Polyakov K.Y, 2006-2007
102 слайд
102
Построение графиков функций
Задача: построить график функции y = 3 sin(x) на интервале от 0 до 2π.
Анализ:
максимальное значение ymax = 3 при x = π/2
минимальное значение ymin = -3 при x = 3π/2
Проблема: функция задана в математической системе координат, строить надо на экране, указывая координаты в пикселях.
103 слайд
103
Преобразование координат
(x,y)
X
Y
x
y
Математическая
система координат
Экранная система координат (пиксели)
(xэ,yэ)
xэ
yэ
(0,0)
(0,0)
a
b
k – масштаб (длина изображения единичного отрезка на экране)
xэ = a + kx
yэ = b - ky
104 слайд
104
Программа
2π
h – шаг изменения x
w – длина оси ОХ в пикселях
на экране
оси координат
цикл построения графика
program qq;
const a = 50; b = 200; k = 50;
xmin = 0; xmax = 6.2832;
var x, y, h: real;
xe, ye, w: integer;
begin
w := round((xmax - xmin)*k);
Line(a-10, b, a+w, b);
Line(a, 0, a, 2*b);
x := xmin; h := 0.05;
while x <= xmax do begin
y := 3*sin(x);
xe := a + round(k*x);
ye := b - round(k*y);
Point (xe, ye);
x := x + h;
end;
end.
Что плохо?
?
105 слайд
105
Как соединить точки?
Алгоритм:
Если первая точка
перейти в точку (xэ,yэ)
иначе
отрезок в точку (xэ,yэ)
Программа:
начальное значение
выбор варианта действий
логическая переменная
var first: boolean;
...
begin
...
first := True;
while x <= xmax do begin
...
if first then begin
MoveTo(xe, ye);
first := False;
end
else LineTo(xe, ye);
...
end;
end.
106 слайд
106
Задания
"4": Построить график функции y = x2 на интервале [-3,3].
"5": Построить график
функции (эллипс)
107 слайд
107
Pascal dilində
proqramlaşdırma
Mövzu 9. Proseduralar
© Polyakov K.Y, 2006-2007
108 слайд
108
Процедуры
Задача: Построить фигуру:
Особенность: Три похожие фигуры.
общее: размеры, угол поворота
отличия: координаты, цвет
Можно ли решить известными методами?
?
Сколько координат надо задать?
?
109 слайд
109
Процедуры
Процедура – это вспомогательный алгоритм, который предназначен для выполнения некоторых действий.
Применение:
выполнение одинаковых действий в разных местах программы
разбивка программы (или другой процедуры) на подзадачи для лучшего восприятия
Подзадача1
Подзадача2
Подзадача3
1.1
1.2
1.3
2.1
2.2
2.3
3.1
3.2
3.3
Задача
110 слайд
110
Процедуры
Порядок разработки:
выделить одинаковые или похожие действия (три фигуры)
найти в них общее (размеры, форма, угол поворота) и отличия (координаты, цвет)
отличия записать в виде неизвестных переменных, они будут параметрами процедуры
(x, y)
100
60
(x+100, y)
(x, y-60)
procedure Tr( x, y, r, g, b: integer);
begin
MoveTo(x, y);
LineTo(x, y-60);
LineTo(x+100, y);
LineTo(x, y);
Brush(1, r, g, b);
Fill(x+20, y-20);
end;
заголовок
MoveTo(x, y);
LineTo(x, y-60);
LineTo(x+100, y);
LineTo(x, y);
Brush(1, r, g, b);
Fill(x+20, y-20);
тело процедуры
координаты
цвет
параметры
111 слайд
111
Программа
program qq;
begin
Pen(1, 255, 0, 255);
Tr(100, 100, 0, 0, 255);
Tr(200, 100, 0, 255, 0);
Tr(200, 160, 255, 0, 0);
end.
(100,100)
100
60
процедура
фактические параметры
вызовы процедуры
procedure Tr( x, y, r, g, b: integer);
begin
...
end;
формальные параметры
112 слайд
112
Процедуры
Особенности:
все процедуры расположены выше основной программы
в заголовке процедуры перечисляются формальные параметры, они обозначаются именами, поскольку могут меняться
при вызове процедуры в скобках указывают фактические параметры (числа или арифметические выражения) в том же порядке
procedure Tr( x, y, r, g, b: integer);
Tr (200, 100, 0, 255, 0);
x
y
r
g
b
113 слайд
113
Процедуры
Особенности:
для каждого формального параметра после двоеточия указывают его тип
если однотипные параметры стоят рядом, их перечисляют через запятую
внутри процедуры параметры используются так же, как и переменные
procedure A (x: real; y: integer; z: real);
procedure A (x, z: real; y, k, l: integer);
114 слайд
114
Процедуры
Особенности:
в процедуре можно объявлять дополнительные локальные переменные, остальные процедуры не имеют к ним доступа
program qq;
procedure A(x, y: integer);
var a, b: real;
begin
a := (x + y)/6;
...
end;
begin
...
end.
procedure A(x, y: integer);
var a, b: real;
begin
a := (x + y)/6;
...
end;
локальные переменные
var a, b: real;
115 слайд
115
Параметры-переменные
Задача: составить процедуру, которая меняет местами значения двух переменных.
Особенности:
надо, чтобы изменения, сделанные в процедуре, стали известны вызывающей программе
program qq;
var x, y: integer;
begin
x := 1; y := 2;
Exchange ( x, y );
writeln ( ’x = ’, x, ’ y = ’, y );
end;
procedure Exchange ( a, b: integer );
var c: integer;
begin
c := a; a := b; b := c;
end;
эта процедура работает с копиями параметров
x = 1 y = 2
116 слайд
116
Параметры-переменные
Применение:
таким образом процедура (и функция) может возвращать несколько значений,
Запрещенные варианты вызова
Exchange ( 2, 3 ); { числа }
Exchange ( x+z, y+2 ); { выражения }
procedure Exchange ( a, b: integer );
var c: integer;
begin
c := a; a := b; b := c;
end;
var
параметры могут изменяться
117 слайд
117
Задания
"4": Используя процедуры, построить фигуру.
"5": Используя процедуры, построить фигуру.
a
a
a
0,866∙a
равносторонний треугольник
118 слайд
118
Pascal dilində
proqramlaşdırma
Mövzu 10. Rekursiya
© К.Ю. Поляков, 2006-2007
119 слайд
119
Рекурсивные объекты
Рекурсивный объект – это объект, определяемый через один или несколько таких же объектов.
У попа была собака, он ее любил.
Она съела кусок мяса, он ее убил.
В ямку закопал, надпись написал:
Сказка о попе и собаке
Примеры:
Сказка о попе и собаке:
Факториал:
если
если
Рисунок с рекурсией:
120 слайд
120
Дерево Пифагора
Дерево Пифагора из N уровней – это ствол и отходящие от него симметрично два дерева Пифагора из N-1 уровней, такие что длина их стволов в 2 раза меньше и угол между ними равен 90o.
6 уровней:
Как доказать, что это рекурсивная фигура?
?
121 слайд
121
Дерево Пифагора
Особенности:
когда остановиться?
деревья имеют различный наклон
когда число оставшихся уровней станет равно нулю!
(x1, y1)
(x0, y0)
α
α+45o
α-45o
L
x1 = x0 + L·cos(α)
y1 = y0 – L·sin(α)
наклон "дочерних" деревьев
α + π/4
α – π/4
122 слайд
122
Процедура
угол α
длина ствола
procedure Pifagor(x0, y0, a, L: real;
N: integer);
const k = 0.6; { изменение длины }
var x1, y1: real; { локальные переменные }
begin
if N > 0 then begin
x1 := x0 + L*cos(a);
y1 := y0 - L*sin(a);
Line (round(x0), round(y0),
round(x1), round(y1));
Pifagor (x1, y1, a+pi/4, L*k, N-1);
Pifagor (x1, y1, a-pi/4, L*k, N-1);
end;
end;
рекурсивные вызовы
закончить, если N=0
Рекурсивной называется процедура, вызывающая сама себя.
123 слайд
123
Программа
program qq;
procedure Pifagor(x0, y0, a, L: real;
N: integer);
...
end;
begin
Pifagor (250, 400, pi/2, 150, 8);
end;
угол α
длина ствола
число уровней
x0
y0
Как наклонить дерево вправо на 30o?
?
Pifagor (250, 400, 2*pi/3, 150, 8);
124 слайд
124
"4": Используя рекурсивную процедуру, построить фигуру:
"5": Используя рекурсивную процедуру, построить фигуру:
Задания
125 слайд
125
Pascal dilində
proqramlaşdırma
Mövzu 11. Animasiya
© К.Ю. Поляков, 2006-2007
126 слайд
126
Анимация
Анимация (англ. animation) – оживление изображения на экране.
Задача: внутри синего квадрата 400 на 400 пикселей слева направо двигается желтый квадрат 20 на 20 пикселей. Программа останавливается, если нажата клавиша Esc или квадрат дошел до границы синей области.
Проблема: как изобразить перемещение объекта на экране?
Привязка: состояние объекта задается координатами (x,y)
Принцип анимации:
рисуем объект в точке (x,y)
задержка на несколько миллисекунд
стираем объект
изменяем координаты (x,y)
переходим к шагу 1
127 слайд
127
Как "поймать" нажатие клавиши?
Событие – это изменение в состоянии какого-либо объекта или действие пользователя (нажатие на клавишу, щелчок мышкой).
IsEvent – логическая функция, которая определяет, было ли какое-то действие пользователя.
Event – процедура, которая определяет, какое именно событие случилось.
if IsEvent then begin
Event(k, x, y);
if k = 1 then
writeln('Клавиша с кодом ', x)
else { k = 2 }
writeln('Мышь: x=', x, ' y=', y);
end;
var k, x, y: integer;
128 слайд
128
Как выйти из цикла при нажатии Esc?
program qq;
var stop: boolean;
k,code,i: integer;
begin
stop := False;
repeat
if IsEvent then begin
Event(k, code, i);
if (k = 1) and (code = 27) then
stop := True;
end;
...
until stop;
end;
если что-то произошло...
что произошло?
если нажата клавиша с кодом 27 (Esc), то стоп
True, если надо остановиться
запуск цикла
129 слайд
129
Процедура (рисование и стирание)
procedure Draw(x, y: integer; flag: boolean);
begin
if flag then
Brush(1, 255, 255, 0)
else
Brush(1, 0, 0, 255);
Rectangle(x, y, x+20, y+20);
end;
(x, y)
(x+20, y+20)
Идеи
одна процедура рисует и стирает
стереть = нарисовать цветом фона
границу квадрата отключить (в основной программе)
рисовать (True) или нет (False)?
рисуем: цвет кисти – желтый
стираем: цвет кисти – синий
только заливка!
130 слайд
130
Полная программа
program qq;
var x, y, k, code, i: integer;
stop: boolean;
procedure Draw(x,y: integer; flag: Boolean);
begin
...
end;
begin
Brush(1, 0, 0, 255);
Rectangle(10, 10, 400, 400);
Pen(0, 0, 0, 255);
x := 10; y := 200; stop := false;
repeat
if IsEvent then begin
...
end;
Draw(x, y, True);
Delay(10);
Draw(x, y, False);
x := x + 1;
if x >= 400-20 then stop := true;
until stop;
end.
процедура
начальные условия
выход по клавише Esc
выход при касании границы
синий фон
ждем 10 мс
отключить границу
131 слайд
131
"4": Два квадрата двигаются в противоположном направлении:
"5": Два квадрата двигаются в противоположном направлении и отталкиваются от стенок синего квадрата:
Задания
132 слайд
132
Управление клавишами
Задача: жёлтый квадрат внутри синего квадрата управляется клавишами-стрелками. Коды клавиш:
влево – 37вверх – 38Esc – 27
вправо – 39вниз – 40
Проблема: как изменять направление движения?
Решение:
if {было событие} then begin
if {нажата клавиша} then begin
{получить код клавиши - code}
if code = 37 then x := x – 1;
if code = 38 then y := y – 1;
if code = 39 then x := x + 1;
if code = 40 then y := y + 1;
if code = 27 then stop := True;
end;
end;
IsEvent
Event ( k, code, i);
if k = 1 then begin
case code of
37: x := x – 1; 38: y := y – 1;
39: x := x + 1; 40: y := y + 1;
27: stop := True;
end;
если было нажатие на клавишу, …
133 слайд
133
Программа
program qq;
var x, y, k, code, i: integer;
stop: boolean;
begin
...
repeat
Draw(x, y, True);
Delay(20);
Draw(x, y, False);
until stop;
end.
procedure Draw(x,y: integer; flag: Boolean);
begin
...
end;
if IsEvent then begin
...
end;
Что плохо?
?
процедура
основной цикл
обработка событий
134 слайд
134
Как убрать мигание?
Проблема: даже если не нажата никакая клавиша, квадрат перерисовывается через каждые 20 мс (мигание!)
Что хочется: не перерисовать квадрат, если не было никакого события
Решение: нарисовать квадрат и ждать события
Новая проблема: как ждать события?
Решение новой проблемы: пустой цикл "пока не случилось событие, ничего не делай":
while not IsEvent do;
135 слайд
135
Программа
program qq;
var x, y, k, code, i: integer;
stop: boolean;
begin
...
repeat
Draw(x, y, True);
while not IsEvent do;
until stop;
end.
procedure Draw(x,y: integer; flag: Boolean);
begin
...
end;
Draw(x, y, False);
Event(k, code, i);
...
while not IsEvent do;
процедура
рисуем квадрат
ждем события
только теперь стираем
Что можно улучшить?
?
136 слайд
136
"4": Квадрат двигается при нажатии стрелок, однако не может выйти за границы синего квадрата:
"5": Квадрат непрерывно двигается, при нажатии стрелок меняет направление и отталкивается от стенок синего квадрата:
Задания
137 слайд
137
Вращение
Задача: изобразить модель вращения Земли вокруг Солнца.
Проблема: движение по окружности, как изменять координаты?
Решение: использовать в качестве независимой переменной (менять в цикле) угол поворота α
(x0, y0)
α
L
(x, y)
x = x0 + L·cos(α)
y = y0 – L·sin(α)
138 слайд
138
Процедура
procedure Draw(x, y: integer; flag: boolean);
const r = 10;
begin
if flag then
Brush(1, 100, 100, 255)
else
Brush(1, 0, 0, 0);
Ellipse(x-r, y-r, x+r, y+r);
end;
рисовать (True) или нет (False)?
рисуем: цвет кисти – голубой
стираем: цвет кисти – черный
только заливка!
радиус Земли
(x-r, y-r)
(x,y)
(x+r, y+r)
139 слайд
139
Константы и переменные
program qq;
const rSun = 60; { радиус Солнца}
L = 150; { радиус орбиты Земли }
x0 = 200; { координаты центра Солнца}
y0 = 200;
var x, y, { координаты Земли }
k, code, i: integer; { для Event }
a, ha: real; { угол поворота, шаг }
stop: boolean; { признак остановки программы }
begin
...
end.
procedure Draw(x, y: integer; flag: Boolean);
begin
...
end;
140 слайд
140
Основная программа
program qq;
...
begin
Brush(1, 0, 0, 0); Fill(1,1);
Brush(1, 255, 255, 0);
Ellipse(x0-rSun, y0-rSun, x0+rSun, y0+rSun);
a := 0; ha := 1*pi/180; { начальный угол, шаг 1o за 100 мс}
stop := false;
Pen(0,0,0,0); { отключаем контуры }
repeat
x := round(x0 + L*cos(a));
y := round(y0 - L*sin(a));
Draw(x, y, True);
Delay(100);
Draw(x, y, False);
a := a + ha;
until stop;
end.
залить фон черным
рисуем Солнце
новые координаты
поворот на ha
ждем 100 мс
if IsEvent then begin
Event(k, code, i);
if (k = 1) and (code = 27) then stop := true;
end;
141 слайд
141
"4": Изобразить модель Солнца с двумя планетами, которые вращаются в противоположные стороны:
"5": Изобразить модель системы Солнце-Земля-Луна:
Задания
142 слайд
142
Программирование
на языке Паскаль
Тема 12. Случайные числа
© К.Ю. Поляков, 2006-2007
143 слайд
143
Случайные числа
Случайные явления: везде…
бросание монеты ("орел" или "решка")
падение снега
броуновское движение
помехи при телефонной связи
шум радиоэфира
Случайные числа – это такая последовательность чисел, для которой невозможно предсказать следующее даже зная все предыдущие.
Проблема: как получить на компьютере?
Возможные решения:
использовать внешний источник шумовых помех
с помощью математических преобразований
144 слайд
144
Псевдослучайные числа
Псевдослучайные числа – это такая последовательность чисел, которая обладает свойствами случайных чисел, но каждое следующее число вычисляется по заданной формуле.
Примеры:
Случайные целые числа [0,m) (линейный конгруэнтный метод)
Случайные вещественные числа [0,1]
Литература:
Д. Кнут, Искусство программирования для ЭВМ, т.2.
дробная часть числа
a, c, m - целые числа
простое число
230-1
например, k = 5
145 слайд
145
Распределение случайных чисел
Модель: снежинки падают на отрезок [a,b]
a
b
a
b
распределение
равномерное
неравномерное
Сколько может быть разных распределений?
?
146 слайд
146
Распределение случайных чисел
Особенности:
распределение – это характеристика всей последовательности, а не одного числа
равномерное распределение одно, компьютерные датчики (псевдо)случайных чисел дают равномерное распределение
неравномерных – много
любое неравномерное можно получить с помощью равномерного
a
b
a
b
равномерное распределение
равномерное распределение
147 слайд
147
Təsadüfü ədədlər generatoru
[0,N] intervalında tam ədədlər:
var x: integer;
...
x := random ( 100 ); { interval [0,99] }
[0,1] intervalında həqiqi ədədlər
var x: real;
...
x := random; {interval [0,1] }
148 слайд
148
Случайные числа
Задача: заполнить прямоугольник
400 на 300 пикселей равномерно
точками случайного цвета
Как получить случайные координаты точки?
x := random ( 400 );
y := random ( 300 );
Как добиться равномерности?
обеспечивается автоматически при использовании
функции random
Как получить случайный цвет?
Pen (1, random(256), random(256), random(256));
Point ( x, y );
149 слайд
149
Программа
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
150 слайд
150
"4": Ввести с клавиатуры координаты углов прямоугольника и заполнить его точками случайного цвета.
"5": Заполнить треугольник точками случайного цвета (равномерно или неравномерно).
Подсказка: возьмите равнобедренный треугольник с углом 45о.
Задания
(100,100)
(300,200)
151 слайд
151
Pascal dilində
proqramlaşdırma
Mövzu 13. Функции
© К.Ю. Поляков, 2006-2007
152 слайд
152
Функции
Функция – это вспомогательный алгоритм (подпрограмма), результатом работы которого является некоторое значение.
Примеры:
вычисление , ,
расчет значений по сложным формулам
ответ на вопрос (простое число или нет?)
Зачем?
для выполнения одинаковых расчетов в различных местах программы
для создания общедоступных библиотек функций
В чем отличие от процедур?
?
153 слайд
153
Функции
Задача: составить функцию, которая вычисляет наибольшее из двух значений, и привести пример ее использования
Функция:
формальные параметры
function Max (a, b: integer): integer;
begin
if a > b then Max := a
else Max := b;
end.
это результат функции
154 слайд
154
Функции
Особенности:
заголовок начинается словом function
формальные параметры описываются так же, как и для процедур
можно использовать параметры-переменные
в конце заголовка через двоеточие указывается тип результата
функции располагаются ВЫШЕ основной программы
Max (a, b: integer): integer;
function
function Max (a, b: integer): ;
integer
function qq( a, b: integer; x: real ): real;
a, b: integer; x: real
function Max ( a, b: integer): integer;
var
155 слайд
155
Функции
Особенности:
можно объявлять и использовать локальные переменные
значение, которое является результатом, записывается в переменную, имя которой совпадает с названием функции; объявлять ее НЕ НАДО:
function Max (a, b: integer): integer;
begin
...
end;
Max := a;
function qq (a, b: integer): float;
begin
...
end;
var x, y: float;
В Delphi:
!
Result := a;
156 слайд
156
Программа
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;
c
c
c
Имена переменных, функций и
процедур не должны совпадать!
!
фактические параметры
вызов функции
157 слайд
157
Логические функции
Задача: составить функцию, которая определяет, верно ли, что заданное число – простое.
Особенности:
ответ – логическое значение (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;
Как улучшить?
?
158 слайд
158
Логические функции
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;
вызов функции
результат – логическое значение
перебор только до
условие – это логическое значение
159 слайд
159
Задания
"4": Составить функцию, которая определяет сумму всех чисел от 1 до N и привести пример ее использования.
Пример:
Введите число:
100
сумма = 5050
"5": Составить функцию, которая определяет, сколько зерен попросил положить на N-ую клетку изобретатель шахмат (на 1-ую – 1 зерно, на 2-ую – 2 зерна, на 3-ю – 4 зерна, …)
Пример:
Введите номер клетки:
28
На 28-ой клетке 134217728 зерен.
160 слайд
160
Tapşırıq (II variant)
"4": Составить функцию, которая определяет наибольший общий делитель двух натуральных и привести пример ее использования.
Пример:
Введите два числа:
14 21
НОД(14,21)=7
"5": Составить функцию, которая вычисляет функцию синус как сумму ряда (с точностью 0.001)
Пример:
Введите угол в градусах:
45
sin(45) = 0.707
x в радианах!
161 слайд
161
Конец фильма
Рабочие листы
к вашим урокам
Скачать
Pascal programlaşdırma dilinə aid çox faydalı təqdimat .(rus dilindən müəllfin icazəsi ilə tərcümə olunub).Təqdimatdan istifadə edərək 9-cu sinif pascal dərsslərində istifadı etmək olar.Burada həmçinin bəzi məslələrin həlli də izah olunur.pascalprogramlaşdırmadilinə aid təqdiamt .Təqdimatda pascal dilinin bütün imkanları aydın izah olunur.
Mürəkkəb dövrlərə aid çox maraqlı izahlar var.Tapşırıqlar da çox aydın izah olunur.
Funksiyalar aid vəaltprogramlara aid də çox faydalı materiallar var.
Ümid eidrəm müəllimlərə faydalı bir təqdiamt olacaq.
6 662 127 материалов в базе
Настоящий материал опубликован пользователем Ахмедова Матанат Эльдар. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт
Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.
Удалить материалВаша скидка на курсы
40%Курс профессиональной переподготовки
500/1000 ч.
Курс повышения квалификации
72 ч. — 180 ч.
Курс профессиональной переподготовки
600 ч.
Курс профессиональной переподготовки
500/1000 ч.
Мини-курс
3 ч.
Мини-курс
4 ч.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.