Меню
Разработки
Разработки  /  Информатика  /  Презентации  /  8 класс  /  Основы программирования Паскаль - Поляков

Основы программирования Паскаль - Поляков

материал Поляков К.Ю. сайт https://kpolyakov.spb.ru/
01.04.2021

Содержимое разработки

 Программирование (Паскаль) § 17.  Введение § 1 8.  Линейные программы § 19.  Ветвления § 2 0.  Программирование циклических алгоритмов § 21 .  Массивы § 22 .  Алгоритмы обработки массивов

Программирование (Паскаль)

§ 17. Введение

§ 1 8. Линейные программы

§ 19. Ветвления

§ 2 0. Программирование циклических алгоритмов

§ 21 . Массивы

§ 22 . Алгоритмы обработки массивов

 Программирование (Паскаль) § 17. Введение

Программирование (Паскаль)

§ 17. Введение

 Что такое программирование? Программирование — это создание программ для компьютеров. Этим занимаются программисты . Чем занимаются программисты: анализ задачи (выделение исходных данных, связей между ними, этапов решения задачи) системные аналитики разработка алгоритмов алгоритмисты написание и отладка программ кодировщики тестирование программ тестировщики написание документации технические писатели

Что такое программирование?

Программирование — это создание программ для компьютеров. Этим занимаются программисты .

Чем занимаются программисты:

анализ задачи (выделение исходных данных, связей между ними, этапов решения задачи)

системные аналитики

разработка алгоритмов

алгоритмисты

написание и отладка программ

кодировщики

тестирование программ

тестировщики

написание документации

технические писатели

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

Направления в программировании

системный программист

операционные системы, утилиты, драйверы

прикладной программист

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

веб-программист

веб-сайты

программист баз данных

системы управления базами данных

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

Простейшая программа

название программы

program qq ;

begin { начало программы }

{ тело программы }

end. { конец программы }

комментарии внутри {} не обрабатываются

?

Что делает эта программа ?

 Вывод на экран program  Hello ; begin  write( ' Привет! ' ); end. оператор вывода Оператор — это команда языка программирования. ? write( ' Привет ' , Вася !);  Что плохо? write( ' Привет , Вася !' ); вся строка в апострофах

Вывод на экран

program Hello ;

begin

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

end.

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

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

?

write( ' Привет ' , Вася !);

Что плохо?

write( ' Привет , Вася !' );

вся строка в апострофах

 Переход на новую строку write( ' Привет , Вася !' ); write( ' Привет , Петя !' ); ожидание: Привет , Вася ! Привет , Петя ! реальность: Привет , Вася ! Привет , Петя ! решение: writeln( ' Привет , Вася !' ); writeln( ' Привет , Петя !' ); ln и перейти на новую строку

Переход на новую строку

write( ' Привет , Вася !' );

write( ' Привет , Петя !' );

ожидание:

Привет , Вася !

Привет , Петя !

реальность:

Привет , Вася ! Привет , Петя !

решение:

writeln( ' Привет , Вася !' );

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

ln

и перейти на новую строку

 Системы программирования Системы программирования — это средства для создания новых программ. Транслятор — это программа, которая переводит тексты программ, написанных программистом, в машинные коды (команды процессора). компилятор  — переводит всю программу в машинные коды, строит исполняемый файл ( .exe ) интерпретатор  —  сам выполняет программу по частям ( по одному оператору). program  Hello ; begin  write( ' Привет! ' ) ; end. 1010010100 privet.exe

Системы программирования

Системы программирования — это средства для создания новых программ.

Транслятор — это программа, которая переводит тексты программ, написанных программистом, в машинные коды (команды процессора).

  • компилятор — переводит всю программу в машинные коды, строит исполняемый файл ( .exe )
  • интерпретатор — сам выполняет программу по частям ( по одному оператору).

program Hello ;

begin

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

end.

1010010100

privet.exe

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

Системы программирования

Отладчик — это программа для поиска ошибок в других программах.

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

Среда программирования ( IDE ) :

  • редактор текста программ
  • транслятор
  • отладчик
 Задачи « B »: Вывести на экран текст «лесенкой»   Вася  пошел  гулять « C »: Вывести на экран рисунок из букв     Ж    ЖЖЖ  ЖЖЖЖЖ  ЖЖЖЖЖЖЖ  HH HH  ZZZZZ

Задачи

« B »: Вывести на экран текст «лесенкой»

Вася

пошел

гулять

« C »: Вывести на экран рисунок из букв

Ж

ЖЖЖ

ЖЖЖЖЖ

ЖЖЖЖЖЖЖ

HH HH

ZZZZZ

 Программирование (Паскаль) § 18. Линейные программы

Программирование (Паскаль)

§ 18. Линейные программы

 Пример задачи Задача . Ввести два числа и вычислить их сумму. p rogram Sum ; begin  { ввести два числа }  { вычислить их сумму }   { вывести сумму на экран }  end.  ?  Выполнится? Псевдокод – алгоритм на русском языке с элементами языка программирования. !  Компьютер не может исполнить псевдокод!

Пример задачи

Задача . Ввести два числа и вычислить их сумму.

p rogram Sum ;

begin

{ ввести два числа }

{ вычислить их сумму }

{ вывести сумму на экран }

end.

?

Выполнится?

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

!

Компьютер не может исполнить псевдокод!

 Зачем нужны переменные? p rogram Sum ; begin  { ввести два числа }  { вычислить их сумму }   { вывести сумму на экран }  end.  Где запомнить? Переменная — это величина, которая имеет имя, тип и значение. Значение переменной может изменяться во время выполнения программы. объявление переменных var  a, b, c : integer ; ячейки памяти

Зачем нужны переменные?

p rogram Sum ;

begin

{ ввести два числа }

{ вычислить их сумму }

{ вывести сумму на экран }

end.

Где запомнить?

Переменная — это величина, которая имеет имя, тип и значение. Значение переменной может изменяться во время выполнения программы.

объявление переменных

var a, b, c : integer ;

ячейки памяти

 Имена переменных Идентификатор — это имя программы или переменной.    var  a, b, c : integer ; заглавные и строчные буквы НЕ  различаются МОЖНО  использовать латинские буквы ( A-Z , a-z) цифры   знак подчеркивания _ латинские буквы ( A-Z , a-z) цифры   знак подчеркивания _ !  Имя не может начинаться с цифры! Какие имена правильные?  AXby R&B 4Wheel Вася “PesBarbos” TU154 [QuQu] _ABBA A+B

Имена переменных

Идентификатор — это имя программы или переменной.

var a, b, c : integer ;

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

МОЖНО использовать

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

!

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

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

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

 Работа с переменными Присваивание (запись значения) a  ← 5 a := 5 ; := оператор присваивания a := 5 ; a := 18 ; ?  Что будет храниться в a ? Вывод на экран ? write( a );  В чём разница? с:= 14 ; write( с ); с:= 14 ; write( ' с ' ); 14 c

Работа с переменными

Присваивание (запись значения)

a 5

a := 5 ;

:=

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

a := 5 ;

a := 18 ;

?

Что будет храниться в a ?

Вывод на экран

?

write( a );

В чём разница?

с:= 14 ;

write( с );

с:= 14 ;

write( ' с ' );

14

c

 Работа с переменными  Изменение значения увеличить на 1 i   ←  i +  1 i:=  i +  1 ; a b 4 a:=  4 ; b:=  7 ; a:=  a +  1 ; b:=  b +  1 ; a:=  a + b; b:=  b + a; a:= a + 2 ; b:= b + a; 7 5 8 13 21 1 5 36

Работа с переменными

Изменение значения

увеличить на 1

i i + 1

i:= i + 1 ;

a

b

4

a:= 4 ;

b:= 7 ;

a:= a + 1 ;

b:= b + 1 ;

a:= a + b;

b:= b + a;

a:= a + 2 ;

b:= b + a;

7

5

8

13

21

1 5

36

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

Ввод с клавиатуры

Цель – изменить исходные данные, не меняя программу.

5

read( a );

!

  • Программа ждет, пока пользователь введет значение и нажмет Enter .
  • Введенное значение записывается в переменную a .
 Ввод с клавиатуры read(a, b); через пробел:  25 30  через Enter :  25  30 a 25 b 30 a 25 b 30

Ввод с клавиатуры

read(a, b);

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

25 30

через Enter :

25

30

a

25

b

30

a

25

b

30

 Программа сложения чисел program Sum ; var a, b, c: integer ; begin  read(a, b); { ввести два числа }  c:= a + b; { вычислить их сумму }   write(c) { вывести сумму на экран } end. ?  Что плохо? ожидание: Введите два числа: 5 7 5+7=12 реальность: 5 7 12 ?  Как улучшить диалог?

Программа сложения чисел

program Sum ;

var a, b, c: integer ;

begin

read(a, b); { ввести два числа }

c:= a + b; { вычислить их сумму }

write(c) { вывести сумму на экран }

end.

?

Что плохо?

ожидание:

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

5+7=12

реальность:

5 7

12

?

