Домашние задания в актированные дни

Юрченко Елена Александровна
Домашнее задание в актированные дни 
Задания  для  самостоятельной  работы обучающихся по информатике  
27 ноября 2014 г.
КИП-113 (4 часа)  
Задание1. Изучить презентацию   (тема 1), подготовить краткий конспект и выучить основные понятия
Задание 2.  Рассмотреть синтаксис и  семантику языка программирования Pascal ABC. Написать программы решения задач из презентации (слайд 27)
ПК-115  (2 часа)  тема: Компьютерные презентации  с использованием мультимедийных технологий 
Задание1.  Подобрать материал  для презентации своей профессии
Задание 2. Подготовить памятку: "Создание эффективной презентации"
ЭДМ-2  (2 часа)  тема: Электронная почта. Подготовка и отправка писем. Передача файлов по FTP
Задание1. Рассмотреть основные возможности  сетевых технологий при передаче информации на расстояние  и характеристики сервиса FTP
Задание 2.  Посетить несколько сайтов   WWW и  FTP, найти отличительные  черты  сайтов.
23 января 2015 г.
ЭДМ-1  тема: Ветвления. Условный оператор. 
Задания для самостоятельной работы во вложенном файле edm-1.docx.

Скачать:

ВложениеРазмер
Файл paskal_osnovy.pptx1.35 МБ
Файл edm-1.docx15.61 КБ

Предварительный просмотр:


Подписи к слайдам:

Слайд 1

1 Программирование на языке Паскаль © К.Ю. Поляков, 2006-2009 Введение Ветвления Сложные условия Циклы Циклы с условием Оператор выбора Графика Графики функций Процедуры Рекурсия Анимация Функции Случайные числа

Слайд 2

2 Программирование на языке Паскаль Тема 1. Введение © К.Ю. Поляков, 2006-2009

Слайд 3

3 Алгоритм Свойства алгоритма дискретность : состоит из отдельных шагов (команд) понятность : должен включать только команды, известные исполнителю (входящие в СКИ) определенность : при одинаковых исходных данных всегда выдает один и тот же результат конечность : заканчивается за конечное число шагов массовость : может применяться многократно при различных исходных данных корректность : дает верное решение при любых допустимых исходных данных Алгоритм – это четко определенный план действий для исполнителя.

Слайд 4

4 Программа Программа – это алгоритм, записанный на каком-либо языке программирования набор команд для компьютера Команда – это описание действий, которые должен выполнить компьютер. откуда взять исходные данные? что нужно с ними сделать? 1970 – язык Паскаль (Н. Вирт) Оператор – это команда языка программирования высокого уровня.

Слайд 5

5 Простейшая программа program qq ; begin { начало программы } end. { конец программы } комментарии в фигурных скобках не обрабатываются Что делает эта программа ? ? название программы

Слайд 6

6 Вывод текста на экран program qq ; begin write('2+'); { без перехода } write ln ('2=?'); { на новую строку } write ln (' Ответ: 4'); end. Протокол : 2+2=? Ответ: 4

Слайд 7

7 Задания «4»: Вывести на экран текст "лесенкой" Вася пошел гулять «5»: Вывести на экран рисунок из букв Ж ЖЖЖ ЖЖЖЖЖ ЖЖЖЖЖЖЖ HH HH ZZZZZ

Слайд 8

8 Переменные Задача. Ввести с клавиатуры два числа и найти их сумму. Протокол : Введите два целых числа 25 30 25+30=55 компьютер пользователь компьютер считает сам! Как ввести числа в память? Где хранить введенные числа ? Как вычислить? Как вывести результат? ?

Слайд 9

9 Программа program qq ; begin { ввести два числа } { вычислить их сумму } { вывести сумму на экран } end. Псевдокод : алгоритм на русском языке с элементами Паскаля. Компьютер не может исполнить псевдокод! !

Слайд 10

10 Переменные Переменная – это величина, имеющая имя, тип и значение. Значение переменной можно изменять во время работы программы. a Значение Имя Поместится? ? Другой тип данных В переменной хранятся данные определенного типа! !

Слайд 11

11 Имена переменных В именах МОЖНО использовать латинские буквы ( A-Z) цифры знак подчеркивания _ заглавные и строчные буквы не различаются В именах НЕЛЬЗЯ использовать русские буквы пробелы скобки, знаки +, =, !, ? и др. имя не может начинаться с цифры Какие имена правильные?? AXby R&B 4Wheel Вася “PesBarbos” TU154 [QuQu] _ABBA A+B

Слайд 12

12 Переменные Типы переменных: integer { целая } real { вещественная } и другие… Объявление переменных: var a, b, c: integer; Выделение места в памяти var iable – переменная тип – целые список имен переменных

Слайд 13

13 Как записать значение в переменную? a := 5; Оператор присваивания При записи нового значения старое стирается! ! 5 Оператор – это команда языка программирова-ния (инструкция). Оператор присваивания – это команда для записи нового значения в переменную.

Слайд 14

14 Блок-схема линейного алгоритма начало конец c := a + b; ввод a , b вывод c блок «начало» блок «ввод» блок «процесс» блок «вывод» блок «конец»

Слайд 15

15 Как ввести значение с клавиатуры read ( a ); Программа ждет, пока пользователь введет значение и нажмет Enter . Введенное значение записывается в переменную a . ! Оператор ввода 5

Слайд 16

16 Ввод значений двух переменных через пробел: 25 30 через Enter : 25 30 a 25 b 30 a 25 b 30 read ( a, b ); Ввод значений двух переменных (через пробел или Enter ).

Слайд 17

17 Оператор вывода { вывод значения переменной a} { вывод значения переменной a и переход на новую строчку } { вывод текста } { вывод текста и значения переменной c} write( a ); write ln ( a ); writeln ( ' Привет! ' ); writeln ( ' Ответ: ', c ); writeln ( a, '+', b, '=', c );

