Стандартные задачи на циклы: различия между версиями
UnREAL (обсуждение | вклад) Нет описания правки |
Mikst (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
= Стандартные задачи на циклы = | |||
== Простейшие алгоритмы == | == Простейшие алгоритмы == | ||
=== №1. Сумма вводимых целых чисел === | === №1. Сумма вводимых целых чисел === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
var s: real; | |||
begin | begin | ||
write('Введите число слагаемых: '); | |||
var | var n := ReadInteger; | ||
s := 0; | |||
for var i:=1 to n do | for var i:=1 to n do | ||
begin | begin | ||
write('Введите слагаемое: '); | |||
var x := ReadReal; | |||
s += x; | s += x; | ||
end; | end; | ||
writeln('Сумма слагаемых равна ',s); | writeln('Сумма слагаемых равна ',s); | ||
end. | end. | ||
</source> | </source> | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_01_Kazik.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_01_Kazik.pas Ссылка на алгоритм в среде WDE] | ||
=== №2. Произведение целых чисел === | === №2. Произведение целых чисел === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
var p: real; | |||
begin | begin | ||
write('Введите число множителей: '); | |||
var | var n := ReadInteger; | ||
p := 1; | |||
for var i:=1 to n do | for var i:=1 to n do | ||
begin | begin | ||
write('Введите множитель: '); | |||
x := ReadReal; | |||
p *= x; | p *= x; | ||
end; | end; | ||
writeln('Произведение равно ', p); | writeln('Произведение равно ', p); | ||
end. | end. | ||
Строка 39: | Строка 43: | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_02_Kazik.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_02_Kazik.pas Ссылка на алгоритм в среде WDE] | ||
=== №3. Двойной факториал n!!=n*(n-2)*(n-4)*...*2 (или 1) === | === №3. Двойной факториал n!!=n*(n-2)*(n-4)*...*2 (или 1) === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
begin | begin | ||
write('Введите x: '); | |||
var x := ReadInteger; | |||
var p := 1; | var p := 1; | ||
while x>=2 do | while x>=2 do | ||
begin | begin | ||
Строка 53: | Строка 56: | ||
x -= 2; | x -= 2; | ||
end; | end; | ||
writeln('Двойной факториал равен ', p); | writeln('Двойной факториал равен ', p); | ||
end. | end. | ||
</source> | </source> | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_03_Kazik.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_03_Kazik.pas Ссылка на алгоритм в среде WDE] | ||
=== №4. Сколько нечетных среди n введенных === | === №4. Сколько нечетных среди n введенных === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
begin | begin | ||
var | write('Введите n: '); | ||
var n := ReadInteger; | |||
var c := 0; | var c := 0; | ||
for var i:=1 to n do | for var i:=1 to n do | ||
begin | begin | ||
write ('Введите целое число: '); | |||
var x := ReadInteger; | |||
if x mod 2 <> 0 then | if x mod 2 <> 0 then | ||
c += 1; | c += 1; | ||
end; | end; | ||
writeln('Количество нечетных равно ', c); | writeln('Количество нечетных равно ', c); | ||
end. | end. | ||
</source> | </source> | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_04_Kazik.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_04_Kazik.pas Ссылка на алгоритм в среде WDE] | ||
=== №5. Защита от неверного ввода === | === №5. Защита от неверного ввода === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
var x: real; | |||
begin | begin | ||
repeat | |||
write('Введите x>0: '); | |||
x := ReadReal; | |||
if x<=0 then | |||
writeln('Неверный ввод'); | |||
until x>0; | until x>0; | ||
end. | end. | ||
</source> | </source> | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_05_Kazik.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_05_Kazik.pas Ссылка на алгоритм в среде WDE] | ||
=== №6. Табулирование функции f(x) на [a,b] в точках, разбивающих [a,b] на N частей === | === №6. Табулирование функции f(x) на [a,b] в точках, разбивающих [a,b] на N частей === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
function f(x : real): real; | function f(x: real): real; | ||
begin | begin | ||
result := sin(x)*x; | |||
result := sin(x); | |||
end; | end; | ||
var | |||
N: integer; | |||
a, b: real; | |||
begin | begin | ||
write('Введите N: '); | |||
N := ReadInteger; | |||
Assert(N>0); | Assert(N>0); | ||
write('Введите a и b: '); | |||
a := ReadReal; | |||
b := ReadReal; | |||
var h := (b-a)/N; | var h := (b-a)/N; | ||
var x := a; | var x := a; | ||
for var i:=0 to N do | for var i:=0 to N do | ||
begin | begin | ||
writeln( | writeln(x:5:2,f(x):10:4); | ||
x += h; | x += h; | ||
end; | end; | ||
end. | end. | ||
</source> | </source> | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_06_Kazik.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_06_Kazik.pas Ссылка на алгоритм в среде WDE] | ||
=== №6a. Решение, использующее while. Погрешность округления и вычислительная погрешность === | === №6a. Решение, использующее while. Погрешность округления и вычислительная погрешность === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
function f(x : real): real; | function f(x: real): real; | ||
begin | begin | ||
result := sin(x)*x; | |||
result := sin(x); | |||
end; | end; | ||
var | |||
N: integer; | |||
a, b: real; | |||
begin | begin | ||
write('Введите N: '); | |||
N := ReadInteger; | |||
Assert(N>0); | Assert(N>0); | ||
write('Введите a и b: '); | |||
a := ReadReal; | |||
b := ReadReal; | |||
var h := (b-a)/N; | var h := (b-a)/N; | ||
var x := a; | var x := a; | ||
while x <= b+h/2 do | while x <= b+h/2 do | ||
begin | begin | ||
writeln( | writeln(x:5:2,f(x):10:4); | ||
x += h; | x += h; | ||
end; | end; | ||
Строка 168: | Строка 168: | ||
end. | end. | ||
</source> | </source> | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_07.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_07.pas Ссылка на алгоритм в среде WDE] | ||
=== №8. Вывод всех двухзначных чисел, кратных 5 === | === №8. Вывод всех двухзначных чисел, кратных 5 === | ||
Строка 183: | Строка 181: | ||
end. | end. | ||
</source> | </source> | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_08.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_08.pas Ссылка на алгоритм в среде WDE] | ||
=== №9. Вывод n первых чисел Фибоначчи === | === №9. Вывод n первых чисел Фибоначчи === | ||
Строка 191: | Строка 187: | ||
begin | begin | ||
write('Введите целое число n (n > 1): '); | write('Введите целое число n (n > 1): '); | ||
var n : | var n := ReadInteger; | ||
var a := 1; | var a := 1; | ||
var b := 1; | var b := 1; | ||
Строка 205: | Строка 200: | ||
end. | end. | ||
</source> | </source> | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_09.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_09.pas Ссылка на алгоритм в среде WDE] | ||
=== №10. Найти НОД(A,B), используя алгоритм Евклида: === | === №10. Найти НОД(A,B), используя алгоритм Евклида: === | ||
Строка 213: | Строка 206: | ||
НОД(A,B) = НОД(B,A mod B); НОД(A,0) = A | НОД(A,B) = НОД(B,A mod B); НОД(A,0) = A | ||
<source lang="pascal"> | <source lang="pascal"> | ||
var A,B,C: integer; | |||
begin | begin | ||
write('Введите целые числа A и B: '); | write('Введите целые числа A и B: '); | ||
readln(A,B); | readln(A,B); | ||
repeat | repeat | ||
Строка 225: | Строка 218: | ||
end. | end. | ||
</source> | </source> | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_10.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_10.pas Ссылка на алгоритм в среде WDE] | ||
=== №11. Найти сумму цифр целого положительного числа m === | === №11. Найти сумму цифр целого положительного числа m === | ||
Строка 233: | Строка 224: | ||
begin | begin | ||
write('Введите целое положительное число m: '); | write('Введите целое положительное число m: '); | ||
var m : | var m := ReadInteger; | ||
assert(m > 0); | assert(m > 0); | ||
var s := 0; | var s := 0; | ||
while m > 0 do | while m > 0 do | ||
Строка 242: | Строка 233: | ||
m := m div 10; | m := m div 10; | ||
end; | end; | ||
writeln('Сумма цифр числа m равна ', s); | writeln('Сумма цифр числа m равна ', s); | ||
end. | end. | ||
</source> | </source> | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_11.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_11.pas Ссылка на алгоритм в среде WDE] | ||
== Максимумы и минимумы == | == Максимумы и минимумы == | ||
Строка 255: | Строка 245: | ||
begin | begin | ||
write('Введите целое число n (n>0): '); | write('Введите целое число n (n>0): '); | ||
var n : | var n := ReadInteger; | ||
assert(n>0); | assert(n>0); | ||
write('Введите 1 число: '); | write('Введите 1 число: '); | ||
var x : | var x := ReadReal; | ||
var max := x; | var max := x; | ||
for var i := 2 to n do | for var i := 2 to n do | ||
begin | begin | ||
write('Введите ', i, ' число: '); | write('Введите ', i, ' число: '); | ||
x := ReadReal; | |||
if max < x then | if max < x then | ||
max := x; | max := x; | ||
end; | end; | ||
writeln('Максимальное из введенных чисел: ', max); | writeln('Максимальное из введенных чисел: ', max); | ||
end. | end. | ||
</source> | </source> | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_12.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_12.pas Ссылка на алгоритм в среде WDE] | ||
=== №12a. Найти min, удовлетворяющее условию p(x) === | === №12a. Найти min, удовлетворяющее условию p(x) === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
// Условие взятое как пример (Если число положительное, то условие p(x) возвращает true, иначе false) | // Условие взятое как пример (Если число положительное, то условие p(x) возвращает true, иначе false) | ||
function p(x : real) : boolean; | function p(x: real): boolean; | ||
begin | begin | ||
Result := x > 0; | |||
end; | end; | ||
begin | begin | ||
write('Введите целое число n (n>0): '); | write('Введите целое число n (n>0): '); | ||
var n : | var n := ReadInteger; | ||
assert(n>0); | assert(n>0); | ||
var min := real.MaxValue; | var min := real.MaxValue; | ||
for var i := 1 to n do | for var i := 1 to n do | ||
begin | begin | ||
write('Введите ', i, ' число: '); | write('Введите ', i, ' число: '); | ||
var x := ReadReal; | |||
if (x < min) and p(x) then | if (x < min) and p(x) then | ||
min := x; | min := x; | ||
end; | end; | ||
if min = real.MaxValue then | if min = real.MaxValue then | ||
writeln('Нет чисел удовлетворяющих условию | writeln('Нет чисел, удовлетворяющих условию') | ||
else | else writeln('Минимальное из введенных чисел, удовлетворяющее условию: ', min); | ||
end. | end. | ||
</source> | </source> | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_12a.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_12a.pas Ссылка на алгоритм в среде WDE] | ||
== Суммирование рядов (конечных и бесконечных) == | == Суммирование рядов (конечных и бесконечных) == | ||
Строка 315: | Строка 298: | ||
=== №13. Вычислить Σ(i=1..n) a^i/i! === | === №13. Вычислить Σ(i=1..n) a^i/i! === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
var | |||
a: real; | |||
n: integer; | |||
begin | begin | ||
write('Введите | write('Введите a и n (n>0): '); | ||
readln(a,n); | readln(a,n); | ||
assert(n>0); | assert(n>0); | ||
Строка 328: | Строка 312: | ||
s += x; | s += x; | ||
end; | end; | ||
writeln('Сумма | writeln('Сумма = ', s); | ||
end. | end. | ||
</source> | </source> | ||
[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! === | === №13a. Вычислить Σ(i=1..∞) (-1)^i * a^i/i! === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
var a: real; | |||
begin | begin | ||
write('Введите | write('Введите a (0 < a < 1): '); | ||
readln(a); | readln(a); | ||
assert((a>0) and (a<1)); | assert((a>0) and (a<1)); | ||
var eps := 0.0001; | var eps := 0.0001; | ||
var i := 1; | var i := 1; | ||
Строка 351: | Строка 334: | ||
y *= -a; | y *= -a; | ||
until abs(y/i) < eps; | until abs(y/i) < eps; | ||
writeln('Сумма | |||
writeln('Сумма = ', s); | |||
end. | end. | ||
</source> | </source> | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_13a.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_13a.pas Ссылка на алгоритм в среде WDE] | ||
== Поиск значения == | == Поиск значения == | ||
Строка 362: | Строка 344: | ||
=== №14. Есть ли среди введенных число k? === | === №14. Есть ли среди введенных число k? === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
var n,k: integer; | |||
begin | begin | ||
write('Введите целые числа n (n>0) и k: '); | write('Введите целые числа n (n>0) и k: '); | ||
readln(n,k); | readln(n,k); | ||
assert(n>0); | assert(n>0); | ||
var Exists := false; | var Exists := false; | ||
for var i := 1 to n do | for var i := 1 to n do | ||
begin | begin | ||
write('Введите ', i, ' целое число: '); | write('Введите ', i, ' целое число: '); | ||
var x : | var x := ReadInteger; | ||
if x = k then | if x = k then | ||
begin | begin | ||
Строка 405: | Строка 361: | ||
end; | end; | ||
end; | end; | ||
if Exists then | if Exists then | ||
writeln('Число ', k, ' было введено') | writeln('Число ', k, ' было введено') | ||
else | else writeln('Число ', k, ' не было введено'); | ||
end. | end. | ||
</source> | </source> | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_14a.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_14a.pas Ссылка на алгоритм в среде WDE] | ||
=== №14b. Есть ли среди введенных число k? (то же с использованием while) === | === №14b. Есть ли среди введенных число k? (то же с использованием while) === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
var n,k: integer; | |||
begin | begin | ||
write('Введите целые числа n (n>0) и k: '); | write('Введите целые числа n (n>0) и k: '); | ||
readln(n,k); | readln(n,k); | ||
assert(n>0); | assert(n>0); | ||
var Exists := false; | var Exists := false; | ||
var i := 1; | var i := 1; | ||
Строка 427: | Строка 382: | ||
begin | begin | ||
write('Введите ', i, ' целое число: '); | write('Введите ', i, ' целое число: '); | ||
var x : | var x := ReadInteger; | ||
i += 1; | i += 1; | ||
if x = k then | if x = k then | ||
Exists := true; | Exists := true; | ||
end; | end; | ||
if Exists then | if Exists then | ||
writeln('Число ', k, ' было введено') | writeln('Число ', k, ' было введено') | ||
else | else writeln('Число ', k, ' не было введено'); | ||
end. | end. | ||
</source> | </source> | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_14b.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_14b.pas Ссылка на алгоритм в среде WDE] | ||
=== №15. Является ли число N>0 простым? === | === №15. Является ли число N>0 простым? === | ||
Строка 447: | Строка 399: | ||
begin | begin | ||
write('Введите целое число N (N>0): '); | write('Введите целое число N (N>0): '); | ||
var N : | var N := ReadInteger; | ||
assert(N>0); | assert(N>0); | ||
var IsSimple := | |||
var IsSimple := True; | |||
for var i := 2 to round(sqrt(N)) do | for var i := 2 to round(sqrt(N)) do | ||
if N mod i = 0 then | if N mod i = 0 then | ||
begin | begin | ||
IsSimple := | IsSimple := False; | ||
break; | break; | ||
end; | end; | ||
if IsSimple then | if IsSimple then | ||
writeln('Число ', N, ' является простым') | writeln('Число ', N, ' является простым') | ||
else | else writeln('Число ', N, ' является составным'); | ||
end. | end. | ||
</source> | </source> | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_15.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_15.pas Ссылка на алгоритм в среде WDE] | ||
== Другие алгоритмы == | == Другие алгоритмы == | ||
Строка 474: | Строка 422: | ||
begin | begin | ||
write('Введите целое число x (x>1): '); | write('Введите целое число x (x>1): '); | ||
var x : | var x := ReadInteger; | ||
assert(x>1); | assert(x>1); | ||
var i := 2; | var i := 2; | ||
write(x, ' = 1'); | write(x, ' = 1'); | ||
Строка 485: | Строка 433: | ||
x := x div i; | x := x div i; | ||
end | end | ||
else | else i += 1; | ||
until x = 1; | until x = 1; | ||
end. | end. | ||
</source> | </source> | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_16.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_16.pas Ссылка на алгоритм в среде WDE] | ||
=== №17. Вычисление значения многочлена в точке x по схеме Горнера === | === №17. Вычисление значения многочлена в точке x по схеме Горнера === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
var | |||
x,a: real; | |||
n: integer; | |||
begin | begin | ||
write('Введите | write('Введите x: '); | ||
readln(x); | |||
write('Введите степень многочлена n (n>0): '); | |||
readln( | readln(n); | ||
assert(n>=0); | assert(n>=0); | ||
write('Введите коэффициенты: '); | |||
readln(a); | |||
var s := a; | var s := a; | ||
for var i := 1 to n do | for var i := 1 to n do | ||
Строка 509: | Строка 460: | ||
s := s*x + a; | s := s*x + a; | ||
end; | end; | ||
writeln('Значение многочлена p(x) = a_{1}*x^n + a_{2}*x^(n-1) + ... + a_{n}*x + a_{n+1} в точке x = ', x, ' равно ', s); | writeln('Значение многочлена p(x) = a_{1}*x^n + a_{2}*x^(n-1) + ... + a_{n}*x + a_{n+1} в точке x = ', x, ' равно ', s); | ||
end. | end. | ||
Строка 514: | Строка 466: | ||
[http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_17.pas Ссылка на алгоритм в среде WDE] | [http://pascalabc.net/WDE/?shared=UnREAL/Algoritm_17.pas Ссылка на алгоритм в среде WDE] | ||
=== №18. Дана непрерывная на [a,b] функция f(x), имеющая на [a,b] ровно один корень (f(a)*f(b)<=0). Найти его методом половинного деления === | === №18. Дана непрерывная на [a,b] функция f(x), имеющая на [a,b] ровно один корень (f(a)*f(b)<=0). Найти его методом половинного деления === | ||
Строка 522: | Строка 473: | ||
const f = sin; | const f = sin; | ||
var a,b: real; | |||
begin | begin | ||
write('Введите числа a и b (a<b): '); | write('Введите числа a и b (a<b): '); | ||
readln(a,b); | readln(a,b); | ||
assert(a<b); | assert(a<b); | ||
var fa := f(a); | var fa := f(a); | ||
var fb := f(b); | var fb := f(b); | ||
assert(fb*fa<0); | assert(fb*fa<0); | ||
while (b-a) > eps do | while (b-a) > eps do | ||
begin | begin | ||
Строка 535: | Строка 488: | ||
var fx := f(x); | var fx := f(x); | ||
if fa*fx <= 0 then | if fa*fx <= 0 then | ||
b := x | b := x; | ||
else | else | ||
begin | begin | ||
Строка 542: | Строка 495: | ||
end; | end; | ||
end; | end; | ||
writeln('Корень функции на [a,b] равен ',(b+a)/2); | writeln('Корень функции на [a,b] равен ',(b+a)/2); | ||
end.</source> | end.</source> |
Версия от 00:38, 30 ноября 2010
Стандартные задачи на циклы
Простейшие алгоритмы
№1. Сумма вводимых целых чисел
var s: real;
begin
write('Введите число слагаемых: ');
var n := ReadInteger;
s := 0;
for var i:=1 to n do
begin
write('Введите слагаемое: ');
var x := ReadReal;
s += x;
end;
writeln('Сумма слагаемых равна ',s);
end.
Ссылка на алгоритм в среде WDE
№2. Произведение целых чисел
var p: real;
begin
write('Введите число множителей: ');
var n := ReadInteger;
p := 1;
for var i:=1 to n do
begin
write('Введите множитель: ');
x := ReadReal;
p *= x;
end;
writeln('Произведение равно ', p);
end.
Ссылка на алгоритм в среде WDE
№3. Двойной факториал n!!=n*(n-2)*(n-4)*...*2 (или 1)
begin
write('Введите x: ');
var x := ReadInteger;
var p := 1;
while x>=2 do
begin
p *= x;
x -= 2;
end;
writeln('Двойной факториал равен ', p);
end.
Ссылка на алгоритм в среде WDE
№4. Сколько нечетных среди n введенных
begin
write('Введите n: ');
var n := ReadInteger;
var c := 0;
for var i:=1 to n do
begin
write ('Введите целое число: ');
var x := ReadInteger;
if x mod 2 <> 0 then
c += 1;
end;
writeln('Количество нечетных равно ', c);
end.
Ссылка на алгоритм в среде WDE
№5. Защита от неверного ввода
var x: real;
begin
repeat
write('Введите x>0: ');
x := ReadReal;
if x<=0 then
writeln('Неверный ввод');
until x>0;
end.
Ссылка на алгоритм в среде WDE
№6. Табулирование функции f(x) на [a,b] в точках, разбивающих [a,b] на N частей
function f(x: real): real;
begin
result := sin(x)*x;
end;
var
N: integer;
a, b: real;
begin
write('Введите N: ');
N := ReadInteger;
Assert(N>0);
write('Введите a и b: ');
a := ReadReal;
b := ReadReal;
var h := (b-a)/N;
var x := a;
for var i:=0 to N do
begin
writeln(x:5:2,f(x):10:4);
x += h;
end;
end.
Ссылка на алгоритм в среде WDE
№6a. Решение, использующее while. Погрешность округления и вычислительная погрешность
function f(x: real): real;
begin
result := sin(x)*x;
end;
var
N: integer;
a, b: real;
begin
write('Введите N: ');
N := ReadInteger;
Assert(N>0);
write('Введите a и b: ');
a := ReadReal;
b := ReadReal;
var h := (b-a)/N;
var x := a;
while x <= b+h/2 do
begin
writeln(x:5:2,f(x):10:4);
x += h;
end;
end.
Ссылка на алгоритм в среде WDE
Рекуррентные соотношения
№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 := ReadInteger;
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
var A,B,C: integer;
begin
write('Введите целые числа A и B: ');
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 := ReadInteger;
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 := ReadInteger;
assert(n>0);
write('Введите 1 число: ');
var x := ReadReal;
var max := x;
for var i := 2 to n do
begin
write('Введите ', i, ' число: ');
x := ReadReal;
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
Result := x > 0;
end;
begin
write('Введите целое число n (n>0): ');
var n := ReadInteger;
assert(n>0);
var min := real.MaxValue;
for var i := 1 to n do
begin
write('Введите ', i, ' число: ');
var x := ReadReal;
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!
var
a: real;
n: integer;
begin
write('Введите a и n (n>0): ');
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('Сумма = ', s);
end.
Ссылка на алгоритм в среде WDE
№13a. Вычислить Σ(i=1..∞) (-1)^i * a^i/i!
var a: real;
begin
write('Введите a (0 < a < 1): ');
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('Сумма = ', s);
end.
Ссылка на алгоритм в среде WDE
Поиск значения
№14. Есть ли среди введенных число k?
var n,k: integer;
begin
write('Введите целые числа n (n>0) и k: ');
readln(n,k);
assert(n>0);
var Exists := false;
for var i := 1 to n do
begin
write('Введите ', i, ' целое число: ');
var x := ReadInteger;
if x = k then
begin
Exists := true;
break;
end;
end;
if Exists then
writeln('Число ', k, ' было введено')
else writeln('Число ', k, ' не было введено');
end.
Ссылка на алгоритм в среде WDE
№14b. Есть ли среди введенных число k? (то же с использованием while)
var n,k: integer;
begin
write('Введите целые числа n (n>0) и k: ');
readln(n,k);
assert(n>0);
var Exists := false;
var i := 1;
while (i <= n) and not Exists do
begin
write('Введите ', i, ' целое число: ');
var x := ReadInteger;
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 := ReadInteger;
assert(N>0);
var IsSimple := True;
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 := ReadInteger;
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 по схеме Горнера
var
x,a: real;
n: integer;
begin
write('Введите x: ');
readln(x);
write('Введите степень многочлена n (n>0): ');
readln(n);
assert(n>=0);
write('Введите коэффициенты: ');
readln(a);
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;
var a,b: real;
begin
write('Введите числа a и b (a<b): ');
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.
Ссылка на алгоритм в среде WDE
--UnREAL 20:29, 27 ноября 2010 (UTC)