Как улучшить диалог?

 write( данных с текстом значение b значение a значение с 5+7=12 текст write (a); write ( '+' ); write (b); write ( '=' ); write (c); write (a ,  '+' ,  b ,  '=' ,  c);

write( данных с текстом

значение b

значение a

значение с

5+7=12

текст

write (a);

write ( '+' );

write (b);

write ( '=' );

write (c);

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

 Программа сложения чисел program Sum ; var a, b, c: integer ; begin  write( ' Введите два числа: ' );  read(a, b);  c:=  a  +  b;  write(a, '+' , b, '=' , c) end. ?  Как переделать для 3-х чисел?

Программа сложения чисел

program Sum ;

var a, b, c: integer ;

begin

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

read(a, b);

c:= a + b;

write(a, '+' , b, '=' , c)

end.

?

Как переделать для 3-х чисел?

 Задачи « A »: Ввести три числа, найти их сумму.  Пример:   Введите три числа:   4   5   7   4+5+7=16 « B »: Ввести три числа, найти их сумму и произведение.  Пример:   Введите три числа:   4   5   7   4+5+7=16   4*5*7=140

Задачи

« A »: Ввести три числа, найти их сумму.

Пример:

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

4

5

7

4+5+7=16

« B »: Ввести три числа, найти их сумму и произведение.

Пример:

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

4

5

7

4+5+7=16

4*5*7=140

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

Задачи

« C »: Ввести три числа, найти их сумму, произведение и среднее арифметическое.

Пример:

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

4

5

7

4+5+7=16

4*5*7=140

(4+5+7) / 3 =5.33 3333

 Арифметические выражения Линейная запись (в одну строку): a:=(c+b- 1 )/ 2 *d ; Операции : + – * – умножение  / – деление ** – возведение в степень ( x 2    x**2 ) var  x, a, b: integer ; read(a, b); x:= a / b; ?  Что плохо? a / b var  x: real ;

Арифметические выражения

Линейная запись (в одну строку):

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

Операции :

+ –

* – умножение

/ – деление

** – возведение в степень ( x 2  x**2 )

var x, a, b: integer ;

read(a, b);

x:= a / b;

?

Что плохо?

a / b

var x: real ;

24 Порядок выполнения операций действия в скобках возведение в степень умножение и деление, слева направо сложение и вычитание, слева направо 1 2 3 4 5 6 a  :=  c  + (1 – 2 * b)  /  2  *  d ;

24

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

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

1

2

3

4

5

6

a := c + (1 – 2 * b) / 2 * d ;

 Частное и остаток div  – деление нацело (остаток отбрасывается) mod  – остаток от деления div  – деление нацело (остаток отбрасывается) mod  – остаток от деления ? 175 сек = 2 мин 55 сек  Как получить 2 и 55? var t, m, s: integer ; t:= 17 5 ; m:= t div 6 0 ; { 2 } s:= t mod 6 0 ; { 5 5 } var t, m, s: integer ; t:= 17 5 ; m:= t div 6 0 ; { 2 } s:= t mod 6 0 ; { 5 5 }

Частное и остаток

div – деление нацело (остаток отбрасывается)

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

  • div – деление нацело (остаток отбрасывается) mod – остаток от деления

?

175 сек = 2 мин 55 сек

Как получить 2 и 55?

var t, m, s: integer ;

t:= 17 5 ;

m:= t div 6 0 ; { 2 }

s:= t mod 6 0 ; { 5 5 }

  • var t, m, s: integer ; t:= 17 5 ; m:= t div 6 0 ; { 2 } s:= t mod 6 0 ; { 5 5 }
 Частное и остаток ?  Что получится? n:= 123 d:= n div 10 ; { 1 2 }  k:= n mod 10 ; { 3 } n:= 123 d:= n div 10 ; { 1 2 }  k:= n mod 10 ; { 3 } При делении на 10 нацело отбрасывается последняя цифра числа. Остаток от деления на 10 – это последняя цифра числа.

Частное и остаток

?

Что получится?

n:= 123

d:= n div 10 ; { 1 2 }

k:= n mod 10 ; { 3 }

  • n:= 123 d:= n div 10 ; { 1 2 } k:= n mod 10 ; { 3 }

При делении на 10 нацело отбрасывается последняя цифра числа.

Остаток от деления на 10 – это последняя цифра числа.

 Форматный вывод var a, b, c: integer ; a:= 1 ; b:= 2 ; c:= 3 ; write (a, b, c); var a, b, c: integer ; a:= 1 ; b:= 2 ; c:= 3 ; write (a, b, c); 123 1  2  3 write (a, ' ' ,b, ' ' ,c ) ; write (a, ' ' ,b, ' ' ,c ) ; 1 2 3 write ( a, b: 3 , c: 5 ) ; write ( a, b: 3 , c: 5 ) ; 3 5 количество знаков на вывод числа ?  Сколько знаков для вывода a ?

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

var a, b, c: integer ;

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

write (a, b, c);

  • var a, b, c: integer ; a:= 1 ; b:= 2 ; c:= 3 ; write (a, b, c);

123

1 2 3

write (a, ' ' ,b, ' ' ,c ) ;

  • write (a, ' ' ,b, ' ' ,c ) ;

1 2 3

write ( a, b: 3 , c: 5 ) ;

  • write ( a, b: 3 , c: 5 ) ;

3

5

количество знаков на вывод числа

?

Сколько знаков для вывода a ?

 Задачи « A »: Ввести число, обозначающее количество секунд. Вывести то же самое время в минутах и секундах. Пример :  Введите число секунд: 175  2 мин. 55 с. « B »: Ввести число, обозначающее количество секунд. Вывести то же самое время в часах, минутах и секундах. Пример :  Введите число секунд: 8325  2 ч. 18 мин. 45 с

Задачи

« A »: Ввести число, обозначающее количество секунд. Вывести то же самое время в минутах и секундах.

Пример :

Введите число секунд: 175

2 мин. 55 с.

« B »: Ввести число, обозначающее количество секунд. Вывести то же самое время в часах, минутах и секундах.

Пример :

Введите число секунд: 8325

2 ч. 18 мин. 45 с

 Задачи «С»: Занятия в школе начинаются в 8-30. Урок длится 45 минут, перерывы между уроками – 10 минут. Ввести номер урока и вывести время его окончания.  Пример :  Введите номер урока: 6  13-50

Задачи

«С»: Занятия в школе начинаются в 8-30. Урок длится 45 минут, перерывы между уроками – 10 минут. Ввести номер урока и вывести время его окончания.

Пример :

Введите номер урока: 6

13-50

 Форматный вывод вариант: var x: real ; x: = 12.34567891234 ; write ( x ); var x: real ; x: = 12.34567891234 ; write ( x ); 12 . 3 45679 6 по умолчанию write ( x : 10 : 3 ); write ( x : 10 : 3 );  12 . 3 46 3 в дробной части всего на число 10 write ( x : 8 : 2 ); write ( x : 8 : 2 );  12 . 3 4 write ( x : 2 : 2 ); write ( x : 2 : 2 ); 12 . 3 4 write ( x : 0 : 1 ); write ( x : 0 : 1 ); 12 . 3 минимально возможное

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

вариант:

var x: real ;

x: = 12.34567891234 ;

write ( x );

  • var x: real ; x: = 12.34567891234 ; write ( x );

12 . 3 45679

6

по умолчанию

write ( x : 10 : 3 );

  • write ( x : 10 : 3 );

12 . 3 46

3

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

всего на число

10

write ( x : 8 : 2 );

  • write ( x : 8 : 2 );

12 . 3 4

write ( x : 2 : 2 );

  • write ( x : 2 : 2 );

12 . 3 4

write ( x : 0 : 1 );

  • write ( x : 0 : 1 );

12 . 3

минимально возможное

 Научный формат чисел var x: real ; x: = 123456789 ; write ( x ); var x: real ; x: = 123456789 ; write ( x ); 1 . 23 4568 e+008 1,23 4568   10 8 var x: real ; x: = 0.0000 123456789 ; write ( x ); var x: real ; x: = 0.0000 123456789 ; write ( x ); 1 . 23 4568 e-005 1,23 4568   10 –5 количество знаков может отличаться

Научный формат чисел

var x: real ;

x: = 123456789 ;

write ( x );

  • var x: real ; x: = 123456789 ; write ( x );

1 . 23 4568 e+008

1,23 4568  10 8

var x: real ;

x: = 0.0000 123456789 ;

write ( x );

  • var x: real ; x: = 0.0000 123456789 ; write ( x );

1 . 23 4568 e-005

1,23 4568  10 –5

количество знаков может отличаться

 Операции с вещественными числами trunc  – целая часть числа ( дробная часть отбрасывается) round  – округление к ближайшему целому frac  – дробная часть trunc  – целая часть числа ( дробная часть отбрасывается) round  – округление к ближайшему целому frac  – дробная часть x : =  1 . 6 ; write ( trunc ( x )); x : =  1 . 6 ; write ( trunc ( x )); 1 write ( round ( x )); write ( round ( x )); 2 0.6 write ( frac ( x )); write ( frac ( x ));

Операции с вещественными числами

trunc – целая часть числа ( дробная часть отбрасывается)

round – округление к ближайшему целому

frac – дробная часть

  • trunc – целая часть числа ( дробная часть отбрасывается) round – округление к ближайшему целому frac – дробная часть

x : = 1 . 6 ;

write ( trunc ( x ));

  • x : = 1 . 6 ; write ( trunc ( x ));

1

write ( round ( x ));

  • write ( round ( x ));

2

0.6

write ( frac ( x ));

  • write ( frac ( x ));
 Операции с вещественными числами sqrt  – квадратный корень sqrt  – квадратный корень x : =  2 . 2 5 ; write ( sqrt ( x )); x : =  2 . 2 5 ; write ( sqrt ( x )); 1.5

Операции с вещественными числами

sqrt – квадратный корень

  • sqrt – квадратный корень

x : = 2 . 2 5 ;

write ( sqrt ( x ));

  • x : = 2 . 2 5 ; write ( sqrt ( x ));

1.5

 Операции с вещественными числами 1 /3 = 0,33333… бесконечно много знаков !  Большинство вещественных чисел хранятся в  памяти компьютера с ошибкой! var x , y, z: real ; x:= 1 / 2 ; y:= 1 / 3 ; z:= 5 / 6 ; { 5/6=1/2+1/3 } write ( x +y-z); var x , y, z: real ; x:= 1 / 2 ; y:= 1 / 3 ; z:= 5 / 6 ; { 5/6=1/2+1/3 } write ( x +y-z); -1.110223e-016

Операции с вещественными числами

1 /3 = 0,33333…

бесконечно много знаков

!

Большинство вещественных чисел хранятся в памяти компьютера с ошибкой!

var x , y, z: real ;

x:= 1 / 2 ;

y:= 1 / 3 ;

z:= 5 / 6 ; { 5/6=1/2+1/3 }

write ( x +y-z);

  • var x , y, z: real ; x:= 1 / 2 ; y:= 1 / 3 ; z:= 5 / 6 ; { 5/6=1/2+1/3 } write ( x +y-z);

-1.110223e-016

 Задачи « A »: Ввести число, обозначающее размер одной фотографии в Мбайтах. Определить, сколько фотографий поместится на флэш-карту объёмом  2 Гбайта. Пример :  Размер фотографии в Мбайтах: 6.3  Поместится фотографий: 325.

Задачи

« A »: Ввести число, обозначающее размер одной фотографии в Мбайтах. Определить, сколько фотографий поместится на флэш-карту объёмом 2 Гбайта.

Пример :

Размер фотографии в Мбайтах: 6.3

Поместится фотографий: 325.

 Задачи « B »: Оцифровка звука выполняется в режиме стерео с частотой дискретизации 44,1 кГц и глубиной кодирования 24 бита. Ввести время записи в минутах и определить, сколько Мбайт нужно выделить для хранения полученного файла (округлить результат в большую сторону). Пример :  Введите время записи в минутах: 10  Размер файла 152 Мбайт

Задачи

« B »: Оцифровка звука выполняется в режиме стерео с частотой дискретизации 44,1 кГц и глубиной кодирования 24 бита. Ввести время записи в минутах и определить, сколько Мбайт нужно выделить для хранения полученного файла (округлить результат в большую сторону).

Пример :

Введите время записи в минутах: 10

Размер файла 152 Мбайт

 Задачи «С»: Разведчики-математики для того, чтобы опознать своих, используют числовые пароли. Услышав число-пароль, разведчик должен возвести его в квадрат и сказать в ответ первую цифры дробной части полученного числа. Напишите программу, которая по полученному паролю (вещественному числу) вычисляет число-ответ.  Пример :  Введите пароль: 1.92  Ответ: 6 потому что 1,92 2 = 3, 6 864…, первая цифра дробной части – 6

Задачи

«С»: Разведчики-математики для того, чтобы опознать своих, используют числовые пароли. Услышав число-пароль, разведчик должен возвести его в квадрат и сказать в ответ первую цифры дробной части полученного числа. Напишите программу, которая по полученному паролю (вещественному числу) вычисляет число-ответ.

Пример :

Введите пароль: 1.92

Ответ: 6

потому что 1,92 2 = 3, 6 864…, первая цифра дробной части – 6

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

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

Случайные явления

  • встретил слона – не встретил слона
  • жеребьёвка на соревнованиях
  • лотерея
  • случайная скорость (направление выстрела ) в игре

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

 Случайные и псевдослучайные числа !  Компьютер неслучаен! Псевдослучайные числа — похожи на случайные, но строятся по формуле. следующее предыдущее X n+1 : =  mod ( a*X n +b, c)  | от 0 до c-1 X n+1 : =  mod ( X n + 3 ,  10 )  | от 0 до 9   2   8   5   3   9   6 X  =  0   0 8   1   4   7 зерно зацикливание

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

!

Компьютер неслучаен!

Псевдослучайные числа — похожи на случайные, но строятся по формуле.

следующее

предыдущее

X n+1 : = mod ( a*X n +b, c) | от 0 до c-1

X n+1 : = mod ( X n + 3 , 10 ) | от 0 до 9

2

8

5

3

9

6

X = 0

0

8

1

4

7

зерно

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

 Датчик случайных чисел Целые числа на отрезке: цел K , L K:=  ira nd ( 1 ,  6 )  | отрезок [ 0 ,6] L :=  ira nd ( 1 ,  6 )  | это уже другое число! англ. integer – целый random – случайный Вещественные числа в полуинтервале: цел x , y x:=  ra nd ( 0 ,  1 0 )  | полуинтервал [ 0 , 10) y :=  ra nd ( 0 ,  1 0 )  | это уже другое число!

Датчик случайных чисел

Целые числа на отрезке:

цел K , L

K:= ira nd ( 1 , 6 ) | отрезок [ 0 ,6]

L := ira nd ( 1 , 6 ) | это уже другое число!

англ. integer – целый

random – случайный

Вещественные числа в полуинтервале:

цел x , y

x:= ra nd ( 0 , 1 0 ) | полуинтервал [ 0 , 10)

y := ra nd ( 0 , 1 0 ) | это уже другое число!

 Датчик случайных чисел Целые числа на отрезке: random – случайный var K, L, M: integer ; K:=  ra ndom ( 6 );   { отрезок [ 0 ,5] } L :=  ra ndom ( 6 )+ 1 ;  { отрезок [1,6] } M :=  ra ndom ( b-a + 1 )+a;  { отрезок [a,b] } Вещественные числа в полуинтервале: var x , y, z, w: real ; x:=  ra ndom ;  { полуинтервал [ 0 , 1) } y :=  7 * ra ndom ;  { [0,7) } z:=  7 * ra ndom + 5 ;  { [5,12) } w:=  (b-a)* ra ndom + a;  { [a,b) }

Датчик случайных чисел

Целые числа на отрезке:

random – случайный

var K, L, M: integer ;

K:= ra ndom ( 6 ); { отрезок [ 0 ,5] }

L := ra ndom ( 6 )+ 1 ; { отрезок [1,6] }

M := ra ndom ( b-a + 1 )+a; { отрезок [a,b] }

Вещественные числа в полуинтервале:

var x , y, z, w: real ;

x:= ra ndom ; { полуинтервал [ 0 , 1) }

y := 7 * ra ndom ; { [0,7) }

z:= 7 * ra ndom + 5 ; { [5,12) }

w:= (b-a)* ra ndom + a; { [a,b) }

 Задачи « A »: В игре «Русское лото» из мешка случайным образом выбираются бочонки, на каждом из которых написано число от 1 до 90. Напишите программу, которая выводит наугад первые 5 выигрышных номеров. « B »: + Доработайте программу «Русское лото» так, чтобы все 5 значений гарантированно были бы разными (используйте разные диапазоны).

Задачи

« A »: В игре «Русское лото» из мешка случайным образом выбираются бочонки, на каждом из которых написано число от 1 до 90. Напишите программу, которая выводит наугад первые 5 выигрышных номеров.

« B »: + Доработайте программу «Русское лото» так, чтобы все 5 значений гарантированно были бы разными (используйте разные диапазоны).

 Задачи «С»: + Игральный кубик бросается три раза (выпадает три случайных значения). Из этих чисел составляется целое число, программа должна найти его квадрат.  Пример :  Выпало очков:  1 2 3  Число 123  Его квадрат 15129

Задачи

«С»: + Игральный кубик бросается три раза (выпадает три случайных значения). Из этих чисел составляется целое число, программа должна найти его квадрат.

Пример :

Выпало очков:

1 2 3

Число 123

Его квадрат 15129

 Задачи « D »: + Получить случайное трёхзначное число и вывести в столбик его отдельные цифры.  Пример :  Получено число 123  сотни: 1  десятки: 2  единицы: 3

Задачи

« D »: + Получить случайное трёхзначное число и вывести в столбик его отдельные цифры.

Пример :

Получено число 123

сотни: 1

десятки: 2

единицы: 3

 Программирование (Паскаль) § 19. Ветвления

Программирование (Паскаль)

§ 19. Ветвления

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

Выбор наибольшего из двух чисел

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

начало

ввод a , b

да

нет

if a b then

M:= a

else

M:= b ;

a b?

M:= a

M:= b

вывод M

?

Если a = b?

конец

b then else write ln( 'Наибольшее число ' , M); end. полная форма условного оператора M:= a ! Перед else не ставится точка с запятой! M:= b; 48 " width="640"

47

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

program Maximum ; var a, b, M: integer ; begin

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

read( a, b); if a b then else write ln( 'Наибольшее число ' , M); end.

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

M:= a

!

Перед else не ставится точка с запятой!

M:= b;

48

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

48

Выбор наибольшего из двух чисел-2

начало

ввод a,b

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

M:= a

да

нет

b a?

M:= b

вывод M

конец

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

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

program Maximum2 ;

var a, b, M: integer ;

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

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

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

 Примеры Поиск минимального : if a  b then  M:= a ;  if  b    a  then  M:= b ;  ?  Что плохо ? ?  Когда работает неверно ? ? if a  b then  begin  c := a ;   a:= b;  b:= c  end;   Что делает эта программа ? begin  c := a ;    a:= b;   b:= c end; составной оператор !  Перед end можно не ставить  точку с запятой!

Примеры

Поиск минимального :

if a b then

M:= a ;

if b a then

M:= b ;

?

Что плохо ?

?

Когда работает неверно ?

?

if a b then

begin

c := a ;

a:= b;

b:= c

end;

Что делает эта программа ?

begin

c := a ;

a:= b;

b:= c

end;

составной оператор

!

Перед end можно не ставить точку с запятой!

 В других языках программирования С : Python: if  ( a  b ) {  c = a ;   a = b;  b = c;  } if a  b :  c = a  a = b  b = c

В других языках программирования

С :

Python:

if ( a b ) {

c = a ;

a = b;

b = c;

}

if a b :

c = a

a = b

b = c

b then write ln( 'Андрей старше' ) else write ln( 'Борис старше' ); else относится к ближайшему if " width="640"

Вложенные условные операторы

Задача . В переменной a записан возраст Антона, а в переменной b – возраст Бориса. Определить, кто из них старше.

?

Сколько вариантов ответа ?

if a = b then

write ln( 'Одного возраста' )

else

if a=b then

write ln( 'Одного возраста' )

else

write ln( 'Борис старше' );

вложенный условный

оператор

if a b then

write ln( 'Андрей старше' )

else

write ln( 'Борис старше' );

else относится к ближайшему if

 Задачи « A »: Ввести два целых числа, найти наибольшее и наименьшее из них. Пример : Введите два целых числа: 1 5 Наибольшее число 5 Наименьшее число 1 « B »: Ввести четыре целых числа, найти наибольшее из них. Пример : Введите четыре целых числа: 1 5 4 3 Наибольшее число 5

Задачи

« A »: Ввести два целых числа, найти наибольшее и наименьшее из них.

Пример :

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

1 5

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

Наименьшее число 1

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

Пример :

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

1 5 4 3

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

 Задачи « C »: Ввести последовательно возраст Антона, Бориса и Виктора. Определить, кто из них старше. Пример : Возраст Антона: 15  Возраст Бориса: 17  Возраст Виктора: 16  Ответ: Борис старше всех. Пример : Возраст Антона: 17  Возраст Бориса: 17  Возраст Виктора: 16  Ответ: Антон и Борис старше Виктора.

Задачи

« C »: Ввести последовательно возраст Антона, Бориса и Виктора. Определить, кто из них старше.

Пример :

Возраст Антона: 15

Возраст Бориса: 17

Возраст Виктора: 16

Ответ: Борис старше всех.

Пример :

Возраст Антона: 17

Возраст Бориса: 17

Возраст Виктора: 16

Ответ: Антон и Борис старше Виктора.

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

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

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

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

возраст 25 возраст 40

?

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

= 25 then if x 40 then write ( 'Подходит!' ) else write ( 'Не подходит.' ) else write ( 'Не подходит.' ); end. вложенный условный оператор " width="640"

Плохое решение

program Work ;

var x: integer ;

begin

write ln( 'Введите ваш возраст' );

read( x );

if x = 25 then

if x 40 then

write ( 'Подходит!' )

else

write ( 'Не подходит.' )

else

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

end.

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

= 25 ) and ( x 40 ) then write ( 'Подходит!' ) else write ( 'Не подходит.' ); end. сложное условие ! Каждое условие – в скобки! " width="640"

Хорошее решение (операция «И»)

program Work ;

var x: integer ;

begin

write ln( 'Введите ваш возраст' );

read( x );

if ( x = 25 ) and ( x 40 ) then

write ( 'Подходит!' )

else

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

end.

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

!

Каждое условие – в скобки!

 Примеры Задача . Вывести ' Да ' , если число в переменной a – двузначное. if ( 10   a ) and  (a  99 ) then  write ( 'Да' ); Задача . Вывести ' Да ' , если число в переменной a – двузначное  и делится на 7. if ( 10   a ) and  (a  99 )  and  (a mod  7 = 0 ) then  write ( 'Да' );

Примеры

Задача . Вывести ' Да ' , если число в переменной a – двузначное.

if ( 10 a ) and (a 99 ) then

write ( 'Да' );

Задача . Вывести ' Да ' , если число в переменной a – двузначное и делится на 7.

if ( 10 a ) and (a 99 )

and (a mod 7 = 0 ) then

write ( 'Да' );

 Сложные условия Задача . Самолёт летает по понедельникам и четвергам. Ввести номер дня недели и определить, летает ли в этот день самолёт. Особенность : надо проверить, выполняется ли одно из двух условий:   день =  1  день = 4 (d = 1 ) or ( d = 4) if  (d = 1 ) or ( d = 4) then  write ( 'Летает' )  else  write ( 'Не летает' ); сложное условие

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

Задача . Самолёт летает по понедельникам и четвергам. Ввести номер дня недели и определить, летает ли в этот день самолёт.

Особенность : надо проверить, выполняется ли одно из двух условий:

день = 1 день = 4

(d = 1 ) or ( d = 4)

if (d = 1 ) or ( d = 4) then

write ( 'Летает' )

else

write ( 'Не летает' );

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

40 ) if ??? then write ( 'Не подходит!' ) else write ( 'Подходит.' ); " width="640"

