![Программирование (Паскаль) § 17. Введение § 1 8. Линейные программы § 19. Ветвления § 2 0. Программирование циклических алгоритмов § 21 . Массивы § 22 . Алгоритмы обработки массивов](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img0.jpg)
Программирование (Паскаль)
§ 17. Введение
§ 1 8. Линейные программы
§ 19. Ветвления
§ 2 0. Программирование циклических алгоритмов
§ 21 . Массивы
§ 22 . Алгоритмы обработки массивов
![Программирование (Паскаль) § 17. Введение](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img1.jpg)
Программирование (Паскаль)
§ 17. Введение
![Что такое программирование? Программирование — это создание программ для компьютеров. Этим занимаются программисты . Чем занимаются программисты: анализ задачи (выделение исходных данных, связей между ними, этапов решения задачи) системные аналитики разработка алгоритмов алгоритмисты написание и отладка программ кодировщики тестирование программ тестировщики написание документации технические писатели](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img2.jpg)
Что такое программирование?
Программирование — это создание программ для компьютеров. Этим занимаются программисты .
Чем занимаются программисты:
анализ задачи (выделение исходных данных, связей между ними, этапов решения задачи)
системные аналитики
разработка алгоритмов
алгоритмисты
написание и отладка программ
кодировщики
тестирование программ
тестировщики
написание документации
технические писатели
![Направления в программировании системный программист операционные системы, утилиты, драйверы прикладной программист прикладные программы, в т.ч. для мобильных устройств веб-программист веб-сайты программист баз данных системы управления базами данных](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img3.jpg)
Направления в программировании
системный программист
операционные системы, утилиты, драйверы
прикладной программист
прикладные программы, в т.ч. для мобильных устройств
веб-программист
веб-сайты
программист баз данных
системы управления базами данных
![Простейшая программа название программы program qq ; begin { начало программы } { тело программы } end. { конец программы } комментарии внутри {} не обрабатываются ? Что делает эта программа ?](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img4.jpg)
Простейшая программа
название программы
program qq ;
begin { начало программы }
{ тело программы }
end. { конец программы }
комментарии внутри {} не обрабатываются
?
Что делает эта программа ?
![Вывод на экран program Hello ; begin write( ' Привет! ' ); end. оператор вывода Оператор — это команда языка программирования. ? write( ' Привет ' , Вася !); Что плохо? write( ' Привет , Вася !' ); вся строка в апострофах](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img5.jpg)
Вывод на экран
program Hello ;
begin
write( ' Привет! ' );
end.
оператор вывода
Оператор — это команда языка программирования.
?
write( ' Привет ' , Вася !);
Что плохо?
write( ' Привет , Вася !' );
вся строка в апострофах
![Переход на новую строку write( ' Привет , Вася !' ); write( ' Привет , Петя !' ); ожидание: Привет , Вася ! Привет , Петя ! реальность: Привет , Вася ! Привет , Петя ! решение: writeln( ' Привет , Вася !' ); writeln( ' Привет , Петя !' ); ln и перейти на новую строку](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img6.jpg)
Переход на новую строку
write( ' Привет , Вася !' );
write( ' Привет , Петя !' );
ожидание:
Привет , Вася !
Привет , Петя !
реальность:
Привет , Вася ! Привет , Петя !
решение:
writeln( ' Привет , Вася !' );
writeln( ' Привет , Петя !' );
ln
и перейти на новую строку
![Системы программирования Системы программирования — это средства для создания новых программ. Транслятор — это программа, которая переводит тексты программ, написанных программистом, в машинные коды (команды процессора). компилятор — переводит всю программу в машинные коды, строит исполняемый файл ( .exe ) интерпретатор — сам выполняет программу по частям ( по одному оператору). program Hello ; begin write( ' Привет! ' ) ; end. 1010010100 privet.exe](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img7.jpg)
Системы программирования
Системы программирования — это средства для создания новых программ.
Транслятор — это программа, которая переводит тексты программ, написанных программистом, в машинные коды (команды процессора).
- компилятор — переводит всю программу в машинные коды, строит исполняемый файл ( .exe )
- интерпретатор — сам выполняет программу по частям ( по одному оператору).
program Hello ;
begin
write( ' Привет! ' ) ;
end.
1010010100
privet.exe
![Системы программирования Отладчик — это программа для поиска ошибок в других программах. пошаговый режим — выполнение программы по шагам (по одному оператору) просмотр значений переменных во время выполнения программы точки останова – операторы в программе, перед выполнением которых нужно остановиться. Среда программирования ( IDE ) : редактор текста программ транслятор отладчик](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img8.jpg)
Системы программирования
Отладчик — это программа для поиска ошибок в других программах.
- пошаговый режим — выполнение программы по шагам (по одному оператору)
- просмотр значений переменных во время выполнения программы
- точки останова – операторы в программе, перед выполнением которых нужно остановиться.
Среда программирования ( IDE ) :
- редактор текста программ
- транслятор
- отладчик
![Задачи « B »: Вывести на экран текст «лесенкой» Вася пошел гулять « C »: Вывести на экран рисунок из букв Ж ЖЖЖ ЖЖЖЖЖ ЖЖЖЖЖЖЖ HH HH ZZZZZ](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img9.jpg)
Задачи
« B »: Вывести на экран текст «лесенкой»
Вася
пошел
гулять
« C »: Вывести на экран рисунок из букв
Ж
ЖЖЖ
ЖЖЖЖЖ
ЖЖЖЖЖЖЖ
HH HH
ZZZZZ
![Программирование (Паскаль) § 18. Линейные программы](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img10.jpg)
Программирование (Паскаль)
§ 18. Линейные программы
![Пример задачи Задача . Ввести два числа и вычислить их сумму. p rogram Sum ; begin { ввести два числа } { вычислить их сумму } { вывести сумму на экран } end. ? Выполнится? Псевдокод – алгоритм на русском языке с элементами языка программирования. ! Компьютер не может исполнить псевдокод!](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img11.jpg)
Пример задачи
Задача . Ввести два числа и вычислить их сумму.
p rogram Sum ;
begin
{ ввести два числа }
{ вычислить их сумму }
{ вывести сумму на экран }
end.
?
Выполнится?
Псевдокод – алгоритм на русском языке с элементами языка программирования.
!
Компьютер не может исполнить псевдокод!
![Зачем нужны переменные? p rogram Sum ; begin { ввести два числа } { вычислить их сумму } { вывести сумму на экран } end. Где запомнить? Переменная — это величина, которая имеет имя, тип и значение. Значение переменной может изменяться во время выполнения программы. объявление переменных var a, b, c : integer ; ячейки памяти](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img12.jpg)
Зачем нужны переменные?
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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img13.jpg)
Имена переменных
Идентификатор — это имя программы или переменной.
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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img14.jpg)
Работа с переменными
Присваивание (запись значения)
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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img15.jpg)
Работа с переменными
Изменение значения
увеличить на 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 .](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img16.jpg)
Ввод с клавиатуры
Цель – изменить исходные данные, не меняя программу.
5
read( a );
!
- Программа ждет, пока пользователь введет значение и нажмет Enter .
- Введенное значение записывается в переменную a .
![Ввод с клавиатуры read(a, b); через пробел: 25 30 через Enter : 25 30 a 25 b 30 a 25 b 30](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img17.jpg)
Ввод с клавиатуры
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 ? Как улучшить диалог?](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img18.jpg)
Программа сложения чисел
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);](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img19.jpg)
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-х чисел?](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img20.jpg)
Программа сложения чисел
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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img21.jpg)
Задачи
« 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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img22.jpg)
Задачи
« 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 ;](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img23.jpg)
Арифметические выражения
Линейная запись (в одну строку):
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 ;](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img24.jpg)
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 }](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img25.jpg)
Частное и остаток
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 – это последняя цифра числа.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img26.jpg)
Частное и остаток
?
Что получится?
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 ?](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img27.jpg)
Форматный вывод
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 с](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img28.jpg)
Задачи
« A »: Ввести число, обозначающее количество секунд. Вывести то же самое время в минутах и секундах.
Пример :
Введите число секунд: 175
2 мин. 55 с.
« B »: Ввести число, обозначающее количество секунд. Вывести то же самое время в часах, минутах и секундах.
Пример :
Введите число секунд: 8325
2 ч. 18 мин. 45 с
![Задачи «С»: Занятия в школе начинаются в 8-30. Урок длится 45 минут, перерывы между уроками – 10 минут. Ввести номер урока и вывести время его окончания. Пример : Введите номер урока: 6 13-50](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img29.jpg)
Задачи
«С»: Занятия в школе начинаются в 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 минимально возможное](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img30.jpg)
Форматный вывод
вариант:
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 количество знаков может отличаться](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img31.jpg)
Научный формат чисел
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 ));](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img32.jpg)
Операции с вещественными числами
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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img33.jpg)
Операции с вещественными числами
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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img34.jpg)
Операции с вещественными числами
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.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img35.jpg)
Задачи
« A »: Ввести число, обозначающее размер одной фотографии в Мбайтах. Определить, сколько фотографий поместится на флэш-карту объёмом 2 Гбайта.
Пример :
Размер фотографии в Мбайтах: 6.3
Поместится фотографий: 325.
![Задачи « B »: Оцифровка звука выполняется в режиме стерео с частотой дискретизации 44,1 кГц и глубиной кодирования 24 бита. Ввести время записи в минутах и определить, сколько Мбайт нужно выделить для хранения полученного файла (округлить результат в большую сторону). Пример : Введите время записи в минутах: 10 Размер файла 152 Мбайт](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img36.jpg)
Задачи
« B »: Оцифровка звука выполняется в режиме стерео с частотой дискретизации 44,1 кГц и глубиной кодирования 24 бита. Ввести время записи в минутах и определить, сколько Мбайт нужно выделить для хранения полученного файла (округлить результат в большую сторону).
Пример :
Введите время записи в минутах: 10
Размер файла 152 Мбайт
![Задачи «С»: Разведчики-математики для того, чтобы опознать своих, используют числовые пароли. Услышав число-пароль, разведчик должен возвести его в квадрат и сказать в ответ первую цифры дробной части полученного числа. Напишите программу, которая по полученному паролю (вещественному числу) вычисляет число-ответ. Пример : Введите пароль: 1.92 Ответ: 6 потому что 1,92 2 = 3, 6 864…, первая цифра дробной части – 6](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img37.jpg)
Задачи
«С»: Разведчики-математики для того, чтобы опознать своих, используют числовые пароли. Услышав число-пароль, разведчик должен возвести его в квадрат и сказать в ответ первую цифры дробной части полученного числа. Напишите программу, которая по полученному паролю (вещественному числу) вычисляет число-ответ.
Пример :
Введите пароль: 1.92
Ответ: 6
потому что 1,92 2 = 3, 6 864…, первая цифра дробной части – 6
![Случайные и псевдослучайные числа Случайные явления встретил слона – не встретил слона жеребьёвка на соревнованиях лотерея случайная скорость (направление выстрела ) в игре … Случайные числа — это последовательность чисел, в которой невозможно предсказать следующее число, даже зная все предыдущие.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img38.jpg)
Случайные и псевдослучайные числа
Случайные явления
- встретил слона – не встретил слона
- жеребьёвка на соревнованиях
- лотерея
- случайная скорость (направление выстрела ) в игре
- …
Случайные числа — это последовательность чисел, в которой невозможно предсказать следующее число, даже зная все предыдущие.
![Случайные и псевдослучайные числа ! Компьютер неслучаен! Псевдослучайные числа — похожи на случайные, но строятся по формуле. следующее предыдущее 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 зерно зацикливание](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img39.jpg)
Случайные и псевдослучайные числа
!
Компьютер неслучаен!
Псевдослучайные числа — похожи на случайные, но строятся по формуле.
следующее
предыдущее
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 ) | это уже другое число!](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img40.jpg)
Датчик случайных чисел
Целые числа на отрезке:
цел 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) }](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img41.jpg)
Датчик случайных чисел
Целые числа на отрезке:
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 значений гарантированно были бы разными (используйте разные диапазоны).](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img42.jpg)
Задачи
« A »: В игре «Русское лото» из мешка случайным образом выбираются бочонки, на каждом из которых написано число от 1 до 90. Напишите программу, которая выводит наугад первые 5 выигрышных номеров.
« B »: + Доработайте программу «Русское лото» так, чтобы все 5 значений гарантированно были бы разными (используйте разные диапазоны).
![Задачи «С»: + Игральный кубик бросается три раза (выпадает три случайных значения). Из этих чисел составляется целое число, программа должна найти его квадрат. Пример : Выпало очков: 1 2 3 Число 123 Его квадрат 15129](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img43.jpg)
Задачи
«С»: + Игральный кубик бросается три раза (выпадает три случайных значения). Из этих чисел составляется целое число, программа должна найти его квадрат.
Пример :
Выпало очков:
1 2 3
Число 123
Его квадрат 15129
![Задачи « D »: + Получить случайное трёхзначное число и вывести в столбик его отдельные цифры. Пример : Получено число 123 сотни: 1 десятки: 2 единицы: 3](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img44.jpg)
Задачи
« D »: + Получить случайное трёхзначное число и вывести в столбик его отдельные цифры.
Пример :
Получено число 123
сотни: 1
десятки: 2
единицы: 3
![Программирование (Паскаль) § 19. Ветвления](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img45.jpg)
Программирование (Паскаль)
§ 19. Ветвления
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img46.jpg)
Выбор наибольшего из двух чисел
полная форма ветвления
начало
ввод a , b
да
нет
if a b then
M:= a
else
M:= b ;
a b?
M:= a
M:= b
вывод M
?
Если a = b?
конец
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img47.jpg)
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
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img48.jpg)
48
Выбор наибольшего из двух чисел-2
начало
ввод a,b
неполная форма ветвления
M:= a
да
нет
b a?
M:= b
вывод M
конец
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img49.jpg)
Вариант 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 можно не ставить точку с запятой!](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img50.jpg)
Примеры
Поиск минимального :
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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img51.jpg)
В других языках программирования
С :
Python:
if ( a b ) {
c = a ;
a = b;
b = c;
}
if a b :
c = a
a = b
b = c
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img52.jpg)
Вложенные условные операторы
Задача . В переменной 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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img53.jpg)
Задачи
« A »: Ввести два целых числа, найти наибольшее и наименьшее из них.
Пример :
Введите два целых числа:
1 5
Наибольшее число 5
Наименьшее число 1
« B »: Ввести четыре целых числа, найти наибольшее из них.
Пример :
Введите четыре целых числа:
1 5 4 3
Наибольшее число 5
![Задачи « C »: Ввести последовательно возраст Антона, Бориса и Виктора. Определить, кто из них старше. Пример : Возраст Антона: 15 Возраст Бориса: 17 Возраст Виктора: 16 Ответ: Борис старше всех. Пример : Возраст Антона: 17 Возраст Бориса: 17 Возраст Виктора: 16 Ответ: Антон и Борис старше Виктора.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img54.jpg)
Задачи
« C »: Ввести последовательно возраст Антона, Бориса и Виктора. Определить, кто из них старше.
Пример :
Возраст Антона: 15
Возраст Бориса: 17
Возраст Виктора: 16
Ответ: Борис старше всех.
Пример :
Возраст Антона: 17
Возраст Бориса: 17
Возраст Виктора: 16
Ответ: Антон и Борис старше Виктора.
![Сложные условия Задача . Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ 'подходит' или 'не подходит' ) . Особенность : надо проверить, выполняются ли два условия одновременно: возраст 25 возраст 40 ? Можно ли решить известными методами ?](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img55.jpg)
Сложные условия
Задача . Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ 'подходит' или 'не подходит' ) .
Особенность : надо проверить, выполняются ли два условия одновременно:
возраст 25 возраст 40
?
Можно ли решить известными методами ?
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img56.jpg)
Плохое решение
program Work ;
var x: integer ;
begin
write ln( 'Введите ваш возраст' );
read( x );
if x = 25 then
if x 40 then
write ( 'Подходит!' )
else
write ( 'Не подходит.' )
else
write ( 'Не подходит.' );
end.
вложенный условный оператор
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img57.jpg)
Хорошее решение (операция «И»)
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 ( 'Да' );](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img58.jpg)
Примеры
Задача . Вывести ' Да ' , если число в переменной 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 ( 'Не летает' ); сложное условие](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img59.jpg)
Сложные условия
Задача . Самолёт летает по понедельникам и четвергам. Ввести номер дня недели и определить, летает ли в этот день самолёт.
Особенность : надо проверить, выполняется ли одно из двух условий:
день = 1 день = 4
(d = 1 ) or ( d = 4)
if (d = 1 ) or ( d = 4) then
write ( 'Летает' )
else
write ( 'Не летает' );
сложное условие
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img60.jpg)
Ещё пример
Задача . Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ 'подходит' или 'не подходит' ) . Использовать « ИЛИ ».
( x 25 ) or ( x 40 )
if ??? then
write ( 'Не подходит!' )
else
write ( 'Подходит.' );
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img61.jpg)
Простые и сложные условия
Простые условия (отношения)
= =
Сложное условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций:
- И – одновременное выполнение условий
- И – одновременное выполнение условий
x = 25 and x
- x = 25 and x
- ИЛИ – выполнение хотя бы одного из условий
- ИЛИ – выполнение хотя бы одного из условий
x or x = 40
- x or x = 40
- НЕ – отрицание, обратное условие
- НЕ – отрицание, обратное условие
not ( x 25 ) ???
- not ( x 25 ) ???
равно
не равно
x
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img62.jpg)
Порядок выполнения операций
- выражения в скобках
- выражения в скобках
- НЕ ( 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 ...
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img63.jpg)
Сложные условия
Истинно или ложно при 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 Не по росту!](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img64.jpg)
Задачи
« A »: Напишите программу, которая получает три числа - рост трёх спортсменов, и выводит сообщение «По росту.», если они стоят по возрастанию роста, или сообщение «Не по росту!», если они стоят не по росту.
Пример :
Введите рост трёх спортсменов:
165 170 172
По росту.
Пример :
Введите рост трёх спортсменов:
175 170 172
Не по росту!
![Задачи « B »: Напишите программу, которая получает номер месяца и выводит соответствующее ему время года или сообщение об ошибке. Пример : Введите номер месяца: 5 Весна. Пример : Введите номер месяца: 15 Неверный номер месяца.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img65.jpg)
Задачи
« B »: Напишите программу, которая получает номер месяца и выводит соответствующее ему время года или сообщение об ошибке.
Пример :
Введите номер месяца:
5
Весна.
Пример :
Введите номер месяца:
15
Неверный номер месяца.
![Задачи « C »: Напишите программу, которая получает возраст человека (целое число, не превышающее 120) и выводит этот возраст со словом «год», «года» или «лет». Например, «21 год», «22 года», «25 лет». Пример : Введите возраст: 18 Вам 18 лет. Пример : Введите возраст: 21 Вам 21 год. Пример : Введите возраст: 2 2 Вам 22 года.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img66.jpg)
Задачи
« 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 ( 'Выходной!' );](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img67.jpg)
Логические переменные
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 Ответ: нет.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img68.jpg)
Задачи
« A »: Напишите программу, которая получает с клавиатуры целое число и записывает в логическую переменную значение «да» ( True ), если это число трёхзначное. После этого на экран выводится ответ на вопрос: «Верно ли, что было получено трёхзначное число?».
Пример :
Введите число: 165
Ответ: да.
Пример :
Введите число: 1651
Ответ: нет.
![Задачи « B »: Напишите программу, которая получает с клавиатуры трёхзначное число и записывает в логическую переменную значение «да» ( True ), если это число – палиндром, то есть читается одинаково слева направо и справа налево. После этого на экран выводится ответ на вопрос: «Верно ли, что введённое число – палиндром?». Пример : Введите число: 165 Ответ: нет. Пример : Введите число: 656 Ответ: да.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img69.jpg)
Задачи
« B »: Напишите программу, которая получает с клавиатуры трёхзначное число и записывает в логическую переменную значение «да» ( True ), если это число – палиндром, то есть читается одинаково слева направо и справа налево. После этого на экран выводится ответ на вопрос: «Верно ли, что введённое число – палиндром?».
Пример :
Введите число: 165
Ответ: нет.
Пример :
Введите число: 656
Ответ: да.
![Задачи «С»: Напишите программу, которая получает с клавиатуры трёхзначное число и записывает в логическую переменную значение «да» ( True ), если это все его цифры одинаковы. После этого на экран выводится ответ на вопрос: «Верно ли, что все цифры введённого числа одинаковы?» Пример : Введите число: 161 Ответ: нет. Пример : Введите число: 555 Ответ: да.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img70.jpg)
Задачи
«С»: Напишите программу, которая получает с клавиатуры трёхзначное число и записывает в логическую переменную значение «да» ( True ), если это все его цифры одинаковы. После этого на экран выводится ответ на вопрос: «Верно ли, что все цифры введённого числа одинаковы?»
Пример :
Введите число: 161
Ответ: нет.
Пример :
Введите число: 555
Ответ: да.
![Экспертная система Экспертная система — это компьютерная программа, задача которой — заменить человека-эксперта при принятии решений в сложной ситуации. База знаний = факты + правила write а : если у животного есть перья, то это птица ; если животное кормит детенышей молоком, то это — млекопитающее ; если животное — млекопитающее и ест мясо, то это — хищник. Диалог : Это животное кормит детей молоком? Нет Это животное имеет перья? Да Это птица .](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img71.jpg)
Экспертная система
Экспертная система — это компьютерная программа, задача которой — заменить человека-эксперта при принятии решений в сложной ситуации.
База знаний = факты + правила write а :
- если у животного есть перья, то это птица ;
- если животное кормит детенышей молоком, то это — млекопитающее ;
- если животное — млекопитающее и ест мясо, то это — хищник.
Диалог :
Это животное кормит детей молоком? Нет
Это животное имеет перья? Да
Это птица .
![Дерево решений Кормит детей молоком? да нет млекопитающее Имеет перья? Ест мясо? да да нет нет ? птица ? хищник](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img72.jpg)
Дерево решений
Кормит детей молоком?
да
нет
млекопитающее
Имеет перья?
Ест мясо?
да
да
нет
нет
?
птица
?
хищник
![Программирование экспертной системы Ответы пользователя: да и нет – символьные строки. 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( 'Не знаю.' );](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img73.jpg)
Программирование экспертной системы
Ответы пользователя: да и нет – символьные строки.
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 ...](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img74.jpg)
Заглавные и строчные буквы
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 . Отладка программ](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img75.jpg)
Программирование (Паскаль)
§ 23 . Отладка программ
![Виды ошибок Синтаксические ошибки – нарушение правил записи операторов языка программирования. Обнаруживаются транслятором. Логические ошибки – неверно составленный алгоритм. Отказ (ошибка времени выполнения) – аварийная ситуация во время выполнения программы. Отладка – поиск и исправление ошибок в программе.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img76.jpg)
Виды ошибок
Синтаксические ошибки – нарушение правил записи операторов языка программирования.
Обнаруживаются транслятором.
Логические ошибки – неверно составленный алгоритм.
Отказ (ошибка времени выполнения) – аварийная ситуация во время выполнения программы.
Отладка – поиск и исправление ошибок в программе.
![Пример отладки программы Программа решения квадратного уравнения 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.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img77.jpg)
Пример отладки программы
Программа решения квадратного уравнения
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( результатов](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img78.jpg)
Тестирование
Тест 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* с ; с Одна ошибка найдена!](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img79.jpg)
Отладочная печать
Идея : выводить все промежуточные результаты.
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 ) ;](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img80.jpg)
Отладка программы
Тест 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. Выполните отладку программы: исправьте синтаксические ошибки определите ситуации, когда она работает неверно исправьте логические ошибки.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img81.jpg)
Задачи
« 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.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img82.jpg)
Задачи
« B »: Доработайте программу из п. А так, чтобы она правильно работала с отрицательными трёхзначными числами: при вводе числа «–123» программа должна выдавать ответ 6.
- « B »: Доработайте программу из п. А так, чтобы она правильно работала с отрицательными трёхзначными числами: при вводе числа «–123» программа должна выдавать ответ 6.
- « B »: Доработайте программу из п. А так, чтобы она правильно работала с отрицательными трёхзначными числами: при вводе числа «–123» программа должна выдавать ответ 6.
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img83.jpg)
Задачи
«С»: Загрузите программу, которая должна вычислять наибольшее из трёх чисел:
- «С»: Загрузите программу, которая должна вычислять наибольшее из трёх чисел:
- «С»: Загрузите программу, которая должна вычислять наибольшее из трёх чисел:
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. Программирование циклических алгоритмов](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img84.jpg)
Программирование (Паскаль)
§ 2 0. Программирование циклических алгоритмов
![Зачем нужен цикл? Задача . Вывести 5 раз «Привет!». write ln ( 'Привет' ); write ln ( 'Привет' ); write ln ( 'Привет' ); write ln ( 'Привет' ); write ln ( 'Привет' ); ? А если 5000? Цикл « N раз» : { сделай 5 раз } write ln ( 'Привет' ); ! В Паскале нет такого цикла! ](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img85.jpg)
Зачем нужен цикл?
Задача . Вывести 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;](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img86.jpg)
Как организовать цикл?
!
Нужно запоминать, сколько раз цикл уже выполнен!
ещё не делали
{ счётчик:= 0 }
{ пока счётчик 5 }
write ln ( 'Привет' );
{ счётчик:= счётчик + 1 }
сделали ещё раз
составной оператор
var count: integer ;
count := 0 ;
while count 5 do begin
write ln ( 'Привет' );
count:= count + 1
end;
begin
end;
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img87.jpg)
Как организовать цикл?
Идея : запоминать, сколько шагов осталось.
count := 5 ;
while count ??? do begin
write ln ( 'Привет' );
count := count ???
end;
0
- 1
![Цикл с предусловием условие проверяется при входе в цикл как только условие становится ложным, работа цикла заканчивается если условие ложно в самом начале, цикл не выполняется ни разу while условие do begin ... end; тело цикла ? Если условие никогда не станет ложно? while True do begin ... end; бесконечный цикл (зацикливание)](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img88.jpg)
Цикл с предусловием
- условие проверяется при входе в цикл
- как только условие становится ложным, работа цикла заканчивается
- если условие ложно в самом начале, цикл не выполняется ни разу
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;](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img89.jpg)
Сумма цифр числа
Задача. Вычислить сумму цифр введённого числа.
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 начальные значения](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img90.jpg)
Сумма цифр числа
- выделяем последнюю цифру числа ( 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 ; конец](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img91.jpg)
Сумма цифр числа
начало
обнулить сумму
ввод 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,](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img92.jpg)
Сумма цифр числа
, 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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img93.jpg)
Задачи
« A »: Напишите программу, которая получает с клавиатуры количество повторений и выводит столько же раз какое-нибудь сообщение.
Пример :
Сколько раз повторить? 3
Привет!
Привет!
Привет!
« B »: Напишите программу, которая получает с клавиатуры натуральное число и определяет, сколько раз в его десятичной записи встречается цифра 1.
Пример :
Введите число? 311
Единиц: 2
![Задачи « C »: Напишите программу, которая получает с клавиатуры натуральное число и находит наибольшую цифру в его десятичной записи. Пример : Введите число : 311 Наибольшая цифра: 3 « D »: Напишите программу, которая получает с клавиатуры натуральное число и определяет, есть ли в его десятичной записи одинаковые цифры, стоящие рядом. Пример : Введите число : 553 Введите число : 5 3 5 Ответ: да. Ответ: нет.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img94.jpg)
Задачи
« 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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img95.jpg)
Алгоритм Евклида
Задача. Найти наибольший общий делитель (НОД) двух натуральных чисел.
Заменяем большее из двух чисел разностью большего и меньшего до тех пор, пока они не станут равны. Это и есть НОД.
НОД( 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
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img96.jpg)
Алгоритм Евклида
начало
a = b?
да
конец
нет
a b?
нет
да
b:=b-a
a:=a-b
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img97.jpg)
Алгоритм Евклида
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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img98.jpg)
Модифицированный алгоритм Евклида
Заменяем большее из двух чисел остатком от деления большего на меньшее до тех пор, пока меньшее не станет равно нулю . Тогда большее — это НОД.
НОД( a,b)= НОД( mod (a,b), b)
= НОД( a, mod (b,a))
Пример :
НОД (14 , 21 ) = НОД (14 , 7 ) = НОД (0 , 7 ) = 7
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img99.jpg)
Модифицированный алгоритм
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
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img100.jpg)
В других языках программирования
С :
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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img101.jpg)
Задачи
« 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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img102.jpg)
Задачи
« C »: Ввести с клавиатуры два натуральных числа и сравнить количество шагов цикла для вычисления их НОД с помощью обычного и модифицированного алгоритмов Евклида.
Пример :
Введите два числа:
1998 2
НОД(1998,2)=2
Обычный алгоритм: 998
Модифицированный: 1
![Обработка потока данных Задача . На вход программы поступает поток данных — последовательность целых чисел, которая заканчивается нулём . Требуется найти сумму элементов этой последовательности. while x 0 do begin { добавить x к сумме } { x := следующее число } end; ? Откуда возьмётся x в первый раз?](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img103.jpg)
Обработка потока данных
Задача . На вход программы поступает поток данных — последовательность целых чисел, которая заканчивается нулём . Требуется найти сумму элементов этой последовательности.
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 ); ? Как найти сумму положительных?](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img104.jpg)
Обработка потока данных
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 »: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Найти максимальное из введённых чётных чисел.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img105.jpg)
Задачи
« A »: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Определить, сколько получено чисел, которые делятся на 3.
« B »: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Определить, сколько получено двузначных чисел, которые заканчиваются на 3.
« C »: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Найти максимальное из введённых чётных чисел.
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img106.jpg)
Цикл с постусловием
- условие проверяется после завершения очередного шага цикла
- цикл всегда выполняется хотя бы один раз
- как только условие становится истинным , работа цикла заканчивается
начало
repeat
write( 'Введите N 0: ' );
read(N);
until N 0 ;
N
N 0 ?
нет
условие окончания работы цикла
да
конец
![Задачи « A »: Напишите программу, которая предлагает ввести пароль и не переходит к выполнению основной части, пока не введён правильный пароль. Основная часть – вывод на экран «секретных сведений». « B »: Напишите программу, которая получает с клавиатуры натуральное число, которое больше 1, и определяет, простое оно или нет. Для этого нужно делить число на все натуральные числа, начиная с 2, пока не получится деление без остатка. « C »: Напишите программу, которая получает с клавиатуры два целых числа и вычисляет их произведение, используя только операции сложения.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img107.jpg)
Задачи
« A »: Напишите программу, которая предлагает ввести пароль и не переходит к выполнению основной части, пока не введён правильный пароль. Основная часть – вывод на экран «секретных сведений».
« B »: Напишите программу, которая получает с клавиатуры натуральное число, которое больше 1, и определяет, простое оно или нет. Для этого нужно делить число на все натуральные числа, начиная с 2, пока не получится деление без остатка.
« C »: Напишите программу, которая получает с клавиатуры два целых числа и вычисляет их произведение, используя только операции сложения.
![Задачи « D »: Напишите программу, которая получает с клавиатуры натуральное число и вычисляет целый квадратный корень из него – наибольшее число, квадрат которого не больше данного числа.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img108.jpg)
Задачи
« 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 по умолчанию](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img109.jpg)
Цикл по переменной
Задача . Вывести на экран степени числа 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 »](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img110.jpg)
Цикл по переменной
Задача . Найти сумму чисел от 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, …](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img111.jpg)
Цикл по переменной
Задача . Найти сумму чётных чисел от 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;](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img112.jpg)
В других языках программирования
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 . Найдите все трёхзначные Армстронга.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img113.jpg)
Задачи
« 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 . Массивы](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img114.jpg)
Программирование (Паскаль)
§ 21 . Массивы
![Что такое массив? ? Как ввести 10000 переменных? Массив – это группа переменных одного типа, расположенных в памяти рядом (в соседних ячейках) и имеющих общее имя. Надо : выделять память записывать данные в нужную ячейку читать данные из ячейки](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img115.jpg)
Что такое массив?
?
Как ввести 10000 переменных?
Массив – это группа переменных одного типа, расположенных в памяти рядом (в соседних ячейках) и имеющих общее имя.
Надо :
- выделять память
- записывать данные в нужную ячейку
- читать данные из ячейки
![Выделение памяти (объявление) ! Массив = таблица ! максимальный индекс минимальный индекс var A: array[ 1 .. 5 ] of integer ; V: array[ 0 .. 5 ] of real ; Индекс элемента — это значение, которое указывает на конкретный элемент массива. размер через константу ? Зачем? const N = 10 ; var A: array[ 1 ..N] of integer ;](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img116.jpg)
Выделение памяти (объявление)
!
Массив = таблица !
максимальный индекс
минимальный индекс
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' ;](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img117.jpg)
Что неправильно?
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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img118.jpg)
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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img119.jpg)
Обращение к элементу массива
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 ]; Выход за границы массива — это обращение к элементу с индексом, который не существует в массиве.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img120.jpg)
Что неверно?
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;](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img121.jpg)
Перебор элементов массива
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 ...](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img122.jpg)
Заполнение массива
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 начальное значение](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img123.jpg)
Заполнение массива в обратном порядке
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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img124.jpg)
Заполнение массива в обратном порядке
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,]](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img125.jpg)
Вывод массива на экран
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;](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img126.jpg)
Ввод с клавиатуры
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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img127.jpg)
В других языках программирования
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 .](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img128.jpg)
Задачи
« 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.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img129.jpg)
Задачи
« 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; ? Какой отрезок? сразу вывод на экран](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img130.jpg)
Заполнение случайными числами
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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img131.jpg)
Задачи -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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img132.jpg)
Задачи -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 . Алгоритмы обработки массивов](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img133.jpg)
Программирование (Паскаль)
§ 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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img134.jpg)
Сумма элементов массива
Задача . Найти сумму элементов массива.
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 );](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img135.jpg)
Сумма не всех элементов массива
Задача . Найти сумму чётных элементов массива.
?
Что делаем с нечётными?
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] и находит отдельно сумму элементов в первой и во второй половинах массива.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img136.jpg)
Задачи
« 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 ); ? Что тут делаем?](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img137.jpg)
Подсчёт элементов по условию
Задача . Найти количество чётных элементов массива.
?
Какие переменные нужны?
переменная-счётчик
var count: integer ;
count := 0 ;
for i:= 1 to N do
if A[i] mod 2 = 0 then
count := count + 1 ;
writeln( count );
?
Что тут делаем?
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img138.jpg)
Среднее арифметическое
Задача . Найти среднее арифметическое элементов массива, которые больше 180 (рост в см).
sum:= 0 ;
for i:= 1 to N do
if A[i] 180 then
sum:= sum + A[i] ;
writeln( sum/N );
?
Что плохо?
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img139.jpg)
Среднее арифметическое
Задача . Найти среднее арифметическое элементов массива, которые больше 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.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img140.jpg)
Задачи
« A »: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [0; 200] и считает число элементов, которые делятся на 10.
« B »: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [0; 200] и считает число двузначных чисел в массиве.
« C »: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [10; 100] и считает число пар соседних элементов, сумма которых делится на 3.
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img141.jpg)
Обработка потока данных
Задача . С клавиатуры вводятся числа, ввод завершается числом 0. Определить, сколько было введено положительных чисел.
- нужен счётчик
- счётчик увеличивается если число 0
- нужен цикл
- это цикл с условием (число шагов неизвестно)
?
Когда увеличивать счётчик ?
?
Какой цикл ?
счётчик = 0
пока не введён 0 :
если введено число 0 то
счётчик: = счётчик + 1
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img142.jpg)
Обработка потока данных
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 ?
?
Что плохо ?
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img143.jpg)
Найди ошибку!
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 );
![](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img144.jpg)
Найди ошибку!
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. Найти сумму введённых чисел, оканчивающихся на цифру](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img145.jpg)
Обработка потока данных
Задача . С клавиатуры вводятся числа, ввод завершается числом 0. Найти сумму введённых чисел, оканчивающихся на цифру "5".
- нужна переменная для суммы
- число добавляется к сумме, если оно заканчивается на "5"
- нужен цикл с условием
?
Как это записать ?
сумма: = 0
пока не введён 0 :
если число оканчивается на "5" то
сумма: = сумма + число
if x mod 10 = 5 then
![Обработка потока данных Задача . С клавиатуры вводятся числа, ввод завершается числом 0. Найти сумму введённых чисел, оканчивающихся на цифру](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img146.jpg)
Обработка потока данных
Задача . С клавиатуры вводятся числа, ввод завершается числом 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 );](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img147.jpg)
Найди ошибку!
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.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img148.jpg)
Задачи
« A »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Определить, сколько получено чисел, которые делятся на 3.
« B »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Определить, сколько получено двузначных чисел, которые заканчиваются на 3.
![Задачи « C »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Найти среднее арифметическое всех двузначных чисел, которые делятся на 7. « D »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Найти максимальное из введённых чётных чисел.](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img149.jpg)
Задачи
« C »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Найти среднее арифметическое всех двузначных чисел, которые делятся на 7.
« D »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Найти максимальное из введённых чётных чисел.
![Перестановка элементов массива ? Как поменять местами значения двух переменных a и b ? вспомогательная переменная элементы массива: с:= a; a:= b; b:= c; с:= A[i]; A[i]:= A[k]; A[k]:= c;](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img150.jpg)
Перестановка элементов массива
?
Как поменять местами значения двух переменных 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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img151.jpg)
Перестановка пар соседних элементов
Задача . Массив 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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img152.jpg)
Перестановка пар соседних элементов
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]](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img153.jpg)
Перестановка пар соседних элементов
не выходим за границу
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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img154.jpg)
Реверс массива
Задача . Переставить элементы массива в обратном порядке (выполнить реверс ).
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 ? Как исправить ?](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img155.jpg)
Реверс массива
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](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img156.jpg)
156
Конец фильма
ПОЛЯКОВ Константин Юрьевич
д.т.н., учитель информатики
ГБОУ СОШ № 163, г. Санкт-Петербург
kpolyakov@mail.ru
ЕРЕМИН Евгений Александрович
к.ф.-м.н., доцент кафедры мультимедийной дидактики и ИТО ПГГПУ, г. Пермь
eremin@pspu.ac.ru
![Источники иллюстраций иллюстрации художников издательства «Бином» авторские материалы](https://fsd.videouroki.net/html/2021/04/01/v_60659b58cf551/img157.jpg)
Источники иллюстраций
- иллюстрации художников издательства «Бином»
- авторские материалы