kopilkaurokov.ru - сайт для учителей

Создайте Ваш сайт учителя Курсы ПК и ППК Видеоуроки Олимпиады Вебинары для учителей

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

Нажмите, чтобы узнать подробности

Свойства алгоритма

•дискретность: состоит из отдельных шагов (команд)

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

•определенность: при одинаковых исходных данных всегда выдает один и тот же результат

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

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

•корректность: дает верное решение при любых допустимых исходных данных

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

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

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

  • Графика
  • Графики функций
  • Процедуры
  • Рекурсия
  • Анимация
  • Функции
  • Случайные числа
  • Введение
  • Ветвления
  • Сложные условия
  • Циклы
  • Циклы с условием
  • Оператор выбора

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

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

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

Тема 1. Введение

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

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

Алгоритм

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

Свойства алгоритма

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

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

Программа

Программа – это

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

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

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

Языки программирования Машинно-ориентированные (низкого уровня) - каждая команда соответствует одной команде процессора (ассемблер) Языки высокого уровня  – приближены к естественному (английскому) языку, легче воспринимаются человеком, не зависят от конкретного компьютера для обучения : Бейсик, ЛОГО, Паскаль профессиональные : Си, Фортран , Паскаль для задач искусственного интеллекта : Пролог, ЛИСП для Интернета : JavaScript, Java, Perl, PHP, ASP для обучения : Бейсик, ЛОГО, Паскаль профессиональные : Си, Фортран , Паскаль для задач искусственного интеллекта : Пролог, ЛИСП для Интернета : JavaScript, Java, Perl, PHP, ASP

Языки программирования

  • Машинно-ориентированные (низкого уровня) - каждая команда соответствует одной команде процессора (ассемблер)
  • Языки высокого уровня – приближены к естественному (английскому) языку, легче воспринимаются человеком, не зависят от конкретного компьютера
  • для обучения : Бейсик, ЛОГО, Паскаль профессиональные : Си, Фортран , Паскаль для задач искусственного интеллекта : Пролог, ЛИСП для Интернета : JavaScript, Java, Perl, PHP, ASP
  • для обучения : Бейсик, ЛОГО, Паскаль
  • профессиональные : Си, Фортран , Паскаль
  • для задач искусственного интеллекта : Пролог, ЛИСП
  • для Интернета : JavaScript, Java, Perl, PHP, ASP

Язык Паскаль 1970 – Никлаус Вирт (Швейцария)  язык для обучения студентов  разработка программ «сверху вниз»       разнообразные структуры данных (массивы, структуры, множества)  язык для обучения студентов  разработка программ «сверху вниз»       разнообразные структуры данных (массивы, структуры, множества) Задача Подзадача1 Подзадача3 Подзадача 2 3 .3 3 .1 2 .3 2 .2 2 .1 1.3 1.2 1.1 3 .2 6

Язык Паскаль

1970 – Никлаус Вирт (Швейцария)

  • язык для обучения студентов разработка программ «сверху вниз» разнообразные структуры данных (массивы, структуры, множества)
  • язык для обучения студентов
  • разработка программ «сверху вниз»
  • разнообразные структуры данных (массивы, структуры, множества)

Задача

Подзадача1

Подзадача3

Подзадача 2

3 .3

3 .1

2 .3

2 .2

2 .1

1.3

1.2

1.1

3 .2

6

6 Из чего состоит программа? program  ; const … ; { константы } var  … ; { переменные } begin … { основная программа } end. { процедуры и функции } комментарии в фигурных скобках не обрабатываются 6

6

Из чего состоит программа?

program ;

const … ; { константы }

var … ; { переменные }

begin

{ основная программа }

end.

{ процедуры и функции }

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

6

6 Из чего состоит программа? Константа – постоянная величина, имеющая имя. Переменная – изменяющаяся величина, имеющая имя (ячейка памяти). Процедура – вспомогательный алгоритм, описывающий некоторые действия (рисование окружности). Функция – вспомогательный алгоритм для выполнения вычислений (вычисление квадратного корня, sin ) . 6

6

Из чего состоит программа?

Константа – постоянная величина, имеющая имя.

Переменная – изменяющаяся величина, имеющая имя (ячейка памяти).

Процедура – вспомогательный алгоритм, описывающий некоторые действия (рисование окружности).

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

6

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

6

Имена программы, констант, переменных

Имена могут включать

  • латинские буквы ( A-Z) цифры знак подчеркивания _
  • латинские буквы ( A-Z)
  • цифры
  • знак подчеркивания _

заглавные и строчные буквы не различаются

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

Имена НЕ могут включать

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

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

AXby R&B 4Wheel Вася “PesBarbos” TU154 [QuQu] _ABBA A+B

6

6 Константы const     i2 = 45; { целое число }  pi = 3.14; { вещественное число }  qq = ' Вася ';  { строка символов }  L = True;  { логическая величина } целая и дробная часть отделяются точкой можно использовать русские буквы! может принимать два значения:  True ( истина, «да» )  False ( ложь, «нет»)  True ( истина, «да» )  False ( ложь, «нет») 6

6

Константы

const

i2 = 45; { целое число }

pi = 3.14; { вещественное число }

qq = ' Вася '; { строка символов }

L = True; { логическая величина }

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

можно использовать русские буквы!

может принимать два значения:

  • True ( истина, «да» ) False ( ложь, «нет»)
  • True ( истина, «да» )
  • False ( ложь, «нет»)

6

6 Переменные Переменная – это величина, имеющая имя, тип и значение. Значение переменной можно изменять во время работы программы. Типы переменных: integer    { целая } real    { вещественная } char    { один символ } string    { символьная строка } boolean    { логическая } integer    { целая } real    { вещественная } char    { один символ } string    { символьная строка } boolean    { логическая } Объявление переменных ( выделение памяти ) : var  a, b: integer;   Q: real;   s1, s2: string;   Q: real;   s1, s2: string; 6

6

Переменные

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

Типы переменных:

  • integer { целая } real { вещественная } char { один символ } string { символьная строка } boolean { логическая }
  • integer { целая }
  • real { вещественная }
  • char { один символ }
  • string { символьная строка }
  • boolean { логическая }

Объявление переменных ( выделение памяти ) :

var a, b: integer;

Q: real;

s1, s2: string;

  • Q: real; s1, s2: string;

6

6 Целочисленные типы данных 6

6

Целочисленные типы данных

6

6 Вещественные типы данных 6

6

Вещественные типы данных

6

6 Как изменить значение переменной? Оператор – это команда языка программирования высокого уровня. Оператор присваивания служит для изменения значения переменной. Пример:  program qq;  var a, b: integer;  begin   a := 5;   b := a + 2;   a := (a + 2)*(b – 3);  end. a 5 ? 5 b 7 5+2 ? a 5 7*4 28 6

6

Как изменить значение переменной?

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

Оператор присваивания служит для изменения значения переменной.

Пример:

program qq;

var a, b: integer;

begin

a := 5;

b := a + 2;

a := (a + 2)*(b – 3);

end.

a

5

?

5

b

7

5+2

?

a

5

7*4

28

6

:= выражение ; Арифметическое выражение может включать константы имена переменных знаки арифметических операций: константы имена переменных знаки арифметических операций: + - * / div mod + - * / div mod вызовы функций круглые скобки ( ) вызовы функций круглые скобки ( ) умножение деление нацело деление остаток от деления 6" width="640"