Ещё пример

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

( x 25 ) or ( x 40 )

if ??? then

write ( 'Не подходит!' )

else

write ( 'Подходит.' );

= = Сложное условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций: И – одновременное выполнение условий И – одновременное выполнение условий x = 25 and x x = 25 and x ИЛИ – выполнение хотя бы одного из условий ИЛИ – выполнение хотя бы одного из условий x or x = 40 x or x = 40 НЕ – отрицание, обратное условие НЕ – отрицание, обратное условие not ( x 25 )  ??? not ( x 25 )  ??? равно не равно x " width="640"

Простые и сложные условия

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

= =

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

  • И – одновременное выполнение условий
  • И – одновременное выполнение условий

x = 25 and x

  • x = 25 and x
  • ИЛИ – выполнение хотя бы одного из условий
  • ИЛИ – выполнение хотя бы одного из условий

x or x = 40

  • x or x = 40
  • НЕ – отрицание, обратное условие
  • НЕ – отрицание, обратное условие

not ( x 25 ) ???

  • not ( x 25 ) ???

равно

не равно

x

2 ) or (c 5 ) and (b then ... if not (a 2 ) or (c 5 ) and (b then ... " width="640"

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

  • выражения в скобках
  • выражения в скобках
  • НЕ ( not ) И ( and ) ИЛИ ( or ), исключающее ИЛИ ( xor )
  • НЕ ( not )
  • И ( and )
  • ИЛИ ( or ), исключающее ИЛИ ( xor )

1

4

2

3

5

6

if not (a 2 ) or (c 5 ) and (b then

...

  • if not (a 2 ) or (c 5 ) and (b then ...
b) not (a b) (a and (b (a c) or (b c) (a and (b c) (a c) and (b d) (a and (b (a c) or (b c) (a and (b c) (a c) and (b d) not (a = b) or (c = d) not (a = b) or (c = d) (a = b) or not (c (a c) or (b c) or (b a) (a = b) or not (c (a c) or (b c) or (b a) Да Да Нет Нет Нет Да Да Да " width="640"

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

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

not (a b)

  • not (a b)

(a and (b

(a c) or (b c)

(a and (b c)

(a c) and (b d)

  • (a and (b (a c) or (b c) (a and (b c) (a c) and (b d)

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

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

(a = b) or not (c

(a c) or (b c) or (b a)

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

Да

Да

Нет

Нет

Нет

Да

Да

Да

 Задачи « A »: Напишите программу, которая получает три числа - рост трёх спортсменов, и выводит сообщение «По росту.», если они стоят по возрастанию роста, или сообщение «Не по росту!», если они стоят не по росту. Пример : Введите рост трёх спортсменов: 165 170 172 По росту. Пример : Введите рост трёх спортсменов: 175 170 172 Не по росту!

Задачи

« A »: Напишите программу, которая получает три числа - рост трёх спортсменов, и выводит сообщение «По росту.», если они стоят по возрастанию роста, или сообщение «Не по росту!», если они стоят не по росту.

Пример :

Введите рост трёх спортсменов:

165 170 172

По росту.

Пример :

Введите рост трёх спортсменов:

175 170 172

Не по росту!

 Задачи « B »: Напишите программу, которая получает номер месяца и выводит соответствующее ему время года или сообщение об ошибке. Пример : Введите номер месяца: 5 Весна. Пример : Введите номер месяца: 15 Неверный номер месяца.

Задачи

« B »: Напишите программу, которая получает номер месяца и выводит соответствующее ему время года или сообщение об ошибке.

Пример :

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

5

Весна.

Пример :

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

15

Неверный номер месяца.

 Задачи « C »: Напишите программу, которая получает возраст человека (целое число, не превышающее 120) и выводит этот возраст со словом «год», «года» или «лет». Например, «21 год», «22 года», «25 лет». Пример : Введите возраст: 18 Вам 18 лет. Пример : Введите возраст: 21 Вам 21 год. Пример : Введите возраст: 2 2 Вам 22 года.

Задачи

« C »: Напишите программу, которая получает возраст человека (целое число, не превышающее 120) и выводит этот возраст со словом «год», «года» или «лет». Например, «21 год», «22 года», «25 лет».

Пример :

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

Вам 18 лет.

Пример :

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

Вам 21 год.

Пример :

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

Вам 22 года.

 Логические переменные var b : boolean ; ... b:= True; { 1 } b:= False; { 0 } var b : boolean ; ... b:= True; { 1 } b:= False; { 0 } только два возможных значения Пример: var  vyh: boolean ; ... vyh :=  (d= 6 )  or  ( d= 7 ) ; ... if  not  vyh  then  write ( 'Рабочий день.' ) else  write ( 'Выходной!' ); var  vyh: boolean ; ... vyh :=  (d= 6 )  or  ( d= 7 ) ; ... if  not  vyh  then  write ( 'Рабочий день.' ) else  write ( 'Выходной!' );

Логические переменные

var b : boolean ;

...

b:= True; { 1 }

b:= False; { 0 }

  • var b : boolean ; ... b:= True; { 1 } b:= False; { 0 }

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

Пример:

var vyh: boolean ;

...

vyh := (d= 6 ) or ( d= 7 ) ;

...

if not vyh then

write ( 'Рабочий день.' )

else

write ( 'Выходной!' );

  • var vyh: boolean ; ... vyh := (d= 6 ) or ( d= 7 ) ; ... if not vyh then write ( 'Рабочий день.' ) else write ( 'Выходной!' );
 Задачи « A »: Напишите программу, которая получает с клавиатуры целое число и записывает в логическую переменную значение «да» ( True ), если это число трёхзначное. После этого на экран выводится ответ на вопрос: «Верно ли, что было получено трёхзначное число?». Пример : Введите число: 165 Ответ: да. Пример : Введите число: 1651 Ответ: нет.

Задачи

« A »: Напишите программу, которая получает с клавиатуры целое число и записывает в логическую переменную значение «да» ( True ), если это число трёхзначное. После этого на экран выводится ответ на вопрос: «Верно ли, что было получено трёхзначное число?».

Пример :

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

Ответ: да.

Пример :

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

Ответ: нет.

 Задачи « B »: Напишите программу, которая получает с клавиатуры трёхзначное число и записывает в логическую переменную значение «да» ( True ), если это число – палиндром, то есть читается одинаково слева направо и справа налево. После этого на экран выводится ответ на вопрос: «Верно ли, что введённое число – палиндром?». Пример : Введите число: 165 Ответ: нет. Пример : Введите число: 656 Ответ: да.

Задачи

« B »: Напишите программу, которая получает с клавиатуры трёхзначное число и записывает в логическую переменную значение «да» ( True ), если это число – палиндром, то есть читается одинаково слева направо и справа налево. После этого на экран выводится ответ на вопрос: «Верно ли, что введённое число – палиндром?».

Пример :

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

Ответ: нет.

Пример :

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

Ответ: да.

 Задачи «С»: Напишите программу, которая получает с клавиатуры трёхзначное число и записывает в логическую переменную значение «да» ( True ), если это все его цифры одинаковы. После этого на экран выводится ответ на вопрос: «Верно ли, что все цифры введённого числа одинаковы?» Пример : Введите число: 161 Ответ: нет. Пример : Введите число: 555 Ответ: да.

Задачи

«С»: Напишите программу, которая получает с клавиатуры трёхзначное число и записывает в логическую переменную значение «да» ( True ), если это все его цифры одинаковы. После этого на экран выводится ответ на вопрос: «Верно ли, что все цифры введённого числа одинаковы?»

Пример :

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

Ответ: нет.

Пример :

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

Ответ: да.

 Экспертная система Экспертная система — это компьютерная программа, задача которой — заменить человека-эксперта при принятии решений в сложной ситуации. База знаний = факты + правила write а : если у животного есть перья, то это птица ; если животное кормит детенышей молоком, то это — млекопитающее ; если животное — млекопитающее и ест мясо, то  это  — хищник. Диалог : Это животное кормит детей молоком? Нет Это животное имеет перья? Да Это птица .

Экспертная система

Экспертная система — это компьютерная программа, задача которой — заменить человека-эксперта при принятии решений в сложной ситуации.

База знаний = факты + правила write а :

  • если у животного есть перья, то это птица ;
  • если животное кормит детенышей молоком, то это — млекопитающее ;
  • если животное — млекопитающее и ест мясо, то это — хищник.

Диалог :

Это животное кормит детей молоком? Нет

Это животное имеет перья? Да

Это птица .

 Дерево решений Кормит детей молоком? да нет млекопитающее Имеет перья? Ест мясо? да да нет нет ? птица ? хищник

Дерево решений

Кормит детей молоком?

да

нет

млекопитающее

Имеет перья?

Ест мясо?

да

да

нет

нет

?

птица

?

хищник

 Программирование экспертной системы Ответы пользователя: да и нет – символьные строки. var  otvet: string ; ... write ( 'Кормит детей молоком? ' ); read(otvet); if  otvet = 'да' then  ... { вариант 1 } else  ... { вариант 2 } var  otvet: string ; ... write ( 'Кормит детей молоком? ' ); read(otvet); if  otvet = 'да' then  ... { вариант 1 } else  ... { вариант 2 } { вариант 1 } { вариант 1 } write ln( 'Млекопитающее.' ); write ( 'Ест мясо? ' ); read(otvet); if otvet = 'да' then  write ln( 'Хищник.' ) else  write ln( 'Не знаю.' ); write ln( 'Млекопитающее.' ); write ( 'Ест мясо? ' ); read(otvet); if otvet = 'да' then  write ln( 'Хищник.' ) else  write ln( 'Не знаю.' );

Программирование экспертной системы

Ответы пользователя: да и нет – символьные строки.

var otvet: string ;

...

write ( 'Кормит детей молоком? ' );

read(otvet);

if otvet = 'да' then

... { вариант 1 }

else

... { вариант 2 }

  • var otvet: string ; ... write ( 'Кормит детей молоком? ' ); read(otvet); if otvet = 'да' then ... { вариант 1 } else ... { вариант 2 }

{ вариант 1 }

  • { вариант 1 }

write ln( 'Млекопитающее.' );

write ( 'Ест мясо? ' );

read(otvet);

if otvet = 'да' then

write ln( 'Хищник.' )

else

write ln( 'Не знаю.' );

  • write ln( 'Млекопитающее.' ); write ( 'Ест мясо? ' ); read(otvet); if otvet = 'да' then write ln( 'Хищник.' ) else write ln( 'Не знаю.' );
 Заглавные и строчные буквы var  otvet: string ; ... if  otvet = 'да' then  ... var  otvet: string ; ... if  otvet = 'да' then  ... не сработает на ' Да ' ?  Как исправить ? if  (otvet = 'да' )  or  (otvet = 'Да' )  then  ... if  (otvet = 'да' )  or  (otvet = 'Да' )  then  ... Ещё лучше: if  LowerCase (ответ) = 'да' then  ... if  LowerCase (ответ) = 'да' then  ... преобразовать все заглавные в строчные if  UpperCase (ответ) = 'ДА' then  ... if  UpperCase (ответ) = 'ДА' then  ...

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

var otvet: string ;

...

if otvet = 'да' then

...

  • var otvet: string ; ... if otvet = 'да' then ...

не сработает на ' Да '

?

Как исправить ?

if (otvet = 'да' ) or (otvet = 'Да' ) then

...

  • if (otvet = 'да' ) or (otvet = 'Да' ) then ...

Ещё лучше:

if LowerCase (ответ) = 'да' then

...

  • if LowerCase (ответ) = 'да' then ...

преобразовать все заглавные в строчные

if UpperCase (ответ) = 'ДА' then

...

  • if UpperCase (ответ) = 'ДА' then ...
 Программирование (Паскаль) § 23 . Отладка программ

Программирование (Паскаль)

§ 23 . Отладка программ

 Виды ошибок Синтаксические ошибки – нарушение правил записи операторов языка программирования. Обнаруживаются транслятором. Логические ошибки – неверно составленный алгоритм. Отказ  (ошибка времени выполнения) – аварийная ситуация во время выполнения программы. Отладка – поиск и исправление ошибок в программе.

Виды ошибок

Синтаксические ошибки – нарушение правил записи операторов языка программирования.

Обнаруживаются транслятором.

Логические ошибки – неверно составленный алгоритм.

Отказ (ошибка времени выполнения) – аварийная ситуация во время выполнения программы.

Отладка – поиск и исправление ошибок в программе.

 Пример отладки программы Программа решения квадратного уравнения program SqEq ; program SqEq ; var a, b, c, D, x1, x2 : real ; var a, b, c, D, x1, x2 : real ; begin  write ( 'Введите a, b, c: ' );  read( a, b, c );  D:=b*b- 4 *a*a;  x1:=(-b+ sqrt (D))/ 2 *a;  x2:=(-b- sqrt (D))/ 2 *a;  write ln( ' x1=' , x1, ' x2=' , x2 ) ; end. begin  write ( 'Введите a, b, c: ' );  read( a, b, c );  D:=b*b- 4 *a*a;  x1:=(-b+ sqrt (D))/ 2 *a;  x2:=(-b- sqrt (D))/ 2 *a;  write ln( ' x1=' , x1, ' x2=' , x2 ) ; end.

Пример отладки программы

Программа решения квадратного уравнения

program SqEq ;

  • program SqEq ;

var a, b, c, D, x1, x2 : real ;

  • var a, b, c, D, x1, x2 : real ;

begin

write ( 'Введите a, b, c: ' );

read( a, b, c );

D:=b*b- 4 *a*a;

x1:=(-b+ sqrt (D))/ 2 *a;

x2:=(-b- sqrt (D))/ 2 *a;

write ln( ' x1=' , x1, ' x2=' , x2 ) ;

end.

  • begin write ( 'Введите a, b, c: ' ); read( a, b, c ); D:=b*b- 4 *a*a; x1:=(-b+ sqrt (D))/ 2 *a; x2:=(-b- sqrt (D))/ 2 *a; write ln( ' x1=' , x1, ' x2=' , x2 ) ; end.
 Тестирование Тест 1 . a = 1, b = 2, c = 1. Реальность: Ожидание: x1=-1.0 x2=-1.0 x1=-1.0 x2=-1.0 Тест 2 . a = 1, b = – 5 , c = 6 . x1=3.0 x2=2.0 x1=4.791 x2=0.209 Найден вариант, когда программа работает неверно. Ошибка воспроизводится ! Возможные причины : неверный ввод данных неверное вычисление дискриминанта неверное вычисление корней неверный write( результатов

Тестирование

Тест 1 . a = 1, b = 2, c = 1.

Реальность:

Ожидание:

x1=-1.0 x2=-1.0

x1=-1.0 x2=-1.0

Тест 2 . a = 1, b = – 5 , c = 6 .

x1=3.0 x2=2.0

x1=4.791 x2=0.209

Найден вариант, когда программа работает неверно. Ошибка воспроизводится !

Возможные причины :

  • неверный ввод данных
  • неверное вычисление дискриминанта
  • неверное вычисление корней
  • неверный write( результатов
 Отладочная печать Идея : выводить все промежуточные результаты. read( a, b, c ); write( a, ' ' , b, ' ' , c, нс D:=b*b- 4 *a*a; write( ' D=' , D, нс ... read( a, b, c ); write( a, ' ' , b, ' ' , c, нс D:=b*b- 4 *a*a; write( ' D=' , D, нс ... write ln( a, ' ' , b, ' ' , c ); write ln( a, ' ' , b, ' ' , c ); write ln( ' D=' , D ); write ln( ' D=' , D ); Результат: Введите a, b, c: 1 -5 6 1.0 -5.0 6.0 D=21.0 D=21.0 ! D:=b*b- 4 *a*  с  ; D:=b*b- 4 *a*  с  ; с  Одна ошибка найдена!

Отладочная печать

Идея : выводить все промежуточные результаты.

read( a, b, c );

write( a, ' ' , b, ' ' , c, нс

D:=b*b- 4 *a*a;

write( ' D=' , D, нс

...

  • read( a, b, c ); write( a, ' ' , b, ' ' , c, нс D:=b*b- 4 *a*a; write( ' D=' , D, нс ...

write ln( a, ' ' , b, ' ' , c );

  • write ln( a, ' ' , b, ' ' , c );

write ln( ' D=' , D );

  • write ln( ' D=' , D );

Результат:

Введите a, b, c: 1 -5 6

1.0 -5.0 6.0

D=21.0

D=21.0

!

D:=b*b- 4 *a* с ;

  • D:=b*b- 4 *a* с ;

с

Одна ошибка найдена!

 Отладка программы Тест 1 . a = 1, b = 2, c = 1. Ожидание: Реальность: x1=-1.0 x2=-1.0 x1=-1.0 x2=-1.0 Тест 2 . a = 1, b = – 5 , c = 6 . x1=3.0 x2=2.0 x1=3.0 x2=2.0 ?  Программа работает верно? Тест 3 . a = 8 , b = – 6 , c = 1 . x1= 0 . 5 x2= 0 . 25 x1=3 2 .0 x2= 16 .0 x1:=(-b+ sqrt (D))/ 2 *a; x2:=(-b- sqrt (D))/ 2 *a; x1:=(-b+ sqrt (D))/ 2 *a; x2:=(-b- sqrt (D))/ 2 *a; ( 2 *a ) ; ?  Что неверно? ( 2 *a ) ;

Отладка программы

Тест 1 . a = 1, b = 2, c = 1.

Ожидание:

Реальность:

x1=-1.0 x2=-1.0

x1=-1.0 x2=-1.0

Тест 2 . a = 1, b = – 5 , c = 6 .

x1=3.0 x2=2.0

x1=3.0 x2=2.0

?

Программа работает верно?

Тест 3 . a = 8 , b = – 6 , c = 1 .

x1= 0 . 5 x2= 0 . 25

x1=3 2 .0 x2= 16 .0

x1:=(-b+ sqrt (D))/ 2 *a;

x2:=(-b- sqrt (D))/ 2 *a;

  • x1:=(-b+ sqrt (D))/ 2 *a; x2:=(-b- sqrt (D))/ 2 *a;

( 2 *a ) ;

?

Что неверно?

( 2 *a ) ;

 Задачи « A »: Загрузите программу , которая должна вычислять сумму цифр трёхзначного числа: « A »: Загрузите программу , которая должна вычислять сумму цифр трёхзначного числа: « A »: Загрузите программу , которая должна вычислять сумму цифр трёхзначного числа: var N, d1, d2, s: integer ; begin  read( 'N = ' );  write(N);  d0:= N mod 10;  d1:= N mod 100;  d2:= N div 100;  d0 + d2 := s  writeln(s); end. var N, d1, d2, s: integer ; begin  read( 'N = ' );  write(N);  d0:= N mod 10;  d1:= N mod 100;  d2:= N div 100;  d0 + d2 := s  writeln(s); end. var N, d1, d2, s: integer ; begin  read( 'N = ' );  write(N);  d0:= N mod 10;  d1:= N mod 100;  d2:= N div 100;  d0 + d2 := s  writeln(s); end. Выполните отладку программы: исправьте синтаксические ошибки определите ситуации, когда она работает неверно исправьте логические ошибки.

Задачи

« A »: Загрузите программу , которая должна вычислять сумму цифр трёхзначного числа:

  • « A »: Загрузите программу , которая должна вычислять сумму цифр трёхзначного числа:
  • « A »: Загрузите программу , которая должна вычислять сумму цифр трёхзначного числа:

var N, d1, d2, s: integer ;

begin

read( 'N = ' );

write(N);

d0:= N mod 10;

d1:= N mod 100;

d2:= N div 100;

d0 + d2 := s

writeln(s);

end.

  • var N, d1, d2, s: integer ; begin read( 'N = ' ); write(N); d0:= N mod 10; d1:= N mod 100; d2:= N div 100; d0 + d2 := s writeln(s); end.
  • var N, d1, d2, s: integer ; begin read( 'N = ' ); write(N); d0:= N mod 10; d1:= N mod 100; d2:= N div 100; d0 + d2 := s writeln(s); end.

Выполните отладку программы:

  • исправьте синтаксические ошибки
  • определите ситуации, когда она работает неверно
  • исправьте логические ошибки.
 Задачи « B »: Доработайте программу из п. А так, чтобы она правильно работала с отрицательными трёхзначными числами: при вводе числа «–123» программа должна выдавать ответ 6. « B »: Доработайте программу из п. А так, чтобы она правильно работала с отрицательными трёхзначными числами: при вводе числа «–123» программа должна выдавать ответ 6. « B »: Доработайте программу из п. А так, чтобы она правильно работала с отрицательными трёхзначными числами: при вводе числа «–123» программа должна выдавать ответ 6.

Задачи

« B »: Доработайте программу из п. А так, чтобы она правильно работала с отрицательными трёхзначными числами: при вводе числа «–123» программа должна выдавать ответ 6.

  • « B »: Доработайте программу из п. А так, чтобы она правильно работала с отрицательными трёхзначными числами: при вводе числа «–123» программа должна выдавать ответ 6.
  • « B »: Доработайте программу из п. А так, чтобы она правильно работала с отрицательными трёхзначными числами: при вводе числа «–123» программа должна выдавать ответ 6.
b then M:=a else M:= b; end; if c b then M:= b else M:= c; end; writeln(M); end. var a, b: integer; begin read( 'a = ' ); read(a); write( 'b = ' ); write(b); read( 'c = ' ); read(c); if a b then M:=a else M:= b; end; if c b then M:= b else M:= c; end; writeln(M); end. var a, b: integer; begin read( 'a = ' ); read(a); write( 'b = ' ); write(b); read( 'c = ' ); read(c); if a b then M:=a else M:= b; end; if c b then M:= b else M:= c; end; writeln(M); end. Выполните отладку программы: исправьте синтаксические ошибки определите ситуации, когда она работает неверно исправьте логические ошибки. " width="640"

Задачи

«С»: Загрузите программу, которая должна вычислять наибольшее из трёх чисел:

  • «С»: Загрузите программу, которая должна вычислять наибольшее из трёх чисел:
  • «С»: Загрузите программу, которая должна вычислять наибольшее из трёх чисел:

var a, b: integer;

begin

read( 'a = ' ); read(a);

write( 'b = ' ); write(b);

read( 'c = ' ); read(c);

if a b then M:=a

else M:= b; end;

if c b then M:= b

else M:= c; end;

writeln(M);

end.

  • var a, b: integer; begin read( 'a = ' ); read(a); write( 'b = ' ); write(b); read( 'c = ' ); read(c); if a b then M:=a else M:= b; end; if c b then M:= b else M:= c; end; writeln(M); end.
  • var a, b: integer; begin read( 'a = ' ); read(a); write( 'b = ' ); write(b); read( 'c = ' ); read(c); if a b then M:=a else M:= b; end; if c b then M:= b else M:= c; end; writeln(M); end.

Выполните отладку программы:

  • исправьте синтаксические ошибки
  • определите ситуации, когда она работает неверно
  • исправьте логические ошибки.
 Программирование (Паскаль) § 2 0. Программирование циклических алгоритмов

Программирование (Паскаль)

§ 2 0. Программирование циклических алгоритмов

 Зачем нужен цикл? Задача . Вывести 5 раз «Привет!». write ln ( 'Привет' ); write ln ( 'Привет' ); write ln ( 'Привет' ); write ln ( 'Привет' ); write ln ( 'Привет' ); ?  А если 5000? Цикл « N раз» : { сделай 5 раз }  write ln ( 'Привет' ); !  В Паскале нет такого цикла!  

Зачем нужен цикл?

Задача . Вывести 5 раз «Привет!».

write ln ( 'Привет' );

write ln ( 'Привет' );

write ln ( 'Привет' );

write ln ( 'Привет' );

write ln ( 'Привет' );

?

А если 5000?

Цикл « N раз» :

{ сделай 5 раз }

write ln ( 'Привет' );

!

В Паскале нет такого цикла! 

 Как организовать цикл? !  Нужно запоминать, сколько раз цикл уже выполнен! ещё не делали { счётчик:= 0 } { пока счётчик  5 }  write ln ( 'Привет' );  { счётчик:= счётчик + 1 } сделали ещё раз составной оператор var count: integer ; count := 0 ; while count   5 do begin  write ln ( 'Привет' );  count:= count + 1 end; begin end;

Как организовать цикл?

!

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

ещё не делали

{ счётчик:= 0 }

{ пока счётчик 5 }

write ln ( 'Привет' );

{ счётчик:= счётчик + 1 }

сделали ещё раз

составной оператор

var count: integer ;

count := 0 ;

while count 5 do begin

write ln ( 'Привет' );

count:= count + 1

end;

begin

end;

??? do begin write ln ( 'Привет' ); count := count ??? end; 0 - 1 " width="640"

Как организовать цикл?

Идея : запоминать, сколько шагов осталось.

count := 5 ;

while count ??? do begin

write ln ( 'Привет' );

count := count ???

end;

0

- 1

 Цикл с предусловием условие проверяется при входе в цикл как только условие становится ложным, работа цикла заканчивается если условие ложно в самом начале, цикл не выполняется ни разу while  условие  do begin  ... end; тело цикла ?  Если условие никогда не станет ложно? while True do begin  ... end; бесконечный цикл (зацикливание)

Цикл с предусловием

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

while условие do begin

...

end;

тело цикла

?

Если условие никогда не станет ложно?

while True do begin

...

end;

бесконечный цикл (зацикливание)

 Сумма цифр числа Задача. Вычислить сумму цифр введённого числа.  123  1 + 2 + 3 = 6 Выделить последнюю цифру числа  в переменной N : d:= N mod 10 ; 123   3 Отбросить последнюю цифру числа  в переменной N : N:= N div  10 ; 123  12 Добавить к переменной sum  значение переменной d : sum = 6    6 + 4 = 1 0 d = 4 sum:= sum + d;

Сумма цифр числа

Задача. Вычислить сумму цифр введённого числа.

123  1 + 2 + 3 = 6

Выделить последнюю цифру числа в переменной N :

d:= N mod 10 ;

123  3

Отбросить последнюю цифру числа в переменной N :

N:= N div 10 ;

123  12

Добавить к переменной sum значение переменной d :

sum = 6  6 + 4 = 1 0

d = 4

sum:= sum + d;

 Сумма цифр числа выделяем последнюю цифру числа ( mod ) увеличиваем сумму на значение цифры ( sum:=sum+d; ) отсекаем последнюю цифру числа ( div ) N d 123 sum 12 3 0 1 3 2 0 1 5 6 начальные значения

Сумма цифр числа

  • выделяем последнюю цифру числа ( mod )
  • увеличиваем сумму на значение цифры ( sum:=sum+d; )
  • отсекаем последнюю цифру числа ( div )

N

d

123

sum

12

3

0

1

3

2

0

1

5

6

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

 Сумма цифр числа начало обнулить сумму ввод N sum:=  0 выполнять  'пока N    0 ' нет N    0 ? да вывод sum d:=  N  mod  10 ; sum:=  sum  +  d; N:=  N  div  10 ; конец

Сумма цифр числа

начало

обнулить сумму

ввод N

sum:= 0

выполнять 'пока N 0 '

нет

N 0 ?

да

вывод sum

d:= N mod 10 ;

sum:= sum + d;

N:= N div 10 ;

конец

 Сумма цифр числа , N1 program  SumDigits ; var N, d, sum: integer ; begin  write ln ( 'Введите целое число' );  read( N);  sum : =  0 ;       write( 'Сумма цифр числа  ' ,  N,  '  равна' ,  sum); end.  N1:=  N; while N 0 do begin   d :=  N mod 10 ;  sum:=  sum  +  d;  N:=  N div 10 end; ?  Что плохо ? N1,

Сумма цифр числа

, N1

program SumDigits ;

var N, d, sum: integer ;

begin

write ln ( 'Введите целое число' );

read( N);

sum : = 0 ;

write( 'Сумма цифр числа ' , N, ' равна' , sum);

end.

N1:= N;

while N 0 do begin

d := N mod 10 ;

sum:= sum + d;

N:= N div 10

end;

?

Что плохо ?

N1,

 Задачи « A »: Напишите программу, которая получает с клавиатуры количество повторений и выводит столько же раз какое-нибудь сообщение. Пример : Сколько раз повторить? 3 Привет! Привет! Привет! « B »: Напишите программу, которая получает с клавиатуры натуральное число и определяет, сколько раз в его десятичной записи встречается цифра 1. Пример : Введите число? 311 Единиц: 2

Задачи

« A »: Напишите программу, которая получает с клавиатуры количество повторений и выводит столько же раз какое-нибудь сообщение.

Пример :

Сколько раз повторить? 3

Привет!

Привет!

Привет!

« B »: Напишите программу, которая получает с клавиатуры натуральное число и определяет, сколько раз в его десятичной записи встречается цифра 1.

Пример :

Введите число? 311

Единиц: 2

 Задачи « C »: Напишите программу, которая получает с клавиатуры натуральное число и находит наибольшую цифру в его десятичной записи. Пример : Введите число :  311 Наибольшая цифра: 3 « D »: Напишите программу, которая получает с клавиатуры натуральное число и определяет, есть ли в его десятичной записи одинаковые цифры, стоящие рядом. Пример : Введите число :  553 Введите число :  5 3 5 Ответ: да.    Ответ: нет.

Задачи

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

Пример :

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

Наибольшая цифра: 3

« D »: Напишите программу, которая получает с клавиатуры натуральное число и определяет, есть ли в его десятичной записи одинаковые цифры, стоящие рядом.

Пример :

Введите число : 553 Введите число : 5 3 5

Ответ: да. Ответ: нет.

 Алгоритм Евклида Задача. Найти наибольший общий делитель (НОД) двух натуральных чисел. Заменяем большее из двух чисел разностью большего и меньшего до тех пор, пока они не станут равны. Это и есть НОД. НОД( a,b)=  НОД( a-b,  b)   =  НОД( a,  b-a) Евклид (365-300 до. н. э.) Пример: НОД  (14 ,  21 )  =  НОД  (14 ,  21-14 )  =  НОД  (14 ,  7 ) =  НОД  (7 ,  7 )  =  7 много шагов при большой разнице чисел: НОД  (1998 ,  2 )  =  НОД  (1996 ,  2 )  = … =  2

Алгоритм Евклида

Задача. Найти наибольший общий делитель (НОД) двух натуральных чисел.

Заменяем большее из двух чисел разностью большего и меньшего до тех пор, пока они не станут равны. Это и есть НОД.

НОД( a,b)= НОД( a-b, b)

= НОД( a, b-a)

Евклид

(365-300 до. н. э.)

Пример:

НОД (14 , 21 ) = НОД (14 , 21-14 ) = НОД (14 , 7 )

= НОД (7 , 7 ) = 7

много шагов при большой разнице чисел:

НОД (1998 , 2 ) = НОД (1996 , 2 ) = … = 2

b? нет да b:=b-a a:=a-b " width="640"

Алгоритм Евклида

начало

a = b?

да

конец

нет

a b?

нет

да

b:=b-a

a:=a-b

b then a:= a - b else b:= b – a; ? Где будет НОД? Как его вывести? ? Как вывести НОД в формате НОД(14,21) = 7? ? А без дополнительных переменных? " width="640"

Алгоритм Евклида

while a b do

if a b then

a:= a - b

else b:= b a;

?

Где будет НОД? Как его вывести?

?

Как вывести НОД в формате НОД(14,21) = 7?

?

А без дополнительных переменных?

 Модифицированный алгоритм Евклида Заменяем большее из двух чисел остатком от деления большего на меньшее до тех пор, пока меньшее не станет равно нулю . Тогда большее — это НОД. НОД( a,b)=  НОД( mod (a,b),  b)   =  НОД( a,  mod (b,a)) Пример : НОД  (14 ,  21 )  =  НОД  (14 ,  7 )  =  НОД  (0 ,  7 )  =  7

Модифицированный алгоритм Евклида

Заменяем большее из двух чисел остатком от деления большего на меньшее до тех пор, пока меньшее не станет равно нулю . Тогда большее — это НОД.

НОД( a,b)= НОД( mod (a,b), b)

= НОД( a, mod (b,a))

Пример :

НОД (14 , 21 ) = НОД (14 , 7 ) = НОД (0 , 7 ) = 7

b then a:= a mod b else b:= b mod a ; ? Где будет НОД? Как его вывести? if a 0 then write(a ) else write(b ); write( ??? ); a +b " width="640"

Модифицированный алгоритм

while ( a 0 ) and ( b 0 ) do

if a b then

a:= a mod b

else

b:= b mod a ;

?

Где будет НОД? Как его вывести?

if a 0 then

write(a )

else

write(b );

write( ??? );

a +b

b) a = a % b; else b = b % a; } while a!= 0 and b!= 0 : if a b: a = a % b else : b = b % a " width="640"

В других языках программирования

С :

Python:

while (a!= 0 && b!= 0 )

{

if (a b)

a = a % b;

else

b = b % a;

}

while a!= 0 and b!= 0 :

if a b:

a = a % b

else :

b = b % a

 Задачи « A »: Ввести с клавиатуры два натуральных числа и найти их НОД с помощью алгоритма Евклида. Пример : Введите два числа: 21 14 НОД(21,14)=7 « B »: Ввести с клавиатуры два натуральных числа и найти их НОД с помощью модифицированного алгоритма Евклида. Заполните таблицу: a b 64168 НОД( a,b ) 358853 82678 6365133 691042 17905514 11494962 23108855 549868978 298294835

Задачи

« A »: Ввести с клавиатуры два натуральных числа и найти их НОД с помощью алгоритма Евклида.

Пример :

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

21 14

НОД(21,14)=7

« B »: Ввести с клавиатуры два натуральных числа и найти их НОД с помощью модифицированного алгоритма Евклида. Заполните таблицу:

a

b

64168

НОД( a,b )

358853

82678

6365133

691042

17905514

11494962

23108855

549868978

298294835

 Задачи « C »: Ввести с клавиатуры два натуральных числа и сравнить количество шагов цикла для вычисления их НОД с помощью обычного и модифицированного алгоритмов Евклида. Пример : Введите два числа: 1998 2 НОД(1998,2)=2 Обычный алгоритм: 998 Модифицированный: 1

Задачи

« C »: Ввести с клавиатуры два натуральных числа и сравнить количество шагов цикла для вычисления их НОД с помощью обычного и модифицированного алгоритмов Евклида.

Пример :

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

1998 2

НОД(1998,2)=2

Обычный алгоритм: 998

Модифицированный: 1

 Обработка потока данных Задача . На вход программы поступает поток данных — последовательность целых чисел, которая заканчивается нулём . Требуется найти сумму элементов этой последовательности. while x 0  do begin  { добавить x к сумме }  {  x := следующее число } end; ?  Откуда возьмётся  x в первый раз?

Обработка потока данных

Задача . На вход программы поступает поток данных — последовательность целых чисел, которая заканчивается нулём . Требуется найти сумму элементов этой последовательности.

while x 0 do begin

{ добавить x к сумме }

{ x := следующее число }

end;

?

Откуда возьмётся x в первый раз?

 Обработка потока данных var  x, sum: integer ; ... sum:=  0 ; read( x ); { ввести первое число } while x 0  do begin  sum:=  sum  +  x ;  read(x);  { ввести следующее } end; write( 'Сумма ' , sum ); ?  Как найти сумму положительных?

Обработка потока данных

var x, sum: integer ;

...

sum:= 0 ;

read( x ); { ввести первое число }

while x 0 do begin

sum:= sum + x ;

read(x); { ввести следующее }

end;

write( 'Сумма ' , sum );

?

Как найти сумму положительных?

 Задачи « A »: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Определить, сколько получено чисел, которые делятся на 3. « B »: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Определить, сколько получено двузначных чисел, которые заканчиваются на 3. « C »: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Найти максимальное из введённых чётных чисел.

Задачи

« A »: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Определить, сколько получено чисел, которые делятся на 3.

« B »: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Определить, сколько получено двузначных чисел, которые заканчиваются на 3.

« C »: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Найти максимальное из введённых чётных чисел.

0: ' ); read(N); until N 0 ; N N 0 ? нет условие окончания работы цикла да конец " width="640"

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

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

начало

repeat

write( 'Введите N 0: ' );

read(N);

until N 0 ;

N

N 0 ?

нет

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

да

конец

 Задачи « A »: Напишите программу, которая предлагает ввести пароль и не переходит к выполнению основной части, пока не введён правильный пароль. Основная часть – вывод на экран «секретных сведений». « B »: Напишите программу, которая получает с клавиатуры натуральное число, которое больше 1, и определяет, простое оно или нет. Для этого нужно делить число на все натуральные числа, начиная с 2, пока не получится деление без остатка. « C »: Напишите программу, которая получает с клавиатуры два целых числа и вычисляет их произведение, используя только операции сложения.

Задачи

« A »: Напишите программу, которая предлагает ввести пароль и не переходит к выполнению основной части, пока не введён правильный пароль. Основная часть – вывод на экран «секретных сведений».

« B »: Напишите программу, которая получает с клавиатуры натуральное число, которое больше 1, и определяет, простое оно или нет. Для этого нужно делить число на все натуральные числа, начиная с 2, пока не получится деление без остатка.

« C »: Напишите программу, которая получает с клавиатуры два целых числа и вычисляет их произведение, используя только операции сложения.

 Задачи « D »: Напишите программу, которая получает с клавиатуры натуральное число и вычисляет целый квадратный корень из него – наибольшее число, квадрат которого не больше данного числа.

Задачи

« D »: Напишите программу, которая получает с клавиатуры натуральное число и вычисляет целый квадратный корень из него – наибольшее число, квадрат которого не больше данного числа.

 Цикл по переменной Задача . Вывести на экран степени числа 2 от 2 1 до 2 10 . k:=  1 ; N:=  2 ; while k    10 do  begin    write(N);    N:=  N* 2 ;    k:=  k  +  1  end; ! k:=  1 ;  Работа с k  в трёх местах! Идея : собрать всё вместе. k    10 N:=  2 ; for k:= 1  to  10 do  begin   writeln(N);    N:=  N* 2  end; k:= 1  to  10 k:=  k  +  1 увеличение на 1 по умолчанию

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

Задача . Вывести на экран степени числа 2 от 2 1 до 2 10 .

k:= 1 ;

N:= 2 ;

while k 10 do

begin

write(N);

N:= N* 2 ;

k:= k + 1

end;

!

k:= 1 ;

Работа с k в трёх местах!

Идея : собрать всё вместе.

k 10

N:= 2 ;

for k:= 1 to 10 do

begin

writeln(N);

N:= N* 2

end;

k:= 1 to 10

k:= k + 1

увеличение на 1 по умолчанию

 Цикл по переменной Задача . Найти сумму чисел от 1 до 1000. var sum, i: integer ; ... sum:=  0 ; for i:= 1  to  1000  do  sum:=  sum  +  i; Задача . Вывести квадраты чисел от 10 до 1 по убыванию. downto for k := 10  downto  1  do  write ln ( k*k ); шаг  « –1 »

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

Задача . Найти сумму чисел от 1 до 1000.

var sum, i: integer ;

...

sum:= 0 ;

for i:= 1 to 1000 do

sum:= sum + i;

Задача . Вывести квадраты чисел от 10 до 1 по убыванию.

downto

for k := 10 downto 1 do

write ln ( k*k );

шаг « –1 »

 Цикл по переменной Задача . Найти сумму чётных чисел от 2 до 1000. sum:=  0 ; for i:= 1  to  1000  do  if  i mod 2 = 0 then   sum:=  sum  +  i; ?  Что плохо? вспомогательная переменная sum:=  0 ; k:= 2 ; for i:= 1  to  5 00  do begin  sum:=  sum  +  k;  k:= k + 2  end; всего 500 чисел 2 , 4, 6, …

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

Задача . Найти сумму чётных чисел от 2 до 1000.

sum:= 0 ;

for i:= 1 to 1000 do

if i mod 2 = 0 then

sum:= sum + i;

?

Что плохо?

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

sum:= 0 ;

k:= 2 ;

for i:= 1 to 5 00 do begin

sum:= sum + k;

k:= k + 2

end;

всего 500 чисел

2 , 4, 6, …

 В других языках программирования Python: диапазон [1;1001) Sum  =  0 for i in  range ( 1 , 1001 ):  Sum  +=  i С : int sum, i; sum = 0 ; for (i= 1 ; i 1000 ; i++)  sum += i; i=i+1; sum=sum+i;

В других языках программирования

Python:

диапазон [1;1001)

Sum = 0

for i in range ( 1 , 1001 ):

Sum += i

С :

int sum, i;

sum = 0 ;

for (i= 1 ; i 1000 ; i++)

sum += i;

i=i+1;

sum=sum+i;

 Задачи « A »: Ипполит задумал трёхзначное число, которое при делении на 15 даёт в остатке 11, а при делении на 11 даёт в остатке 9. Напишите программу, которая находит все такие числа. « B »: С клавиатуры вводится натуральное число N. Программа должна найти факториал этого числа (обозначается как N!) – произведение всех натуральных чисел от 1 до N. Например,  5! = 1 • 2 • 3 • 4 • 5 = 120. « C »: Натуральное число называется числом Армстронга , если сумма цифр числа, возведенных в N -ную степень (где N – количество цифр в числе) равна самому числу. Например, 153 = 1 3 + 5 3 + 3 3 . Найдите все трёхзначные Армстронга.

Задачи

« A »: Ипполит задумал трёхзначное число, которое при делении на 15 даёт в остатке 11, а при делении на 11 даёт в остатке 9. Напишите программу, которая находит все такие числа.

« B »: С клавиатуры вводится натуральное число N. Программа должна найти факториал этого числа (обозначается как N!) – произведение всех натуральных чисел от 1 до N. Например,

5! = 1 • 2 • 3 • 4 • 5 = 120.

« C »: Натуральное число называется числом Армстронга , если сумма цифр числа, возведенных в N -ную степень (где N – количество цифр в числе) равна самому числу. Например, 153 = 1 3 + 5 3 + 3 3 . Найдите все трёхзначные Армстронга.

 Программирование (Паскаль) § 21 . Массивы

Программирование (Паскаль)

§ 21 . Массивы

 Что такое массив? ?  Как ввести 10000 переменных? Массив – это группа переменных одного типа, расположенных в памяти рядом (в соседних ячейках) и имеющих общее имя. Надо : выделять память записывать данные в нужную ячейку читать данные из ячейки

Что такое массив?

?

Как ввести 10000 переменных?

Массив – это группа переменных одного типа, расположенных в памяти рядом (в соседних ячейках) и имеющих общее имя.

Надо :

  • выделять память
  • записывать данные в нужную ячейку
  • читать данные из ячейки
 Выделение памяти (объявление) !  Массив = таблица ! максимальный индекс минимальный индекс var A: array[ 1 .. 5 ] of integer ;  V: array[ 0 .. 5 ] of real ; Индекс элемента — это значение, которое указывает на конкретный элемент массива. размер через константу ?  Зачем? const  N  =  10 ; var  A: array[ 1 ..N] of integer ;

Выделение памяти (объявление)

!

Массив = таблица !

максимальный индекс

минимальный индекс

var A: array[ 1 .. 5 ] of integer ;

V: array[ 0 .. 5 ] of real ;

Индекс элемента — это значение, которое указывает на конкретный элемент массива.

размер через константу

?

Зачем?

const N = 10 ;

var A: array[ 1 ..N] of integer ;

 Что неправильно? var A: array[ 10 .. 1 ] of integer ; ... A[ 5 ]  :=  4.5 ; [ 1 .. 10 ]  var A: array[ 1 .. 10 ] of integer ; ... A[ 15 ]  :=  'a' ;

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

var A: array[ 10 .. 1 ] of integer ;

...

A[ 5 ] := 4.5 ;

[ 1 .. 10 ]

var A: array[ 1 .. 10 ] of integer ;

...

A[ 15 ] := 'a' ;

118 Обращение к элементу массива НОМЕР  элемента массива (ИНДЕКС) A массив 3 1 2 3 4 5 15 5 10 15 20 25 A[1] A[2] A[3] A[4] A[5] ЗНАЧЕНИЕ элемента массива НОМЕР (ИНДЕКС)  элемента массива : 2  A[2]  ЗНАЧЕНИЕ  элемента массива : 10

118

Обращение к элементу массива

НОМЕР элемента массива

(ИНДЕКС)

A

массив

3

1

2

3

4

5

15

5

10

15

20

25

A[1]

A[2]

A[3]

A[4]

A[5]

ЗНАЧЕНИЕ элемента массива

НОМЕР (ИНДЕКС) элемента массива : 2

A[2]

ЗНАЧЕНИЕ элемента массива : 10

 Обращение к элементу массива 1 2 3 4 5 23 12 7 43 51 var  i: integer ; i:=  2 ; A[ 3 ]:=  A[i]  +  2 *A[i- 1 ]  +  A[ 2 *i] ; writeln( A[ 3 ]+A[ 5 ] ); ?  Что получится? 101 A[ 3 ]:=  A[ 2 ]  +  2 *A[ 1 ]  +  A[ 4 ] ; writeln(  A[ 3 ]+A[ 5 ] ); 1 52

Обращение к элементу массива

1

2

3

4

5

23

12

7

43

51

var i: integer ;

i:= 2 ;

A[ 3 ]:= A[i] + 2 *A[i- 1 ] + A[ 2 *i] ;

writeln( A[ 3 ]+A[ 5 ] );

?

Что получится?

101

A[ 3 ]:= A[ 2 ] + 2 *A[ 1 ] + A[ 4 ] ;

writeln( A[ 3 ]+A[ 5 ] );

1 52

 Что неверно? var A: array[ 1 .. 5 ] of integer ; x: integer ; ... x:= 2 ; writeln( A[x- 3 ] ); A[x+ 4 ]:=A[x- 1 ]+A[ 2 *x] ; ?  Что плохо? writeln( A[ - 1 ] ); A[ 6 ]:=A[ 1 ]+A[ 4 ]; Выход за границы массива — это обращение к элементу с индексом, который не существует в массиве.

Что неверно?

var A: array[ 1 .. 5 ] of integer ;

x: integer ;

...

x:= 2 ;

writeln( A[x- 3 ] );

A[x+ 4 ]:=A[x- 1 ]+A[ 2 *x] ;

?

Что плохо?

writeln( A[ - 1 ] );

A[ 6 ]:=A[ 1 ]+A[ 4 ];

Выход за границы массива — это обращение к элементу с индексом, который не существует в массиве.

 Перебор элементов массива const N  =  10 ; var A : array[ 1 ..N ] of integer ; Перебор элементов : просматриваем все элементы массива и, если нужно, выполняем с каждым из них некоторую операцию. for i := 1  to N do begin  { здесь работаем с A[i] } end;

Перебор элементов массива

const N = 10 ;

var A : array[ 1 ..N ] of integer ;

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

for i := 1 to N do begin

{ здесь работаем с A[i] }

end;

 Заполнение массива for i := 1  to N do  A[i]:= i; ?  Что произойдёт? В развёрнутом виде A[ 1 ]:= 1 ; A[ 2 ]:= 2 ; A[ 3 ]:= 3 ; ... A[N]:= N; 1 2 3 N ...

Заполнение массива

for i := 1 to N do

A[i]:= i;

?

Что произойдёт?

В развёрнутом виде

A[ 1 ]:= 1 ;

A[ 2 ]:= 2 ;

A[ 3 ]:= 3 ;

...

A[N]:= N;

1

2

3

N

...

 Заполнение массива в обратном порядке N … 3 2 1 X:= N; A[ 1 ]:= N; A[ 2 ]:= N- 1 ; A[ 3 ]:= N- 2 ; ... A[N]:= 1 ; for i := 1  to N do begin  A[i]:= X; end;  X:= X - 1 end; ?  Как меняется X ? X = N, N-1, …, 2, 1 уменьшение на 1 начальное значение

Заполнение массива в обратном порядке

N

3

2

1

X:= N;

A[ 1 ]:= N;

A[ 2 ]:= N- 1 ;

A[ 3 ]:= N- 2 ;

...

A[N]:= 1 ;

for i := 1 to N do begin

A[i]:= X;

end;

X:= X - 1

end;

?

Как меняется X ?

X = N, N-1, …, 2, 1

уменьшение на 1

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

 Заполнение массива в обратном порядке A[i]:= X; N … 3 2 1 ?  Как связаны i  и X ? for i := 1  to N do  A[i]:= N + 1 – i end; i X 1 N 2 3 N-1 N-2 ... ... N 1 – 1  +1 !  Сумма i  и X не меняется! i + X = N + 1 X = N + 1 - i

Заполнение массива в обратном порядке

A[i]:= X;

N

3

2

1

?

Как связаны i и X ?

for i := 1 to N do

A[i]:= N + 1 – i

end;

i

X

1

N

2

3

N-1

N-2

...

...

N

1

– 1

+1

!

Сумма i и X не меняется!

i + X = N + 1

X = N + 1 - i

 Вывод массива на экран for i:= 1 to N do  write( A[i] ); ?  Что плохо? , ' ' ); интервал между значениями или так: for i:= 1 to N do  writeln( A[i] ); в столбик или так: write(  '[' ); for i:= 1 to N do  write( A[i] , ',' ); writeln( ']' ); ?  Как убрать? [1,2,3,4,5,]

Вывод массива на экран

for i:= 1 to N do

write( A[i] );

?

Что плохо?

, ' ' );

интервал между значениями

или так:

for i:= 1 to N do

writeln( A[i] );

в столбик

или так:

write( '[' );

for i:= 1 to N do

write( A[i] , ',' );

writeln( ']' );

?

Как убрать?

[1,2,3,4,5,]

 Ввод с клавиатуры for i:= 1 to N do  read ( A[i] ); ?  Что плохо? С подсказкой для ввода: A[1]  =  A[2]  =  A[3]  =  A[4]  =  A[5]  =  5 12 34 56 13 for i:= 1 to N do begin  write( ' A[ ' ,i, ' ]= ' );  read( A[i] ) end;

Ввод с клавиатуры

for i:= 1 to N do

read ( A[i] );

?

Что плохо?

С подсказкой для ввода:

A[1] =

A[2] =

A[3] =

A[4] =

A[5] =

5

12

34

56

13

for i:= 1 to N do begin

write( ' A[ ' ,i, ' ]= ' );

read( A[i] )

end;

 В других языках программирования Python: A = [ 0 ]*N for i in range (N):  A[i] = i + 1 print(A) !  Нумерация элементов  всегда с нуля ! С ++: int A[N], i; for (i = 0 ; i   A[i] = i + 1; for (i = 0 ; i   cout

В других языках программирования

Python:

A = [ 0 ]*N

for i in range (N):

A[i] = i + 1

print(A)

!

Нумерация элементов всегда с нуля !

С ++:

int A[N], i;

for (i = 0 ; i

A[i] = i + 1;

for (i = 0 ; i

cout " " ;

 Задачи « A »: а) Заполните все элементы массива из 10 элементов значением X , введённым с клавиатуры. б) Заполните массив из 10 элементов последовательными натуральными числами, начиная с X (значение X введите с клавиатуры). « B »: а) Заполните массив из 10 элементов натуральными числами в обратном порядке, начиная со значения X, введённого с клавиатуры. Последний элемент должен быть равен X , предпоследний равен X – 1 и т.д. б) Заполните массив из 10 элементов степенями числа 2 (от 2 1 до 2 N ), так чтобы элемент с индексом i был равен 2 i .

Задачи

« A »: а) Заполните все элементы массива из 10 элементов значением X , введённым с клавиатуры.

б) Заполните массив из 10 элементов последовательными натуральными числами, начиная с X (значение X введите с клавиатуры).

« B »: а) Заполните массив из 10 элементов натуральными числами в обратном порядке, начиная со значения X, введённого с клавиатуры. Последний элемент должен быть равен X , предпоследний равен X 1 и т.д.

б) Заполните массив из 10 элементов степенями числа 2 (от 2 1 до 2 N ), так чтобы элемент с индексом i был равен 2 i .

 Задачи « C »: а) Заполните массив из 10 элементов степенями числа 2, начиная с конца, так чтобы последний элемент массива был равен 1, а каждый предыдущий был в 2 раза больше следующего. б) С клавиатуры вводится целое число X . Заполните массив из 11 элементов целыми числами, так чтобы средний элемент массива был равен X , слева от него элементы стояли по возрастанию, а справа – по убыванию. Соседние элементы отличаются на единицу. Например,  при X = 3 массив из 5 элементов заполняется так: 1 2 3 2 1.

Задачи

« C »: а) Заполните массив из 10 элементов степенями числа 2, начиная с конца, так чтобы последний элемент массива был равен 1, а каждый предыдущий был в 2 раза больше следующего.

б) С клавиатуры вводится целое число X . Заполните массив из 11 элементов целыми числами, так чтобы средний элемент массива был равен X , слева от него элементы стояли по возрастанию, а справа – по убыванию. Соседние элементы отличаются на единицу. Например, при X = 3 массив из 5 элементов заполняется так: 1 2 3 2 1.

 Заполнение случайными числами for i:= 1 to N do begin   A[i]:= 20 + random ( 81 );  write(A[i], ' ' ) end; ?  Какой отрезок? сразу вывод на экран

Заполнение случайными числами

for i:= 1 to N do begin

A[i]:= 20 + random ( 81 );

write(A[i], ' ' )

end;

?

Какой отрезок?

сразу вывод на экран

 Задачи -2 « A »: Напишите программу, которая заполняет массив из 10 элементов случайными числами в диапазоне [0,10], выводит его на экран, а затем выводит на экран квадраты всех элементов массива. Пример : Массив: 5 6 2 3 1 4 8 7  Квадраты: 2 5 36 4 9 1 1 6 6 4 49  « B »: Напишите программу, которая заполняет массив из 10 элементов случайными числами в диапазоне [100,300] и выводит его на экран. После этого на экран выводятся средние цифры (число десятков) всех чисел, записанных в массив. Пример : Массив: 142 324 135 257 167 295 126 223 138 270  Число десятков: 4 2 3 5 6 9 2 2 3 7

Задачи -2

« A »: Напишите программу, которая заполняет массив из 10 элементов случайными числами в диапазоне [0,10], выводит его на экран, а затем выводит на экран квадраты всех элементов массива.

Пример :

Массив: 5 6 2 3 1 4 8 7

Квадраты: 2 5 36 4 9 1 1 6 6 4 49

« B »: Напишите программу, которая заполняет массив из 10 элементов случайными числами в диапазоне [100,300] и выводит его на экран. После этого на экран выводятся средние цифры (число десятков) всех чисел, записанных в массив.

Пример :

Массив: 142 324 135 257 167 295 126 223 138 270

Число десятков: 4 2 3 5 6 9 2 2 3 7

 Задачи -2 « C »: Напишите программу, которая заполняет массив из  10 элементов случайными числами в диапазоне [100,500] и выводит его на экран. После этого на экран выводятся суммы цифр всех чисел, записанных в массив. Пример : Массив: 162 425 340 128 278 195 326 414 312 177    Суммы цифр: 9 11 7 11 17 15 11 9 6 15

Задачи -2

« C »: Напишите программу, которая заполняет массив из 10 элементов случайными числами в диапазоне [100,500] и выводит его на экран. После этого на экран выводятся суммы цифр всех чисел, записанных в массив.

Пример :

Массив: 162 425 340 128 278 195 326 414 312 177

Суммы цифр: 9 11 7 11 17 15 11 9 6 15

 Программирование (Паскаль) § 22 . Алгоритмы обработки массивов

Программирование (Паскаль)

§ 22 . Алгоритмы обработки массивов

 Сумма элементов массива Задача . Найти сумму элементов массива. const N  =  10 ; var A : array [ 1 ..N ] of integer; ?  Какие переменные  нужны? 5 2 8 3 1 i sum 0 sum:=  0 ; for i:= 1 to N do  sum:=  sum  +  A[i] ; writeln( sum ); 1 5 2 7 3 15 4 1 8 5 19

Сумма элементов массива

Задача . Найти сумму элементов массива.

const N = 10 ;

var A : array [ 1 ..N ] of integer;

?

Какие переменные нужны?

5

2

8

3

1

i

sum

0

sum:= 0 ;

for i:= 1 to N do

sum:= sum + A[i] ;

writeln( sum );

1

5

2

7

3

15

4

1 8

5

19

 Сумма не всех элементов массива Задача . Найти сумму чётных элементов массива. ?  Что делаем с нечётными? sum:=  0 ; for i:= 1 to N do  sum:=  sum  +  A[i] ; writeln( sum ); if  A[i] mod 2 = 0 then  if  A[i] mod 2 = 0 then  sum:=  sum  +  A[i] ; writeln( sum );

Сумма не всех элементов массива

Задача . Найти сумму чётных элементов массива.

?

Что делаем с нечётными?

sum:= 0 ;

for i:= 1 to N do

sum:= sum + A[i] ;

writeln( sum );

if A[i] mod 2 = 0 then

if A[i] mod 2 = 0 then

sum:= sum + A[i] ;

writeln( sum );

 Задачи « A »: Напишите программу, которая заполняет массив из 10 элементов случайными числами на отрезке [–5; 5] и находит сумму положительных элементов. « B »: Напишите программу, которая заполняет массив из 10 элементов случайными числами на отрезке [–2; 2] и находит произведение ненулевых элементов. « C »: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке  [100; 1000] и находит отдельно сумму элементов в первой и во второй половинах массива.

Задачи

« A »: Напишите программу, которая заполняет массив из 10 элементов случайными числами на отрезке [–5; 5] и находит сумму положительных элементов.

« B »: Напишите программу, которая заполняет массив из 10 элементов случайными числами на отрезке [–2; 2] и находит произведение ненулевых элементов.

« C »: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [100; 1000] и находит отдельно сумму элементов в первой и во второй половинах массива.

 Подсчёт элементов по условию Задача . Найти количество чётных элементов массива. ?  Какие переменные нужны? переменная-счётчик var count: integer ; count :=  0 ; for i:= 1 to N do   if  A[i] mod 2 = 0 then  count :=  count  + 1 ; writeln( count ); ?  Что тут делаем?

Подсчёт элементов по условию

Задача . Найти количество чётных элементов массива.

?

Какие переменные нужны?

переменная-счётчик

var count: integer ;

count := 0 ;

for i:= 1 to N do

if A[i] mod 2 = 0 then

count := count + 1 ;

writeln( count );

?

Что тут делаем?

180 then sum:= sum + A[i] ; writeln( sum/N ); ? Что плохо? " width="640"

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

Задача . Найти среднее арифметическое элементов массива, которые больше 180 (рост в см).

sum:= 0 ;

for i:= 1 to N do

if A[i] 180 then

sum:= sum + A[i] ;

writeln( sum/N );

?

Что плохо?

180 then begin count := count + 1 ; sum:= sum + A[i] ; end; writeln( sum/ count ) ? Что тут делаем? " width="640"

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

Задача . Найти среднее арифметическое элементов массива, которые больше 180 (рост в см).

?

Какие переменные нужны?

sum:= 0 ;

count:= 0 ;

for i:= 1 to N do

if A[i] 180 then begin

count := count + 1 ;

sum:= sum + A[i] ;

end;

writeln( sum/ count )

?

Что тут делаем?

 Задачи « A »: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [0; 200] и считает число элементов, которые делятся на 10. « B »: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [0; 200] и считает число двузначных чисел в массиве. « C »: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [10; 100] и считает число пар соседних элементов, сумма которых делится на 3.

Задачи

« A »: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [0; 200] и считает число элементов, которые делятся на 10.

« B »: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [0; 200] и считает число двузначных чисел в массиве.

« C »: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [10; 100] и считает число пар соседних элементов, сумма которых делится на 3.

0 нужен цикл это цикл с условием (число шагов неизвестно) ? Когда увеличивать счётчик ? ? Какой цикл ? счётчик = 0 пока не введён 0 : если введено число 0 то счётчик: = счётчик + 1 " width="640"

Обработка потока данных

Задача . С клавиатуры вводятся числа, ввод завершается числом 0. Определить, сколько было введено положительных чисел.

  • нужен счётчик
  • счётчик увеличивается если число 0
  • нужен цикл
  • это цикл с условием (число шагов неизвестно)

?

Когда увеличивать счётчик ?

?

Какой цикл ?

счётчик = 0

пока не введён 0 :

если введено число 0 то

счётчик: = счётчик + 1

0 then count:= count + 1 ; read( x ); end; writeln( count ); откуда взять x ? ? Что плохо ? " width="640"

Обработка потока данных

var x, count: integer ;

count: = 0 ;

read( x );

while x 0 do begin

if x 0 then

count:= count + 1 ;

read( x );

end;

writeln( count );

откуда взять x ?

?

Что плохо ?

0 then count:= count + 1 ; read( x ); read( x ); end; writeln( count ); " width="640"

Найди ошибку!

var x, count: integer ;

count: = 0 ;

read( x );

while x 0 do begin

if x 0 then

count:= count + 1 ;

read( x );

read( x );

end;

writeln( count );

0 then count:= count + 1 ; read( x ); end; writeln( count ); count: = 0 ; " width="640"

Найди ошибку!

var x, count: integer ;

count: = 0 ;

read( x );

while x = 0 do begin

if x 0 then

count:= count + 1 ;

read( x );

end;

writeln( count );

count: = 0 ;

 Обработка потока данных Задача . С клавиатуры вводятся числа, ввод завершается числом 0. Найти сумму введённых чисел, оканчивающихся на цифру

Обработка потока данных

Задача . С клавиатуры вводятся числа, ввод завершается числом 0. Найти сумму введённых чисел, оканчивающихся на цифру "5".

  • нужна переменная для суммы
  • число добавляется к сумме, если оно заканчивается на "5"
  • нужен цикл с условием

?

Как это записать ?

сумма: = 0

пока не введён 0 :

если число оканчивается на "5" то

сумма: = сумма + число

if x mod 10 = 5 then

 Обработка потока данных Задача . С клавиатуры вводятся числа, ввод завершается числом 0. Найти сумму введённых чисел, оканчивающихся на цифру

Обработка потока данных

Задача . С клавиатуры вводятся числа, ввод завершается числом 0. Найти сумму введённых чисел, оканчивающихся на цифру "5".

var x, sum: integer ;

sum: = 0 ;

read( x );

while x 0 do begin

if x mod 10 = 5 then

sum:= sum + x;

read( x )

end;

writeln( sum );

?

Чего не хватает ?

 Найди ошибку! var x, sum: integer ; sum:  =  0 ; read(  x ); read(  x ); while  x   0 do begin  if  x mod 10 = 5  then  sum:= sum + x;  read( x ) end; writeln( sum );

Найди ошибку!

var x, sum: integer ;

sum: = 0 ;

read( x );

read( x );

while x 0 do begin

if x mod 10 = 5 then

sum:= sum + x;

read( x )

end;

writeln( sum );

 Задачи « A »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Определить, сколько получено чисел, которые делятся на 3. « B »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Определить, сколько получено двузначных чисел, которые заканчиваются на 3.

Задачи

« A »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Определить, сколько получено чисел, которые делятся на 3.

« B »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Определить, сколько получено двузначных чисел, которые заканчиваются на 3.

 Задачи « C »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Найти среднее арифметическое всех двузначных чисел, которые делятся на 7. « D »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Найти максимальное из введённых чётных чисел.

Задачи

« C »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Найти среднее арифметическое всех двузначных чисел, которые делятся на 7.

« D »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Найти максимальное из введённых чётных чисел.

 Перестановка элементов массива ?  Как поменять местами значения двух   переменных a  и b ? вспомогательная переменная элементы массива: с:= a; a:= b; b:= c; с:= A[i]; A[i]:= A[k]; A[k]:= c;

Перестановка элементов массива

?

Как поменять местами значения двух переменных a и b ?

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

элементы массива:

с:= a;

a:= b;

b:= c;

с:= A[i];

A[i]:= A[k];

A[k]:= c;

 Перестановка пар соседних элементов Задача . Массив A содержит чётное количество элементов N. Нужно поменять местами пары соседних элементов: первый со вторым, третий — с четвёртым и т. д. 1 2 7 3 12 4 38 5 N-1 … N 40 23 1 12 2 3 7 4 5 38 … N-1 23 N 40

Перестановка пар соседних элементов

Задача . Массив A содержит чётное количество элементов N. Нужно поменять местами пары соседних элементов: первый со вторым, третий — с четвёртым и т. д.

1

2

7

3

12

4

38

5

N-1

N

40

23

1

12

2

3

7

4

5

38

N-1

23

N

40

 Перестановка пар соседних элементов for i:= 1 to N do begin  поменять местами A[i] и A[i+1] end; ?  Что плохо ? 1 2 7 12 3 4 38 5 5 6 40 23 12 7 38 5 40 23 выход за границы массива 12 38 7 5 40 23 12 38 5 7 40 23 12 38 5 40 7 23 ? 12 38 5 40 23 7

Перестановка пар соседних элементов

for i:= 1 to N do begin

поменять местами A[i] и A[i+1]

end;

?

Что плохо ?

1

2

7

12

3

4

38

5

5

6

40

23

12

7

38

5

40

23

выход за границы массива

12

38

7

5

40

23

12

38

5

7

40

23

12

38

5

40

7

23

?

12

38

5

40

23

7

 Перестановка пар соседних элементов не выходим за границу i:= 1 ; while i   { переставляем A[i] и A[i+1] }  с:=  A[i];  A[i]:=  A[i+ 1 ];  A[i+ 1 ]:=  c;  i:= i + 2   { к следующей паре } end; i:= i + 2 A[ 1 ]  A[ 2 ], A[ 3 ]  A[ 4 ], …, A[N- 1 ]  A[N]

Перестановка пар соседних элементов

не выходим за границу

i:= 1 ;

while i

{ переставляем A[i] и A[i+1] }

с:= A[i];

A[i]:= A[i+ 1 ];

A[i+ 1 ]:= c;

i:= i + 2 { к следующей паре }

end;

i:= i + 2

A[ 1 ] A[ 2 ], A[ 3 ] A[ 4 ], …, A[N- 1 ] A[N]

 Реверс массива Задача . Переставить элементы массива в обратном порядке (выполнить реверс ). 1 2 7 3 12 5 N-2 … N-1 38 N 40 23 1 23 2 3 40 38 … N -2 5 N-1 12 N 7 1 + N   = N + 1 2 +N- 1 = N+ 1 A[ 1 ]  A[N] A[ 2 ]  A[N- 1 ] A[i]  A[N+ 1 -i] A[N]  A[ 1 ] i+ ??? = N+ 1 N+ 1 = N+ 1

Реверс массива

Задача . Переставить элементы массива в обратном порядке (выполнить реверс ).

1

2

7

3

12

5

N-2

N-1

38

N

40

23

1

23

2

3

40

38

N -2

5

N-1

12

N

7

1 + N = N + 1

2 +N- 1 = N+ 1

A[ 1 ] A[N]

A[ 2 ] A[N- 1 ]

A[i] A[N+ 1 -i]

A[N] A[ 1 ]

i+ ??? = N+ 1

N+ 1 = N+ 1

 Реверс массива do  begin N div 2 for i:= 1 to N do begin  поменять местами A[i] и A[ N+ 1 -i ] end; ?  Что плохо ? 1 2 7 12 3 4 40 23 i= 1 i= 2 23 12 40 7 i= 3 23 40 12 7 23 12 40 7 i= 4 7 12 40 23 ?  Как исправить ?

Реверс массива

do begin

N div 2

for i:= 1 to N do begin

поменять местами A[i] и A[ N+ 1 -i ]

end;

?

Что плохо ?

1

2

7

12

3

4

40

23

i= 1

i= 2

23

12

40

7

i= 3

23

40

12

7

23

12

40

7

i= 4

7

12

40

23

?

Как исправить ?

156 Конец фильма ПОЛЯКОВ Константин Юрьевич д.т.н., учитель информатики ГБОУ СОШ № 163, г. Санкт-Петербург kpolyakov@mail.ru  ЕРЕМИН Евгений Александрович к.ф.-м.н., доцент кафедры мультимедийной дидактики и ИТО ПГГПУ, г. Пермь eremin@pspu.ac.ru

156

Конец фильма

ПОЛЯКОВ Константин Юрьевич

д.т.н., учитель информатики

ГБОУ СОШ № 163, г. Санкт-Петербург

[email protected]

ЕРЕМИН Евгений Александрович

к.ф.-м.н., доцент кафедры мультимедийной дидактики и ИТО ПГГПУ, г. Пермь

[email protected]

 Источники иллюстраций иллюстрации художников издательства «Бином» авторские материалы

Источники иллюстраций

  • иллюстрации художников издательства «Бином»
  • авторские материалы
-75%
Курсы дополнительного образования

Создание динамических веб-страниц с помощью PHP и MySQL

Продолжительность 72 часа
Документ: Cвидетельство о прохождении курса
4000 руб.
1000 руб.
Подробнее
Скачать разработку
Сохранить у себя:
Основы программирования Паскаль - Поляков (4.02 MB)

Комментарии 0

Чтобы добавить комментарий зарегистрируйтесь или на сайт

© 2008-2024, ООО «Мультиурок», ИНН 6732109381, ОГРН 1156733012732

Учителю!
Огромная база учебных материалов на каждый урок с возможностью удаленного управления
Тесты, видеоуроки, электронные тетради