Алгоритм Евклида
End.
Begin
Begin
Var
End.
Begin
Begin
Var
End.
Begin
Begin
Var
ВСТАВКА
End.
Repeat
Begin
Var
End.
Begin
Begin
Var
N, bonus, R: integer;
bonus:=10;
Randomize;
R := Random(11);
WriteLn ('Задумано целое число от 0 до 10. Угадайте!');
WriteLn ('Введите целое число от 0 до10');
ReadLn(N );
while N <> R do
bonus := bonus - 1;
WriteLn (' Вы не угадали‘);
IF N < R
then WriteLn (' Ваше число меньше задуманного‘)
else WriteLn (' Ваше число больше задуманного‘);
WriteLn (' Попытайтесь ещё раз!‘);
ReadLn(N );
end;
WriteLn ('Поздравляю! Вы угадали и набрали ‘,bonus,’очков’); ReadLn;
Замечания:
Randomize – это начальная установка специальной процедуры – «генератора случайных чисел» Random(n),выдающей случайные числа от 0 до n-1.
Пример2.Банк (ав.Немнюгин, стр.96)
Пусть некто, обладая определённой денежной суммой, открыл счёт в банке под определённый ежегодный процент от вклада. Считается, что этот процент не зависит от времени и от величины вклада.
Необходимо написать программу, которая рассчитывает величину вклада и выводит эту величину для каждого года до тех пор, пока величина вклада не удвоится.
Алгоритм:
- ввести первоначальную величину вклада, процентную ставку и год помещения денег в банк;
- рассчитать новую величину вклада;
- вывести год и величину вклада в этом году;
- повторять шаги 2 и 3 до тех пор, пока величина вклада не удвоится;
Program bank;
god, wklad, rate, wklad_tek: real;
WriteLn ('Введите год помещения денег в банк');
ReadLn(god );
WriteLn ('Введите величину вклада’);
ReadLn(wklad );
WriteLn ('Введите процентную ставку (0.0-1.0)');
ReadLn(rate );
wklad_nach := wklad;
WriteLn ('Год Вклад');
WriteLn ('___________');
pri:=rate * pri;
wklad := wklad +pri;
god := god +1;
WriteLn (god:6, ' ', wklad);
untilwklad > 2* wklad_nach ;
ReadLn;
Замечания:
В данном случае тело цикла выполняется, по крайней мере, один раз, поэтому используется цикл с постусловием.
Задача 1. Проверить тождество:
1 + 2 + 3 +…+ n = n*(n+1)/2;
Задача 2. Проверить тождество:
1 + 3 + 5 +…+ (2 * n – 1) = n2;
Задача 3.
Пусть даны числа a, b (a>1). Получить все члены последовательности
a, a2, a3, … меньше b.
Задача 4.
Числа Фибоначчи – это члены числовой последовательности u1, u2, …, которые вычисляются по следующему правилу:
u1 =1, u2 =1, u3 = u1 + u2, …, uk = uk-1 + uk-2, …
Написать программу вычисления n-ого числа Фибоначчи.
Пример 1. Найти сумму 10-ти чисел, используя цикл-пока.
Последовательно по одному вводите исходные числа. Каждое вновь вводимое число будет суммироваться с предыдущим результатом S.
Program summa1;
N, i : integer;
X, S : real;
S:=0; {ячейка, в которой накапливается сумма вводимых чисел}
i:= 1; { i – счетчик количества вводимых чисел}
while i<= 10 do
Write ('Введите ',i,'_е число Х');
ReadLn(X);
S:=S+X;
i:=i+1
end;
Write ('Сумма чисел равна ‘,S);
---------------
Пример 2 . Найти сумму чисел, используя цикл-пока.
Последовательно по одному вводите числа. Каждое вновь вводимое число будет суммироваться с предыдущим результатом S.Процесс закончится, когда введете отрицательное число.
Program summa2;
i : integer;
X, S : real;
S:=0; {ячейка, в которой накапливается сумма вводимых чисел}
X:= 0;{нулевое исходное значение Х не повлияет на сумму чисел}
while X >= 0 do
Write ('Введите одно число Х');
ReadLn(X);
if X>=0 then S:=S+X
end;
Write ('Сумма чисел равна ‘,S);
---------------
Пример 3. Найти сумму N чисел, используя цикл со счётчиком.
Укажите количество суммируемых чисел, а затем последовательно введите их. Каждое вновь вводимое число будет суммироваться с предыдущим результатом S.
Program summa3;
N, i : integer;
X, S : real;
Write(Укажите количество суммируемых чиселN');
ReadLn(N);
S:=0; {ячейка, в которой накапливается сумма вводимых чисел}
for i := 1 to N do
Write ('Введите ',i,'-е число Х');
ReadLn(X);
S:=S+X;
end;
Write ('Сумма ',N,' чисел равна ‘,S);
Семакин, Задачник 1, 210-211
Задача 1. Определить значение целочисленной переменной S после выполнения алгоритмов:
а) | |
S:= 128 для i от 1 до 4, повторять нц S:=S-3; кц | S:= 128 for i:= 1 to 4 do S:=S-3; WriteLn (S) |
б) | |
S:= 0 для i от 1 до 2, повторять нц для j от 2 до 3, повторять нц S:=i+j кц кц | S:= 0 for i:= 1 to 2 do for j:= 2 to 3 do S:= i+j; WriteLn (S); ; |
Трассировочные таблицы:
а)
Шаг | Операция | S | i | Условие |
S:= 128 | - | |||
I:= 1 | ||||
I<=4 | да | |||
S:=S-3; | ||||
I:= i+1 | ||||
I<=4 | да | |||
S:=S-3; | ||||
I:= i+1 | ||||
I<=4 | да | |||
S:=S-3; | ||||
I:= i+1 | ||||
I<=4 | да | |||
S:=S-3; | ||||
I:= i+1 | ||||
I<=4 | нет | |||
б)
Шаг | Операция | S | i | j | Условие |
S:= 0 | - | - | |||
I:= 1 | - | ||||
I<=2 | - | да | |||
j:= 2 | |||||
j<=3 | да | ||||
S:=i+j | |||||
j:= j+1 | |||||
j<=3 | да | ||||
S:=i+j | |||||
j:= j+1 | |||||
j<=3 | нет | ||||
I:= i+1 | |||||
I<=2 | да | ||||
j:= 2 | |||||
j<=3 | да | ||||
S:=i+j | |||||
j:= j+1 | |||||
j<=3 | да | ||||
S:=i+j | |||||
j:= j+1 | |||||
j<=3 | нет | ||||
I:= i+1 | |||||
I<=2 | нет |
Задача 2. Определить значение целочисленной переменной S после выполнения алгоритмов:
а) | |
S:= 1; a:=1 для i от 1 до 3, повторять нц S := S + i * (i+1)*a a := a + 2 кц | S:= 1; a:=1; for i:= 1 to 3 do begin S := S + i * (i+1)*a; a := a + 2; end; |
б) | |
для i от 1 до 3, повторять нц S:= 0 для j от 2 до 2, повторять нц S:=i+j кц кц | for i:= 1 to 3 do begin S := 0; for j:= 2 to 2 do S:=i+j; end; |
Задача 3. Определить значение целочисленной переменной S после выполнения алгоритмов:
а) | |
S:= 0; i:=0; пока i < 3, повторять нц i := i + 1 S := S + i * i кц | S:= 0; i:=0; while i < 3 do begin i := i + 1; S := S + i * i ; end; |
b) | |
S:= 0; i:=1; пока i > 1, повторять нц S := S + 1/ i i := i - 1 кц | S:= 0; i:=1; while i > 1 do begin S := S + 1/ i; i := i – 1; end; |
Задача 4. Определить значение целочисленной переменной S после выполнения алгоритмов:
а) | |
S:= 0; i:=1; j:=15; пока i < j, повторять нц S := S + i * j; i := i + 1; j:= j-1 кц | S:= 0; i:=1; j:=15; while i < j do begin S := S + i * j; i := i + 1; j:= j - 1; end; |
b) | |
a := 1; b := 1; пока a+b < 10, повторять нц a := a + 1; b := b + a; кц | a := 1; b := 1; while a+b < 10 do begin a := a + 1; b := b + a; end; |
нахождения наибольшего общего делителя двух натуральных чисел (НОД)
I. Из математики:
Наибольший общий делитель двух натуральных чисел – это число, на которое они делятся нацело.
Например: 12 и 18 имеют общие делители 2, 3, 6.
НОД(12,18) = 6
II. ММ
Дано: M и N – натуральные числа
Найти: НОД(M,N)
Связь:не существует формулы для вычисления НОД по значениям M и N, но известен алгоритм Евклида: