Решение задач с использованием циклов Цель урока: 1. Рассмотреть решение задач с использованием циклов. Проверить знания прошлого урока. 2. Воспитание умения слушать учителя. 3. Развитие познавательного интереса. План урока: 1. 2. 3. 4. Проверка домашнего задания. Решение различных задач Домашняя работа. Подведение итогов урока. Ход урока Проверка домашнего задания. Постановка цели урока. Решение задач Освоив, операторы присвоения и научившись пользоваться оператором IF, теоретически можно написать любую программу. Но на практике в тех случаях, где встречаются повторения одних и тех же действий такой способ мало продуктивен. Гораздо удобнее в этих случаях использовать циклы. Во всех более менее сложных задачах, как правило, используются циклы. Циклы позволяют существенно упростить алгоритм и текст программы, сделать программу изящной, гибкой более привлекательной. Поэтому даже при решении школьных задач применение циклов неизбежно. Рассмотрим применение циклов при решении конкретных задач. Пример 1 Вычислите 20 первых членов последовательности и их сумму, если общий член последовательности где (k=1,2,3…20) 10 20 30 40 50 Rem K=1 S=0 A=(Sqr(K)+1)/(K^2+1) S=S+A , 40 50 60 70 PRINT “K=”;K;”A=”;A,”S=”;S K=K+1 IF K<=20 THEN 30 END Эта программа позволяет выполнить цикл с помощью ветвления IF…THEN. Другой вариант этой программы позволяет обойтись без ветвления. Достаточно применить цикл DO…LOOP. (qbasic) K=1 S=0 DO A=(SQR(K)+1)/(K^2+1) S=S+A PRINT “K=”;K,”A=”;A,”S=”;S K=K+1 LOOP WHILE K<=20 END Пример 2 Используя алгоритм вычитания чисел, найдите НОД двух чисел. 10 REM НОД двух чисел 20 INPUT A, B 30 X=A 40 Y=B 50 IF X=Y THEN 110 60 IF X>Y THEN 90 70 Y=Y-X 80 GOTO 50 90 X=X-Y 100 GOTO 50 110 PRINT “A=”;A, “B=”;B 115 PRINT “НОД=”;X 120 END Второй вариант этой программы. Применяя структурное программирование на Quick Basic, освободимся от оператора GOTO. а) ‘НОД двух чисел А и В INPUT A, B X=A: Y=B DO IF X=Y THEN PRINT “A=”;A, “B=”; B, “НОД=”; X END ELSE IF X>Y THEN X=X-Y ELSE Y=Y-X END IF END IF LOOP б) При решение этой задачи можно так же воспользоваться циклом ПОКА. INPUT A, B X=A : Y=B DO IF X>Y THEN X=X-Y ELSE Y=Y-X END IF LOOP UNTIL X=Y PRINT A, B, “НОД=”;X END Пример 3 Воспользуемся циклом ПОКА упорядочить три числа a, b, c в порядке возрастания. INPUT”Введите три числа”; a, b, c DO SWAP a, b IF b>=c THEN SWAP b, c END IF LOOP WHILE a>=b PRINT a, b, c Пример 4 Вычислите значение числа с точностью до 0,000001, используя разложение функции экспоненты в ряд. ‘Вычисление e INPUT”Введите точность вычисления”;E S=0: P=1: K=0 DO S=S+P K=K+1 P=P/K LOOP WHILE P>E PRINT “e=”; S END Пример 5 Составьте программу, которая выводит на экран бегущую строку. Фраза строки вводится с клавиатуры. Окно для строки разместить в центре экрана и длина фразы 50 символов. Нажатие любой клавиши останавливает “бег”. Stroka$=”” FOR i=1 TO 50 Stroka$=Stroka$+”*” NEXT i CLS PRINT”Введите строку символов” INPUT a$: Stroka$=Strika$+a$ CLS: COLOR 0,3, 4: flag$=”” WHILE flag$=”” LOCATE 12, 15 PRINT MID$(Stroka$, 1,50) Stroka$=MID$(Stroka$, 2) + MID$(Stroka$, 1, 1) FOR i=1 TO 10^5: NEXT i flag$=INKEY$ WEND END Пример 6 Этот пример демонстрирует досрочный выход из цикла ДО. I%=0 DO WHILE I%<1000 IF I%=500 THEN EXIT DO LOOP PRINT”Выполнено 500 циклов”:”I=”;I% Пример 7 Пузырьковая сортировка одномерного числового массива. INPUT”Введите размер массива”;N DIM A(N) FOR I=1 TO N INPUT A(I) NEXT I DO X=0 FOR I=1 TO N-1 IF A(I)>A(I+1) THEN SWAP A(I), A(I+1) X=I END IF NEXT I LOOP UNTIL X=0 PRINT FOR I=1 TO N PRINT A(I); NEXT I Домашняя работа. Задача игра. Компьютер загадал число от 1 до 100. Пользователь вводит с клавиатуры некоторое число и получает один из ответов: “Моё число больше”, “Моё число меньше”, “Вы угадали”. Игра повторяется до тех пор пока число угадано