Слайд 18

18 Сложение двух чисел Задача. Ввести два целых числа и вывести на экран их сумму. Простейшее решение: program qq; var a, b, c: integer; begin read ( a, b ); c := a + b; writeln ( c ); end. Что плохо? ?

Слайд 19

19 Полное решение program qq; var a, b, c: integer; begin writeln(' Введите два целых числа '); read ( a, b ); c := a + b; writeln ( a, '+', b, '=', c ); end. Протокол : Введите два целых числа 25 30 25+30=55 компьютер пользователь

Слайд 20

20 Как изменить значение переменной? program qq ; var a, b: integer; begin a := 5; b := a + 2; a := (a + 2)*(b – 3); b := b + 1; end. a ? 5 5 b ? 5+2 7 a 5 7*4 28 Пример: b 7 7+1 8

Слайд 21

21 Арифметические операции + сложение – вычитание * умножение / деление div деление нацело (остаток отбрасывается) mod остаток от деления var a, b: integer; begin a := 7*3 - 4; { 17 } a := a * 5; { 85 } b := a div 10; { 8 } a := a mod 10; { 5 } end.

Слайд 22

22 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. Какие операторы неправильные? имя переменной должно быть слева от знака := целая и дробная часть отделяются точкой нельзя записывать вещественное значение в целую переменную

Слайд 23

23 Порядок выполнения операций вычисление выражений в скобках умножение, деление, div , mod слева направо сложение и вычитание слева направо z := ( 5* a+c )/a*(b-c)/ b; x:= ( 5*c*c-d*( a+b ))/(( c+d )*(d-2*a)); 1 2 4 5 3 6 2 3 5 4 1 10 6 9 8 7

Слайд 24

24 Ручная прокрутка программы 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. a b ? ? 5 7 28 5 3 4 4

Слайд 25

25 Вывод целых чисел program qq ; var a, b: integer; begin a := 15; b := 45; writeln ( a, b ); writeln ( a:4, b:4 ); end. 15 45 1545 символов на число

Слайд 26

26 Вывод вещественных чисел program qq ; var x: real; begin x := 12.345678; writeln ( x ); writeln ( x:10 ); writeln ( x:7:2 ); end. 12.35 всего символов всего символов в дробной части 1.23E+001 1.234568E+001 1,234568∙10 1

Слайд 27

27 Задания «4»: Ввести три числа, найти их сумму и произведение. Пример: Введите три числа: 4 5 7 4+5+7=16 4*5*7=140 «5»: Ввести три числа, найти их сумму, произведение и среднее арифметическое. Пример: Введите три числа: 4 5 7 4+5+7=16 4*5*7=140 (4+5+7) / 3 =5.33

Слайд 28

28 Программирование на языке Паскаль Тема 2. Ветвления © К.Ю. Поляков, 2006-2009

Слайд 29

29 Разветвляющиеся алгоритмы Задача. Ввести два целых числа и вывести на экран наибольшее из них. Идея решения: надо вывести на экран первое число, если оно больше второго, или второе, если оно больше первого. Особенность: действия исполнителя зависят от некоторых условий ( если … иначе … ). Алгоритмы, в которых последовательность шагов зависит от выполнения некоторых условий, называются разветвляющимися.

Слайд 30

30 Вариант 1. Блок-схема начало max:= a; ввод a,b вывод max a > b? max:= b; конец да нет полная форма ветвления блок «решение» Если a = b? ?

Слайд 31

31 Вариант 1. Программа max := a ; max := b ; полная форма условного оператора program qq; var a, b, max: integer; begin writeln(' Введите два целых числа '); read ( a, b ); if a > b then begin end else begin end ; writeln (' Наибольшее число ', max); end.

Слайд 32

32 Условный оператор if < условие > then begin { что делать, если условие верно } end else begin { что делать, если условие неверно } end ; Особенности: перед else НЕ ставится точка с запятой вторая часть ( else …) может отсутствовать (неполная форма) если в блоке один оператор, можно убрать слова begin и end

Слайд 33

33 Что неправильно? 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

Слайд 34

34 Вариант 2 . Блок-схема неполная форма ветвления начало max:= a; ввод a,b вывод max max:= b; конец да нет b > a?

Слайд 35

35 Вариант 2. Программа program qq; var a, b, max: integer; begin writeln(' Введите два целых числа '); read ( a, b ); max := a; if b > a then max := b; writeln (' Наибольшее число ', max); end. неполная форма условного оператора

Слайд 36

36 Вариант 2Б. Программа program qq; var a, b, max: integer; begin writeln(' Введите два целых числа '); read ( a, b ); max := b; if ??? then ??? writeln (' Наибольшее число ', max); end. max := a; a > b

Слайд 37

37 Что неправильно? 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;

Слайд 38

38 Задания «4»: Ввести три числа и найти наибольшее из них. Пример: Введите три числа: 4 15 9 Наибольшее число 15 «5»: Ввести пять чисел и найти наибольшее из них. Пример: Введите пять чисел: 4 15 9 56 4 Наибольшее число 5 6

Слайд 39

39 Программирование на языке Паскаль Тема 3. Сложные условия © К.Ю. Поляков, 2006-2009

Слайд 40

40 Сложные условия Задача. Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ «подходит» или «не подходит» ) . Особенность: надо проверить, выполняются ли два условия одновременно. Можно ли решить известными методами ? ?

Слайд 41

41 Вариант 1. Алгоритм начало ввод x ' подходит ' конец да нет x >= 25? да нет x < = 40? ' не подходит ' ' не подходит '

Слайд 42

42 Вариант 1. Программа program qq; var x: integer; begin writeln(' Введите возраст '); read ( x ); if x >= 25 then if x <= 40 then writeln (' Подходит ') else writeln (' Не подходит ') else writeln (' Не подходит '); end.

