Сравниваем циклы, или… Андрей Петрович Ершов “… Программист должен обладать способностью первоклассного математика к абстракции и логическому мышлению в сочетании с эдисоновским талантом сооружать все что угодно, из нуля и единицы. Он должен сочетать аккуратность бухгалтера с проницательностью разведчика, фантазию автора детективных романов, с трезвой практичностью экономиста. А кроме того, программист должен иметь вкус к коллективной работе, понимать интересы пользователя и многое другое” Для исполнения одного из нескольких операторов в зависимости от условия позволяет оператор - ветвления Выполнить выражение, заданное в его правой части, и присвоить результат переменной, имя которой указано в его левой части предписывает оператор присваивания. Для того чтобы выполнить входящие в его состав операторы несколько раз служит оператор цикла Найди правильную запись цикла на языке 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