6

Оператор присваивания

имя переменной := выражение ;

Арифметическое выражение может включать

  • константы имена переменных знаки арифметических операций:
  • константы
  • имена переменных
  • знаки арифметических операций:

+ - * / div mod

  • + - * / div mod
  • вызовы функций круглые скобки ( )
  • вызовы функций
  • круглые скобки ( )

умножение

деление нацело

деление

остаток от деления

6

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

6

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

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.

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

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

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

6

6 Ручная прокрутка программы 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 3 5 4 4

6

Ручная прокрутка программы

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

3

5

4

4

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

Порядок выполнения операций

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

2 3 5 4 1 7 8 6 9

  • 2 3 5 4 1 7 8 6 9

z := ( 5*a*c+3*(c-d))/a*(b-c)/ b;

  • z := ( 5*a*c+3*(c-d))/a*(b-c)/ b;

2 6 3 4 7 5 1 12 8 11 10 9

  • 2 6 3 4 7 5 1 12 8 11 10 9

x:= ( a*a+5*c*c-d*(a+b))/((c+d)*(d-2*a));

  • x:= ( a*a+5*c*c-d*(a+b))/((c+d)*(d-2*a));

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

Сложение двух чисел

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

Простейшее решение:

program qq;

var a, b, c: integer;

begin

read ( a, b );

c := a + b;

writeln ( c );

end.

Оператор ввода read ( a );  { ввод значения переменной a} read ( a, b );  { ввод значений переменных a и b} Как вводить два числа?  через пробел:  25 30  через Enter :  25  30 a 25 b 30 a 25 b 30 20

Оператор ввода

read ( a ); { ввод значения переменной a}

read ( a, b ); { ввод значений переменных a и b}

Как вводить два числа?

через пробел:

25 30

через Enter :

25

30

a

25

b

30

a

25

b

30

20

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

20

Оператор вывода

write ( a ); { вывод значения переменной a}

write ln ( a ); { вывод значения переменной a и переход на новую строчку }

writeln ( ' Привет! ' ); { вывод текста }

writeln ( ' Ответ: ', c ); { вывод текста и значения переменной c}

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

20

