Урок 5. "Цикл с параметром"

Download Report

Transcript Урок 5. "Цикл с параметром"

Цель: Показать сходство и различие цикла с
параметром в языках программирования QBasic
и Turbo Pascal 7.0.
Проверка задания
1. Имеется условный оператор:
if D<>10 Then writeln('ypa!') Else Writeln(' плохо...');
Можно ли заменить его следующими операторами:
if D=10 Then Writeln('ypa!') Else Writeln('nлoxo...');
(НЕТ)
if Not(D=W) Then Writeln('ypa!') Else Writeln('nлoxo...');
(Да, если W=10 )
if Not(D=10) Then
Writeln('плоxo...') Else Writeln('ypa!');
(НЕТ)
if Not(D<>10) Then Writeln('nлoxo...') Else Writeln('ypa!').
(ДА)
2. Какими будут значения переменных j, k после
выполнения условного оператора:
QBasic
Turbo Pascal 7.0
if j>k Then j = k-2 Else k=k-2
Else dec(k,2);
if j>k Then j:=k - 2
если исходные значения переменных равны:
j=3, k=5;
Ответы:
(j=3, к=3)
j=3, k=3;
(j=3, к=1)
j=3, k=2.
(j=0, k=2)
Цикл с параметром
FOR I=A TO B [STEP h]
<тело цикла>
For <параметр>:=А То В Do
Если h=1, то шаг можно опустить.
Оператор цикла с параметром применяют тогда, когда
известно число повторений одного и того же действия.
Начальное и конечное значения параметра цикла могут
быть представлены константами, переменными или
арифметическими выражениями.
Цикл с параметром
Рассмотрим, как выполняется оператор цикла с параметром вида
FOR I=A TO B, For <параметр>:=А То В Do <тело цикла>
Сначала вычисляются значения выражений А и В. Если А<=В, то
<параметр> последовательно принимает значения, равные А,
А+1,..., В-1, В, и для каждого из этих значений выполняется
<тело цикла>.
Если А>В, то <тело цикла> не будет выполнен ни разу и
выполнение цикла с параметром сразу же закончится.
Оператор цикла с параметром
FOR I=B TO A STEP -1 и For <параметр>:=А DownTo В Do <тело
цикла> выполняется аналогичным образом, но значение
<параметра> изменяется с шагом, равным -1.
Составить программу вычисления значения выражения
y=1+1/2+1/3+… +1/20.
В данном случае целесообразно организовать цикл с
параметром, изменяющимся от 1 до 20, то есть шаг
изменения параметра равен +1. Обозначим: у — очередное
значение суммы дробей; n — параметр цикла. Учитывая
это, составим программу:
‘prim1
Program prim1;
uses crt;
DEFINT N
Var n: Integer;
DEFSGN Y
y: real;
Begin
CLS
clrscr;
Задаем начальное значение равное нулю.
Y=0
y:=0;
QB
TP
Организовываем цикл с параметром от 1 до 20
FOR n=1 TO 20
For n:=1 to 20 Do begin
Находим очередную сумму.
Y=Y +1/N
y:=y + 1/n;
Выводим на экран очередную сумму.
?”Y=”;Y
Writeln('y=',y);
NEXT
End.;
End
end.
Самостоятельное задание.
А) Переставьте строки вывода результата за NEXT
Б) Измените цикл с 20 до 1.
(End;)
Из чисел от 10 до 99 вывести те, сумма цифр которых
равна S(0<S<18).
Вопросы для обсуждения
1. Каким действием можно выделить последнюю цифру
числа?
2. Каким действием можно выделить первую цифру
числа?
Обозначим: k — это просматриваемое число; p1 — это
первая цифра числа k, р2 — это вторая цифра числа k;
s — это сумма цифр данного числа k. Число k будем
выписывать только в том случае, когда сумма р1 и р2
будет равна s.
QB
TP
PRIM2
Program prim2;
uses crt;
DEFINT K,N,P,SCLS
Var k,n,pl,p2,s:Integer;
Begin
CLS
clrscr;
Задаем целое число от 10 до 99.
INPUT”целое число=“;N
Writeln(' целое число n='); Readln(n);
Организовываем цикл с параметром
FOR K=10 TO 99
For k:=10 To 99 Do
Begin
Выделяем первую цифру.
P1=K \10
P1:=k Div 10;
Выделяем вторую цифру
.P2=K MOD 10
p2:=k Mod 10;
Находим сумму цифр
S=P1+ P2
s:=p1+p2;
Если сумма цифр равна заданному числу N, то выводим К
IF S=N THEN PRINT “k=”;K
NEXT
END
if s=n Then Writeln(‘k=’,k);
End;
End.
Дано натуральное число n (1000<=N<=9999).
Определить, является ли оно палиндромом
("перевертышем"), с учетом четырех цифр.
Например, палиндромами являются числа: 2222,
6116, 1441.
Вопросы для обсуждения
Дано число п. Каким образом можно построить
"перевертыш" данного числа?
Сколько переменных необходимо для решения данной
задачи? Объясните назначение каждой переменной.
Обозначим: п — вводимое число; т — дубликат числа п;
а — перевертыш числа п;
i — переменная цикла для создания перевертыша.
‘PRIM3
Program Prim3
uses crt;
DEFINT A,I, M-N
Var n, m, a, i: Integer;
Begin
CLS
Clrscr;
Введем четырехзначное целое число
INPUT”N<=9999”;N
Writeln('N<=9999'); Readln(n);
Запоминаем введенное целое число и задаем начальное значение
перевертыша
M=N:A=0
М:=п; а:=0;
Организуем цикл с параметром от 1 до 4.
FOR I=1 TO 4
For i:=1 To 4 Do; Begin
Находим перевертыш числа N.
A=A*10+ M mod 10: M=M \ 10
а:=а*10+М Mod 10; m:=m Div 10;
NEXT
End;
Если A=N, то данное число является перевертышем.
IF A=N THEN PRINT”DA”
If a=n Then Writeln('DA!')
ELSE ?”NO”
Else Writeln('NO');
END
Readln; End
QB
TP
Задание
1. Определить значение переменной S после выполнения
следующих операторов:
s=0:n=5
For i=2 То n: s=s+100 \ i :next
s:=0; n:=5 For i:=2 То n Do s:=s+100 Div i
2. Какие из приведенных операторов правильные и
почему?
А) FOR I=12 TO 15:S+S+I:NEXT
For i:=12 To 15 Do s:=s+i;
Б) FOR A=30 TO 20
if А Mod 3=0 Then d=d+1
NEXT
For a:=30 To 20 Do
if a Mod 3=0 Then d:=d+1;
3. Как выглядит оператор цикла с параметром? Как он
работает?