Слайд 43

43 Вариант 2. Алгоритм начало ввод x ' подходит ' да нет x >= 25 и x <= 40? ' не подходит ' конец

Слайд 44

44 Вариант 2 . Программа сложное условие program qq; var x: integer; begin writeln(' Введите возраст '); read ( x ); if (x >= 25) and (x <= 40) then writeln (' Подходит ') else writeln (' Не подходит ') end.

Слайд 45

45 Сложные условия Простые условия (отношения) < <= > >= = <> Сложное условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций : not – НЕ (отрицание, инверсия) and – И (логическое умножение, конъюнкция, одновременное выполнение условий) or – ИЛИ (логическое сложение, дизъюнкция, выполнение хотя бы одного из условий) xor – исключающее ИЛИ (выполнение только одного из двух условий, но не обоих) равно не равно

Слайд 46

46 Сложные условия Порядок выполнения (приоритет = старшинство ) выражения в скобках not and or, xor <, <=, >, >=, =, <> Особенность – каждое из простых условий обязательно заключать в скобки. Пример 4 1 6 2 5 3 if not (a > b) or (c <> d) and (b <> a) then begin ... end

Слайд 47

47 Истинно или ложно при 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 истинны условия: (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) Сложные условия True True FALSE (- ; 6)  (6 ; 10) (10; ) (- ; 10) (- ; 6)  (10; ) (- ; ) (6; ) x < 6 x > 10 x < 10 x > 6 True True

Слайд 48

48 Задания «4»: Ввести номер месяца и вывести название времени года. Пример: Введите номер месяца: 4 весна «5»: Ввести возраст человека (от 1 до 150 лет) и вывести его вместе с последующим словом «год», «года» или «лет». Пример: Введите возраст: Введите возраст: 24 57 Вам 24 года Вам 57 лет

Слайд 49

49 Программирование на языке Паскаль Тема 4. Циклы © К.Ю. Поляков, 2006-2009

Слайд 50

50 Циклы Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным числом шагов цикл с неизвестным числом шагов (цикл с условием) Задача. Вывести на экран 5 раз слово «Привет». Особенность: одинаковые действия выполняются 5 раз. Можно ли решить известными методами ? ?

Слайд 51

51 Циклы program qq; begin writeln (' Привет '); writeln (' Привет '); writeln (' Привет '); writeln (' Привет '); writeln (' Привет '); end. Что плохо ? ?

Слайд 52

52 Циклы program qq; begin { сделай 5 раз } writeln (' Привет '); end. Как отсчитать ровно 5 раз ? ? Как запоминать, сколько раз уже сделали ? ? i := i + 1;

Слайд 53

53 Алгоритм начало Привет! конец да нет i = 5 ? i := 0 ; i := i + 1; еще не сделали ни одного раза проверить, все ли сделали вывод на экран считаем очередной шаг

Слайд 54

54 Циклы program qq; var i: integer; begin for i :=1 to 5 do writeln (' Привет '); end. «Для всех i от 1 до 5 делай …» for i :=1 to 5 do Если в цикле более одного оператора: for i :=1 to 5 do begin write(' Привет '); writeln(' , Вася! '); end; begin end; Что получится ? ?

Слайд 55

55 Циклы Задача. Вывести на экран квадраты и кубы целых чисел от 1 до 8 (от a до b ). Особенность: одинаковые действия выполняются 8 раз. Можно ли решить известными методами ? ? i := 1; { очередное число } i2 := i * i ; { его квадрат } i3 := i2* i ; { куб } writeln (i:4, i2:4, i3:4); i := 2 ; ... А если начальное и конечное значения вводятся с клавиатуры ? ?

Слайд 56

56 Алгоритм начало i, i2, i3 конец нет да i <= 8? i := 1; i := i + 1; i2 := i * i; i3 := i2 * i; задать начальное значение переменной цикла проверить, все ли сделали вычисляем квадрат и куб вывод результата перейти к следующему i

Слайд 57

57 Алгоритм ( с блоком «цикл») начало i, i2, i3 конец i2 := i * i; i3 := i2 * i; i := 1,8 блок «цикл» тело цикла

Слайд 58

58 Программа 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. переменная цикла начальное значение конечное значение

Слайд 59

59 Цикл с уменьшением переменной Задача. Вывести на экран квадраты и кубы целых чисел от 8 до 1 (в обратном порядке). Особенность: переменная цикла должна уменьшаться. Решение: for i:=8 1 do begin i2 := i*i; i3 := i2*i; writeln(i:4, i2:4, i3:4); end; down to

Слайд 60

60 Цикл с переменной for < переменная > := < начальное значение > to < конечное значение > do begin { тело цикла } end; Увеличение переменной на 1: for < переменная > := < начальное значение > downto < конечное значение > do begin { тело цикла } end; Уменьшение переменной на 1:

Слайд 61

61 Цикл с переменной Особенности: переменная цикла может быть только целой ( integer ) шаг изменения переменной цикла всегда равен 1 ( to ) или -1 ( downto ) если в теле цикла только один оператор, слова begin и end можно не писать: если конечное значение меньше начального, цикл ( to ) не выполняется ни разу ( проверка условия в начале цикла, цикл с предусловием) for i:= 1 to 8 do writeln( ' Привет ' );

Слайд 62

62 Цикл с переменной Особенности: в теле цикла не разрешается изменять переменную цикла (почему?) при изменении начального и конечного значения внутри цикла количество шагов не изменится: n := 8; for i:= 1 to n do begin writeln( ' Привет ' ); n := n + 1; end; нет зацикливания

Слайд 63

63 Цикл с переменной Особенности: после выполнения цикла во многих системах устанавливается первое значение переменной цикла, при котором нарушено условие: for i:= 1 to 8 do writeln( ' Привет ' ); writeln ( 'i=', i ) ; for i:= 8 d ownto 1 do writeln( ' Привет ' ); writeln ( 'i=', i ) ; i=9 i=0 НЕ ДОКУМЕНТИРОВАНО

