Использование циклов в вычислительных алгоритмах


Практическое задание №23
Тема: Использование циклов в вычислительных алгоритмах
1 уровень сложности
1. Разработать схему алгоритма, который запрашивает N произвольных целых чисел и ищет их сумму. Число N вводится с клавиатуры. Разработать для созданного алгоритма не менее трёх тестов и проверить на них правильность работы алгоритма, где S = 1+2+3+…+N
Program odin_odin;
Var s:longint;
n,i:integer;
Begin
writeln('Vvedite n');
readln(n);
s:=0;
for i:=1 to n do s:=s+i;
writeln('summa = ',s);
End.


2. Разработать схему алгоритма для вычисления суммы ряда:

Число N вводится с клавиатуры.
Протестировать алгоритм для N=1, N=2, N=4, N=6. Правильность ответов проверить с помощью калькулятора.
Program odin_dva;
Var N, i: integer;
S: real;
Begin
write('Vvedite celoe chislo N = ');
readln(N);
S:=0;
for i := 1 to N do
begin S := S + 1 / i;
end;
writeln('S = ', S);
end.


3. Одноклеточная амёба каждые три часа делится на 2 клетки. Разработать схему алгоритма для определения, сколько амёб будет через 3, 6, 9, 12 и 24 часа.
Program odin_tri;
Var a: longint; n,i:integer;
Begin
a:=1;
i:=3;
while i<=24 do
begin a:=a*2;
writeln ('proshlo t= ',i, ' ameb - ',a);
i:=i+3;
end;
End.


4. Дано натуральное число N и действительное число x. Разработать схему алгоритма для вычисления суммы ряда:
sin x + sin 2x+sin 3x+…sin N*X
Протестировать алгоритм для x=1.5 и N=3. Проверить правильность ответа на калькуляторе.
Program odin_cheturi;
Var s,x: real;
n,i:integer;
Begin
writeln('Vvedite x');
readln(x);
writeln('Vvedite n');
readln(n);
s:=0;
for i:=1 to n do
s:=s+sin(x*i);
writeln ('summa = ',s);
End.


5. Разработать схему алгоритма для вычисления N-ой степени числа a (aN). Протестировать алгоритм для а) a=3 и N=4, б) a=2 и N=5.
Program odin_pjat;
Var s: real;
a,n,i:integer;
Begin
writeln('Vvedite a');
readln(a);
writeln('Vvedite n');
readln(n);
s:=1;
for i:=1 to n do
s:=s*a;
writeln ('step = ',s);
End.


2 уровень сложности
1. Начав тренировки, спортсмен в первый день пробежал 10 км. Каждый день он увеличивал дневную норму на 10% нормы предыдущего дня. Какой суммарный путь пробежит спортсмен за N дней? Разработать схему алгоритма для решения этой задачи. Протестировать алгоритм для N=3 и N=7.
Program dva_odin;
Var s,s1:real;
n,i:integer;
Begin
writeln('Vvedite n');
readln(n);
s1:=10;
s:=s1;
for i:=2 to n do
begin s1:=1.1*s1;
s:=s+s1;
end;
writeln('summa = ',s);
End.


2. Ежемесячная стипендия студента составляет A рублей в месяц, а расходы на проживание превышают стипендию и составляют B рублей в месяц. Рост цен ежемесячно увеличивает расходы на 3%. Разработать схему алгоритма для расчёта необходимой суммы денег, которую надо единовременно попросить у родителей, чтобы можно было прожить учебный год (10 месяцев), используя только эти деньги и стипендию. Протестировать алгоритм для следующих исходных данных:
а) A=1000, B=1100 б) A=900, B=1000 в) A=600, B=1200
Program dva_dva;
Var a,b,s:real;
i:integer;
Begin
write('Vvedite razmer stipendii ');
readln(a);
write('Vvedite razmer rashodov ');
readln(b);
s:=0;
for i:=1 to 10 do begin
s:=s+b;
b:=b*1.03;
end;
s:=s-a*10;
writeln('Neobhodimo poprosit u roditelej summu= ',Round(s));
End.

3. Разработать схему алгоритма для нахождения всех делителей натурального числа N. Протестировать алгоритм для N=10, N=75, N=99, N=13.
Program dva_tri;
Var n,d:integer;
Begin
writeln('Vvedite n');
readln(n);
d := 1;
writeln('Deliteli chisla:');
repeatif n mod d = 0 then write(d, ' ');
d := d + 1
until d > n div 2;
writeln(n);
End.


