Сравниваем циклы, или…

advertisement
Сравниваем циклы, или…
Андрей Петрович Ершов
“… Программист должен обладать
способностью первоклассного
математика к абстракции и логическому
мышлению в сочетании с эдисоновским
талантом сооружать все что угодно, из
нуля и единицы. Он должен сочетать
аккуратность бухгалтера с
проницательностью разведчика,
фантазию автора детективных романов,
с трезвой практичностью экономиста. А
кроме того, программист должен иметь
вкус к коллективной работе, понимать
интересы пользователя и многое
другое”


Для исполнения одного из
нескольких операторов в
зависимости от условия позволяет
оператор - ветвления
Выполнить выражение, заданное
в его правой части, и присвоить
результат переменной, имя
которой указано в его левой части
предписывает оператор присваивания.
Для того чтобы выполнить
входящие в его состав операторы
несколько раз служит оператор цикла
Найди правильную запись цикла
на языке Pascal
 Цикл
повторения с
параметром
 Цикл
с
предусловием
 Цикл
с
постусловием

While . . . do . . . ;

For . . . to . . . do . . . ;

Repeat . . . until . . .;
Напротив каждой схемы алгоритма напишите, какому из
операторов цикла
(while…do, repeat…until, for…to…do)
она соответствует
Условие
Пар:=нач.зн.,кон.з,шаг
Нет
Группа
операторов
Да
Группа
операторов
Нет
Условие
Да
Да
Группа
операторов
Нет
Какое значение примет переменная х в
результате выполнения следующих фрагментов
программ?
1) x:=1;
while x<10 do
x:=x+3;
x:=x+1;
Ответ: 11
3) x:=1;
while x<100 do
begin
x:=x*2;
end;
Ответ: 128
2) x:=1;
while x<10 do begin
x:=x+3;
x:=x+1;
end;
Ответ: 13
4) x:= 1;
while x<>1 do begin
x:=x+3;
x:=x+1;
end;
Ответ: 1
Какое значение примет переменная х в
результате выполнения следующих фрагментов
программ?
1) x:=1;
repeat
x:=x+1;
until x>10;
Ответ: 11
2) x:=1;
repeat
x:=x+3;
x:=x+1;
until x>10;
Ответ:13
Остановится ли когда-нибудь цикл, представленный в
следующих фрагментах программы?
1) x:=1;
while x>1 do
x:=x+1;
Ответ:Да
2) x:=10;
while x>1 do
x:=x+1;
Ответ: Нет
3) x:=1; y:=1;
while x<10 do
y:=y+1;
x:=x+1;
Ответ:Нет
4) x:=1; y:=1;
while x<10 do
begin
y:=y+1;
x:=x+1;
end;
Ответ: Да
Остановится ли когда-нибудь цикл, представленный
в следующих фрагментах программы?
1) x:=1; y:=1;
repeat
y:=y+1;
x:=x+1;
until x=10;
Ответ:Да
2) x:=10; y:=10;
repeat
y:=y+1;
x:=x+1;
until x=10;
Ответ: Нет
Этапы решения задач на ЭВМ
1) постановка задачи;
2) построение математической
модели;
3) конструирование алгоритма;
4) перевод алгоритма в программу;
5) отладка и испытание программы;
6) получение и анализ результатов.
Задача. Вычислить наибольший
общий делитель двух целых чисел
Дано: целые числа a, b.
Найти: НОД(a, b)
Решение
?
Сравниваем циклы, или
Алгоритм Евклида
Алгоритм Евклида с вычитанием
1.
2.
3.
4.
5.
Ввод целых чисел a и b
Выбираем большее из двух чисел
Вычитаем из этого числа второе
(меньшее)
Полученной разностью заменяем
большее число
Повторяем пункты 2,3,4 до тех пор, пока
одно из чисел не станет равным 0, - в
этом случае второе число и будет
искомым наибольшим делителем.
Рассмотрим процесс вычисления НОД(a, b),
где a=114, b=48
Шаг поиска
НОД
1
2
3
4
5
6
7
a
b
Разность
114
48
66
18
48
48
66
18
18
18
6
30
12
12
6
6
Ответ: НОД(114, 48)=6
30
12
6
6
0
Блок-схема алгоритма Евклида
начало
Ввод a,b
a≠b
нет
a
да
нет
b:=b-a
a>b
да
a:=a-b
конец
Программа
PROGRAM NOD_EUCLID;
USES CRT;
VAR A,B:INTEGER;
BEGIN
CLRSCR;
WRITELN(‘ВВЕДИТЕ A И B’);READLN(A,B);
WHILE A<>B DO
IF A>B THEN A:=A-B ELSE B:=B-A;
WRITE(‘НОД=‘,A);
READKEY;
END.
Программа
PROGRAM NOD_EUCLID;
USES CRT;
VAR A,B:INTEGER;
BEGIN
CLRSCR;
WRITELN(‘ВВЕДИТЕ A И B’);READLN(A,B);
A:=ABS(A);B:=ABS(B);
WHILE A<>B DO
IF A>B THEN A:=A-B ELSE B:=B-A;
WRITE(‘НОД=‘,A);
READKEY;
END.
Программа
PROGRAM NOD_EUCLID;
USES CRT;
VAR A,B:INTEGER;
BEGIN
CLRSCR;
WRITELN(‘ВВЕДИТЕ A И B’);READLN(A,B);
IF A*B=0 THEN WRITE (‘Некорректные данные’)
ELSE
BEGIN
A:=ABS(A);B:=ABS(B);
WHILE A<>B DO
IF A>B THEN A:=A-B ELSE B:=B-A;
WRITE(‘НОД=‘,A);
END;
READKEY;
END.
Блок-схема алгоритма Евклида
(дополненная)
начало
Ввод a,b
да
a*b=0
нет
Некорректные
данные
a:=abs(a)
b:=abs(b)
a≠b
да
нет
b:=b-a
a>b
нет
a
да
a:=a-b
конец
Домашнее задание
«Электронный практикум»
Упражнение к уроку №16
Download