Слайд 64

64 Сколько раз выполняется цикл? 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 down to 3 do a := a+1; a = 1 a := 1; for i:= 3 down to 1 do a := a+1; a = 4

Слайд 65

65 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; Как изменить шаг? Задача. Вывести на экран квадраты и кубы нечётных целых чисел от 1 до 9. Особенность: переменная цикла должна увеличиваться на 2. Проблема: в Паскале шаг может быть 1 или -1. Решение: i mod 2 = 1 i2 := i*i; i3 := i2*i; writeln(i:4, i2:4, i3:4); выполняется только для нечетных i Что плохо ? ?

Слайд 66

66 Как изменить шаг? – II Идея: Надо вывести всего 5 чисел, переменная k изменяется от 1 до 5. Начальное значение i равно 1, с каждым шагом цикла i увеличивается на 2. Решение: ??? 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;

Слайд 67

67 Как изменить шаг? – III Идея: Надо вывести всего 5 чисел, переменная k изменяется от 1 до 5. Зная k , надо рассчитать i . Решение: k 1 2 3 4 5 i 1 3 5 7 9 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;

Слайд 68

68 Задания «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

Слайд 69

69 Программирование на языке Паскаль Тема 5. Циклы с условием © К.Ю. Поляков, 2006-2009

Слайд 70

70 Цикл с неизвестным числом шагов Пример: Отпилить полено от бревна. Сколько раз надо сделать движения пилой? Задача: Ввести целое число ( <2000000) и определить число цифр в нем. Идея решения: Отсекаем последовательно последнюю цифру, увеличиваем счетчик. Проблема: Неизвестно, сколько шагов надо сделать. Решение: Надо остановиться, когда n = 0 , т.е. надо делать «пока n <> 0 » . n count 123 0 12 1 1 2 0 3

Слайд 71

71 Алгоритм начало count конец нет да n <> 0? count := 0 ; count := count + 1; n := n div 10; обнулить счетчик цифр ввод n выполнять «пока n <> 0 »

Слайд 72

72 Программа 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 » Что плохо ? ?

Слайд 73

73 Цикл с условием while < условие > do begin { тело цикла } end; Особенности: можно использовать сложные условия: если в теле цикла только один оператор, слова begin и end можно не писать: while (a < b) and (b < c) d o begin { тело цикла } end; while a < b d o a := a + 1;

Слайд 74

74 Цикл с условием Особенности: условие пересчитывается каждый раз при входе в цикл если условие на входе в цикл ложно, цикл не выполняется ни разу если условие никогда не станет ложным, программа зацикливается a := 4; b := 6; while a > b d o a := a – b; a := 4; b := 6; while a < b d o d := a + b;

Слайд 75

75 Сколько раз выполняется цикл ? a := 4; b := 6; while a < b d o a := a + 1; 2 раза a = 6 a := 4; b := 6; while a < b d o a := a + b ; 1 раз a = 10 a := 4; b := 6; while a > b d o a := a + 1; 0 раз a = 4 a := 4; b := 6; while a < b d o b := a - b; 1 раз b = -2 a := 4; b := 6; while a < b d o a := a - 1; зацикливание

Слайд 76

76 Замена for на while и наоборот for i:=1 to 10 d o begin { тело цикла } end; i := 1; while i <= 10 d o begin { тело цикла } i := i + 1; end; for i:=a downto b d o begin { тело цикла } end; i := a; while i > = b d o begin { тело цикла } i := i - 1; end; Замена while на for возможна только тогда, когда можно заранее рассчитать число шагов цикла . Замена цикла for на while возможна всегда .

Слайд 77

77 Задания «4»: Ввести целое число и найти сумму его цифр. Пример: Введите целое число: 1234 Сумма цифр числа 1234 равна 10. «5»: Ввести целое число и определить, верно ли, что в его записи есть две одинаковые цифры. Пример: Введите целое число: Введите целое число: 1234 1224 Нет. Да.

Слайд 78

78 Последовательности Примеры: 1 , 2, 3, 4, 5, … 1, 2, 4, 7, 11, 16, … 1, 2, 4, 8 , 1 6 , 32 , … a n = n a 1 = 1, a n +1 = a n +1 a 1 = 1, a n +1 = a n + n a n = 2 n-1 a 1 = 1, a n +1 = 2 a n b 1 = 1, b n +1 = b n +1 c 1 = 2, c n +1 = 2 c n

Слайд 79

79 Последовательности Задача: найти сумму всех элементов последовательности, которые по модулю больше 0,001: Элемент последовательности (начиная с №2): n 1 2 3 4 5 ... b 1 2 3 4 5 ... c 2 4 8 16 32 ... z -1 1 -1 1 -1 ... b := b+1; c := 2*c; z := -z;

Слайд 80

80 Алгоритм начало 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 ; новый элемент изменение Перестановка ? ?

Слайд 81

81 Программа 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; начальные значения увеличение суммы расчет элемента последовательности

Слайд 82

82 Задания «4»: Найти сумму элементов последовательности с точностью 0,001: Ответ: S = 1.157 «5»: Найти сумму элементов последовательности с точностью 0,001: Ответ: S = 1.220

Слайд 83

83 Цикл с постусловием Задача: Ввести целое положительное число ( <2000000) и определить число цифр в нем. Проблема: Как не дать ввести отрицательное число или ноль? Решение: Если вводится неверное число, вернуться назад к вводу данных (цикл!). Особенность: Один раз тело цикла надо сделать в любом случае = > проверку условия цикла надо делать в конце цикла (цикл с постусловием ). Цикл с постусловием – это цикл, в котором проверка условия выполняется в конце цикла.

Слайд 84

84 Цикл с постусловием: алгоритм начало конец да нет n > 0? тело цикла условие ВЫХОДА блок «типовой процесс» ввод n основной алгоритм

Слайд 85

85 Программа 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 ("до тех пор, пока не…") ставится условие ВЫХОДА из цикла

Слайд 86

86 Сколько раз выполняется цикл ? 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; зацикливание

Слайд 87

87 Задания (с защитой от неверного ввода) «4»: Ввести натуральное число и определить, верно ли, что сумма его цифр равна 10. Пример: Введите число >= 0 : Введите число >= 0 : -234 1233 Нужно положительное число. Нет Введите число >= 0 : 1234 Да «5»: Ввести натуральное число и определить, какие цифры встречаются несколько раз. Пример: Введите число >= 0 : Введите число >= 0 : 2323 1234 Повторяются: 2, 3 Нет повторов.

Слайд 88

88 Программирование на языке Паскаль Тема 6 . Оператор выбора © К.Ю. Поляков, 2006-2009

Слайд 89

89 Оператор выбора Задача: Ввести номер месяца и вывести количество дней в этом месяце. Решение: Число дней по месяцам: 28 дней – 2 (февраль) 30 дней – 4 (апрель), 6 (июнь), 9 (сентябрь), 11 (ноябрь) 31 день – 1 (январь), 3 (март), 5 (май), 7 (июль), 8 (август), 10 (октябрь), 12 (декабрь) Особенность: Выбор не из двух, а из нескольких вариантов в зависимости от номера месяца. Можно ли решить известными методами ? ?

Слайд 90

90 Алгоритм начало конец выбор ни один вариант не подошел ввод M да нет M = 1? D := 31; нет M = 2? D := 28; да нет M = 12? D := 31; да вывод D ошибка

Слайд 91

91 Программа 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; ни один вариант не подошел

Слайд 92

92 Оператор выбора Особенности: после 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;

Слайд 93

93 Оператор выбора Особенности: если нужно выполнить только один оператор, слова begin и end можно не писать нельзя ставить два одинаковых значения case i+3 of 1: a := b; 1: a := c; end; case i+3 of 1: a := b; 2 : a := c; end;

Слайд 94

94 Оператор выбора Особенности: значения, при которых выполняются одинаковые действия, можно группировать case i of 1: a := b; 2,4 ,6 : a := c; 10..15: a := d; 20,21,25..30: a := e; else writeln(' Ошибка '); end; перечисление диапазон смесь

Слайд 95

95 Что неправильно ? 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;

Слайд 96

96 Задания (с защитой от неверного ввода) «4»: Ввести номер месяца и вывести количество дней в нем, а также число ошибок при вводе. Пример: Введите номер месяца: Введите номер месяца: -2 2 Введите номер месяца: В этом месяце 28 дней. 1 1 Вы вводили неверно 0 раз. В этом месяце 30 дней. Вы вводили неверно 1 раз. «5»: Ввести номер месяца и номер дня, вывести число дней, оставшихся до Нового года. Пример: Введите номер месяца: 12 Введите день: 25 До Нового года осталось 6 дней.

Слайд 97

97 Программирование на языке Паскаль Тема 7. Графика © К.Ю. Поляков, 2006-2009

Слайд 98

98 Система координат (0,0) ( x , y ) X Y x y

Слайд 99

99 Управление цветом Цвет и толщина линий, цвет точек: 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

Слайд 100

100 Точки, отрезки и ломаные ( x 1 , y 1 ) ( x 2 , y 2 ) Pen (1, 0, 255, 0) ; Line (x1, y1, x2, y2) ; ( x , y ) Pen (1, 0, 0, 255) ; Point (x, y) ; ( x 1 , y 1 ) ( x 2 , y 2 ) ( x 3 , y 3 ) ( x 4 , y 4 ) ( x 5 , y 5 ) Pen (1, 255, 0, 0) ; MoveTo (x1, y1) ; LineTo (x2, y2) ; LineTo (x3, y3) ; LineTo (x4, y4) ; LineTo (x5, y5) ;

Слайд 101

101 Фигуры с заливкой ( x 1 , y 1 ) ( x 2 , y 2 ) Pen (1, 0, 0, 255) ; Brush (1, 255, 255, 0) ; Rectangle (x1, y1, x2, y2) ; ( x 1 , y 1 ) ( x 2 , y 2 ) 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 ) Как отменить заливку ? ?

Слайд 102

102 Текст TextColor (0, 0, 255) ; Brush (1, 255, 255, 0) ; Font (20, 30 , 600 ) ; MoveTo (x, y) ; writeln (' Привет! ') ; Привет! ( x , y ) размер 10 пикселей угол поворота насыщенность : 400 – нормальный 600 – жирный 30 о

Слайд 103

103 Пример (200, 50) (100, 100) (300, 200) p rogram qq; b egin 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.

Слайд 104

104 Задания «4»: «Лягушка» «5»: «Корона»

Слайд 105

105 Штриховка ( x 1 , y 1 ) ( x 2 , y 2 ) 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) ; ... Rectangle (x1, y1, x2, y2) ; h := (x2 – x1) / (N + 1); 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

Слайд 106

106 Штриховка (программа) ( x 1 , y 1 ) ( x 2 , y 2 ) h program qq ; var i , x1, x2, y1, y2, N: integer; h, x: real; begin x1 := 100; y1 := 100; x2 := 300; y2 := 200; N := 10; Rectangle (x1, y1, x2, y2); h := (x2 - x1) / (N + 1); x := x1 + h; for i :=1 to N do begin Line(round(x), y1, round(x), y2); x := x + h; end; end. N

Слайд 107

107 Как менять цвет? ( x 1 , y 1 ) ( x 2 , y 2 ) Brush ( 1, c, c, c ); Fill ( ??? , ??? ); серый: R = G = B Шаг изменения c: x ( x-1 , y 1 +1 ) hc := 255 div N; 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; var c, hc: integer;

