Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемДенис Веневитинов
1 К.Ю. Поляков, Е.А. Ерёмин, Программирование на языке Паскаль § 59. Процедуры 1
2 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Зачем нужны процедуры? 2 writeln('Ошибка программы'); много раз! program withProc; var n: integer; begin read(n); if n < 0 then Error;... end. program withProc; var n: integer; begin read(n); if n < 0 then Error;... end. procedure Error; begin writeln('Ошибка программы') end; procedure Error; begin writeln('Ошибка программы') end; вызов процедуры
3 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Что такое процедура? 3 Процедура – вспомогательный алгоритм, который выполняет некоторые действия. текст (расшифровка) процедуры записывается до основной программы в программе может быть много процедур чтобы процедура заработала, нужно вызвать её по имени из основной программы или из другой процедуры
4 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Процедура с параметрами 4 Задача. Вывести на экран запись целого числа (0..255) в 8-битном двоичном коде. много раз! Алгоритм: Как вывести первую цифру? ? разряды n:= n div 128 n mod 128 Как вывести вторую цифру? ? n1 div 64
5 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Процедура с параметрами 5 Задача. Вывести на экран запись целого числа (0..255) в 8-битном двоичном коде. Алгоритм: k:= 128; while k > 0 do begin write(n div k); n:= n mod k; k:= k div 2 end; k:= 128; while k > 0 do begin write(n div k); n:= n mod k; k:= k div 2 end; nkвывод Результат зависит от n ! !
6 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Процедура с параметрами 6 program binCode; begin printBin(99) end. program binCode; begin printBin(99) end. procedure printBin(n: integer); var k: integer; begin k:= 128; while k > 0 do begin write(n div k); n:= n mod k; k:= k div 2 end end; procedure printBin(n: integer); var k: integer; begin k:= 128; while k > 0 do begin write(n div k); n:= n mod k; k:= k div 2 end end; Параметры – данные, изменяющие работу процедуры. локальная переменная значение параметра (аргумент) значение параметра (аргумент)
7 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Несколько параметров 7 procedure printSred(a: integer; b: integer); begin write((a+b)/2); end. procedure printSred(a: integer; b: integer); begin write((a+b)/2); end. procedure printSred(a, b: integer); begin write((a+b)/2); end. procedure printSred(a, b: integer); begin write((a+b)/2); end.
8 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 8 «A»: Напишите процедуру, которая принимает параметр – натуральное число N – и выводит на экран линию из N символов '–'. Пример: Введите N: «B»: Напишите процедуру, которая выводит на экран в столбик все цифры переданного ей числа, начиная с первой. Пример: Введите натуральное число:
9 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 9 «C»: Напишите процедуру, которая выводит на экран запись переданного ей числа в римской системе счисления. Пример: Введите натуральное число: 2013 MMXIII
10 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Изменяемые параметры 10 Задача. Написать процедуру, которая меняет местами значения двух переменных. program Exchange; var x, y: integer; begin x:= 2; y:= 3; Swap(x, y); write(x, ' ', y) end. program Exchange; var x, y: integer; begin x:= 2; y:= 3; Swap(x, y); write(x, ' ', y) end. procedure Swap(a, b: integer); var c: integer; begin c:= a; a:= b; b:= c; end; 2 3 Процедура работает с копиями переданных значений параметров! ! Почему не работает? ? передача по значению
11 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Изменяемые параметры 11 procedure Swap( a, b: integer); var c: integer; begin c:= a; a:= b; b:= c; end; procedure Swap( a, b: integer); var c: integer; begin c:= a; a:= b; b:= c; end; var передача по ссылке переменные могут изменяться var a, b: integer;... Swap(a, b); { правильно } Swap(2, 3); { неправильно } Swap(a, b+3); { неправильно } var a, b: integer;... Swap(a, b); { правильно } Swap(2, 3); { неправильно } Swap(a, b+3); { неправильно } Вызов:
12 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 12 «A»: Напишите процедуру, которая переставляет три переданные ей числа в порядке возрастания. Пример: Введите три натуральных числа: «B»: Напишите процедуру, которая сокращает дробь вида M/N. Числитель и знаменатель дроби передаются как изменяемые параметры. Пример: Введите числитель и знаменатель дроби: После сокращения: 5/3
13 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 13 «C»: Напишите процедуру, которая вычисляет наибольший общий делитель и наименьшее общее кратное двух натуральных чисел и возвращает их через изменяемые параметры. Пример: Введите два натуральных числа: НОД(10,15)=5 НОК(10,15)=30
14 К.Ю. Поляков, Е.А. Ерёмин, Программирование на языке Паскаль § 60. Функции 14
15 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Что такое функция? 15 Функция – это вспомогательный алгоритм, который возвращает значение-результат (число, символ или объект другого типа). Задача. Написать функцию, которая вычисляет сумму цифр числа. Алгоритм: сумма:= 0; while n <> 0 do begin сумма:= сумма + n mod 10; n:= n div 10 end; сумма:= 0; while n <> 0 do begin сумма:= сумма + n mod 10; n:= n div 10 end;
16 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Сумма цифр числа 16 program Sum; begin writeln(sumDigits(12345)) end. program Sum; begin writeln(sumDigits(12345)) end. function sumDigits(n: integer): ; var sum: integer; begin sum:= 0; while n <> 0 do begin sum:= sum + n mod 10; n:= n div 10; end; end; function sumDigits(n: integer): ; var sum: integer; begin sum:= 0; while n <> 0 do begin sum:= sum + n mod 10; n:= n div 10; end; end; sumDigits:= sum передача результата integer тип результата
17 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Использование функций 17 x:= 2*sumDigits(n+5); z:= sumDigits(k) + sumDigits(m); if sumDigits(n) mod 2 = 0 then begin writeln('Сумма цифр чётная'); writeln('Она равна ', sumDigits(n)) end; x:= 2*sumDigits(n+5); z:= sumDigits(k) + sumDigits(m); if sumDigits(n) mod 2 = 0 then begin writeln('Сумма цифр чётная'); writeln('Она равна ', sumDigits(n)) end; Функция, возвращающая целое число, использоваться везде, где и целая величина! !
18 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 18 «A»: Напишите функцию, которая находит наибольший общий делитель двух натуральных чисел. Пример: Введите два натуральных числа: НОД( , ) = «B»: Напишите функцию, которая определяет сумму цифр переданного ей числа. Пример: Введите натуральное число: 123 Сумма цифр числа 123 равна 6.
19 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 19 «C»: Напишите функцию, которая «переворачивает» число, то есть возвращает число, в котором цифры стоят в обратном порядке. Пример: Введите натуральное число: 1234 После переворота: 4321.
20 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Логические функции 20 Задача. Найти все простые числа в диапазоне от 2 до 100. program PrimeNum; var i: integer; begin for i:=2 to 100 do if then writeln(i) end. program PrimeNum; var i: integer; begin for i:=2 to 100 do if then writeln(i) end. i - простое функция, возвращающая логическое значение (True/False) isPrime(i)
21 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Функция: простое число или нет? 21 Какой алгоритм? ? function isPrime(n: integer): ; var count, k: integer; begin count:= 0; k:= 2; while (k*k <= n) and (count = 0) do begin if n mod k = 0 then count:= count + 1; k:= k + 1 end; end; function isPrime(n: integer): ; var count, k: integer; begin count:= 0; k:= 2; while (k*k <= n) and (count = 0) do begin if n mod k = 0 then count:= count + 1; k:= k + 1 end; end; boolean логическое значение (True/False) isPrime:= (count = 0) if count = 0 then isPrime:= True else isPrime:= False if count = 0 then isPrime:= True else isPrime:= False
22 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Логические функции: использование 22 read(n); while isPrime(n) do begin writeln('простое число'); read(n) end; read(n); while isPrime(n) do begin writeln('простое число'); read(n) end; Функция, возвращающая логическое значение, может использоваться везде, где и логическая величина! !
23 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 23 «A»: Напишите логическую функцию, которая определяет, является ли переданное ей число совершенным, то есть, равно ли оно сумме своих делителей, меньших его самого. Пример: Введите натуральное число: 28 Число 28 совершенное. Пример: Введите натуральное число: 29 Число 29 не совершенное.
24 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 24 «B»: Напишите логическую функцию, которая определяет, являются ли два переданные ей числа взаимно простыми, то есть, не имеющими общих делителей, кроме 1. Пример: Введите два натуральных числа: Числа 28 и 15 взаимно простые. Пример: Введите два натуральных числа: Числа 28 и 16 не взаимно простые.
25 Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 25 «С»: Простое число называется гиперпростым, если любое число, получающееся из него откидыванием нескольких цифр, тоже является простым. Например, число 733 – гиперпростое, так как и оно само, и числа 73 и 7 – простые. Напишите логическую функцию, которая определяет, верно ли, что переданное ей число – гиперпростое. Используйте уже готовую функцию isPrime, которая приведена в учебнике. Пример: Введите натуральное число: 733 Число 733 гиперпростое. Пример: Введите натуральное число: 19 Число 19 не гиперпростое.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.