4. Разработать схему алгоритма для вычисления N! (факториал числа N). Факториал вычисляется по формуле:
N!=
Операцию вычисления факториала использовать нельзя!
Протестировать алгоритм для N=0, N=2 N=4.
Program dva_cheturi;
Var f:longint;
n,i:integer;
Begin
writeln('Vvedite n');
readln(n);
f:=1;
for i:=1 to n do f:=f*i;
writeln('factorial = ',f);
End.


3 уровень сложности
1. Дано натуральное число N. Разработать схему алгоритма для вычисления суммы ряда: S=1!+2!+3!+…+N! (N>1)
Операцию вычисления факториала использовать нельзя!
Протестировать алгоритм для N=3 и N=5
Program odin_tri;
Var f,s:longint;
n,i:integer;
Begin
writeln('Vvedite n>1');
readln(n);
f:=1;
s:=0;
for i:=1 to n do
begin f:=f*i;
s:=s+f;
end;
writeln('summa = ',s);
End.


2. Покупатель должен заплатить в кассу S рублей. У него имеются монеты в 1, 2 и 5 рублей, а также купюры достоинством в 10, 50, 100 и 500 рублей (достаточное количество). Сколько монет и купюр разного достоинства отдаст покупатель, если он начинает платить с самых крупных? Операции целочисленного деления (div и mod) использовать нельзя. Разработать схему алгоритма для решения этой задачи. Протестировать алгоритм для S=567, S=1025, S=64, S=13.
Program tri_dva;
Var m1,m2,m5,k10,k50,k100,k500,s:integer;
beginwrite('Vvedite s');
read(s);
m1:=0; m2:=0; m5:=0;
k10:=0; k50:=0; k100:=0; k500:=0;
while s>0 do
begin if s>=500 then begin s:=s-500; k500:=k500+1; end else
if s>=100 then begin s:=s-100; k100:=k100+1; end else
if s>=50 then begin k50:=k50+1; s:=s-50; end else
if s>=10 then begin s:=s-10; k10:=k10+1; end else
if s>=5 then begin m5:=m5+1; s:=s-5; end else
if s>=2 then begin m2:=m2+1; s:=s-2; end else
begin m1:=m1+1; s:=s-1; end;
end;
write('500p= ',k500,';'); write(' 100p= ',k100,';'); write(' 50p= ',k50,';');
write(' 10p= ',k10,';'); write(' 5p= ',m5,';'); write(' 2p= ',m2,';');
writeln(' 1p= ',m1,'.');
end.

3. Числа Фибоначчи (fn) определяются формулами: f0=f1=1, fn=fn-1+fn-2 при n=2,3,…
Разработать схему алгоритма для вычисления числа Фибоначчи. Определить f10, f25, f40.
Program tri_tri;
Var n,p,p1,p2,i:longint;
Begin
writeln('Vvedite nomer iskomogo elementa Fibonachi ');
readln(n);
p1:=1; p2:=1;
if (n=1) and (n=2) then
writeln('Iskomoe znachenie',n,'-go elementa Fibonachi ravno 1')
else begin for i:=3 to n do
begin p:=p1+p2; p1:=p2;
p2:=p;
end;
writeln('znachenie',n,'-go elementa Fibonachi =',p);
end;
End.

4. Разработать схему алгоритма, определяющего, является ли заданное число N простым. Протестировать алгоритм для N=10, N=31, N=13, N=51.
Program tri_cheturi;
Var n, d, k : integer;
Begin
writeln('Vvedite chislo n'); readln(n);
d := 2; k := 0;
repeatif n mod d =0 then k := k + 1;
d := d + 1
until d > n div 2;
if k = 0 then writeln('Chislo ', n,' prostoe')
else writeln('Chislo ', n,' sostavnoe');
End.


5. Даны натуральное N и действительное x. Разработать схему алгоритма для вычисления суммы ряда:
sin x+sin x2+sin x3+…+sin xNПротестировать алгоритм для а) x=0.5, N=3, б) x=1, N=5. Проверить правильность его работы с помощью калькулятора.
Program tri_pjat;
Var s,x,y: real;
n,i:integer;
Begin
writeln('Vvedite x');
readln(x);
writeln('Vvedite n');
readln(n);
s:=0;
y:=1;
for i:=1 to n do
begin y:=y*x;
s:=s+sin(y);
end;
writeln ('summa = ',s);
End.