Слайд 108

108 Штриховка ( x 1 , y 1 ) ( x 2 , y 2 ) ( x 3 , y 2 ) a h ( x 3 + a , y 1 ) 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

Слайд 109

109 Штриховка ( x 1 , y 1 ) ( x 2 , y 2 ) h x h y 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;

Слайд 110

110 Задания «4»: Ввести с клавиатуры число линий и построить фигуру : «5»: Ввести с клавиатуры число линий и построить фигуру:

Слайд 111

111 Задания «4»: Ввести с клавиатуры число линий штриховки и построить фигуру, залив все области разным цветом. «5»: Ввести с клавиатуры число окружностей и построить фигуру, залив все области разным цветом.

Слайд 112

112 Программирование на языке Паскаль Тема 8 . Графики функций © К.Ю. Поляков, 2006-2009

Слайд 113

113 Построение графиков функций Задача: построить график функции y = 3 sin(x ) на интервале от 0 до 2 π . Анализ: максимальное значение y max = 3 при x = π /2 минимальное значение y min = -3 при x = 3 π /2 Проблема: функция задана в математической системе координат, строить надо на экране, указывая координаты в пикселях .

Слайд 114

114 Преобразование координат ( x , y ) X Y x y Математическая система координат Экранная система координат (пиксели) ( x э , y э ) x э y э ( 0 , 0 ) ( 0 , 0 ) a b k – масштаб (длина изображения единичного отрезка на экране) x э = a + kx y э = b - ky

Слайд 115

115 Программа 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. Что плохо ? ?

Слайд 116

116 Как соединить точки? Алгоритм: Если первая точка перейти в точку ( 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.

Слайд 117

117 Задания «4»: Построить график функции y = x 2 на интервале [-3,3]. «5»: Построить график функции ( эллипс)

Слайд 118

118 Программирование на языке Паскаль Тема 9. Процедуры © К.Ю. Поляков, 2006-2009

Слайд 119

119 Процедуры Задача: Построить фигуру: Особенность: Три похожие фигуры. общее : размеры, угол поворота отличия : координаты, цвет Можно ли решить известными методами ? ? Сколько координат надо задать ? ?

Слайд 120

120 Процедуры Процедура – это вспомогательный алгоритм, который предназначен для выполнения некоторых действий. Применение: выполнение одинаковых действий в разных местах программы разбивка программы (или другой процедуры) на подзадачи для лучшего восприятия Подзадача1 Подзадача 2 Подзадача3 1.1 1.2 1.3 2 .1 2 .2 2 .3 3 .1 3 .2 3 .3 Задача

Слайд 121

121 Процедуры Порядок разработки: выделить одинаковые или похожие действия (три фигуры) найти в них общее (размеры, форма, угол поворота) и отличия (координаты, цвет) отличия записать в виде неизвестных переменных, они будут параметрами процедуры ( 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); тело процедуры координаты цвет параметры

Слайд 122

122 Программа 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; формальные параметры процедура

Слайд 123

123 Процедуры Особенности: все процедуры расположены выше основной программы в заголовке процедуры перечисляются формальные параметры, они обозначаются именами, поскольку могут меняться при вызове процедуры в скобках указывают фактические параметры (числа или арифметические выражения) в том же порядке procedure Tr( x, y, r, g, b: integer); Tr (200, 100, 0, 255, 0); x y r g b

Слайд 124

124 Процедуры Особенности: для каждого формального параметра после двоеточия указывают его тип если однотипные параметры стоят рядом, их перечисляют через запятую внутри процедуры параметры используются так же, как и переменные procedure A (x: real; y: integer; z: real); procedure A (x, z: real; y, k, l: integer);

Слайд 125

125 Процедуры Особенности: в процедуре можно объявлять дополнительные локальные переменные, остальные процедуры не имеют к ним доступа 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;

Слайд 126

126 Параметры-переменные Задача: составить процедуру, которая меняет местами значения двух переменных. Особенности: надо, чтобы изменения, сделанные в процедуре, стали известны вызывающей программе 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

Слайд 127

127 Параметры-переменные Применение: таким образом процедура (и функция) может возвращать несколько значений, Запрещенные варианты вызова 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 параметры могут изменяться

Слайд 128

128 Задания «4»: Используя процедуры, построить фигуру. «5»: Используя процедуры, построить фигуру. a a a 0,866 ∙ a равносторонний треугольник

Слайд 129

129 Программирование на языке Паскаль Тема 10 . Рекурсия © К.Ю. Поляков, 2006-2009

Слайд 130

130 Рекурсивные объекты Рекурсивный объект – это объект, определяемый через один или несколько таких же объектов. У попа была собака, он ее любил. Она съела кусок мяса, он ее убил. В ямку закопал, надпись написал: Сказка о попе и собаке Примеры: Сказка о попе и собаке: Факториал: если если Рисунок с рекурсией:

Слайд 131

131 Дерево Пифагора Дерево Пифагора из N уровней – это ствол и отходящие от него симметрично два дерева Пифагора из N-1 уровней , такие что длина их стволов в 2 раза меньше и угол между ними равен 90 o . 6 уровней: Как доказать, что это рекурсивная фигура ? ?

Слайд 132

132 Дерево Пифагора Особенности: когда остановиться? деревья имеют различный наклон когда число оставшихся уровней станет равно нулю! ( x 1 , y 1 ) ( x 0 , y 0 ) α α +45 o α - 45 o L x 1 = x 0 + L · cos ( α ) y 1 = y 0 – L · sin( α ) наклон «дочерних» деревьев α + π /4 α – π /4

Слайд 133

133 Процедура угол α длина ствола 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 Рекурсивной называется процедура, вызывающая сама себя.

Слайд 134

134 Программа program qq; procedure Pifagor(x0, y0, a, L: real; N: integer); ... end; begin Pifagor (250, 400, pi/2, 150, 8); end . угол α длина ствола число уровней x 0 y 0 Как наклонить дерево влево на 30 o ? ? Pifagor (250, 400, 2* pi/ 3 , 150, 8);

Слайд 135

135 «4»: Используя рекурсивную процедуру, построить фигуру: «5»: Используя рекурсивную процедуру, построить фигуру: Задания

Слайд 136

136 Программирование на языке Паскаль Тема 1 1. Анимация © К.Ю. Поляков, 2006-2009

Слайд 137

137 Анимация Анимация (англ. animation ) – оживление изображения на экране. Задача : внутри синего квадрата 400 на 400 пикселей слева направо двигается желтый квадрат 20 на 20 пикселей. Программа останавливается, если нажата клавиша Esc или квадрат дошел до границы синей области. Проблема : как изобразить перемещение объекта на экране? Привязка: состояние объекта задается координатами ( x,y) Принцип анимации: рисуем объект в точке ( x,y) задержка на несколько миллисекунд стираем объект изменяем координаты ( x,y ) переходим к шагу 1

Слайд 138

138 Как "поймать" нажатие клавиши? Событие – это изменение в состоянии какого-либо объекта или действие пользователя (нажатие на клавишу, щелчок мышкой). 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;

Слайд 139

139 Как выйти из цикла при нажатии 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 , если надо остановиться запуск цикла

Слайд 140

140 Процедура (рисование и стирание) 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 ) ? рисуем: цвет кисти – желтый стираем: цвет кисти – синий только заливка!

