Стандартные задачи на циклы: различия между версиями
UnREAL (обсуждение | вклад) Нет описания правки |
UnREAL (обсуждение | вклад) Нет описания правки |
||
Строка 161: | Строка 161: | ||
== Суммирование рядов (конечных и бесконечных) == | == Суммирование рядов (конечных и бесконечных) == | ||
'''№13. Вычислить ''' | '''№13. Вычислить Σ(i=1..n) a^i/i! ''' | ||
<source lang="pascal"> | <source lang="pascal"> | ||
begin | begin | ||
Строка 181: | Строка 181: | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_13.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_13.pas Ссылка на алгоритм в среде WDE] | ||
'''№13a. Вычислить Σ(i=1..∞) (-1)^i * a^i/i! ''' | |||
<source lang="pascal"> | |||
begin | |||
write('Введите число a (0 < a < 1): '); | |||
var a : real; | |||
readln(a); | |||
assert((a>0) and (a<1)); | |||
var eps := 0.0001; | |||
var i := 1; | |||
var s := 0.0; | |||
var y := -a; | |||
repeat | |||
s += y / i; | |||
i += 1; | |||
y *= -a; | |||
until abs(y/i) < eps; | |||
writeln('Сумма ',chrunicode(931),'(i=1..',chrunicode(8734),') (-1)^i * a^i/i! равна ', s); | |||
end. | |||
</source> | |||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_13a.pas Ссылка на алгоритм в среде WDE] | |||
== Поиск значения == | |||
'''№14. Есть ли среди введенных число k? ''' | |||
<source lang="pascal"> | |||
begin | |||
write('Введите целые числа n (n>0) и k: '); | |||
var n,k : integer; | |||
readln(n,k); | |||
assert(n>0); | |||
var Exists := false; | |||
for var i := 1 to n do | |||
begin | |||
write('Введите ', i, ' целое число: '); | |||
var x : integer; | |||
readln(x); | |||
if x = k then | |||
Exists := true; | |||
end; | |||
if Exists then | |||
writeln('Число ', k, ' было введено') | |||
else | |||
writeln('Число ', k, ' не было введено'); | |||
end. | |||
</source> | |||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_14.pas Ссылка на алгоритм в среде WDE] | |||
'''№14a. Есть ли среди введенных число k? (то же с использованием break) ''' | |||
<source lang="pascal"> | |||
begin | |||
write('Введите целые числа n (n>0) и k: '); | |||
var n,k : integer; | |||
readln(n,k); | |||
assert(n>0); | |||
var Exists := false; | |||
for var i := 1 to n do | |||
begin | |||
write('Введите ', i, ' целое число: '); | |||
var x : integer; | |||
readln(x); | |||
if x = k then | |||
begin | |||
Exists := true; | |||
break; | |||
end; | |||
end; | |||
if Exists then | |||
writeln('Число ', k, ' было введено') | |||
else | |||
writeln('Число ', k, ' не было введено'); | |||
end. | |||
</source> | |||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_14a.pas Ссылка на алгоритм в среде WDE] | |||
'''№14b. Есть ли среди введенных число k? (то же с использованием while) ''' | |||
<source lang="pascal"> | |||
begin | |||
write('Введите целые числа n (n>0) и k: '); | |||
var n,k : integer; | |||
readln(n,k); | |||
assert(n>0); | |||
var Exists := false; | |||
var i := 1; | |||
while (i <= n) and not Exists do | |||
begin | |||
write('Введите ', i, ' целое число: '); | |||
var x : integer; | |||
readln(x); | |||
i += 1; | |||
if x = k then | |||
Exists := true; | |||
end; | |||
if Exists then | |||
writeln('Число ', k, ' было введено') | |||
else | |||
writeln('Число ', k, ' не было введено'); | |||
end. | |||
</source> | |||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_14b.pas Ссылка на алгоритм в среде WDE] | |||
'''№15. Является ли число N>0 простым? ''' | |||
<source lang="pascal"> | |||
begin | |||
write('Введите целое число N (N>0): '); | |||
var N : integer; | |||
readln(N); | |||
assert(N>0); | |||
var IsSimple := true; | |||
// for var i := 2 to N-1 do | |||
for var i := 2 to round(sqrt(N)) do | |||
if N mod i = 0 then | |||
begin | |||
IsSimple := false; | |||
break; | |||
end; | |||
if IsSimple then | |||
writeln('Число ', N, ' является простым') | |||
else | |||
writeln('Число ', N, ' не является простым'); | |||
end. | |||
</source> | |||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_15.pas Ссылка на алгоритм в среде WDE] | |||
== Другие алгоритмы == | |||
'''№16. Разложение числа на простые множители ''' | |||
<source lang="pascal"> | |||
begin | |||
write('Введите целое число x (x>1): '); | |||
var x : integer; | |||
readln(x); | |||
assert(x>1); | |||
var i := 2; | |||
write(x, ' = 1'); | |||
repeat | |||
if x mod i = 0 then | |||
begin | |||
write(' * ', i); | |||
x := x div i; | |||
end | |||
else | |||
i += 1; | |||
until x = 1; | |||
end. | |||
</source> | |||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_16.pas Ссылка на алгоритм в среде WDE] | |||
'''№17. Вычисление значения многочлена в точке x по схеме Горнера ''' | |||
<source lang="pascal"> | |||
begin | |||
write('Введите значение x, значение старшей степени x - n (n>=0) и коэффициент при старшей степени x - a_{1}: '); | |||
var x,a : real; | |||
var n : integer; | |||
readln(x,n,a); | |||
assert(n>=0); | |||
var s := a; | |||
for var i := 1 to n do | |||
begin | |||
write('Введите a_{', i+1,'}: '); | |||
readln(a); | |||
s := s*x + a; | |||
end; | |||
writeln('Значение многочлена p(x) = a_{1}*x^n + a_{2}*x^(n-1) + ... + a_{n}*x + a_{n+1} в точке x = ', x, ' равно ', s); | |||
end. | |||
</source> | |||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_17.pas Ссылка на алгоритм в среде WDE] | |||
'''№18. Дана непрерывная на [a,b] функция f(x), имеющая на [a,b] ровно один корень (f(a)*f(b)<=0). Найти его методом половинного деления ''' | |||
<source lang="pascal"> | |||
// В качестве примера взяты eps = 0.0001 и функция f(x) = sin(x) | |||
const eps = 0.0001; | |||
const f = sin; | |||
begin | |||
write('Введите числа a и b (a<b): '); | |||
var a,b : real; | |||
readln(a,b); | |||
assert(a<b); | |||
var fa := f(a); | |||
var fb := f(b); | |||
assert(fb*fa<0); | |||
while (b-a) > eps do | |||
begin | |||
var x := (b+a)/2; | |||
var fx := f(x); | |||
if fa*fx <= 0 then | |||
b := x | |||
else | |||
begin | |||
a := x; | |||
fa := fx; | |||
end; | |||
end; | |||
writeln('Корень функции на [a,b] равен ',(b+a)/2); | |||
end.</source> | |||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_18.pas Ссылка на алгоритм в среде WDE] |
Версия от 23:10, 27 ноября 2010
Простейшие алгоритмы
(в разработке)
Рекуррентные соотношения
№7. Вывод 10 первых степеней двойки
begin
var x := 2;
for var i := 1 to 10 do
begin
writeln(i:2,x:5);
x *= 2;
end;
end.
Ссылка на алгоритм в среде WDE
№8. Вывод всех двухзначных чисел, кратных 5
begin
var x := 10;
while x < 100 do
begin
writeln(x:3);
x += 5;
end;
end.
Ссылка на алгоритм в среде WDE
№9. Вывод n первых чисел Фибоначчи
begin
write('Введите целое число n (n > 1): ');
var n : integer;
readln(n);
var a := 1;
var b := 1;
write(1, ' ', 1, ' ');
for var i := 3 to n do
begin
var c := a + b;
write(c, ' ');
a := b;
b := c;
end;
end.
Ссылка на алгоритм в среде WDE
№10. Найти НОД(A,B), используя алгоритм Евклида:
НОД(A,B) = НОД(B,A mod B); НОД(A,0) = A
begin
write('Введите целые числа A и B: ');
var A,B,C : integer;
readln(A,B);
repeat
C := A mod B;
A := B;
B := C;
until C = 0;
write('НОД(A,B) = ', A);
end.
Ссылка на алгоритм в среде WDE
№11. Найти сумму цифр целого положительного числа m
begin
write('Введите целое положительное число m: ');
var m : integer;
readln(m);
assert(m > 0);
var s := 0;
while m > 0 do
begin
s += m mod 10;
m := m div 10;
end;
writeln('Сумма цифр числа m равна ', s);
end.
Ссылка на алгоритм в среде WDE
Максимумы и минимумы
№12. Найти max из введенных чисел
begin
write('Введите целое число n (n>0): ');
var n : integer;
readln(n);
assert(n>0);
write('Введите 1 число: ');
var x : real;
readln(x);
var max := x;
for var i := 2 to n do
begin
write('Введите ', i, ' число: ');
readln(x);
if max < x then
max := x;
end;
writeln('Максимальное из введенных чисел: ', max);
end.
Ссылка на алгоритм в среде WDE
№12a. Найти min, удовлетворяющее условию p(x)
// Условие взятое как пример (Если число положительное, то условие p(x) возвращает true, иначе false)
function p(x : real) : boolean;
begin
if x > 0 then
Result := true
else
Result := false;
end;
begin
write('Введите целое число n (n>0): ');
var n : integer;
readln(n);
assert(n>0);
var min := real.MaxValue;
for var i := 1 to n do
begin
var x : real;
write('Введите ', i, ' число: ');
readln(x);
if (x < min) and p(x) then
min := x;
end;
if min = real.MaxValue then
writeln('Нет чисел удовлетворяющих условию (являющихся положительными)')
else
writeln('Минимальное из введенных чисел и удовлетворяющее условию (являющееся положительным): ', min);
end.
Ссылка на алгоритм в среде WDE
Суммирование рядов (конечных и бесконечных)
№13. Вычислить Σ(i=1..n) a^i/i!
begin
write('Введите число a и n (n>0): ');
var a : real;
var n : integer;
readln(a,n);
assert(n>0);
var x := a;
var s := x;
for var i := 2 to n do
begin
x *= a / i;
s += x;
end;
writeln('Сумма ',chrunicode(931),'(i=1..n) a^i/i! равна ', s);
end.
Ссылка на алгоритм в среде WDE
№13a. Вычислить Σ(i=1..∞) (-1)^i * a^i/i!
begin
write('Введите число a (0 < a < 1): ');
var a : real;
readln(a);
assert((a>0) and (a<1));
var eps := 0.0001;
var i := 1;
var s := 0.0;
var y := -a;
repeat
s += y / i;
i += 1;
y *= -a;
until abs(y/i) < eps;
writeln('Сумма ',chrunicode(931),'(i=1..',chrunicode(8734),') (-1)^i * a^i/i! равна ', s);
end.
Ссылка на алгоритм в среде WDE
Поиск значения
№14. Есть ли среди введенных число k?
begin
write('Введите целые числа n (n>0) и k: ');
var n,k : integer;
readln(n,k);
assert(n>0);
var Exists := false;
for var i := 1 to n do
begin
write('Введите ', i, ' целое число: ');
var x : integer;
readln(x);
if x = k then
Exists := true;
end;
if Exists then
writeln('Число ', k, ' было введено')
else
writeln('Число ', k, ' не было введено');
end.
Ссылка на алгоритм в среде WDE
№14a. Есть ли среди введенных число k? (то же с использованием break)
begin
write('Введите целые числа n (n>0) и k: ');
var n,k : integer;
readln(n,k);
assert(n>0);
var Exists := false;
for var i := 1 to n do
begin
write('Введите ', i, ' целое число: ');
var x : integer;
readln(x);
if x = k then
begin
Exists := true;
break;
end;
end;
if Exists then
writeln('Число ', k, ' было введено')
else
writeln('Число ', k, ' не было введено');
end.
Ссылка на алгоритм в среде WDE
№14b. Есть ли среди введенных число k? (то же с использованием while)
begin
write('Введите целые числа n (n>0) и k: ');
var n,k : integer;
readln(n,k);
assert(n>0);
var Exists := false;
var i := 1;
while (i <= n) and not Exists do
begin
write('Введите ', i, ' целое число: ');
var x : integer;
readln(x);
i += 1;
if x = k then
Exists := true;
end;
if Exists then
writeln('Число ', k, ' было введено')
else
writeln('Число ', k, ' не было введено');
end.
Ссылка на алгоритм в среде WDE
№15. Является ли число N>0 простым?
begin
write('Введите целое число N (N>0): ');
var N : integer;
readln(N);
assert(N>0);
var IsSimple := true;
// for var i := 2 to N-1 do
for var i := 2 to round(sqrt(N)) do
if N mod i = 0 then
begin
IsSimple := false;
break;
end;
if IsSimple then
writeln('Число ', N, ' является простым')
else
writeln('Число ', N, ' не является простым');
end.
Ссылка на алгоритм в среде WDE
Другие алгоритмы
№16. Разложение числа на простые множители
begin
write('Введите целое число x (x>1): ');
var x : integer;
readln(x);
assert(x>1);
var i := 2;
write(x, ' = 1');
repeat
if x mod i = 0 then
begin
write(' * ', i);
x := x div i;
end
else
i += 1;
until x = 1;
end.
Ссылка на алгоритм в среде WDE
№17. Вычисление значения многочлена в точке x по схеме Горнера
begin
write('Введите значение x, значение старшей степени x - n (n>=0) и коэффициент при старшей степени x - a_{1}: ');
var x,a : real;
var n : integer;
readln(x,n,a);
assert(n>=0);
var s := a;
for var i := 1 to n do
begin
write('Введите a_{', i+1,'}: ');
readln(a);
s := s*x + a;
end;
writeln('Значение многочлена p(x) = a_{1}*x^n + a_{2}*x^(n-1) + ... + a_{n}*x + a_{n+1} в точке x = ', x, ' равно ', s);
end.
Ссылка на алгоритм в среде WDE
№18. Дана непрерывная на [a,b] функция f(x), имеющая на [a,b] ровно один корень (f(a)*f(b)<=0). Найти его методом половинного деления
// В качестве примера взяты eps = 0.0001 и функция f(x) = sin(x)
const eps = 0.0001;
const f = sin;
begin
write('Введите числа a и b (a<b): ');
var a,b : real;
readln(a,b);
assert(a<b);
var fa := f(a);
var fb := f(b);
assert(fb*fa<0);
while (b-a) > eps do
begin
var x := (b+a)/2;
var fx := f(x);
if fa*fx <= 0 then
b := x
else
begin
a := x;
fa := fx;
end;
end;
writeln('Корень функции на [a,b] равен ',(b+a)/2);
end.