Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Программирование на языке Паскаль

Содержание

Программирование на языке ПаскальТема 1. Введение© К.Ю. Поляков, 2006-2009
Программирование  на языке Паскаль (7 класс)© К.Ю. Поляков, 2006-2009ВведениеВетвленияСложные условияЦиклыЦиклы с условиемОператор выбораГрафикаГрафики функцийПроцедурыРекурсияАнимацияФункцииСлучайные числа Программирование  на языке ПаскальТема 1. Введение© К.Ю. Поляков, 2006-2009 АлгоритмСвойства алгоритмадискретность: состоит из отдельных шагов (команд)понятность: должен включать только команды, известные ПрограммаПрограмма – это алгоритм, записанный на каком-либо языке программированиянабор команд для компьютераКоманда Простейшая программаprogram qq;begin { начало программы }end. { конец программы }комментарии в Вывод текста на экранprogram qq;begin write('2+');  { без перехода } writeln('2=?'); Задания«4»: Вывести на экран текст ПеременныеЗадача. Ввести с клавиатуры два числа и найти их сумму.Протокол: Введите два Программаprogram qq;begin { ввести два числа } { вычислить их сумму } ПеременныеПеременная – это величина, имеющая имя, тип и значение. Значение переменной можно Имена переменныхВ именах МОЖНО использоватьлатинские буквы (A-Z)цифрызнак подчеркивания _заглавные и строчные буквы ПеременныеТипы переменных:integer		{ целая }real		{ вещественная }и другие…Объявление переменных:var 	a, b, c: integer;Выделение Как записать значение в переменную?a := 5;Оператор присваивания5Оператор – это команда языка Блок-схема линейного алгоритманачалоконецc := a + b;ввод a, bвывод cблок «начало»блок «ввод»блок «процесс»блок «вывод»блок «конец» Как ввести значение с клавиатурыread ( a );Оператор ввода5 Ввод значений двух переменныхчерез пробел:	25 30через Enter:	25 	30read ( a, b );Ввод Оператор вывода{ вывод значения переменной a}{ вывод значения переменной a и переход Сложение двух чиселЗадача. Ввести два целых числа и вывести на экран их Полное решение	program qq;	var a, b, c: integer;	begin  writeln('Введите два целых числа'); Как изменить значение переменной?	program qq;	var a, b: integer;	begin	 a := 5;	 b Арифметические операции+ сложение		– вычитание * умножение		/ деление div деление нацело (остаток отбрасывается)mod program qq;	var a, b: integer;		 x, y: real; 	begin	 a := 5; Порядок выполнения операцийвычисление выражений в скобкахумножение, деление, div, mod слева направосложение и Ручная прокрутка программыprogram qq;var 	a, b: integer;begin a := 5; b := Вывод целых чиселprogram qq;var a, b: integer;begin a := 15; b := Вывод вещественных чиселprogram qq;var x: real;begin x := 12.345678; writeln ( x Задания«4»: Ввести три числа, найти их сумму и произведение.  Пример:	 Введите Программирование  на языке ПаскальТема 2. Ветвления© К.Ю. Поляков, 2006-2009 Разветвляющиеся алгоритмыЗадача. Ввести два целых числа и вывести на экран наибольшее из Вариант 1. Блок-схемаполная форма ветвленияблок «решение» Вариант 1. Программа	max := a;max := b;полная форма условного оператора	program qq;	var a, Условный оператор	if then begin  {что делать, если условие верно} Что неправильно?	if a > b then begin  a := b; Вариант 2. Блок-схеманеполная форма ветвления Вариант 2. Программа		program qq;	var a, b, max: integer;	begin  writeln('Введите два целых Вариант 2Б. Программа	program qq;	var a, b, max: integer;	begin  writeln('Введите два целых Что неправильно?	if a > b then begin   a := b; Задания«4»: Ввести три числа и найти наибольшее из них.  Пример:		Введите три Программирование  на языке ПаскальТема 3. Сложные условия© К.Ю. Поляков, 2006-2009 Сложные условияЗадача. Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести Вариант 1. Алгоритмначаловвод x'подходит'конецданетx >= 25?данетx Вариант 1. Программа		program qq;	var x: integer;	begin  writeln('Введите возраст');  read ( Вариант 2. Алгоритмначаловвод x'подходит'данетx >= 25  иx Вариант 2. Программасложное условие	program qq;	var x: integer;	begin  writeln('Введите возраст');  read Сложные условияПростые условия (отношения)  <    >=  = Сложные условияПорядок выполнения (приоритет = старшинство)выражения в скобкахnotandor, xor=, =, Особенность – Истинно или ложно при a := 2; b := 3; c := Задания«4»: Ввести номер месяца и вывести название времени года.  Пример:		Введите номер Программирование  на языке ПаскальТема 4. Циклы© К.Ю. Поляков, 2006-2009 ЦиклыЦикл – это многократное выполнение одинаковой последовательности действий.цикл с известным числом шаговцикл Циклыprogram qq;begin writeln('Привет');  writeln('Привет');  writeln('Привет');  writeln('Привет');  writeln('Привет'); end. Циклыprogram qq;begin { сделай 5 раз }  writeln('Привет'); end.i := i + 1; АлгоритмначалоПривет!конецданетi = 5?i := 0;i := i + 1;еще не сделали ни Циклыprogram qq;var i: integer;begin for i:=1 to 5 do  writeln('Привет'); end.«Для ЦиклыЗадача. Вывести на экран квадраты и кубы целых чисел от 1 до Алгоритмначалоi, i2, i3конецнетдаi Алгоритм (с блоком «цикл»)началоi, i2, i3конецi2 := i * i;i3 := i2 Программаprogram qq;var i, i2, i3: integer;begin  for i:=1 to 8 do Цикл с уменьшением переменнойЗадача. Вывести на экран квадраты и кубы целых чисел Цикл с переменной	for := to   do begin  {тело цикла} Цикл с переменнойОсобенности:переменная цикла может быть только целой (integer)шаг изменения переменной цикла Цикл с переменнойОсобенности:в теле цикла не разрешается изменять переменную цикла (почему?)при изменении Цикл с переменнойОсобенности:после выполнения цикла во многих системах устанавливается первое значение переменной Сколько раз выполняется цикл?a := 1;for i:=1 to 3 do a := for i:=1 to 9 do begin  if   ??? Как изменить шаг? – IIИдея: Надо вывести всего 5 чисел, переменная k Как изменить шаг? – IIIИдея: Надо вывести всего 5 чисел, переменная k Задания«4»: Ввести a и b и вывести квадраты и кубы чисел от Программирование  на языке ПаскальТема 5. Циклы с условием© К.Ю. Поляков, 2006-2009 Цикл с неизвестным числом шаговПример: Отпилить полено от бревна. Сколько раз надо Алгоритмначалоcountконецнетдаn 0?count := 0;count := count + 1;  n := n Программаprogram qq;var n, count: integer;begin writeln('Введите целое число'); read(n); count := 0; Цикл с условием	while do begin  {тело цикла}    end;Особенности:можно Цикл с условиемОсобенности:условие пересчитывается каждый раз при входе в циклесли условие на Сколько раз выполняется цикл?a := 4; b := 6;while a < b Замена for на while и наоборотfor i:=1 to 10 do begin {тело Задания«4»: Ввести целое число и найти сумму его цифр.  Пример:		Введите целое ПоследовательностиПримеры:1, 2, 3, 4, 5, …1, 2, 4, 7, 11, 16, …1, ПоследовательностиЗадача: найти сумму всех элементов последовательности,  которые по модулю больше 0,001: АлгоритмначалоSконецнетда|a| > 0.001?S := S + a;S := 0; b := 1; Программаprogram qq;var b, c, z: integer;  S, a: real;begin  S Задания«4»: Найти сумму элементов последовательности с точностью 0,001:  Ответ:		S = 1.157«5»: Цикл с постусловиемЗадача: Ввести целое положительное число ( проверку условия цикла надо Цикл с постусловием: алгоритм началоконецданетn > 0?тело циклаусловие ВЫХОДАблок «типовой процесс»ввод nосновной  алгоритм Программаprogram qq;var n: integer;begin  repeat   writeln('Введите положительное число'); Сколько раз выполняется цикл?a := 4; b := 6;repeat a := a Задания (с защитой от неверного ввода)«4»: Ввести натуральное число и определить, верно Программирование  на языке ПаскальТема 6. Оператор выбора© К.Ю. Поляков, 2006-2009 Оператор выбораЗадача: Ввести номер месяца и вывести количество Алгоритмначалоконецвыборни один вариант не подошелввод MданетM = 1?D := 31;нетM = 2?D Программаprogram qq;var M, D: integer;begin  writeln('Введите номер месяца:');  read ( Оператор выбораОсобенности:после case может быть имя переменной или арифметическое выражение целого типа Оператор выбораОсобенности:если нужно выполнить только один оператор, слова begin и end можно Оператор выбораОсобенности:значения, при которых выполняются одинаковые действия, можно группироватьcase i of 1: Что неправильно?case a of 2: begin a := b; 4: a := Задания (с защитой от неверного ввода)«4»: Ввести номер месяца и вывести количество Программирование  на языке ПаскальТема 7. Графика© К.Ю. Поляков, 2006-2009 Система координат(0,0)(x,y)XYxy Управление цветомЦвет и толщина линий, цвет точек:   Pen ( 1, Точки, отрезки и ломаныеPen (1, 0, 255, 0); Line (x1, y1, x2, Фигуры с заливкойPen (1, 0, 0, 255);Brush (1, 255, 255, 0);Rectangle (x1, ТекстTextColor (0, 0, 255);Brush (1, 255, 255, 0);Font (20, 30, 600);MoveTo (x, Пример(200, 50)(100, 100)(300, 200)program qq;begin  Pen(2, 255, 0, 255);  Brush(1, Задания«4»: «Лягушка» «5»: «Корона» Штриховка(x1, y1)(x2, y2)N линий (N=5)hRectangle (x1, y1, x2, y2);Line( x1+h,  y1, Штриховка (программа)(x1, y1)(x2, y2)hprogram qq;var i, x1, x2, y1, y2, N: integer; Как менять цвет?(x1, y1)(x2, y2)Brush ( 1, c, c, c );Fill ( Штриховка(x1, y1)(x2, y2)(x3, y2)ah(x3+a, y1)Line( x1+h,  y1, x1+h-a,  y2);Line( x1+2*h, Штриховка(x1, y1)(x2, y2)hxhyyxyLine( x1, y1+hy,  x1+hx,  y1+hy) ;Line( x1, y1+2*hy, Задания«4»: Ввести с клавиатуры число линий и построить фигуру: «5»: Ввести с Задания«4»: Ввести с клавиатуры число линий штриховки и построить фигуру, залив все Программирование  на языке ПаскальТема 8. Графики функций© К.Ю. Поляков, 2006-2009 Построение графиков функцийЗадача: построить график функции y = 3 sin(x) на интервале Преобразование координат(x,y)XYxyМатематическая система координатЭкранная система координат (пиксели)(xэ,yэ)xэyэ(0,0)(0,0)abk – масштаб (длина изображения единичного Программа2πh – шаг изменения xw – длина оси ОХ  в пикселяхна Как соединить точки?Алгоритм:Если первая точка перейти в точку (xэ,yэ)иначе  отрезок в Задания«4»: Построить график функции y = x2 на интервале [-3,3]. «5»: Построить график  функции (эллипс) Программирование  на языке ПаскальТема 9. Процедуры© К.Ю. Поляков, 2006-2009 ПроцедурыЗадача: Построить фигуру:Особенность: Три похожие фигуры.общее:  размеры, угол поворотаотличия: координаты, цвет ПроцедурыПроцедура – это вспомогательный алгоритм, который предназначен для выполнения некоторых действий.Применение:выполнение одинаковых ПроцедурыПорядок разработки:выделить одинаковые или похожие действия (три фигуры)найти в них общее (размеры, Программаprogram qq;begin  Pen(1, 255, 0, 255);  Tr(100, 100, 0, 0, ПроцедурыОсобенности:все процедуры расположены выше основной программыв заголовке процедуры перечисляются формальные параметры, они ПроцедурыОсобенности:для каждого формального параметра после двоеточия указывают его типесли однотипные параметры стоят ПроцедурыОсобенности:в процедуре можно объявлять дополнительные локальные переменные, остальные процедуры не имеют к Параметры-переменныеЗадача: составить процедуру, которая меняет местами значения двух переменных.Особенности:надо, чтобы изменения, сделанные Параметры-переменныеПрименение:  таким образом процедура (и функция) может возвращать несколько значений,Запрещенные варианты Задания«4»: Используя процедуры, построить фигуру. «5»: Используя процедуры, построить фигуру. равносторонний треугольник Программирование  на языке ПаскальТема 10. Рекурсия© К.Ю. Поляков, 2006-2009 Рекурсивные объектыРекурсивный объект – это объект, определяемый через один или несколько таких Дерево ПифагораДерево Пифагора из N уровней – это ствол и отходящие от Дерево ПифагораОсобенности:когда остановиться?деревья имеют различный наклонкогда число оставшихся уровней станет равно нулю!(x1, Процедураугол αдлина стволаprocedure Pifagor(x0, y0, a, L: real; Программаprogram qq; procedure Pifagor(x0, y0, a, L: real; «4»: Используя рекурсивную процедуру, построить фигуру: «5»: Используя рекурсивную процедуру, построить фигуру: Задания Программирование  на языке ПаскальТема 11. Анимация© К.Ю. Поляков, 2006-2009 АнимацияАнимация (англ. animation) – оживление изображения на экране.Задача: внутри синего квадрата 400 Как Как выйти из цикла при нажатии Esc?program qq;var stop: boolean; Процедура (рисование и стирание)procedure Draw(x, y: integer; flag: boolean);begin if flag then Полная программаprogram qq;var x, y, k, code, i: integer;  stop: boolean; «4»: Два квадрата двигаются в противоположном направлении: «5»: Два квадрата двигаются в Управление клавишамиЗадача: жёлтый квадрат внутри синего квадрата управляется клавишами-стрелками. Коды клавиш:			влево – Программаprogram qq;var x, y, k, code, i: integer;  stop: boolean;begin ... Как убрать мигание?Проблема: даже если не нажата никакая клавиша, квадрат перерисовывается через Программаprogram qq;var x, y, k, code, i: integer;  stop: boolean;begin ... «4»: Квадрат двигается при нажатии стрелок, однако не может выйти за границы ВращениеЗадача: изобразить модель вращения Земли вокруг Солнца.Проблема: движение по окружности, как изменять Процедураprocedure Draw(x, y: integer; flag: boolean);const r = 10;begin if flag then Константы и переменныеprogram qq;const rSun = 60;  { радиус Солнца} Основная программаprogram qq;...begin Brush(1, 0, 0, 0); Fill(1,1); Brush(1, 255, 255, 0); «4»: Изобразить модель Солнца с двумя планетами, которые вращаются в противоположные стороны: Программирование  на языке ПаскальТема 12. Функции© К.Ю. Поляков, 2006-2009 ФункцииФункция – это вспомогательный алгоритм (подпрограмма), результатом работы которого является некоторое значение. ФункцииЗадача: составить функцию, которая вычисляет наибольшее из двух значений, и привести пример ФункцииОсобенности:заголовок начинается словом functionформальные параметры описываются так же, как и для процедурможно ФункцииОсобенности:можно объявлять и использовать локальные переменныезначение, которое является результатом, записывается в переменную, Программаprogram qq;var a, b, max: integer;begin writeln('Введите два числа'); read(a, b); max Задания«4»: Составить функцию, которая определяет сумму всех чисел от 1 до N Задания (вариант 2)«4»: Составить функцию, которая определяет наибольший общий делитель двух натуральных Логические функцииЗадача: составить функцию, которая определяет, верно ли, что заданное число – Логические функцииprogram qq;var N: integer;begin writeln('Введите целое число'); read(N); if Prime(N) then Задания«4»: Составить функцию, которая определяет, верно ли, что сумма его цифр – Программирование  на языке ПаскальТема 13. Случайные числа© К.Ю. Поляков, 2006-2009 Случайные числаСлучайные явления: везде…бросание монеты («орел» или «решка»)падение снегаброуновское движениепомехи при телефонной Псевдослучайные числаПсевдослучайные числа – это такая последовательность чисел, которая обладает свойствами случайных Распределение случайных чиселМодель: снежинки падают на отрезок [a,b]распределениеравномерноенеравномерное Распределение случайных чиселОсобенности: распределение – это характеристика всей последовательности, а не одного Генератор случайных чисел в ПаскалеЦелые числа в интервале [0,N]:  var x: Случайные числаЗадача: заполнить прямоугольник  400 на 300 пикселей равномерно  точками Программаprogram qq;var x, y, k, code, i: integer;  stop: boolean;begin stop «4»: Ввести с клавиатуры координаты углов прямоугольника и заполнить его точками случайного Конец фильма
Слайды презентации

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

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

2006-2009


Слайд 3
Алгоритм
Свойства алгоритма
дискретность: состоит из отдельных шагов (команд)
понятность: должен

АлгоритмСвойства алгоритмадискретность: состоит из отдельных шагов (команд)понятность: должен включать только команды,

включать только команды, известные исполнителю (входящие в СКИ)
определенность: при

одинаковых исходных данных всегда выдает один и тот же результат
конечность: заканчивается за конечное число шагов
массовость: может применяться многократно при различных исходных данных
корректность: дает верное решение при любых допустимых исходных данных

Алгоритм – это четко определенный план действий для исполнителя.


Слайд 4
Программа
Программа – это
алгоритм, записанный на каком-либо языке

ПрограммаПрограмма – это алгоритм, записанный на каком-либо языке программированиянабор команд для

программирования
набор команд для компьютера
Команда – это описание действий, которые

должен выполнить компьютер.
откуда взять исходные данные?
что нужно с ними сделать?

1970 – язык Паскаль (Н. Вирт)

Оператор – это команда языка программирования высокого уровня.


Слайд 5
Простейшая программа
program qq;
begin { начало программы }
end. {

Простейшая программаprogram qq;begin { начало программы }end. { конец программы }комментарии

конец программы }
комментарии в фигурных скобках не обрабатываются
название программы


Слайд 6
Вывод текста на экран
program qq;
begin
write('2+'); {

Вывод текста на экранprogram qq;begin write('2+'); { без перехода } writeln('2=?');

без перехода }
writeln('2=?'); { на новую строку}
writeln('Ответ:

4');
end.

Протокол:
2+2=?
Ответ: 4







Слайд 7
Задания
«4»: Вывести на экран текст "лесенкой"
Вася

Задания«4»: Вывести на экран текст

пошел

гулять
«5»: Вывести на экран рисунок из букв
Ж
ЖЖЖ
ЖЖЖЖЖ
ЖЖЖЖЖЖЖ
HH HH
ZZZZZ

Слайд 8
Переменные
Задача. Ввести с клавиатуры два числа и найти

ПеременныеЗадача. Ввести с клавиатуры два числа и найти их сумму.Протокол: Введите

их сумму.
Протокол:
Введите два целых числа
25 30
25+30=55
компьютер
пользователь
компьютер

считает сам!

Слайд 9
Программа
program qq;
begin
{ ввести два числа }
{

Программаprogram qq;begin { ввести два числа } { вычислить их сумму

вычислить их сумму }
{ вывести сумму на экран

}
end.

Псевдокод: алгоритм на русском языке с элементами Паскаля.


Слайд 10
Переменные
Переменная – это величина, имеющая имя, тип и

ПеременныеПеременная – это величина, имеющая имя, тип и значение. Значение переменной

значение. Значение переменной можно изменять во время работы программы.


a
Значение
Имя

Другой

тип данных

Слайд 11
Имена переменных
В именах МОЖНО использовать
латинские буквы (A-Z)


цифры


знак подчеркивания

Имена переменныхВ именах МОЖНО использоватьлатинские буквы (A-Z)цифрызнак подчеркивания _заглавные и строчные

_
заглавные и строчные буквы не различаются
В именах НЕЛЬЗЯ использовать
русские

буквы
пробелы
скобки, знаки +, =, !, ? и др.

имя не может начинаться с цифры

Какие имена правильные??
AXby R&B 4Wheel Вася “PesBarbos” TU154 [QuQu] _ABBA A+B


Слайд 12
Переменные
Типы переменных:
integer { целая }
real { вещественная }
и другие…
Объявление переменных:
var

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

a, b, c: integer;
Выделение места в памяти
variable – переменная


тип – целые


список имен переменных


Слайд 13
Как записать значение в переменную?
a := 5;
Оператор присваивания

5

Оператор

Как записать значение в переменную?a := 5;Оператор присваивания5Оператор – это команда

– это команда языка программирова-ния (инструкция).
Оператор присваивания – это

команда для записи нового значения в переменную.


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

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

b
вывод c
блок «начало»
блок «ввод»
блок «процесс»
блок «вывод»
блок «конец»


Слайд 15
Как ввести значение с клавиатуры
read ( a );

Оператор

Как ввести значение с клавиатурыread ( a );Оператор ввода5

ввода

5


Слайд 16
Ввод значений двух переменных
через пробел:
25 30
через Enter:
25
30
read

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

( a, b );
Ввод значений двух переменных (через пробел

или Enter).

Слайд 17
Оператор вывода
{ вывод значения переменной a}
{ вывод значения

Оператор вывода{ вывод значения переменной a}{ вывод значения переменной a и

переменной a и переход на новую строчку}
{ вывод текста

}

{вывод текста и значения переменной c}

write( a );

writeln( a );

writeln( 'Привет!' );

writeln( 'Ответ: ', c );

writeln ( a, '+', b, '=', c );


Слайд 18
Сложение двух чисел
Задача. Ввести два целых числа и

Сложение двух чиселЗадача. Ввести два целых числа и вывести на экран

вывести на экран их сумму.
Простейшее решение:
program qq;
var a, b,

c: integer;
begin
read ( a, b );
c := a + b;
writeln ( c );
end.

Слайд 19
Полное решение
program qq;
var a, b, c: integer;
begin

Полное решение	program qq;	var a, b, c: integer;	begin writeln('Введите два целых числа');

writeln('Введите два целых числа');
read ( a, b

);
c := a + b;
writeln ( a, '+', b, '=', c );
end.

Протокол:
Введите два целых числа
25 30
25+30=55

компьютер

пользователь


Слайд 20
Как изменить значение переменной?
program qq;
var a, b: integer;
begin

Как изменить значение переменной?	program qq;	var a, b: integer;	begin	 a := 5;

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
Арифметические операции
+ сложение – вычитание
* умножение / деление
div

Арифметические операции+ сложение		– вычитание * умножение		/ деление 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 program qq;
var a, b: integer;
x, y: real;

program qq;	var a, b: integer;		 x, y: real; 	begin	 a :=


begin
a := 5;
10 :=

x;
y := 7,8;
b := 2.5;
x := 2*(a + y);
a := b + x;
end.


Какие операторы неправильные?

имя переменной должно быть слева от знака :=

целая и дробная часть отделяются точкой

нельзя записывать вещественное значение в целую переменную



Слайд 23
Порядок выполнения операций
вычисление выражений в скобках
умножение, деление, div,

Порядок выполнения операцийвычисление выражений в скобкахумножение, деление, div, mod слева направосложение

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
Ручная прокрутка программы
program qq;
var a, b: integer;
begin
a

Ручная прокрутка программыprogram qq;var 	a, b: integer;begin a := 5; b

:= 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.










Слайд 25
Вывод целых чисел
program qq;
var a, b: integer;
begin
a

Вывод целых чиселprogram qq;var a, b: integer;begin a := 15; b

:= 15;
b := 45;
writeln ( a,

b );
writeln ( a:4, b:4 );
end.

15 45

1545


Слайд 26
Вывод вещественных чисел
program qq;
var x: real;
begin
x :=

Вывод вещественных чиселprogram qq;var x: real;begin x := 12.345678; writeln (

12.345678;
writeln ( x );
writeln ( x:10 );

writeln ( x:7:2 );
end.

12.35

всего символов

всего символов

в дробной части

1.23E+001

1.234568E+001

1,234568∙101


Слайд 27
Задания
«4»: Ввести три числа, найти их сумму и

Задания«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 Программирование на языке Паскаль
Тема 2. Ветвления
© К.Ю. Поляков,

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

2006-2009


Слайд 29
Разветвляющиеся алгоритмы
Задача. Ввести два целых числа и вывести

Разветвляющиеся алгоритмыЗадача. Ввести два целых числа и вывести на экран наибольшее

на экран наибольшее из них.
Идея решения: надо вывести на

экран первое число, если оно больше второго, или второе, если оно больше первого.
Особенность: действия исполнителя зависят от некоторых условий (если … иначе …).

Алгоритмы, в которых последовательность шагов зависит от выполнения некоторых условий, называются разветвляющимися.


Слайд 30
Вариант 1. Блок-схема

полная форма ветвления
блок «решение»

Вариант 1. Блок-схемаполная форма ветвленияблок «решение»

Слайд 31
Вариант 1. Программа


max := a;
max := b;
полная форма

Вариант 1. Программа	max := a;max := b;полная форма условного оператора	program qq;	var

условного оператора
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
Условный оператор
if then begin
{что делать,

Условный оператор	if then begin {что делать, если условие верно}  end

если условие верно}
end
else begin

{что делать, если условие неверно}
end;

Особенности:
перед else НЕ ставится точка с запятой
вторая часть (else …) может отсутствовать (неполная форма)
если в блоке один оператор, можно убрать слова begin и end


Слайд 33
Что неправильно?
if a > b then begin

Что неправильно?	if a > b then begin a := b;

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
Вариант 2. Блок-схема

неполная форма ветвления

Вариант 2. Блок-схеманеполная форма ветвления

Слайд 35
Вариант 2. Программа


program qq;
var a, b, max: integer;
begin

Вариант 2. Программа		program qq;	var a, b, max: integer;	begin writeln('Введите два целых

writeln('Введите два целых числа');
read ( a,

b );
max := a;
if b > a then
max := b;
writeln ('Наибольшее число ', max);
end.

неполная форма условного оператора


Слайд 36
Вариант 2Б. Программа


program qq;
var a, b, max: integer;
begin

Вариант 2Б. Программа	program qq;	var a, b, max: integer;	begin writeln('Введите два целых

writeln('Введите два целых числа');
read ( a,

b );
max := b;
if ??? then
???
writeln ('Наибольшее число ', max);
end.

max := a;

a > b


Слайд 37
Что неправильно?
if a > b then begin

Что неправильно?	if a > b then begin  a := b;

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
Задания
«4»: Ввести три числа и найти наибольшее из

Задания«4»: Ввести три числа и найти наибольшее из них. Пример:		Введите три

них.
Пример:
Введите три числа:
4 15 9
Наибольшее

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

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

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

Поляков, 2006-2009


Слайд 40
Сложные условия
Задача. Фирма набирает сотрудников от 25 до

Сложные условияЗадача. Фирма набирает сотрудников от 25 до 40 лет включительно.

40 лет включительно. Ввести возраст человека и определить, подходит

ли он фирме (вывести ответ «подходит» или «не подходит»).
Особенность: надо проверить, выполняются ли два условия одновременно.

Слайд 41
Вариант 1. Алгоритм
начало
ввод x
'подходит'
конец




да
нет
x >= 25?


да
нет
x

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

подходит'
'не подходит'



Слайд 42
Вариант 1. Программа



program qq;
var x: integer;
begin
writeln('Введите

Вариант 1. Программа		program qq;	var x: integer;	begin writeln('Введите возраст'); read ( x

возраст');
read ( x );
if x

>= 25 then
if x <= 40 then
writeln ('Подходит')
else writeln ('Не подходит')
else
writeln ('Не подходит');
end.

Слайд 43 Вариант 2. Алгоритм
начало
ввод x
'подходит'


да
нет
x >= 25 и
x

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

40?
'не подходит'


Слайд 44
Вариант 2. Программа


сложное условие
program qq;
var x: integer;
begin

Вариант 2. Программасложное условие	program qq;	var x: integer;	begin writeln('Введите возраст'); read (

writeln('Введите возраст');
read ( x );
if

(x >= 25) and (x <= 40) then
writeln ('Подходит')
else writeln ('Не подходит')
end.

Слайд 45
Сложные условия
Простые условия (отношения)
<

Сложные условияПростые условия (отношения) <  >= = Сложное условие –

> >= =
Сложное условие

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

равно

не равно


Слайд 46
Сложные условия
Порядок выполнения (приоритет = старшинство)
выражения в скобках
not
and
or,

Сложные условияПорядок выполнения (приоритет = старшинство)выражения в скобкахnotandor, xor=, =, Особенность

xor
=, =,
Особенность – каждое из

простых условий обязательно заключать в скобки.
Пример

4 1 6 2 5 3

if not (a > b) or (c <> d) and (b <> a)
then begin
...
end


Слайд 47 Истинно или ложно при a := 2; b

Истинно или ложно при a := 2; b := 3; c

:= 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
Задания
«4»: Ввести номер месяца и вывести название времени

Задания«4»: Ввести номер месяца и вывести название времени года. Пример:		Введите номер

года.
Пример:
Введите номер месяца:
4
весна
«5»: Ввести возраст человека (от

1 до 150 лет) и вывести его вместе с последующим словом «год», «года» или «лет».
Пример:
Введите возраст: Введите возраст:
24 57
Вам 24 года Вам 57 лет

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

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

2006-2009


Слайд 50
Циклы
Цикл – это многократное выполнение одинаковой последовательности действий.
цикл

ЦиклыЦикл – это многократное выполнение одинаковой последовательности действий.цикл с известным числом

с известным числом шагов
цикл с неизвестным числом шагов (цикл

с условием)
Задача. Вывести на экран 5 раз слово «Привет».
Особенность: одинаковые действия выполняются 5 раз.

Слайд 51
Циклы
program qq;
begin
writeln('Привет');
writeln('Привет');
writeln('Привет');

Циклыprogram qq;begin writeln('Привет'); writeln('Привет'); writeln('Привет'); writeln('Привет'); writeln('Привет'); end.

writeln('Привет');
writeln('Привет');
end.


Слайд 52
Циклы
program qq;
begin
{ сделай 5 раз }

Циклыprogram qq;begin { сделай 5 раз } writeln('Привет'); end.i := i + 1;

writeln('Привет');
end.





i := i + 1;


Слайд 53
Алгоритм

начало
Привет!
конец
да
нет
i = 5?

i := 0;
i := i +

АлгоритмначалоПривет!конецданетi = 5?i := 0;i := i + 1;еще не сделали

1;

еще не сделали ни одного раза
проверить, все ли сделали
вывод

на экран

считаем очередной шаг


Слайд 54
Циклы
program qq;
var i: integer;
begin
for i:=1 to 5

Циклыprogram qq;var i: integer;begin for i:=1 to 5 do writeln('Привет'); end.«Для

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
Циклы
Задача. Вывести на экран квадраты и кубы целых

ЦиклыЗадача. Вывести на экран квадраты и кубы целых чисел от 1

чисел от 1 до 8 (от a до b).
Особенность:

одинаковые действия выполняются 8 раз.

i := 1; { очередное число }
i2 := i*i; { его квадрат }
i3 := i2*i; { куб }
writeln(i:4, i2:4, i3:4);
i := 2;
...


Слайд 56
Алгоритм

начало
i, i2, i3
конец
нет
да
i

Алгоритмначалоi, i2, i3конецнетдаi

i + 1;

i2 := i * i;
i3 := i2

* i;

задать начальное значение переменной цикла

проверить, все ли сделали

вычисляем квадрат и куб

вывод результата

перейти к следующему i


Слайд 57
Алгоритм (с блоком «цикл»)

начало
i, i2, i3
конец

i2 := i

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

* i;
i3 := i2 * i;
i := 1,8
блок «цикл»
тело

цикла

Слайд 58
Программа


program qq;
var i, i2, i3: integer;
begin


for

Программаprogram qq;var i, i2, i3: integer;begin for i:=1 to 8 do

i:=1 to 8 do begin
i2 := i*i;

i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
end.

переменная
цикла

начальное значение

конечное значение


Слайд 59
Цикл с уменьшением переменной
Задача. Вывести на экран квадраты

Цикл с уменьшением переменнойЗадача. Вывести на экран квадраты и кубы целых

и кубы целых чисел от 8 до 1 (в

обратном порядке).
Особенность: переменная цикла должна уменьшаться.
Решение:

for i:=8 1 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;

downto


Слайд 60
Цикл с переменной
for := to

Цикл с переменной	for := to  do begin {тело цикла}

do begin
{тело цикла}


end;

Увеличение переменной на 1:

for <переменная> := <начальное значение> downto
<конечное значение> do begin
{тело цикла}
end;

Уменьшение переменной на 1:


Слайд 61
Цикл с переменной
Особенности:
переменная цикла может быть только целой

Цикл с переменнойОсобенности:переменная цикла может быть только целой (integer)шаг изменения переменной

(integer)
шаг изменения переменной цикла всегда равен 1 (to) или

-1 (downto)
если в теле цикла только один оператор, слова begin и end можно не писать:
если конечное значение меньше начального, цикл (to) не выполняется ни разу (проверка условия в начале цикла, цикл с предусловием)

for i:=1 to 8 do
writeln('Привет');


Слайд 62
Цикл с переменной
Особенности:
в теле цикла не разрешается изменять

Цикл с переменнойОсобенности:в теле цикла не разрешается изменять переменную цикла (почему?)при

переменную цикла (почему?)
при изменении начального и конечного значения внутри

цикла количество шагов не изменится:

n := 8;
for i:=1 to n do begin
writeln('Привет');
n := n + 1;
end;

нет зацикливания


Слайд 63
Цикл с переменной
Особенности:
после выполнения цикла во многих системах

Цикл с переменнойОсобенности:после выполнения цикла во многих системах устанавливается первое значение

устанавливается первое значение переменной цикла, при котором нарушено условие:
for

i:=1 to 8 do
writeln('Привет');
writeln('i=', i);

for i:=8 downto 1 do
writeln('Привет');
writeln('i=', i);

i=9

i=0

НЕ ДОКУМЕНТИРОВАНО


Слайд 64
Сколько раз выполняется цикл?
a := 1;
for i:=1 to

Сколько раз выполняется цикл?a := 1;for i:=1 to 3 do a

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


Слайд 65 for i:=1 to 9 do begin
if

for i:=1 to 9 do begin if  ???  then

??? 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
Как изменить шаг? – II
Идея: Надо вывести всего

Как изменить шаг? – IIИдея: Надо вывести всего 5 чисел, переменная

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
Как изменить шаг? – III
Идея: Надо вывести всего

Как изменить шаг? – IIIИдея: Надо вывести всего 5 чисел, переменная

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;


Слайд 68
Задания
«4»: Ввести a и b и вывести квадраты

Задания«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 Программирование на языке Паскаль
Тема 5. Циклы с условием
©

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

К.Ю. Поляков, 2006-2009


Слайд 70
Цикл с неизвестным числом шагов
Пример: Отпилить полено от

Цикл с неизвестным числом шаговПример: Отпилить полено от бревна. Сколько раз

бревна. Сколько раз надо сделать движения пилой?
Задача: Ввести целое

число (<2000000) и определить число цифр в нем.
Идея решения: Отсекаем последовательно последнюю цифру, увеличиваем счетчик.




Проблема: Неизвестно, сколько шагов надо сделать.
Решение: Надо остановиться, когда n = 0, т.е. надо делать «пока n <> 0».

Слайд 71

Алгоритм

начало
count
конец
нет
да
n 0?

count := 0;

count := count +

Алгоритмначалоcountконецнетдаn 0?count := 0;count := count + 1; n := n

1;
n := n div 10;
обнулить счетчик цифр
ввод

n


выполнять «пока n <> 0»


Слайд 72 Программа
program qq;
var n, count: integer;
begin
writeln('Введите целое число');

Программаprogram qq;var n, count: integer;begin writeln('Введите целое число'); read(n); count :=

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
Цикл с условием
while do begin
{тело

Цикл с условием	while do begin {тело цикла}  end;Особенности:можно использовать сложные

цикла}
end;
Особенности:
можно использовать сложные условия:
если в

теле цикла только один оператор, слова begin и end можно не писать:

while (a < b) and (b < c) do begin
{тело цикла}
end;

while a < b do
a := a + 1;


Слайд 74
Цикл с условием
Особенности:
условие пересчитывается каждый раз при входе

Цикл с условиемОсобенности:условие пересчитывается каждый раз при входе в циклесли условие

в цикл
если условие на входе в цикл ложно, цикл

не выполняется ни разу
если условие никогда не станет ложным, программа зацикливается

a := 4; b := 6;
while a > b do
a := a – b;

a := 4; b := 6;
while a < b do
d := a + b;


Слайд 75
Сколько раз выполняется цикл?
a := 4; b :=

Сколько раз выполняется цикл?a := 4; b := 6;while a <

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;

зацикливание


Слайд 76
Замена for на while и наоборот
for i:=1 to

Замена for на while и наоборотfor i:=1 to 10 do begin

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 возможна всегда.


Слайд 77
Задания
«4»: Ввести целое число и найти сумму его

Задания«4»: Ввести целое число и найти сумму его цифр. Пример:		Введите целое

цифр.
Пример:
Введите целое число:
1234
Сумма цифр числа 1234 равна

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

Слайд 78
Последовательности
Примеры:
1, 2, 3, 4, 5, …
1, 2, 4,

ПоследовательностиПримеры:1, 2, 3, 4, 5, …1, 2, 4, 7, 11, 16,

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


Слайд 79
Последовательности
Задача: найти сумму всех элементов последовательности,
которые

ПоследовательностиЗадача: найти сумму всех элементов последовательности, которые по модулю больше 0,001:

по модулю больше 0,001:
Элемент последовательности (начиная с №2):
b

:= b+1;

c := 2*c;

z := -z;


Слайд 80
Алгоритм

начало
S
конец
нет
да
|a| > 0.001?


S := S + a;

S :=

АлгоритмначалоSконецнетда|a| > 0.001?S := S + a;S := 0; b :=

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
Программа
program qq;
var b, c, z: integer;
S,

Программаprogram qq;var b, c, z: integer; S, a: real;begin 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
Задания
«4»: Найти сумму элементов последовательности с точностью 0,001:


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

Ответ:
S = 1.157
«5»: Найти сумму элементов последовательности с

точностью 0,001:
Ответ:
S = 1.220

Слайд 83
Цикл с постусловием
Задача: Ввести целое положительное число (

Цикл с постусловиемЗадача: Ввести целое положительное число ( проверку условия цикла

и определить число цифр в нем.
Проблема: Как не

дать ввести отрицательное число или ноль?
Решение: Если вводится неверное число, вернуться назад к вводу данных (цикл!).
Особенность: Один раз тело цикла надо сделать в любом случае => проверку условия цикла надо делать в конце цикла (цикл с постусловием).

Цикл с постусловием – это цикл, в котором проверка условия выполняется в конце цикла.


Слайд 84
Цикл с постусловием: алгоритм

начало
конец
да
нет
n > 0?


тело цикла
условие

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

ВЫХОДА
блок «типовой процесс»
ввод n
основной алгоритм


Слайд 85
Программа
program qq;
var n: integer;
begin
repeat

Программаprogram qq;var n: integer;begin repeat  writeln('Введите положительное число');  read(n);

writeln('Введите положительное число');
read(n);
until n

> 0;
... { основной алгоритм }
end.

repeat
writeln('Введите положительное число');
read(n);
until n > 0;

until n > 0;

условие ВЫХОДА

Особенности:
тело цикла всегда выполняется хотя бы один раз
после слова until ("до тех пор, пока не…") ставится условие ВЫХОДА из цикла


Слайд 86
Сколько раз выполняется цикл?
a := 4; b :=

Сколько раз выполняется цикл?a := 4; b := 6;repeat a :=

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
Задания (с защитой от неверного ввода)
«4»: Ввести натуральное

Задания (с защитой от неверного ввода)«4»: Ввести натуральное число и определить,

число и определить, верно ли, что сумма его цифр

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

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

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

Поляков, 2006-2009


Слайд 89
Оператор выбора
Задача: Ввести номер месяца и вывести количество

Оператор выбораЗадача: Ввести номер месяца и вывести количество

дней

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

Слайд 90 Алгоритм
начало
конец

выбор
ни один вариант не подошел
ввод M

да
нет
M = 1?
D

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

:= 31;
нет
M = 2?
D := 28;
да
нет
M = 12?
D :=

31;

да

вывод D

ошибка





Слайд 91
Программа
program qq;
var M, D: integer;
begin
writeln('Введите номер

Программаprogram qq;var M, D: integer;begin writeln('Введите номер месяца:'); read ( M

месяца:');
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
Оператор выбора
Особенности:
после case может быть имя переменной или

Оператор выбораОсобенности:после 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
Оператор выбора
Особенности:
если нужно выполнить только один оператор, слова

Оператор выбораОсобенности:если нужно выполнить только один оператор, слова begin и end

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
Оператор выбора
Особенности:
значения, при которых выполняются одинаковые действия, можно

Оператор выбораОсобенности:значения, при которых выполняются одинаковые действия, можно группироватьcase i of

группировать
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
Что неправильно?
case a of
2: begin a

Что неправильно?case a of 2: begin a := b; 4: 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
Задания (с защитой от неверного ввода)
«4»: Ввести номер

Задания (с защитой от неверного ввода)«4»: Ввести номер месяца и вывести

месяца и вывести количество дней в нем, а также

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

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

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

2006-2009


Слайд 98
Система координат

(0,0)
(x,y)
X
Y

x
y

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

Слайд 99
Управление цветом
Цвет и толщина линий, цвет точек:

Управление цветомЦвет и толщина линий, цвет точек:  Pen ( 1,

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
Точки, отрезки и ломаные
Pen (1, 0, 255, 0);

Точки, отрезки и ломаныеPen (1, 0, 255, 0); Line (x1, y1,

Line (x1, y1, x2, y2);
Pen (1, 0, 0, 255);
Point

(x, y);

Pen (1, 255, 0, 0); MoveTo (x1, y1); LineTo (x2, y2);
LineTo (x3, y3);
LineTo (x4, y4);
LineTo (x5, y5);


Слайд 101
Фигуры с заливкой
Pen (1, 0, 0, 255);
Brush (1,

Фигуры с заливкойPen (1, 0, 0, 255);Brush (1, 255, 255, 0);Rectangle

255, 255, 0);
Rectangle (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);


Слайд 102
Текст
TextColor (0, 0, 255);
Brush (1, 255, 255, 0);
Font

ТекстTextColor (0, 0, 255);Brush (1, 255, 255, 0);Font (20, 30, 600);MoveTo

(20, 30, 600);
MoveTo (x, y);
writeln ('Привет!');
Привет!
(x, y)

размер
10 пикселей
угол
поворота
насыщенность:
400

– нормальный
600 – жирный


30о


Слайд 103
Пример


(200, 50)
(100, 100)
(300, 200)



program qq;
begin
Pen(2, 255,

Пример(200, 50)(100, 100)(300, 200)program qq;begin Pen(2, 255, 0, 255); Brush(1, 0,

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
Задания
«4»: «Лягушка»







«5»: «Корона»






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

Слайд 105
Штриховка
(x1, y1)
(x2, y2)



N линий (N=5)
h



Rectangle (x1, y1, x2,

Штриховка(x1, y1)(x2, y2)N линий (N=5)hRectangle (x1, y1, x2, y2);Line( x1+h, y1,

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
Штриховка (программа)
(x1, y1)
(x2, y2)



h
program qq;
var i, x1, x2,

Штриховка (программа)(x1, y1)(x2, y2)hprogram qq;var i, x1, x2, y1, y2, N:

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

Как менять цвет?
(x1, y1)
(x2, y2)


Brush ( 1, c,

Как менять цвет?(x1, y1)(x2, y2)Brush ( 1, c, c, c );Fill

c, c );
Fill ( ???, ??? );
серый: R =

G = B

Шаг изменения c:

x

(x-1, y1+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
Штриховка
(x1, y1)

(x2, y2)
(x3, y2)



a
h
(x3+a, y1)



Line( x1+h, y1,

Штриховка(x1, y1)(x2, y2)(x3, y2)ah(x3+a, y1)Line( x1+h, y1, x1+h-a, y2);Line( x1+2*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
Штриховка

(x1, y1)
(x2, y2)


hx
hy



y

x
y
Line( x1, y1+hy, x1+hx,

Штриховка(x1, y1)(x2, y2)hxhyyxyLine( x1, y1+hy, x1+hx, y1+hy) ;Line( x1, y1+2*hy, x1+2*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
Задания
«4»: Ввести с клавиатуры число линий и построить

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

фигуру:







«5»: Ввести с клавиатуры число линий и построить

фигуру:

Слайд 111
Задания
«4»: Ввести с клавиатуры число линий штриховки и

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

построить фигуру, залив все области разным цветом.







«5»:

Ввести с клавиатуры число окружностей и построить фигуру, залив все области разным цветом.

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

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

Поляков, 2006-2009


Слайд 113
Построение графиков функций
Задача: построить график функции y =

Построение графиков функцийЗадача: построить график функции y = 3 sin(x) на

3 sin(x) на интервале от 0 до 2π.
Анализ:
максимальное

значение ymax = 3 при x = π/2
минимальное значение ymin = -3 при x = 3π/2
Проблема: функция задана в математической системе координат, строить надо на экране, указывая координаты в пикселях.

Слайд 114
Преобразование координат
(x,y)

X
Y
x
y
Математическая
система координат
Экранная система координат (пиксели)

(xэ,yэ)



(0,0)
(0,0)
a
b
k –

Преобразование координат(x,y)XYxyМатематическая система координатЭкранная система координат (пиксели)(xэ,yэ)xэyэ(0,0)(0,0)abk – масштаб (длина изображения

масштаб (длина изображения единичного отрезка на экране)
xэ = a

+ kx
yэ = b - ky

Слайд 115
Программа


h – шаг изменения x
w – длина оси

Программа2πh – шаг изменения xw – длина оси ОХ в пикселяхна

ОХ в пикселях
на экране
оси координат
цикл построения графика


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

Как соединить точки?Алгоритм:Если первая точка перейти в точку (xэ,yэ)иначе отрезок в

(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
Задания
«4»: Построить график функции y = x2 на

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

интервале [-3,3].







«5»: Построить график функции (эллипс)



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

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

2006-2009


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

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

угол поворота
отличия: координаты, цвет


Слайд 120
Процедуры
Процедура – это вспомогательный алгоритм, который предназначен для

ПроцедурыПроцедура – это вспомогательный алгоритм, который предназначен для выполнения некоторых действий.Применение:выполнение

выполнения некоторых действий.
Применение:
выполнение одинаковых действий в разных местах программы
разбивка

программы (или другой процедуры) на подзадачи для лучшего восприятия

Слайд 121
Процедуры
Порядок разработки:
выделить одинаковые или похожие действия (три фигуры)
найти

ПроцедурыПорядок разработки:выделить одинаковые или похожие действия (три фигуры)найти в них общее

в них общее (размеры, форма, угол поворота) и отличия

(координаты, цвет)
отличия записать в виде неизвестных переменных, они будут параметрами процедуры

(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 Программа
program qq;




begin
Pen(1, 255, 0, 255);

Программаprogram qq;begin Pen(1, 255, 0, 255); Tr(100, 100, 0, 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
Процедуры
Особенности:
все процедуры расположены выше основной программы
в заголовке процедуры

ПроцедурыОсобенности:все процедуры расположены выше основной программыв заголовке процедуры перечисляются формальные параметры,

перечисляются формальные параметры, они обозначаются именами, поскольку могут меняться
при

вызове процедуры в скобках указывают фактические параметры (числа или арифметические выражения) в том же порядке

procedure Tr( x, y, r, g, b: integer);

Tr (200, 100, 0, 255, 0);

x

y

r

g

b


Слайд 124
Процедуры
Особенности:
для каждого формального параметра после двоеточия указывают его

ПроцедурыОсобенности:для каждого формального параметра после двоеточия указывают его типесли однотипные параметры

тип
если однотипные параметры стоят рядом, их перечисляют через запятую
внутри

процедуры параметры используются так же, как и переменные

procedure A (x: real; y: integer; z: real);

procedure A (x, z: real; y, k, l: integer);


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

Параметры-переменныеЗадача: составить процедуру, которая меняет местами значения двух переменных.Особенности:надо, чтобы изменения,

переменных.
Особенности:
надо, чтобы изменения, сделанные в процедуре, стали известны вызывающей

программе

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

Параметры-переменныеПрименение: таким образом процедура (и функция) может возвращать несколько значений,Запрещенные варианты

несколько значений,
Запрещенные варианты вызова
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
Задания
«4»: Используя процедуры, построить фигуру.







«5»: Используя

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

процедуры, построить фигуру.
равносторонний треугольник


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

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

2006-2009


Слайд 130
Рекурсивные объекты
Рекурсивный объект – это объект, определяемый через

Рекурсивные объектыРекурсивный объект – это объект, определяемый через один или несколько

один или несколько таких же объектов.
У попа была

собака, он ее любил.
Она съела кусок мяса, он ее убил.
В ямку закопал, надпись написал:

Сказка о попе и собаке

Примеры:

Сказка о попе и собаке:

Факториал:


если

если

Рисунок с рекурсией:


Слайд 131
Дерево Пифагора
Дерево Пифагора из N уровней – это

Дерево ПифагораДерево Пифагора из N уровней – это ствол и отходящие

ствол и отходящие от него симметрично два дерева Пифагора

из N-1 уровней, такие что длина их стволов в 2 раза меньше и угол между ними равен 90o.


6 уровней:




Слайд 132
Дерево Пифагора
Особенности:
когда остановиться?
деревья имеют различный наклон
когда число оставшихся

Дерево ПифагораОсобенности:когда остановиться?деревья имеют различный наклонкогда число оставшихся уровней станет равно

уровней станет равно нулю!

(x1, y1)
(x0, y0)





α
α+45o

α-45o
L
x1 = x0 +

L·cos(α)
y1 = y0 – L·sin(α)

наклон «дочерних» деревьев

α + π/4
α – π/4


Слайд 133 Процедура

угол α
длина ствола

procedure Pifagor(x0, y0, a, L: real;

Процедураугол αдлина ствола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
Программа

program qq;
procedure Pifagor(x0, y0, a, L: real;

Программаprogram qq; procedure Pifagor(x0, y0, a, L: real;


N: integer);
...
end;
begin
Pifagor (250, 400, pi/2, 150, 8);
end.

угол α

длина ствола

число уровней

x0

y0

Pifagor (250, 400, 2*pi/3, 150, 8);


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







«5»:

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

Используя рекурсивную процедуру, построить фигуру:

Задания


Слайд 136 Программирование на языке Паскаль
Тема 11. Анимация
© К.Ю. Поляков,

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

2006-2009


Слайд 137
Анимация
Анимация (англ. animation) – оживление изображения на экране.
Задача:

АнимацияАнимация (англ. animation) – оживление изображения на экране.Задача: внутри синего квадрата

внутри синего квадрата 400 на 400 пикселей слева направо

двигается желтый квадрат 20 на 20 пикселей. Программа останавливается, если нажата клавиша Esc или квадрат дошел до границы синей области.

Проблема: как изобразить перемещение объекта на экране?
Привязка: состояние объекта задается координатами (x,y)
Принцип анимации:
рисуем объект в точке (x,y)
задержка на несколько миллисекунд
стираем объект
изменяем координаты (x,y)
переходим к шагу 1


Слайд 138
Как "поймать" нажатие клавиши?
Событие – это изменение в


Слайд 139

Как выйти из цикла при нажатии Esc?

program qq;
var

Как выйти из цикла при нажатии Esc?program qq;var stop: boolean;

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

Процедура (рисование и стирание)
procedure Draw(x, y: integer; flag:

Процедура (рисование и стирание)procedure Draw(x, y: integer; flag: boolean);begin if 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

Полная программа



program qq;
var x, y, k, code, i:

Полная программаprogram qq;var x, y, k, code, i: integer; stop: boolean;

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 «4»: Два квадрата двигаются в противоположном направлении:


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





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

от стенок синего квадрата:

Задания














Слайд 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 Программа
program qq;
var x, y, k, code, i: integer;

Программаprogram qq;var x, y, k, code, i: integer; stop: boolean;begin ...

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 Как убрать мигание?
Проблема: даже если не нажата никакая

Как убрать мигание?Проблема: даже если не нажата никакая клавиша, квадрат перерисовывается

клавиша, квадрат перерисовывается через каждые 20 мс (мигание!)
Что хочется:

не перерисовать квадрат, если не было никакого события
Решение: нарисовать квадрат и ждать события
Новая проблема: как ждать события?
Решение новой проблемы: пустой цикл "пока не случилось событие, ничего не делай":

while not IsEvent do;


Слайд 146 Программа
program qq;
var x, y, k, code, i: integer;

Программаprogram qq;var x, y, k, code, i: integer; stop: boolean;begin ...

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 «4»: Квадрат двигается при нажатии стрелок, однако не

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

может выйти за границы синего квадрата:




«5»: Квадрат

непрерывно двигается, при нажатии стрелок меняет направление и отталкивается от стенок синего квадрата:

Задания
















Слайд 148
Вращение
Задача: изобразить модель вращения Земли вокруг Солнца.
Проблема: движение

ВращениеЗадача: изобразить модель вращения Земли вокруг Солнца.Проблема: движение по окружности, как

по окружности, как изменять координаты?
Решение: использовать в качестве независимой

переменной (менять в цикле) угол поворота α



(x0, y0)



α

L

(x, y)

x = x0 + L·cos(α)
y = y0 – L·sin(α)



Слайд 149 Процедура
procedure Draw(x, y: integer; flag: boolean);
const r =

Процедураprocedure Draw(x, y: integer; flag: boolean);const r = 10;begin if flag

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 Константы и переменные
program qq;
const rSun = 60;

Константы и переменные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 Основная программа
program qq;
...
begin
Brush(1, 0, 0, 0); Fill(1,1);

Основная программаprogram qq;...begin Brush(1, 0, 0, 0); Fill(1,1); Brush(1, 255, 255,

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;


Слайд 152 «4»: Изобразить модель Солнца с двумя планетами, которые

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

вращаются в противоположные стороны:


«5»: Изобразить модель системы

Солнце-Земля-Луна:

Задания










Слайд 153 Программирование на языке Паскаль
Тема 12. Функции
© К.Ю. Поляков,

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

2006-2009


Слайд 154 Функции
Функция – это вспомогательный алгоритм (подпрограмма), результатом работы

ФункцииФункция – это вспомогательный алгоритм (подпрограмма), результатом работы которого является некоторое

которого является некоторое значение.
Примеры:
вычисление

, ,
расчет значений по сложным формулам
ответ на вопрос (простое число или нет?)
Зачем?
для выполнения одинаковых расчетов в различных местах программы
для создания общедоступных библиотек функций

Слайд 155
Функции
Задача: составить функцию, которая вычисляет наибольшее из двух

ФункцииЗадача: составить функцию, которая вычисляет наибольшее из двух значений, и привести

значений, и привести пример ее использования
Функция:
формальные параметры




function Max (a,

b: integer): integer;
begin
if a > b then Max := a
else Max := b;
end;

это результат функции



Слайд 156 Функции
Особенности:
заголовок начинается словом function
формальные параметры описываются так же,

ФункцииОсобенности:заголовок начинается словом functionформальные параметры описываются так же, как и для

как и для процедур
можно использовать параметры-переменные
в конце заголовка через

двоеточие указывается тип результата
функции располагаются ВЫШЕ основной программы

Слайд 157 Функции
Особенности:
можно объявлять и использовать локальные переменные
значение, которое является

ФункцииОсобенности:можно объявлять и использовать локальные переменныезначение, которое является результатом, записывается в

результатом, записывается в переменную, имя которой совпадает с названием

функции; объявлять ее НЕ НАДО:

Слайд 158 Программа
program qq;
var a, b, max: integer;




begin
writeln('Введите два

Программаprogram qq;var a, b, max: integer;begin writeln('Введите два числа'); read(a, b);

числа');
read(a, b);
max := Max ( a, b

);
writeln('Наибольшее число ', max );
end.

function Max (a, b: integer): integer;
begin
...
end;

c

c

c

фактические параметры

вызов функции


Слайд 159
Задания
«4»: Составить функцию, которая определяет сумму всех чисел

Задания«4»: Составить функцию, которая определяет сумму всех чисел от 1 до

от 1 до N и привести пример ее использования.

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

Слайд 160
Задания (вариант 2)
«4»: Составить функцию, которая определяет наибольший

Задания (вариант 2)«4»: Составить функцию, которая определяет наибольший общий делитель двух

общий делитель двух натуральных и привести пример ее использования.

Пример:
Введите два числа:
14 21
НОД(14,21)=7
«5»: Составить функцию, которая вычисляет функцию синус как сумму ряда (с точностью 0.001)

Пример:
Введите угол в градусах:
45
sin(45) = 0.707

x в радианах!


Слайд 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 Логические функции
program qq;
var N: integer;










begin
writeln('Введите целое число');

Логические функцииprogram qq;var N: integer;begin writeln('Введите целое число'); read(N); if Prime(N)

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
Задания
«4»: Составить функцию, которая определяет, верно ли, что

Задания«4»: Составить функцию, которая определяет, верно ли, что сумма его цифр

сумма его цифр – четное число.
Пример:
Введите

число:
136
Сумма цифр четная.
«5»: Составить функцию, которая определяет, верно ли, что в заданном числе все цифры стоят по возрастанию.
Пример:
Введите число:
258
Верно.

Введите число:
528
Неверно.

Введите число:
245
Сумма цифр нечетная.


Слайд 164 Программирование на языке Паскаль
Тема 13. Случайные числа
© К.Ю.

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

Поляков, 2006-2009


Слайд 165 Случайные числа
Случайные явления: везде…
бросание монеты («орел» или «решка»)
падение

Случайные числаСлучайные явления: везде…бросание монеты («орел» или «решка»)падение снегаброуновское движениепомехи при

снега
броуновское движение
помехи при телефонной связи
шум радиоэфира
Случайные числа – это

такая последовательность чисел, для которой невозможно предсказать следующее даже зная все предыдущие.
Проблема: как получить на компьютере?
Возможные решения:
использовать внешний источник шумовых помех
с помощью математических преобразований

Слайд 166 Псевдослучайные числа
Псевдослучайные числа – это такая последовательность чисел,

Псевдослучайные числаПсевдослучайные числа – это такая последовательность чисел, которая обладает свойствами

которая обладает свойствами случайных чисел, но каждое следующее число

вычисляется по заданной формуле.
Примеры:
Случайные целые числа [0,m) (линейный конгруэнтный метод)

Случайные вещественные числа [0,1]

Литература:
Д. Кнут, Искусство программирования для ЭВМ, т.2.

дробная часть числа

a, c, m - целые числа

простое число

230-1

например, k = 5


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

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

Слайд 168 Распределение случайных чисел
Особенности:
распределение – это характеристика всей

Распределение случайных чиселОсобенности: распределение – это характеристика всей последовательности, а не

последовательности, а не одного числа
равномерное распределение одно, компьютерные датчики

(псевдо)случайных чисел дают равномерное распределение
неравномерных – много
любое неравномерное можно получить с помощью равномерного


a

b

a

b

равномерное распределение

неравномерное распределение


Слайд 169 Генератор случайных чисел в Паскале
Целые числа в интервале

Генератор случайных чисел в ПаскалеЦелые числа в интервале [0,N]: var x:

[0,N]:
var x: integer;
...
x := random

( 100 ); { интервал [0,99] }
Вещественные числа в интервале [0,1]
var x: real;
...
x := random; { интервал [0,1] }


Слайд 170 Случайные числа
Задача: заполнить прямоугольник 400 на 300 пикселей

Случайные числаЗадача: заполнить прямоугольник 400 на 300 пикселей равномерно точками случайного

равномерно точками случайного цвета
Как получить случайные координаты точки?
x :=

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

Слайд 171 Программа
program qq;
var x, y, k, code, i: integer;

Программаprogram qq;var x, y, k, code, i: integer; stop: boolean;begin stop

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


Слайд 172 «4»: Ввести с клавиатуры координаты углов прямоугольника и

«4»: Ввести с клавиатуры координаты углов прямоугольника и заполнить его точками

заполнить его точками случайного цвета.




«5»: Заполнить треугольник точками

случайного цвета (равномерно или неравномерно).
Подсказка: возьмите равнобедренный треугольник с углом 45о.

Задания


(100,100)

(300,200)


  • Имя файла: programmirovanie-na-yazyke-paskal.pptx
  • Количество просмотров: 142
  • Количество скачиваний: 0