Слайд 141

141 Полная программа 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 мс отключить границу

Слайд 142

142 «4»: Два квадрата двигаются в противоположном направлении: «5»: Два квадрата двигаются в противоположном направлении и отталкиваются от стенок синего квадрата: Задания

Слайд 143

143 Управление клавишами Задача : жёлтый квадрат внутри синего квадрата управляется клавишами-стрелками. Коды клавиш: влево – 37 вверх – 38 Esc – 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; если было нажатие на клавишу, …

Слайд 144

144 Программа 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; Что плохо ? ? процедура основной цикл обработка событий

Слайд 145

145 Как убрать мигание? Проблема : даже если не нажата никакая клавиша, квадрат перерисовывается через каждые 20 мс (мигание!) Что хочется : не перерисовать квадрат, если не было никакого события Решение : нарисовать квадрат и ждать события Новая проблема : как ждать события? Решение новой проблемы : пустой цикл " пока не случилось событие , ничего не делай ": while not IsEvent do;

Слайд 146

146 Программа 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; процедура рисуем квадрат ждем события только теперь стираем Что можно улучшить ? ?

Слайд 147

147 «4»: Квадрат двигается при нажатии стрелок, однако не может выйти за границы синего квадрата: «5»: Квадрат непрерывно двигается, при нажатии стрелок меняет направление и отталкивается от стенок синего квадрата: Задания

Слайд 148

148 Вращение Задача : изобразить модель вращения Земли вокруг Солнца. Проблема : движение по окружности, как изменять координаты? Решение : использовать в качестве независимой переменной (менять в цикле) угол поворота α ( x 0 , y 0 ) α L ( x , y ) x = x 0 + L · cos ( α ) y = y 0 – L · sin( α )

Слайд 149

149 Процедура 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 )

Слайд 150

150 Константы и переменные 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;

Слайд 151

151 Основная программа 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; { начальный угол, шаг 1 o за 1 00 мс } 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;

Слайд 152

152 «4»: Изобразить модель Солнца с двумя планетами, которые вращаются в противоположные стороны: «5»: Изобразить модель системы Солнце-Земля-Луна: Задания

Слайд 153

153 Программирование на языке Паскаль Тема 1 2. Функции © К.Ю. Поляков, 2006-2009

Слайд 154

154 Функции Функция – это вспомогательный алгоритм (подпрограмма), результатом работы которого является некоторое значение. Примеры : вычисление , , расчет значений по сложным формулам ответ на вопрос (простое число или нет?) Зачем? для выполнения одинаковых расчетов в различных местах программы для создания общедоступных библиотек функций В чем отличие от процедур ? ?

Слайд 155

155 Функции Задача: составить функцию, которая вычисляет наибольшее из двух значений, и привести пример ее использования Функция: формальные параметры function Max (a, b: integer): integer; begin if a > b then Max := a else Max := b; end; это результат функции

Слайд 156

156 Функции Особенности: заголовок начинается словом 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

Слайд 157

157 Функции Особенности: можно объявлять и использовать локальные переменные значение, которое является результатом, записывается в переменную, имя которой совпадает с названием функции ; объявлять ее НЕ НАДО : function Max (a, b: integer): integer; begin ... end; Max := a; function qq (a, b: integer): float; begin ... end; var x, y: real; В Delphi: ! Result := a;

Слайд 158

158 Программа 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 Имена переменных, функций и процедур не должны совпадать! ! фактические параметры вызов функции

Слайд 159

159 Задания «4»: Составить функцию, которая определяет сумму всех чисел от 1 до N и привести пример ее использования. Пример: Введите число: 1 00 сумма = 5050 «5»: Составить функцию, которая определяет, сколько зерен попросил положить на N- ую клетку изобретатель шахмат (на 1-ую – 1 зерно, на 2-ую – 2 зерна, на 3-ю – 4 зерна, …) Пример: Введите номер клетки: 28 На 28-ой клетке 134217728 зерен.

Слайд 160

160 Задания (вариант 2) «4»: Составить функцию, которая определяет наибольший общий делитель двух натуральных и привести пример ее использования. Пример: Введите два числа: 14 21 НОД(14,21)=7 «5»: Составить функцию, которая вычисляет функцию синус как сумму ряда (с точностью 0.001) Пример: Введите угол в градусах: 45 sin(45) = 0.707 x в радианах!