', i, ' writeln ( '', i:5, ' x := 12.345678; writeln ( '', x, ' writeln ( '', x:10, ' writeln ( '', x:7:2, ' end. всего символов 15 151.234568E+001 1.23E+001 12.35всего символов в дробной части 20" width="640"

20

Форматы вывода

program qq;

var i: integer;

x: real;

begin

i := 15;

writeln ( '', i, '

writeln ( '', i:5, '

x := 12.345678;

writeln ( '', x, '

writeln ( '', x:10, '

writeln ( '', x:7:2, '

end.

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

15

15

1.234568E+001

1.23E+001

12.35

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

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

20

20 Полное решение  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, c: integer;

begin

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

read ( a, b );

c := a + b;

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

end.

компьютер

Протокол :

Введите два целых числа

25 30

25+30=55

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

20

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

20

Блок-схема линейного алгоритма

начало

блок «начало»

ввод a , b

блок «ввод»

c := a + b;

блок «процесс»

вывод c

блок «вывод»

конец

блок «конец»

20

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

20

Задания

«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

20

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

20

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

Тема 2. Ветвления

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

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

Разветвляющиеся алгоритмы

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

Идея решения: надо вывести на экран первое число, если оно больше второго, или второе, если оно больше первого.

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

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

b? max:= a; max:= b; вывод max конец ? Если a = b? 28" width="640"

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

блок «решение»

начало

ввод a,b

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

да

нет

a b?

max:= a;

max:= b;

вывод max

конец

?

Если a = b?

28

b then begin end else begin end ; writeln (' Наибольшее число ', max); end. полная форма условного оператора max := a ; max := b ; 28" width="640"

28

Вариант 1. Программа

program qq;

var a, b, max: integer;

begin

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

read ( a, b );

if a b then begin

end

else begin

end ;

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

end.

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

max := a ;

max := b ;

28

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

28

Условный оператор

if then begin

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

end

else begin

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

end ;

Особенности:

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

28

b then begin a := b; end else b := a; end ; if a b then begin a := b; else begin b := a; end ; end begin 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 ; end begin 28" width="640"

28

Что неправильно?

if a b then begin

a := b;

end

else

b := a;

end ;

if a b then begin

a := b;

else begin

b := a;

end ;

end

begin

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 ;

end

begin

28

a? max:= b; вывод max конец 32" width="640"

28

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

начало

ввод a,b

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

max:= a;

да

нет

b a?

max:= b;

вывод max

конец

32

a then max := b; writeln (' Наибольшее число ', max); end. неполная форма условного оператора 32" width="640"

32

Вариант 2. Программа

program qq;

var a, b, max: integer;

begin

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

read ( a, b );

max := a;

if b a then

max := b;

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

end.

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

32

b max := a; 32" width="640"

32

Вариант 2Б. Программа

program qq;

var a, b, max: integer;

begin

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

read ( a, b );

max := b;

if ??? then

???

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

end.

a b

max := a;

32

b then begin a := b; end; else b := a; if a b then begin a := b; else b := a; a := b end if a b then a := b; else b := a; end; if a b then else begin b := a; end ; if b = a then b := a; a := b 32" width="640"

32

Что неправильно?

if a b then begin

a := b;

end;

else b := a;

if a b then begin

a := b;

else b := a;

a := b

end

if a b then

a := b;

else b := a; end;

if a b then

else begin

b := a;

end ;

if b = a then

b := a;

a := b

32

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

32

Задания

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

Пример:

Введите три числа:

4 15 9

Наибольшее число 15

«5»: Ввести пять чисел и найти наибольшее из них.

Пример:

Введите пять чисел:

4 15 9 56 4

Наибольшее число 5 6

32

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

32

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

Тема 3. Сложные условия

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

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

Сложные условия

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

Особенность: надо проверить, выполняются ли два условия одновременно.

?

Можно ли решить известными методами ?

38

= 25? да нет x ' не подходит ' ' подходит ' ' не подходит ' конец 38" width="640"

38

Вариант 1. Алгоритм

начало

ввод x

да

нет

x = 25?

да

нет

x

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

' подходит '

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

конец

38

= 25 then if x writeln (' Подходит ') else writeln (' Не подходит ') else writeln (' Не подходит '); end. 38" width="640"

38

Вариант 1. Программа

program qq;

var x: integer;

begin

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

read ( x );

if x = 25 then

if x

writeln (' Подходит ')

else writeln (' Не подходит ')

else

writeln (' Не подходит ');

end.

38

= 25 и x нет да ' не подходит ' ' подходит ' конец 41" width="640"

38

Вариант 2. Алгоритм

начало

ввод x

x = 25 и

x

нет

да

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

' подходит '

конец

41

= 25) and (x writeln (' Подходит ') else writeln (' Не подходит ') end. сложное условие 41" width="640"

41

Вариант 2 . Программа

program qq;

var x: integer;

begin

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

read ( x );

if (x = 25) and (x

writeln (' Подходит ')

else writeln (' Не подходит ')

end.

сложное условие

41

= = равно не равно 41" width="640"

41

Сложные условия

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

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

Простые условия (отношения)

= =

равно

не равно

41

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

41

Сложные условия

Порядок выполнения (приоритет = старшинство )

  • выражения в скобках
  • выражения в скобках
  • not and or, xor , =, =,
  • not
  • and
  • or, xor
  • , =, =,

Особенность – каждое из простых условий обязательно заключать в скобки.

Пример

4 1 6 2 5 3

if not (a b) or (c d) and (b a)

then begin

...

end

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

41

b) (a not (a = b) or (c = d) (a (a c) not (a b) (a not (a = b) or (c = d) (a (a c) Для каких значений x истинны условия: (x (x 10) (x 6) and (x (x 6) and (x 10) (x (x 10) (x 6) or (x (x 6) or (x 10) (x (x 10) (x 6) and (x (x 6) and (x 10) (x (x 10) (x 6) or (x (x 6) or (x 10) True True True True FALSE (-  ; 6) x  (6; 10) x 10 (10;  ) (-  ; 10) x (-  ; 6)  (10;  ) (-  ;  ) x 6 (6;  )" width="640"

41

Сложные условия

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

not (a b)

(a

not (a = b) or (c = d)

(a

(a c)

  • not (a b) (a not (a = b) or (c = d) (a (a c)

Для каких значений x истинны условия:

(x

(x 10)

(x 6) and (x

(x 6) and (x 10)

(x

(x 10)

(x 6) or (x

(x 6) or (x 10)

  • (x (x 10) (x 6) and (x (x 6) and (x 10) (x (x 10) (x 6) or (x (x 6) or (x 10)

True

True

True

True

FALSE

(-  ; 6)

x

(6; 10)

x 10

(10;  )

(-  ; 10)

x

(-  ; 6)  (10;  )

(-  ;  )

x 6

(6;  )

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

Задания

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

Пример:

Введите номер месяца:

4

весна

«5»: Ввести возраст человека (от 1 до 150 лет) и вывести его вместе с последующим словом «год», «года» или «лет».

Пример:

Введите возраст: Введите возраст:

24 57

Вам 24 года Вам 57 лет

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

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

Тема 4. Циклы

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

Циклы Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным числом шагов цикл с неизвестным числом шагов (цикл с условием) цикл с известным числом шагов цикл с неизвестным числом шагов (цикл с условием) Задача. Вывести на экран квадраты и кубы целых чисел от 1 до 8 (от a  до b ). Особенность: одинаковые действия выполняются 8 раз. ?  Можно ли решить известными методами ? 48

Циклы

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

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

Задача. Вывести на экран квадраты и кубы целых чисел от 1 до 8 (от a до b ).

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

?

Можно ли решить известными методами ?

48

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

48

Алгоритм

начало

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

i := 1;

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

нет

i

конец

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

да

i2 := i * i;

i3 := i2 * i;

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

i, i2, i3

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

i := i + 1;

48

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

48

Алгоритм ( с блоком «цикл»)

блок «цикл»

начало

i := 1,8

конец

i2 := i * i;

i3 := i2 * i;

тело цикла

i, i2, i3

48

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

48

Программа

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.

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

переменная

цикла

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

48

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

48

Цикл с уменьшением переменной

Задача. Вывести на экран квадраты и кубы целых чисел от 8 до 1 (в обратном порядке).

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

Решение:

for i:=8 1 do begin

i2 := i*i;

i3 := i2*i;

writeln(i:4, i2:4, i3:4);

end;

down to

48

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

48

Цикл с переменной

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

for := to

do begin

{ тело цикла }

end;

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

for := downto

do begin

{ тело цикла }

end;

48

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

48

Цикл с переменной

Особенности:

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

for i:= 1 to 8 do

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

48

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

48

Цикл с переменной

Особенности:

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

n := 8;

for i:= 1 to n do begin

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

n := n + 1;

end;

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

48

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

48

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

Цикл с переменной

Особенности:

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

for i:= 1 to 8 do

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

writeln ( 'i=', i ) ;

i=9

for i:= 8 d ownto 1 do

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

writeln ( 'i=', i ) ;

i=0

48

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

48

Сколько раз выполняется цикл?

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

48

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

48

Как изменить шаг?

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

Особенность: переменная цикла должна увеличиваться на 2.

Проблема: в Паскале шаг может быть 1 или -1.

Решение:

выполняется только для нечетных i

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;

i mod 2 = 1

i2 := i*i;

i3 := i2*i;

writeln(i:4, i2:4, i3:4);

?

Что плохо ?

58

58 Как изменить шаг? – II Идея: Надо вывести всего 5 чисел, переменная k  изменяется от 1 до 5.  Начальное значение i равно 1, с каждым шагом цикла i увеличивается на 2. Решение: i := 1;   ???  for k:= 1 to 5 do begin  i2 := i*i;  i3 := i2*i;  writeln(i:4, i2:4, i3:4);  ???   end; i := i + 2; 58

58

Как изменить шаг? – II

Идея: Надо вывести всего 5 чисел, переменная k изменяется от 1 до 5. Начальное значение i равно 1, с каждым шагом цикла i увеличивается на 2.

Решение:

i := 1;

???

for k:= 1 to 5 do begin

i2 := i*i;

i3 := i2*i;

writeln(i:4, i2:4, i3:4);

???

end;

i := i + 2;

58

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

58

Как изменить шаг? – III

Идея: Надо вывести всего 5 чисел, переменная k изменяется от 1 до 5. Зная k , надо рассчитать i .

Решение:

i = 2k-1

k

1

i

1

2

3

3

5

4

7

5

9

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;

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

Задания

«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

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

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

Тема 5. Циклы с условием

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

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

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

Пример: Отпилить полено от бревна. Сколько раз надо сделать движения пилой?

Задача: Ввести целое число (

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

Проблема: Неизвестно, сколько шагов надо сделать.

Решение: Надо остановиться, когда n = 0 , т.е. надо делать «пока n 0 » .

n

123

count

12

0

1

1

0

2

3

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

Алгоритм

начало

обнулить счетчик цифр

ввод n

count := 0 ;

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

n 0?

нет

да

count

count := count + 1;

n := n div 10;

конец

Программа 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. , n1: integer; n1 := n; выполнять «пока n    0 »  while n  0 do begin  count := count + 1;  n := n div 10;  end; n1, ?  Что плохо ? 65

Программа

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.

, n1: integer;

n1 := n;

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

while n 0 do begin

count := count + 1;

n := n div 10;

end;

n1,

?

Что плохо ?

65

65 Цикл с условием  while    do  begin  { тело цикла }   end; Особенности: можно использовать сложные условия: если в теле цикла только один оператор, слова begin  и end  можно не писать: можно использовать сложные условия: если в теле цикла только один оператор, слова begin  и end  можно не писать: while (a { тело цикла } end; while a  a := a + 1; 65

65

Цикл с условием

while do begin

{ тело цикла }

end;

Особенности:

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

while (a

{ тело цикла }

end;

while a

a := a + 1;

65

b d o a := a – b; a := 4; b := 6; while a d := a + b; 65" width="640"

65

Цикл с условием

Особенности:

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

a := 4; b := 6;

while a b d o

a := a – b;

a := 4; b := 6;

while a

d := a + b;

65

b d o a := a + 1; 1 раз b = -2 a := 4; b := 6; while a зацикливание a := 4; b := 6; while a 65" width="640"

65

Сколько раз выполняется цикл ?

2 раза

a = 6

a := 4; b := 6;

while a

1 раз

a = 10

a := 4; b := 6;

while a

0 раз

a = 4

a := 4; b := 6;

while a b d o a := a + 1;

1 раз

b = -2

a := 4; b := 6;

while a

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

a := 4; b := 6;

while a

65

= b d o begin { тело цикла } i := i - 1; end; for i:=a downto b d o begin { тело цикла } end; Замена цикла for на while возможна всегда . Замена while на for возможна только тогда, когда можно заранее рассчитать число шагов цикла . 65" width="640"

65

Замена for на while и наоборот

i := 1;

while i

{ тело цикла }

i := i + 1;

end;

for i:=1 to 10 d o begin

{ тело цикла }

end;

i := a;

while i = b d o begin

{ тело цикла }

i := i - 1;

end;

for i:=a downto b d o

begin

{ тело цикла }

end;

Замена цикла for на while возможна всегда .

Замена while на for возможна только тогда, когда можно заранее рассчитать число шагов цикла .

65

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

65

Задания

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

Пример:

Введите целое число:

1234

Сумма цифр числа 1234 равна 10.

«5»: Ввести целое число и определить, верно ли, что в его записи есть две одинаковые цифры.

Пример:

Введите целое число: Введите целое число:

1234 1224

Нет. Да.

65

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

65

Последовательности

Примеры:

  • 1 , 2, 3, 4, 5, … 1, 2, 4, 7, 11, 16, … 1, 2, 4, 8 , 1 6 , 32 , …
  • 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 1 = 1, a n +1 = 2 a n

a n = 2 n-1

b 1 = 1, b n +1 = b n +1

c 1 = 2, c n +1 = 2 c n

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

Последовательности

Задача: найти сумму всех элементов последовательности,

которые по модулю больше 0,001:

Элемент последовательности (начиная с №2):

b := b+1;

n

b

1

c

2

1

3

2

z

2

4

3

4

-1

4

1

8

5

-1

16

5

...

1

...

32

...

-1

...

c := 2*c;

z := -z;

0.001? нет да новый элемент S S := S + a; конец a := z*b/c; b := b + 1; c := 2*c; z := -z; изменение ? Перестановка ? 73" width="640"

Алгоритм

начальные значения

начало

S := 0 ; b := 1; c := 2 ; z := -1; a := 1;

S := 0 ;

первый элемент

a := 1;

|a| 0.001?

нет

да

новый элемент

S

S := S + a;

конец

a := z*b/c;

b := b + 1; c := 2*c; z := -z;

изменение

?

Перестановка ?

73

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. начальные значения S := 0; z := -1; b := 1; c := 2; a := 1; увеличение суммы z := - z; b := b + 1; c := c * 2; расчет элемента последовательности переход к следующему слагаемому 73" width="640"

73

Программа

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.

начальные значения

S := 0; z := -1;

b := 1; c := 2; a := 1;

увеличение суммы

z := - z;

b := b + 1;

c := c * 2;

расчет элемента последовательности

переход к следующему слагаемому

73

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

73

Задания

«4»: Найти сумму элементов последовательности с точностью 0,001:

Ответ:

S = 1.157

«5»: Найти сумму элементов последовательности с точностью 0,001:

Ответ:

S = 1.220

73

проверку условия цикла надо делать в конце цикла (цикл с постусловием ). Цикл с постусловием – это цикл, в котором проверка условия выполняется в конце цикла. 73" width="640"

73

Цикл с постусловием

Задача: Ввести целое положительное число (

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

Решение: Если вводится неверное число, вернуться назад к вводу данных (цикл!).

Особенность: Один раз тело цикла надо сделать в любом случае = проверку условия цикла надо делать в конце цикла (цикл с постусловием ).

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

73

73 Цикл с условием Repeat   { тело цикла }  Until    Особенности: можно использовать сложные условия: При любом условии цикл выполняется один раз можно использовать сложные условия: При любом условии цикл выполняется один раз 73

73

Цикл с условием

Repeat

{ тело цикла }

Until

Особенности:

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

73

0? нет условие ВЫХОДА да основной алгоритм блок «типовой процесс» конец 73" width="640"

73

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

начало

ввод n

тело цикла

n 0?

нет

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

да

основной алгоритм

блок «типовой процесс»

конец

73

0; ... { основной алгоритм } end. repeat writeln(' Введите положительное число '); read(n); until n 0; условие ВЫХОДА until n 0; Особенности: тело цикла всегда выполняется хотя бы один раз после слова until ("до тех пор, пока не…") ставится условие ВЫХОДА из цикла тело цикла всегда выполняется хотя бы один раз после слова until ("до тех пор, пока не…") ставится условие ВЫХОДА из цикла 73" width="640"

73

Программа

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

73

b; 1 раз a = 10 a := 4; b := 6; repeat a := a + b ; until a b; a := 4; b := 6; repeat a := a + b ; until a зацикливание a := 4; b := 6; repeat b := a - b ; until a 2 раза b = 6 a := 4; b := 6; repeat a := a + 2 ; until a зацикливание 73" width="640"

73

Сколько раз выполняется цикл ?

3 раза

a = 7

a := 4; b := 6;

repeat a := a + 1; until a b;

1 раз

a = 10

a := 4; b := 6;

repeat a := a + b ; until a b;

a := 4; b := 6;

repeat a := a + b ; until a

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

a := 4; b := 6;

repeat b := a - b ; until a

2 раза

b = 6

a := 4; b := 6;

repeat a := a + 2 ; until a

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

73

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

73

Задания (с защитой от неверного ввода)

«4»: Ввести натуральное число и определить, верно ли, что сумма его цифр равна 10.

Пример:

Введите число = 0 : Введите число = 0 :

-234 1233

Нужно положительное число. Нет

Введите число = 0 :

1234

Да

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

Пример:

Введите число = 0 : Введите число = 0 :

2323 1234

Повторяются: 2, 3 Нет повторов.

73

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

73

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

Тема 6 . Оператор выбора

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

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

Оператор выбора

Задача: Ввести номер месяца и вывести количество дней в этом месяце.

Решение: Число дней по месяцам:

28 дней – 2 (февраль)

30 дней – 4 (апрель), 6 (июнь), 9 (сентябрь), 11 (ноябрь)

31 день – 1 (январь), 3 (март), 5 (май), 7 (июль), 8 (август), 10 (октябрь), 12 (декабрь)

  • 28 дней – 2 (февраль) 30 дней – 4 (апрель), 6 (июнь), 9 (сентябрь), 11 (ноябрь) 31 день – 1 (январь), 3 (март), 5 (май), 7 (июль), 8 (август), 10 (октябрь), 12 (декабрь)

Особенность: Выбор не из двух, а из нескольких вариантов в зависимости от номера месяца.

?

Можно ли решить известными методами ?

83

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

83

Алгоритм

начало

ввод M

выбор

да

M = 1?

D := 31;

нет

да

M = 2?

D := 28;

нет

да

M = 12?

D := 31;

нет

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

вывод D

ошибка

конец

83

0 then writeln(' В этом месяце ', D, ' дней. ') else writeln(' Неверный номер месяца '); end. case M of 2: begin D := 28; end; 4,6,9,11: begin D := 30; end; 1,3,5,7,8,10,12: D := 31; else D := -1; end; ни один вариант не подошел 83" width="640"

83

Программа

program qq;

var M, D: integer;

begin

writeln(' Введите номер месяца: ');

read ( M );

case M of

2: begin D := 28; end;

4,6,9,11: begin D := 30; end;

1,3,5,7,8,10,12: D := 31;

else D := -1;

end;

if D 0 then

writeln(' В этом месяце ', D, ' дней. ')

else

writeln(' Неверный номер месяца ');

end.

case M of

2: begin D := 28; end;

4,6,9,11: begin D := 30; end;

1,3,5,7,8,10,12: D := 31;

else D := -1;

end;

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

83

83 Оператор выбора Особенности: после case  может быть имя переменной или арифметическое выражение целого типа ( integer ) после case  может быть имя переменной или арифметическое выражение целого типа ( integer )  или символьного типа ( char )  или символьного типа ( 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; 83

83

Оператор выбора

Особенности:

  • после case может быть имя переменной или арифметическое выражение целого типа ( integer )
  • после case может быть имя переменной или арифметическое выражение целого типа ( integer )

или символьного типа ( char )

  • или символьного типа ( 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;

83

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

83

Оператор выбора

Особенности:

  • если нужно выполнить только один оператор, слова begin и end можно не писать нельзя ставить два одинаковых значения
  • если нужно выполнить только один оператор, слова begin и end можно не писать
  • нельзя ставить два одинаковых значения

case i+3 of

1: a := b;

2 : a := c;

end;

case i+3 of

1: a := b;

1: a := c;

end;

87

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

87

Оператор выбора

Особенности:

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

case i of

1: a := b;

2,4 ,6 : a := c;

10..15: a := d;

20,21,25..30: a := e;

else writeln(' Ошибка ');

end;

перечисление

диапазон

смесь

87

87 Что неправильно ? 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: begin case  a+c/2  of  2: a := b;  4: a := c; end; case  a  of  2: a := b; d := 0;  4: a := c; end; end; 89

87

Что неправильно ?

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:

begin

case a+c/2 of

2: a := b;

4: a := c;

end;

case a of

2: a := b; d := 0;

4: a := c;

end;

end;

89

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

89

Задания (с защитой от неверного ввода)

«4»: Ввести номер месяца и вывести количество дней в нем, а также число ошибок при вводе.

Пример:

Введите номер месяца: Введите номер месяца:

-2 2

Введите номер месяца: В этом месяце 28 дней.

1 1 Вы вводили неверно 0 раз.

В этом месяце 30 дней.

Вы вводили неверно 1 раз.

«5»: Ввести номер месяца и номер дня, вывести число дней, оставшихся до Нового года.

Пример:

Введите номер месяца:

12

Введите день:

25

До Нового года осталось 6 дней.

89

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

89

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

Тема 7. Графика

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

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

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

X

(0,0)

y

( x , y )

x

Y

Управление цветом Цвет и толщина линий, цвет точек:  Pen ( 1, 255, 0, 0 );  Pen ( 1, 255, 0, 0 ); Цвет и стиль заливки:  Brush ( 1, 0, 255, 0 );  Brush ( 1, 0, 255, 0 ); Цвет текста:  TextColor ( 0 , 0, 255 );  TextColor ( 0 , 0, 255 ); B ( blue ) 0..255 R ( red ) 0..255 G ( green ) 0..255 толщина линии 0 – выключить 1 - включить R G B R G B

Управление цветом

Цвет и толщина линий, цвет точек:

Pen ( 1, 255, 0, 0 );

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

Цвет и стиль заливки:

Brush ( 1, 0, 255, 0 );

  • Brush ( 1, 0, 255, 0 );

Цвет текста:

TextColor ( 0 , 0, 255 );

  • TextColor ( 0 , 0, 255 );

B ( blue )

0..255

R ( red )

0..255

G ( green )

0..255

толщина линии

0 – выключить

1 - включить

R

G

B

R

G

B

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

Точки, отрезки и ломаные

( x , y )

Pen (1, 0, 0, 255) ;

Point (x, y) ;

( x 1 , y 1 )

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

( x 2 , y 2 )

( x 2 , y 2 )

( x 1 , y 1 )

Pen (1, 255, 0, 0) ; MoveTo (x1, y1) ; LineTo (x2, y2) ;

LineTo (x3, y3) ;

LineTo (x4, y4) ;

LineTo (x5, y5) ;

( x 3 , y 3 )

( x 5 , y 5 )

( x 4 , y 4 )

94

94 Фигуры с заливкой ( x 1 , y 1 ) Pen  (1, 0, 0, 255) ; Brush  (1, 255, 255, 0) ; Rectangle  (x1, y1, x2, y2) ; ( x 2 , y 2 ) ( x 1 , y 1 ) Pen  (1, 255, 0, 0) ; Brush  (1, 0, 255, 0) ; Ellipse  (x1, y1, x2, y2) ; ( x 2 , y 2 ) ?  Как отменить заливку ? ( x , y ) Brush  (1, 100, 200, 255) ; Fill  (x, y) ; 95

94

Фигуры с заливкой

( x 1 , y 1 )

Pen (1, 0, 0, 255) ;

Brush (1, 255, 255, 0) ;

Rectangle (x1, y1, x2, y2) ;

( x 2 , y 2 )

( x 1 , y 1 )

Pen (1, 255, 0, 0) ;

Brush (1, 0, 255, 0) ;

Ellipse (x1, y1, x2, y2) ;

( x 2 , y 2 )

?

Как отменить заливку ?

( x , y )

Brush (1, 100, 200, 255) ;

Fill (x, y) ;

95

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

95

Привет!

Текст

TextColor (0, 0, 255) ;

Brush (1, 255, 255, 0) ;

Font (20, 30 , 600 ) ;

MoveTo (x, y) ;

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

( x , y )

насыщенность :

400 – нормальный

600 – жирный

угол

поворота

размер

10 пикселей

30 о

95

95 Пример 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. (200, 50) (100, 100) (300, 200) 95

95

Пример

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.

(200, 50)

(100, 100)

(300, 200)

95

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

95

Задания

«4»: «Лягушка»

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

98

98 Штриховка N линий  ( N=5) ( x 1 , y 1 ) Rectangle  (x1, y1, x2, y2) ; Line( x1+h, y1, x1+h, y2) ; Line( x1+2*h, y1, x1+2*h, y2) ; Line( x1+3*h, y1, x1+3*h, y2) ; ... h ( x 2 , y 2 ) x x 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; округление до ближайшего целого

98

Штриховка

N линий ( N=5)

( x 1 , y 1 )

Rectangle (x1, y1, x2, y2) ;

Line( x1+h, y1, x1+h, y2) ;

Line( x1+2*h, y1, x1+2*h, y2) ;

Line( x1+3*h, y1, x1+3*h, y2) ;

...

h

( x 2 , y 2 )

x

x

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;

округление до ближайшего целого

Штриховка (программа) N ( x 1 , y 1 ) 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. h ( x 2 , y 2 ) 100

Штриховка (программа)

N

( x 1 , y 1 )

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.

h

( x 2 , y 2 )

100

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

100

Как менять цвет?

серый: R = G = B

( x 1 , y 1 )

x

Brush ( 1, c, c, c );

Fill ( ??? , ??? );

( x-1 , y 1 +1 )

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

( x 2 , y 2 )

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;

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

Штриховка

a

( x 1 , y 1 )

( 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) ;

...

( x 2 , y 2 )

( x 3 , y 2 )

h

x

x-a

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 1 , y 1 ) h x 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) ; ... h y y x y 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; ( x 2 , y 2 )

Штриховка

( x 1 , y 1 )

h x

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) ;

...

h y

y

x

y

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;

( x 2 , y 2 )

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

Задания

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

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

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

Задания

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

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

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

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

Тема 8 . Графики функций

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

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

Построение графиков функций

Задача: построить график функции y = 3 sin(x ) на интервале от 0 до 2 π .

Анализ:

максимальное значение y max = 3 при x = π /2

минимальное значение y min = -3 при x = 3 π /2

  • максимальное значение y max = 3 при x = π /2 минимальное значение y min = -3 при x = 3 π /2

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

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

Преобразование координат

Математическая

система координат

Экранная система координат (пиксели)

Y

a

( 0 , 0 )

x

y э

( x , y )

b

x э

y

( x э , y э )

X

( 0 , 0 )

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

x э = a + kx

y э = b - ky

108

108 Программа 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  y := 3*sin(x);  xe := a + round(k*x);  ye := b - round(k*y);  Point  (xe, ye);  x := x + h;  end;  end. 2 π h – шаг изменения x на экране w – длина оси ОХ  в пикселях оси координат цикл построения графика ?  Что плохо ? 109

108

Программа

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

y := 3*sin(x);

xe := a + round(k*x);

ye := b - round(k*y);

Point (xe, ye);

x := x + h;

end;

end.

2 π

h – шаг изменения x

на экране

w – длина оси ОХ в пикселях

оси координат

цикл построения графика

?

Что плохо ?

109

109 Как соединить точки? логическая переменная Алгоритм: Программа: Если первая точка  перейти в точку ( x э , y э ) иначе  отрезок в точку ( x э , y э ) var first: boolean;  ... begin  ...  first := True;   while x  ...  if first then begin  MoveTo(xe, ye);  first := False;  end  else LineTo(xe, ye);  ...   end;  end. начальное значение выбор варианта действий 109

109

Как соединить точки?

логическая переменная

Алгоритм:

Программа:

Если первая точка

перейти в точку ( x э , y э )

иначе

отрезок в точку ( x э , y э )

var first: boolean;

...

begin

...

first := True;

while x

...

if first then begin

MoveTo(xe, ye);

first := False;

end

else LineTo(xe, ye);

...

end;

end.

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

выбор варианта действий

109

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

109

Задания

«4»: Построить график функции y = x 2 на интервале [-3,3].

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

109

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

109

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

Тема 9. Процедуры

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

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

Процедуры

Задача: Построить фигуру:

Особенность: Три похожие фигуры.

общее : размеры, угол поворота

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

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

?

Можно ли решить известными методами ?

?

Сколько координат надо задать ?

113

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

113

Процедуры

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

Применение:

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

Задача

Подзадача3

Подзадача 2

Подзадача1

3 .3

3 .1

2 .3

2 .2

2 .1

1.3

1.2

1.1

3 .2

114

114 Процедуры Порядок разработки: выделить одинаковые или похожие действия (три фигуры) найти в них общее (размеры, форма, угол поворота) и отличия (координаты, цвет) отличия записать в виде неизвестных переменных, они будут параметрами процедуры  выделить одинаковые или похожие действия (три фигуры) найти в них общее (размеры, форма, угол поворота) и отличия (координаты, цвет) отличия записать в виде неизвестных переменных, они будут параметрами процедуры  параметры заголовок ( 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; 60 ( x +100, y ) цвет MoveTo(x, y); LineTo(x, y-60); LineTo(x+100, y); LineTo(x, y); Brush(1, r, g, b); Fill(x+20, y-20); 100 ( x , y ) координаты тело процедуры 115

114

Процедуры

Порядок разработки:

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

параметры

заголовок

( 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;

60

( x +100, y )

цвет

MoveTo(x, y);

LineTo(x, y-60);

LineTo(x+100, y);

LineTo(x, y);

Brush(1, r, g, b);

Fill(x+20, y-20);

100

( x , y )

координаты

тело процедуры

115

115 Программа формальные параметры 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. procedure Tr( x, y, r, g, b: integer); begin  ... end; 60 ( 100 , 100 ) процедура 100 вызовы процедуры фактические параметры 116

115

Программа

формальные параметры

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.

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

begin

...

end;

60

( 100 , 100 )

процедура

100

вызовы процедуры

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

116

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

116

Процедуры

Особенности:

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

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

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

x

y

r

g

b

116

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

116

Процедуры

Особенности:

  • для каждого формального параметра после двоеточия указывают его тип если однотипные параметры стоят рядом, их перечисляют через запятую внутри процедуры параметры используются так же, как и переменные
  • для каждого формального параметра после двоеточия указывают его тип
  • если однотипные параметры стоят рядом, их перечисляют через запятую
  • внутри процедуры параметры используются так же, как и переменные

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

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

116

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

116

Процедуры

Особенности:

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

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;

116

116 Параметры-переменные Задача: составить процедуру, которая меняет местами значения двух переменных. Особенности: надо, чтобы изменения, сделанные в процедуре, стали известны вызывающей программе надо, чтобы изменения, сделанные в процедуре, стали известны вызывающей программе program qq; var x, y: integer; begin  x := 1; y := 2;  Exchange ( x, y );  writeln ( ’x = ’, x, ’ y = ’, y ); end. procedure Exchange (  a, b: integer ); var c: integer; begin  c := a; a := b; b := c; end; эта процедура работает с копиями параметров x = 1 y = 2 116

116

Параметры-переменные

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

Особенности:

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

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

program qq;

var x, y: integer;

begin

x := 1; y := 2;

Exchange ( x, y );

writeln ( ’x = ’, x, ’ y = ’, y );

end.

procedure Exchange ( a, b: integer );

var c: integer;

begin

c := a; a := b; b := c;

end;

эта процедура работает с копиями параметров

x = 1 y = 2

116

116 Параметры-переменные параметры могут изменяться procedure Exchange ( a, b: integer ); var c: integer; begin  c := a; a := b; b := c; end; var Применение:  таким образом процедура (и функция) может возвращать несколько значений, Запрещенные варианты вызова Exchange ( 2, 3 );   { числа } Exchange ( x + z, y+2 );  { выражения } Exchange ( 2, 3 );   { числа } Exchange ( x + z, y+2 );  { выражения } 116

116

Параметры-переменные

параметры могут изменяться

procedure Exchange ( a, b: integer );

var c: integer;

begin

c := a; a := b; b := c;

end;

var

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

Запрещенные варианты вызова

Exchange ( 2, 3 ); { числа }

Exchange ( x + z, y+2 ); { выражения }

  • Exchange ( 2, 3 ); { числа } Exchange ( x + z, y+2 ); { выражения }

116

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

116

Задания

«4»: Используя процедуры, построить фигуру.

«5»: Используя процедуры, построить фигуру.

равносторонний треугольник

a

a

0,866 ∙ a

a

122

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

122

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

Тема 10 . Рекурсия

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

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

Рекурсивные объекты

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

Примеры:

У попа была собака, он ее любил.

Она съела кусок мяса, он ее убил.

В ямку закопал, надпись написал:

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

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

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

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

Факториал:

если

если

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

124

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

124

Дерево Пифагора

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

6 уровней:

?

Как доказать, что это рекурсивная фигура ?

125

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

125

Дерево Пифагора

Особенности:

  • когда остановиться? деревья имеют различный наклон
  • когда остановиться?
  • деревья имеют различный наклон

когда число оставшихся уровней станет равно нулю!

x 1 = x 0 + L · cos ( α )

y 1 = y 0 – L · sin( α )

α +45 o

α - 45 o

( x 1 , y 1 )

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

L

α

α + π /4

α – π /4

( x 0 , y 0 )

125

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 рекурсивные вызовы Рекурсивной называется процедура, вызывающая сама себя. 125" width="640"

125

Процедура

угол α

длина ствола

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

рекурсивные вызовы

Рекурсивной называется процедура, вызывающая сама себя.

125

125 Программа 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); 128

125

Программа

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);

128

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

128

Задания

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

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

128

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

128

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

Тема 1 1. Анимация

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

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

Анимация

Анимация (англ. animation ) – оживление изображения на экране.

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

Проблема : как изобразить перемещение объекта на экране?

Привязка: состояние объекта задается координатами ( x,y)

Принцип анимации:

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

131

131 Как

131

Как "поймать" нажатие клавиши?

Событие – это изменение в состоянии какого-либо объекта или действие пользователя (нажатие на клавишу, щелчок мышкой).

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;

131

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

131

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

True , если надо остановиться

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 ) , то стоп

131

131 Процедура (рисование и стирание) Идеи одна процедура рисует и стирает стереть = нарисовать цветом фона границу квадрата отключить (в основной программе) одна процедура рисует и стирает стереть = нарисовать цветом фона границу квадрата отключить (в основной программе) ( x , y ) ( x +20, y +20) рисовать ( True ) или нет ( False ) ? 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; рисуем: цвет кисти – желтый стираем: цвет кисти – синий только заливка! 131

131

Процедура (рисование и стирание)

Идеи

  • одна процедура рисует и стирает стереть = нарисовать цветом фона границу квадрата отключить (в основной программе)
  • одна процедура рисует и стирает
  • стереть = нарисовать цветом фона
  • границу квадрата отключить (в основной программе)

( x , y )

( x +20, y +20)

рисовать ( True ) или нет ( False ) ?

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;

рисуем: цвет кисти – желтый

стираем: цвет кисти – синий

только заливка!

131

= 400-20 then stop := true; until stop; end. процедура синий фон отключить границу начальные условия выход по клавише Esc ждем 10 мс выход при касании границы 131" width="640"

131

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

program qq;

var x, y, k, code, i: integer;

stop: boolean;

procedure Draw(x,y: integer; flag: Boolean);

begin

...

end;

begin

Brush(1, 0, 0, 255);

Rectangle(10, 10, 400, 400);

Pen(0, 0, 0, 255);

x := 10; y := 200; stop := false;

repeat

if IsEvent then begin

...

end;

Draw(x, y, True);

Delay(10);

Draw(x, y, False);

x := x + 1;

if x = 400-20 then stop := true;

until stop;

end.

процедура

синий фон

отключить границу

начальные условия

выход по клавише Esc

ждем 10 мс

выход при касании границы

131

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

131

Задания

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

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

131

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

131

Управление клавишами

Задача : жёлтый квадрат внутри синего квадрата управляется клавишами-стрелками. Коды клавиш:

влево – 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;

131

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

131

Программа

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;

?

Что плохо ?

138

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

138

Как убрать мигание?

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

Что хочется : не перерисовать квадрат, если не было никакого события

Решение : нарисовать квадрат и ждать события

Новая проблема : как ждать события?

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

while not IsEvent do;

138

138 Программа 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; рисуем квадрат ждем события while not IsEvent do; только теперь стираем Draw(x, y, False); Event(k, code, i); ... ?  Что можно улучшить ? 140

138

Программа

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;

рисуем квадрат

ждем события

while not IsEvent do;

только теперь стираем

Draw(x, y, False);

Event(k, code, i);

...

?

Что можно улучшить ?

140

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

140

Задания

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

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

141

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

141

Вращение

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

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

Решение : использовать в качестве независимой переменной (менять в цикле) угол поворота α

( x , y )

L

x = x 0 + L · cos ( α )

y = y 0 – L · sin( α )

α

( x 0 , y 0 )

141

141 Процедура рисовать ( True ) или нет ( False ) ? 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; радиус Земли рисуем: цвет кисти – голубой стираем: цвет кисти – черный только заливка! ( x - r , y-r ) ( x , y ) ( x+r , y+r ) 141

141

Процедура

рисовать ( True ) или нет ( False ) ?

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;

радиус Земли

рисуем: цвет кисти – голубой

стираем: цвет кисти – черный

только заливка!

( x - r , y-r )

( x , y )

( x+r , y+r )

141

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

141

Константы и переменные

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;

141

141 Основная программа 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. залить фон черным рисуем Солнце новые координаты ждем 100 мс if IsEvent then begin   Event(k, code, i);  if (k = 1) and (code = 27) then stop := true; end; поворот  на ha 141

141

Основная программа

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.

залить фон черным

рисуем Солнце

новые координаты

ждем 100 мс

if IsEvent then begin

Event(k, code, i);

if (k = 1) and (code = 27) then stop := true;

end;

поворот на ha

141

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

141

Задания

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

«5»: Изобразить модель системы Солнце-Земля-Луна:

146

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

146

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

Тема 1 2. Функции

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

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

Функции

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

Примеры :

  • вычисление , , расчет значений по сложным формулам ответ на вопрос (простое число или нет?)
  • вычисление , ,
  • расчет значений по сложным формулам
  • ответ на вопрос (простое число или нет?)

Зачем?

  • для выполнения одинаковых расчетов в различных местах программы для создания общедоступных библиотек функций
  • для выполнения одинаковых расчетов в различных местах программы
  • для создания общедоступных библиотек функций

?

В чем отличие от процедур ?

148

b then Max := a else Max := b; end; это результат функции 148" width="640"

148

Функции

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

Функция:

формальные параметры

function Max (a, b: integer): integer;

begin

if a b then Max := a

else Max := b;

end;

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

148

148 Функции Особенности: заголовок начинается словом function формальные параметры описываются так же, как и для процедур можно использовать параметры-переменные в конце заголовка через двоеточие указывается тип результата функции располагаются ВЫШЕ основной программы заголовок начинается словом function формальные параметры описываются так же, как и для процедур можно использовать параметры-переменные в конце заголовка через двоеточие указывается тип результата функции располагаются ВЫШЕ основной программы  Max (a, b: integer): integer; function function qq( a, b: integer; x: real ): real; a, b: integer; x: real function Max ( a, b: integer): integer; var function Max (a, b: integer): ; integer 150

148

Функции

Особенности:

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

Max (a, b: integer): integer;

function

function qq( a, b: integer; x: real ): real;

a, b: integer; x: real

function Max ( a, b: integer): integer;

var

function Max (a, b: integer): ;

integer

150

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

150

Функции

Особенности:

  • можно объявлять и использовать локальные переменные значение, которое является результатом, записывается в переменную, имя которой совпадает с названием функции ; объявлять ее НЕ НАДО :
  • можно объявлять и использовать локальные переменные
  • значение, которое является результатом, записывается в переменную, имя которой совпадает с названием функции ; объявлять ее НЕ НАДО :

function qq (a, b: integer): float;

begin

...

end;

var x, y: real;

function Max (a, b: integer): integer;

begin

...

end;

!

Max := a;

В Delphi:

Result := a;

151

151 Программа program qq; var a, b, max: integer; begin  writeln(' Введите два числа ');  read(a, b);  max := Max ( a, b );  writeln(' Наибольшее число ' , max ); end. c function Max (a, b: integer): integer; begin  ... end; фактические параметры вызов функции c c !  Имена переменных, функций и  процедур не должны совпадать! 152

151

Программа

program qq;

var a, b, max: integer;

begin

writeln(' Введите два числа ');

read(a, b);

max := Max ( a, b );

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

end.

c

function Max (a, b: integer): integer;

begin

...

end;

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

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

c

c

!

Имена переменных, функций и процедур не должны совпадать!

152

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

152

Задания

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

Пример:

Введите число:

1 00

сумма = 5050

«5»: Составить функцию, которая определяет, сколько зерен попросил положить на N- ую клетку изобретатель шахмат (на 1-ую – 1 зерно, на 2-ую – 2 зерна, на 3-ю – 4 зерна, …)

Пример:

Введите номер клетки:

28

На 28-ой клетке 134217728 зерен.

152

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

152

Задания (вариант 2)

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

Пример:

Введите два числа:

14 21

НОД(14,21)=7

«5»: Составить функцию, которая вычисляет функцию синус как сумму ряда (с точностью 0.001)

Пример:

Введите угол в градусах:

45

sin(45) = 0.707

x в радианах!

152

152 Логические функции Задача: составить функцию, которая определяет, верно ли, что заданное число – простое. Особенности: ответ – логическое значение ( True  или False ) результат функции можно использовать как логическую величину в условиях ( if, while ) ответ – логическое значение ( 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; ?  Как улучшить ? 155

152

Логические функции

Задача: составить функцию, которая определяет, верно ли, что заданное число – простое.

Особенности:

  • ответ – логическое значение ( True или False ) результат функции можно использовать как логическую величину в условиях ( if, while )
  • ответ – логическое значение ( 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;

?

Как улучшить ?

155

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

155

Логические функции

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

if N mod i = 0 then count := count + 1;

i := i + 1;

end;

Prime := (count = 0);

end;

условие – это логическое значение

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

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

Задания

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

Пример:

Введите число:

1 36

Сумма цифр четная.

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

Пример:

Введите число:

258

Верно.

Введите число:

245

Сумма цифр нечетная.

Введите число:

528

Неверно.

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

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

Тема 1 3. Случайные числа

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

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

Случайные числа

Случайные явления : везде…

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

Случайные числа – это такая последовательность чисел, для которой невозможно предсказать следующее даже зная все предыдущие.

Проблема : как получить на компьютере?

Возможные решения :

  • использовать внешний источник шумовых помех с помощью математических преобразований
  • использовать внешний источник шумовых помех
  • с помощью математических преобразований

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

Псевдослучайные числа

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

Примеры :

  • Случайные целые числа [0,m) (линейный конгруэнтный метод)
  • Случайные целые числа [0,m) (линейный конгруэнтный метод)
  • Случайные вещественные числа [0,1]
  • Случайные вещественные числа [0,1]

Литература :

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

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

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

2 30 -1

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

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

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

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

Распределение случайных чисел

Модель : снежинки падают на отрезок [a,b]

распределение

равномерное

неравномерное

a

a

b

b

?

Сколько может быть разных распределений ?

161

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

161

Распределение случайных чисел

Особенности :

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

a

a

b

b

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

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

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

Целые числа в интервале [0,N] :

var x: integer;

...

x := random ( 100 ); { интервал [0,99] }

Вещественные числа в интервале [0,1]

var x: real;

...

x := random; { интервал [0,1] }

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

Случайные числа

Задача : заполнить прямоугольник 4 00 на 3 00 пикселей равномерно точками случайного цвета

Как получить случайные координаты точки?

x := random ( 400 );

y := random ( 300 );

  • x := random ( 400 ); y := random ( 300 );

Как добиться равномерности?

обеспечивается автоматически при использовании функции random

Как получить случайный цвет?

Pen (1, random(256), random(256), random(256));

Point ( x, y );

  • Pen (1, random(256), random(256), random(256)); Point ( x, y );

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

Программа

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

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

Задания

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

«5»: Заполнить треугольник точками случайного цвета (равномерно или неравномерно).

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

(100,100)

(300,200)

Конец фильма

Конец фильма


Получите в подарок сайт учителя

Предмет: Информатика

Категория: Презентации

Целевая аудитория: 9 класс.
Урок соответствует ФГОС

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

Автор: Яровенко Сергей Сергеевич

Дата: 19.04.2015

Номер свидетельства: 203266

Похожие файлы

object(ArrayObject)#852 (1) {
  ["storage":"ArrayObject":private] => array(6) {
    ["title"] => string(110) "Вводный урок по теме: "Язык программирования Турбо Паскаль". "
    ["seo_title"] => string(60) "vvodnyi-urok-po-tiemie-iazyk-proghrammirovaniia-turbo-paskal"
    ["file_id"] => string(6) "167023"
    ["category_seo"] => string(11) "informatika"
    ["subcategory_seo"] => string(5) "uroki"
    ["date"] => string(10) "1423038792"
  }
}
object(ArrayObject)#874 (1) {
  ["storage":"ArrayObject":private] => array(6) {
    ["title"] => string(66) "Основы программирования на Паскале "
    ["seo_title"] => string(37) "osnovy-proghrammirovaniia-na-paskalie"
    ["file_id"] => string(6) "232204"
    ["category_seo"] => string(11) "informatika"
    ["subcategory_seo"] => string(11) "presentacii"
    ["date"] => string(10) "1442767773"
  }
}
object(ArrayObject)#852 (1) {
  ["storage":"ArrayObject":private] => array(6) {
    ["title"] => string(63) "Синтаксис языка программирования."
    ["seo_title"] => string(33) "sintaksisiazykaproghrammirovaniia"
    ["file_id"] => string(6) "298546"
    ["category_seo"] => string(11) "informatika"
    ["subcategory_seo"] => string(5) "uroki"
    ["date"] => string(10) "1456338519"
  }
}
object(ArrayObject)#874 (1) {
  ["storage":"ArrayObject":private] => array(6) {
    ["title"] => string(132) "Алгоритмический язык программирования Паскаль. Оператор присваивания. "
    ["seo_title"] => string(74) "alghoritmichieskii-iazyk-proghrammirovaniia-paskal-opierator-prisvaivaniia"
    ["file_id"] => string(6) "114952"
    ["category_seo"] => string(11) "informatika"
    ["subcategory_seo"] => string(11) "presentacii"
    ["date"] => string(10) "1411747875"
  }
}
object(ArrayObject)#852 (1) {
  ["storage":"ArrayObject":private] => array(6) {
    ["title"] => string(115) "ФОРМАЛИЗАЦИЯ языка танца (или сортировка одномерного массива) "
    ["seo_title"] => string(65) "formalizatsiia-iazyka-tantsa-ili-sortirovka-odnomiernogho-massiva"
    ["file_id"] => string(6) "246354"
    ["category_seo"] => string(11) "informatika"
    ["subcategory_seo"] => string(5) "uroki"
    ["date"] => string(10) "1446363231"
  }
}



ПОЛУЧИТЕ СВИДЕТЕЛЬСТВО МГНОВЕННО

Добавить свою работу

* Свидетельство о публикации выдается БЕСПЛАТНО, СРАЗУ же после добавления Вами Вашей работы на сайт

Удобный поиск материалов для учителей

Ваш личный кабинет
Проверка свидетельства