Слайд 161

161 Логические функции Задача: составить функцию, которая определяет, верно ли, что заданное число – простое. Особенности: ответ – логическое значение ( 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; Как улучшить ? ?

Слайд 162

162 Логические функции 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 begin if N mod i = 0 then count := count + 1; i := i + 1; end; Prime := (count = 0); end; вызов функции результат – логическое значение перебор только до условие – это логическое значение

Слайд 163

163 Задания «4»: Составить функцию, которая определяет , верно ли, что сумма его цифр – четное число. Пример: Введите число: 1 36 Сумма цифр четная. «5»: Составить функцию, которая определяет, верно ли, что в заданном числе все цифры стоят по возрастанию. Пример: Введите число: 258 Верно. Введите число: 528 Неверно. Введите число: 245 Сумма цифр нечетная.

Слайд 164

164 Программирование на языке Паскаль Тема 1 3. Случайные числа © К.Ю. Поляков, 2006-2009

Слайд 165

165 Случайные числа Случайные явления : везде… бросание монеты («орел» или «решка») падение снега броуновское движение помехи при телефонной связи шум радиоэфира Случайные числа – это такая последовательность чисел, для которой невозможно предсказать следующее даже зная все предыдущие. Проблема : как получить на компьютере? Возможные решения : использовать внешний источник шумовых помех с помощью математических преобразований

Слайд 166

166 Псевдослучайные числа Псевдослучайные числа – это такая последовательность чисел, которая обладает свойствами случайных чисел, но каждое следующее число вычисляется по заданной формуле. Примеры : Случайные целые числа [0,m) (линейный конгруэнтный метод) Случайные вещественные числа [0,1] Литература : Д. Кнут, Искусство программирования для ЭВМ, т.2. дробная часть числа a, c, m - целые числа простое число 2 30 -1 например, k = 5

Слайд 167

167 Распределение случайных чисел Модель : снежинки падают на отрезок [a,b] a b a b распределение равномерное неравномерное Сколько может быть разных распределений ? ?

Слайд 168

168 Распределение случайных чисел Особенности : распределение – это характеристика всей последовательности , а не одного числа равномерное распределение одно, компьютерные датчики (псевдо)случайных чисел дают равномерное распределение неравномерных – много любое неравномерное можно получить с помощью равномерного a b a b равномерное распределение неравномерное распределение

Слайд 169

169 Генератор случайных чисел в Паскале Целые числа в интервале [0,N] : var x: integer; ... x := random ( 100 ); { интервал [0,99] } Вещественные числа в интервале [0,1] var x: real; ... x := random; { интервал [0,1] }

Слайд 170

170 Случайные числа Задача : заполнить прямоугольник 4 00 на 3 00 пикселей равномерно точками случайного цвета Как получить случайные координаты точки? x := random ( 400 ); y := random ( 300 ); Как добиться равномерности? обеспечивается автоматически при использовании функции random Как получить случайный цвет? Pen (1, random(256), random(256), random(256)); Point ( x, y );

Слайд 171

171 Программа program qq; var x, y, k, code, i: integer; stop: boolean; begin stop := False; repeat x := random(400); y := random(300); Pen(1, random(25 6 ), random(25 6 ), random(25 6 )); 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

Слайд 172

172 «4»: Ввести с клавиатуры координаты углов прямоугольника и заполнить его точками случайного цвета. «5»: Заполнить треугольник точками случайного цвета (равномерно или неравномерно). Подсказка : возьмите равнобедренный треугольник с углом 45 о . Задания (100,100) (300,200)

Слайд 173

173 Конец фильма



Предварительный просмотр:

Тема:  Ветвления. Условный оператор.

  1. Выполните письменно  на листе формата А4 следующее задание на повторение:

1. Что будет выведено на экран в результате выполнения фрагмента программы

  a:=5; b:=3;
 write( a, '=Z(', b, ')' );

Здесь a и b — целые переменные.

Что будет выведено на экран в результате выполнения фрагмента программы

  a:=5; b:=3;
 write( 'a,=Z(', b, ')' );

Здесь a и b — целые переменные.

3. Что будет выведено на экран в результате выполнения фрагмента программы

  a:=5; b:=3;
 write( 'Z(a)=', '(b)' );

Здесь a и b — целые переменные.

4. Что будет выведено на экран в результате выполнения фрагмента программы

  a:=5; b:=3;
 write( 'Z(', a, ')=', '(', a+b, ')' );

Здесь a и b — целые переменные.

5. Запишите оператор для вывода значений целых переменных a=5 и b=3 в следующем формате:

  5+3=?

В ответе не используйте пробелы.

6. Запишите оператор для вывода значений целых переменных a=5 и b=3 в следующем формате:

  Z(5)=F(3)

В ответе не используйте пробелы.

7. Запишите оператор для вывода значений целых переменных a=5 и b=3 в следующем формате:

  a=5;b=3;

  1. Изучите  § 57 (учебник К.Ю. Полякова  10 класс   часть 2)  

Используйте в своей работе материалы с сайта автора  http://kpolyakov.narod.ru/

  1. Пройдете тест №38 Ветвления  и по окончании  сделайте снимок экрана, отражающий результаты тестирования.  
  2. Подготовьте решение простейших задач с использованием условного оператора на отдельном листе формата A4.

If1. Дано целое число. Если оно является положительным, то прибавить к нему 1; в противном случае не изменять его. Вывести полученное число.

If2. Дано целое число. Если оно является положительным, то прибавить к нему1;в противном случае вычесть из него2.Вывестиполученноечисло.

If3. Дано целое число. Если оно является положительным, то прибавить к нему 1; если отрицательным, то вычесть из него 2; если нулевым, то заменить его на 10. Вывести полученное число.