Pascal abc примеры цикл
Вывод последовательностей 1 2 3 4 5 и 5 4 3 2 1
begin
// С помощью for
for i := 1 to 5 do
write(i,’ ‘);
writeln;
for i := 5 downto 1 do
write(i,’ ‘);
writeln;
writeln;
// С помощью while
i := 1;
while i<=5 do
begin
write(i,’ ‘);
i := i + 1;
end;
writeln;
i := 5;
while i>=1 do
begin
write(i,’ ‘);
i := i – 1;
end;
writeln;
writeln;
// С помощью repeat
i := 1;
repeat
write(i,’ ‘);
i := i + 1;
until i>5;
writeln;
i := 5;
repeat
write(i,’ ‘);
i := i – 1;
until i<1;
writeln;
end.
Вывод последовательности 1 3 5 7 9
begin
// С помощью for и промежуточной переменной
x := 1;
for i := 1 to 5 do
begin
write(x,’ ‘);
x := x + 2;
end;
writeln;
// С помощью for без промежуточной переменной
for i := 1 to 5 do
write(2*i-1,’ ‘);
writeln;
// С помощью while
x := 1;
while x<10 do
begin
write(x,’ ‘);
x := x + 2;
end;
writeln;
// С помощью repeat
x := 1;
repeat
write(x,’ ‘);
x := x + 2;
until x>=10;
end.
Сумма и произведение введенных чисел
Код на Pascal
i: integer;
s,p: real;
x: real;
begin
writeln(‘Введите 10 чисел: ‘);
s := 0;
p := 1;
for i := 1 to 10 do
begin
read(x);
s := s + x;
p := p * x;
end;
writeln(‘Сумма введенных чисел = ‘,s);
writeln(‘Произведение введенных чисел = ‘,p);
end.
Код на PascalABC.NET
s,p: real;
begin
writeln(‘Введите 10 чисел: ‘);
s := 0;
p := 1;
for var i := 1 to 10 do
begin
var x: integer;
read(x);
s += x;
p *= x;
end;
writeln(‘Сумма введенных чисел = ‘,s);
writeln(‘Произведение введенных чисел = ‘,p);
end.
Вычисление n!
Код на Pascal
n,fact: integer;
i: integer;
begin
write(‘Введите n (n<=13): ‘);
readln(n);
fact := 1;
for i := 2 to n do
fact := fact * i;
writeln(n,’! = ‘,fact);
end.
Код на PascalABC.NET
begin
write(‘Введите n (n<=13): ‘);
readln(n);
var fact := 1;
for var i := 2 to n do
fact *= i;
writeln(n,’! = ‘,fact);
end.
Вычисление An
Код на Pascal
n,i: integer;
a,p: real;
begin
write(‘Введите a,n: ‘);
readln(a,n);
p := 1;
for i := 1 to n do
p := p * a;
writeln(a,’ в степени ‘,n,’ = ‘,p);
end.
Код на PascalABC.NET
n: integer;
a: real;
begin
write(‘Введите a,n: ‘);
readln(a,n);
var p := 1.0;
for var i := 1 to n do
p *= a;
writelnFormat(‘{0} в степени {1} = {2}’,a,n,p);
end.
Вывод цифр числа
begin
write(‘Введите x: ‘);
readln(x);
write(‘Цифры числа x в обратном порядке: ‘);
while x<>0 do
begin
write(x mod 10,’ ‘);
x := x div 10;
end;
end.
Вывод букв английского алфавита
begin
for c := ‘a’ to ‘z’ do
write(c,’ ‘);
writeln;
c := ‘A’;
while c<=’Z’ do
begin
write(c,’ ‘);
c := succ(c);
end;
end.
Числа Фибоначчи
Код на Pascal
var
a,b,c: integer;
i: integer;
begin
a := 1;
b := 1;
write(a,’ ‘,b,’ ‘);
for i := 3 to n do
begin
c := a + b;
write(c,’ ‘);
a := b;
b := c;
end;
end.
Код на PascalABC.NET
begin
var a := 1;
var b := 1;
write(a,’ ‘,b,’ ‘);
for var i := 3 to n do
begin
var c := a + b;
write(c,’ ‘);
a := b;
b := c;
end;
end.
Минимум из введенных
Код на Pascal
var
min: integer;
x: integer;
i: integer;
begin
writeln(‘Введите ‘,n,’ значений: ‘);
read(x);
min := x;
for i := 2 to n do
begin
read(x);
if x<min then
min := x;
end;
writeln(‘Минимальное значение = ‘,min);
end.
Код на PascalABC.NET
var min: integer;
begin
writelnFormat(‘Введите {0} значений: ‘,n);
min := integer.MaxValue;
for var i := 1 to n do
begin
var x: integer;
read(x);
if x<min then
min := x;
end;
writeln(‘Минимальное значение = ‘,min);
end.
Алгоритм Евклида поиска НОД
var (a,b) := ReadInteger2(‘Введите a,b: ‘);
while b<>0 do
begin
var c := a mod b;
a := b;
b := c;
end;
Writeln(‘Наибольший Общий Делитель = ‘,a);
end.
Вывод таблицы умножения
Код на PascalABC.NET
begin
for var i:=1 to n do
begin
for var j:=1 to n do
write(i*j:4);
writeln;
end;
end.
Определение простоты числа
var N := ReadlnInteger(‘Введите целое (>1): ‘);
var IsPrime := True;
for var i:=2 to Round(Sqrt(N)) do // если число составное, то один из его сомножителей <= sqrt(N)
if N mod i = 0 then
begin
IsPrime := False;
break;
end;
if IsPrime then
Writeln(‘Число ‘,N,’ простое’)
else Writeln(‘Число ‘,N,’ составное’);
end.
Ссылки
- Программы для начинающих
- Сайт PascalABC.NET: Программы и алгоритмы для начинающих
Источник
При решении задач может возникнуть необходимость повторить одни и те же действия несколько или множество раз. В программировании блоки кода, которые требуется повторять не единожды, оборачиваются в специальные конструкции – циклы. У циклов выделяют заголовок и тело. Заголовок определяет, до каких пор или сколько раз тело цикла будет выполняться. Тело содержит выражения, которые выполняются, если в заголовке цикла выражение вернуло логическую истину (True, не ноль). После того как достигнута последняя инструкция тела, поток выполнения снова возвращается к заголовку цикла. Снова проверяется условие выполнения цикла. В зависимости от результата тело цикла либо повторяется, либо поток выполнения переходит к следующему выражению после всего цикла.
В языке программирования Паскаль существует три вида циклических конструкций.
Цикл for
Часто цикл for называют циклом со счетчиком. Этот цикл используется, когда число повторений не связано с тем, что происходит в теле цикла. Т.е. количество повторений может быть вычислено заранее (хотя оно не вычисляется).
В заголовке цикла указываются два значения. Первое значение присваивается так называемой переменной-счетчику, от этого значения начинается отсчет количества итераций (повторений). Отсчет идет всегда с шагом равным единице. Второе значение указывает, при каком значении счетчика цикл должен остановиться. Другими словами, количество итераций цикла определяется разностью между вторым и первым значением плюс единица. В Pascal тело цикла не должно содержать выражений, изменяющих счетчик.
Цикл for существует в двух формах:
тело_цикла;
тело_цикла;
Счетчик – это переменная любого из перечисляемых типов (целого, булевого, символьного, диапазонного, перечисления). Начальные и конечные значения могут быть представлены не только значениями, но и выражениями, возвращающими совместимые с типом счетчика типы данных. Если между начальным и конечным выражением указано служебное слово to, то на каждом шаге цикла значение параметра будет увеличиваться на единицу. Если же указано downto, то значение параметра будет уменьшаться на единицу.
Количество итераций цикла for известно именно до его выполнения, но не до выполнения всей программы. Так в примере ниже, количество выполнений цикла определяется пользователем. Значение присваивается переменной, а затем используется в заголовке цикла. Но когда оно используется, циклу уже точно известно, сколько раз надо выполниться.
i, n: integer;
begin
write (‘Количество знаков: ‘);
readln (n);
for i := 1 to n do
write (‘(*) ‘);
readln
end.
Цикл while
Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, если false – то нет.
Когда тело цикла было выполнено, то ход программы снова возвращается в заголовок цикла. Условие выполнения тела снова проверяется (находится значение логического выражения). Тело цикла выполнится столько раз, сколько раз логическое выражение вернет true. Поэтому очень важно в теле цикла предусмотреть изменение переменной, фигурирующей в заголовке цикла, таким образом, чтобы когда-нибудь обязательно наступала ситуация false. Иначе произойдет так называемое зацикливание, одна из самых неприятных ошибок в программировании.
i, n: integer;
begin
write (‘Количество знаков: ‘);
readln (n);
i := 1;
while i <= n do begin
write (‘(*) ‘);
i := i + 1
end;
readln
end.
Цикл repeat
Цикл while может не выполниться ни разу, если логическое выражение в заголовке сразу вернуло false. Однако такая ситуация не всегда может быть приемлемой. Бывает, что тело цикла должно выполниться хотя бы один раз, не зависимо оттого, что вернет логическое выражение. В таком случае используется цикл repeat – цикл с постусловием.
В цикле repeat логическое выражение стоит после тела цикла. Причем, в отличие от цикла while, здесь всё наоборот: в случае true происходит выход из цикла, в случае false – его повторение.
i, n: integer;
begin
write (‘Количество знаков: ‘);
readln (n);
i := 1;
repeat
write (‘(*) ‘);
i := i + 1
until i > n;
readln
end.
В примере, даже если n будет равно 0, одна звездочка все равно будет напечатана.
Источник
Циклы с предусловием (while), с постусловием (repeat), циклы со счетчиком (for)
Цикл с предусловием (while) в Pascal abc.net
- Итерация — однократное повторение тела цикла.
- В цикле while тело может не выполниться ни разу.
Синтаксис цикла while:
<оператор> // тело цикла
::=
Цикл while на блок-схеме
Пример: Вычислить сумму четных чисел от 2 до 20.
✍ Решение:
x := 2;
while x <= 20 do
begin
sum += x;
x += 2;
end;
Задание: Определите наименьшее натуральное число, квадрат которого больше заданного целого числа. Стандартную функцию извлечения квадратного корня не использовать.
Пример: Даны положительные числа A и B (A ≥ B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A.
✍ Решение:
var (a,b):=readInteger2;
assert(a>=b);
var k:=0;
var s:=0;
while s<=a do begin
inc(k);
s+=b
end;
writeln(k-1)
End.
Оператор break в цикле while
Оператор break предназначен для экстренного выхода из цикла. Обычно используется в условном операторе: при выполнении условия — выход из цикла.
Как работать с последовательностями чисел?
Например, в случае, когда последовательность чисел должна заканчиваться нулем, то примерный код обработки последовательности может быть таким:
// …
while True do // бесконечный цикл
begin
// ввод очередного элемента последовательности
var b := ReadInteger; // или ReadReal
if b = 0 then
break; // выход из цикла при вводе элемента, равного нулю
// обработка очередного элемента последовательности
end;
// вывод результатов
end.
Задание: Дана последовательность целых чисел, признак завершения которой — число (оно не считается элементом последовательности). Вывести номера чётных чисел последовательности (числа нумеровать с 1). Если последовательность не содержит чётных элементов, выводить ничего не нужно.
Цикл с постусловием (repeat) в Pascal abc.net
- В цикле repeat тело выполнится хотя бы один раз.
Синтаксис цикла repeat:
<операторы> // тело цикла
until <условие>
Цикл repeat на блок-схеме
Пример: Вычислить сумму четных чисел от 2 до 20.
✍ Решение:
x := 2;
repeat
sum += x;
x += 2;
until x = 22;
Оператор цикла со счетчиком (for) в Pascal abc.net
- переменная-счетчик должна иметь порядковый тип (целый, символьный или перечислимый);
- переменная-счетчик цикла for не должна меняться внутри цикла for;
- описание переменной цикла в его заголовке:
- автоопределение типа при описании:
Синтаксис цикла for:
выглядит так:
for := do
выглядит так:
выглядит так:
to | downto
Новое в Pascal abc.net:
<оператор>
<оператор>
Значение переменной цикла после завершения цикла будет не определено (локальная).
Пример: Даны целые числа A и B (A ). Вывести в порядке возрастания все целые числа, расположенные между A и B (не включая сами числа A и B), а также количество N этих чисел.
✍ Решение:
var (a, b) := readinteger2(‘Введите два целых числа. Первое должно быть меньше второго:’);
assert(a < b); // проверка действительно ли a < b
for var i := (a + 1) to (b – 1) do
println(i);
println(b – a – 1); // количество чисел
end.
Задание: Даны два целых числа A и B. Выведите квадраты всех целых чисел, расположенных между A и B, в порядке возрастания чисел и включая сами эти числа.
Задание: Дано вещественное число — цена 1 кг конфет. Вывести стоимость 1.2, 1.4, …, 2 кг конфет.
Пример: Используя один цикл, вычислить значение суммы, заданной следующей формулой (N > 0):
✍ Решение:
var n:=readInteger(‘N = ‘);
assert(n>0);
var x:=readReal(‘X = ‘);
var sum:=0.0;
var f:=-1.0;
var num:=1.0;
for var i:=1 to n do begin
num*=x;
sum+=(x+f*num)/i;
f*=-1.0;
end;
writeln(sum)
End.
Задание: Используя один цикл, вычислить значение суммы, заданной следующей формулой (N > 0):
Не забудьте, что использование функции возведения в степень запрещено.
Как работать с последовательностью чисел?
Например, если необходимо как-то обработать последовательность чисел с заданным количеством элементов, то примерный код может быть таким:
// предварительные действия
N := ReadInteger; // или Read(N);
for var i := 1 to N do
begin
// ввод очередного элемента
var b := ReadInteger; //или ReadReal, или Read(b);
// обработка очередного элемента
end;
// вывод результатов обработки
end.
Задание: Дано целое число N (N ≥ 0) и последовательность из N целых чисел. Найти количество отрицательных чисел в этой последовательности.
Упрощенный цикл LOOP
Для того, чтобы реализовать цикл с конкретным числом итераций, не используя счетчик цикла, возможен упрощенный вариант:
Пример:
loop 5 do
begin
println(‘Привет!’);
end;
// …
Обработка цифр числа
О том, как выделять из числа отдельные его разряды Вы ознакомились в предыдущем уроке.
Теперь рассмотрим более сложный вариант с обработкой цифр числа.
Пример: Дано натуральное число N — количество цифр и последовательность из N цифр. Сформировать положительное число, состоящее из этих цифр, начиная со старшего разряда.
Пример:
кол-во; цифры => результат
N = 3; 3,7,0 => M = 370
N = 1; 0 => M = 0
N = 5; 0,7,0,1,6 => M = 7016
N = 1; 2 => M = 2
N = 2; 0,2 => M = 2
Замечание: В решении должен использоваться один цикл, запрещено использовать математические функции наподобие power или ln.
✍ Решение:
var n := readinteger(‘Введите количество цифр N:’);
var num := 0;
assert(n > 0);
println(‘Введите цифры:’);
loop n do
begin
var a := readinteger;
num += a;
num := num * 10;
end;
println(num div 10);
end.
Задание: Дано целое число. Найти количество его цифр и их сумму.
Пример:
N = 1205 => Count = 4, Sum = 8
N = -111 => Count = 3, Sum = 3
N = 0 => Count = 1, Sum = 0
Замечание: В решении должен использоваться только один цикл, запрещено использовать математические функции наподобие power или ln.
Пример: Задается целое число. Получить новое число, первый (старший) разряд которого равен последнему (младшему) разряду исходного числа, второй разряд равен предпоследнему разряду исходного числа и т.п.
Пример:
N = 1205 => M = 5021
N = -950 => M = -59
N = 0 => M = 0
N = -4 => M = -4
✍ Решение:
println(‘Введите целое число:’);
var n := readinteger;
var (newnum, sign) := (0, sign(n));
n := abs(n);
while n > 0 do
begin
newnum += (n mod 10);
newnum *= 10;
n := n div 10;
end;
println(sign * (newnum div 10));
end.
Задание: Задаются два числа целого типа одинаковой разрядности. Получить из них новое положительное число, разряды которого — есть наибольшее из соответствующих разрядов исходных чисел.
Пример:
N1 = 29, N2 = -31 => M = 39
N1 = 111, N2 = 103 => M = 113
N1 = -50, N2 = 20 => M = 50
Вложенные циклы
Пример: Дано целое число K > 0, а также K наборов ненулевых целых чисел. Признак завершения каждого набора — число . Для каждого набора вывести количество его элементов. Вывести также общее количество элементов во всех наборах.
Пример:
Введите число: 3
7 8 6 0
4 5 4 3 1 0
4 5 6 9 0
Кол-во элементов для каждого: 3 5 4
Всего элементов: 12
✍ Решение:
var k:=ReadInteger(‘Введите число’);
assert(k>0);
var st:=”;
assert(k>0);
var c:=0;
for var i:=1 to k do
begin
var count:=0;
var x:=ReadInteger;
while x<>0 do
begin
count+=1;
read(x);
end;
st+=count.ToString+’ ‘;
c+=count;
end;
Println(‘Кол-во элементов для каждого =’,st);
println(‘Всего элементов’,c);
end.
Задание: Даны целые числа K > 0, N ≥ 0, а также K наборов целых чисел по N элементов в каждом наборе. Найти количество наборов, содержащих число 2. Если таких наборов нет, то вывести .
Пример:
K = 3, N = 5;
набор 1: 6 4 2 -3 2
набор 2: -1 5 6 3 49
набор 3: 31 7 7 -8 12
…
Правильный ответ: 1 набор.
Источник
Вчера мы узнали о понятии циклы в паскале в общих чертах, сегодня узнаем о каждом из циклов в паскале поподробней и увидим как они задаются. Будем разбирать цикл while с предусловием, цикл for с параметром и цикл repeat – until с постусловием.
1. Цикл с параметром в Паскале – FOR
Цикл FOR задаёт определённое условие по которому программа будет работать до его выполнения, допустим нужно нам 5 (или n) раз зациклить программу, то это легко сделать с помощью данного цикла. У цикла FOR есть характерная черта – счетчик который обычно обозначается буквой i или j.
Внешний вид цикла с параметром в паскале:
for i:= 1 to n do // присваиваем i сначала одному, потом двум, трем, …, n
После 1-го прохода переменной i присваиваем 1, после второго присваиваем 2 и так до тех пор, пока не дойдем до n. to – это до .. в порядке возрастания, также есть downto – до .. в порядке убывания.
Блок – схема цикла с параметром:
2. Цикл с предусловием в Паскале – WHILE
Оператор цикла с предусловием выполняет действия заранее неизвестное число раз. Выход из цикла осуществляется, если некоторое логическое выражение или его результат окажется ложным. Так как верность логического выражения проверяется в начале, тело цикла может не выполнится ни одного разу.
Структура цикла с предусловием:
WHILE DO
begin
end;
– логическое выражение, истинность которого проверяется вначале выполнения циклического оператора;
– любые выполняемые операторы языка.
Порядок выполнения цикла:
Пока условие истинно выполняется тело цикла. Как только условие становится ложно выполнение цикла прекращается.
Блок – схема цикла с предусловием:
Примечание: в прямоугольных блоках показано любое действие, которое выполняется в цикле или после него (шаг цикла), в овалах – начало или конец всей программы или её части. Главную роль в данной блок – схеме играет её центральная часть.
Пример:
Задача: вычислить сумму ряда 1+1.5+2+2.5+3+3.5+ .. + 30
program example-while;
var
sum:real;
n:real;
BEGIN
sum:=0;
n:=1;
while n
3. Цикл с постусловием – Repeat – until.
Этот оператор аналогичен оператору цикла с предусловием, но отличается от него тем, что проверка условия производится после выполнения тела (действий) цикла. Это обеспечивает его выполнение хотя бы один раз в отличие от ранее разобранных циклов.
Обратите внимание на то, что данный оператор цикла предполагает наличие нескольких операторов в теле цикла, то есть можно выполнять несколько действий, поэтому служебные слова Begin и End не нужны.
Последовательность операторов, входящих в тело цикла выполняется один раз, после чего проверяется соблюдение условия, записанного следом за служебным словом Until. Если условие не соблюдается, цикл завершается. В противном случае – тело цикла повторяется ещё раз, после чего снова проверяется соблюдение условия.
Блок – схема цикла с постусловием:
REPEAT
UNTIL ;
Program test2;
Var b:Real;
Begin
b:=100;
Repeat b:=b/2;
Until b
Выводы:
1.Цикл с параметром используется переменная, называемая параметром цикла или счётчиком. Перед выполнением цикла параметру (счётчику) устанавливается начальное значение. После выполнения шага цикла значение параметра увеличивается на единицу. Цикл продолжается до тех пор пока параметр не достигнет своего конечного значения, которое указывается после to (downto).
2. Цикл с предусловием выполняется до тех пор, пока условие выполнения не станет ложным, и продолжается, если условие истинно.
3. Цикл с постусловием выполняется до тех пор, пока условие не станет истинно, если условие ложно, цикл продолжается.
Предыдущий урок
Дата: 2012-01-06 19:31:43 Просмотров: 279726
Теги: Паскаль Pascal циклы уроки
Источник
Здесь приведены примеры программ и алгоритмов, используемых в курсе Основы программирования для студентов 1 курса ФИИТ мехмата ЮФУ
Редактировать
Количество по условию
Задача. Сколько нечетных среди n введенных
Решение 1. Ввод данных в цикле
loop n do
begin
var x := ReadInteger;
if x mod 2 <> 0 then
c += 1;
end;
Решение 2. Отделение ввода данных от обработки данных
Используем ReadSeqInteger, возвращающую последовательность введенных целых.
Далее используем цикл foreach по последовательности.
var c := 0;
foreach var x in sq do
if x mod 2 <> 0 then
c += 1;
Защита от неверного ввода
Решение 1. Используем TryRead и цикл while
Print(‘Введите i (>0):’);
while not TryRead(i) or not (i>0) do
Print(‘Неверный ввод. Повторите:’);
Решение 2. Используем цикл repeat
repeat
Print(‘Введите i (>0):’);
until TryRead(i) and (i>0);
Табулирование функции
Задача. Затабулировать функцию f(x) на [a,b] в точках, разбивающих [a,b] на n частей
Решение 1. С помощью loop
var h := (b-a)/n;
var x := a;
loop n+1 do
begin
Println($'{x,5:f2} {Sin(x),9:f4}’);
x += h;
end;
Решение 2. С помощью while
Величину h/2 добавляем чтобы учесть влияние вычислительной погрешности
var x := a;
while x <= b+h/2 do
begin
Println($'{x,5:f2} {Sin(x),9:f4}’);
x += h;
end;
Решение 3. С помощью PartitionPoints
Функция PartitionPoints возвращает последовательность точек , разбивающих [a,b] на n частей
Println(x,f(x));
Числа Фибоначчи
Задача. Вывести n первых чисел Фибоначчи
Решение 1. С помощью трёх переменных
var (a,b) := (1,1);
Print(a,b);
loop n-2 do
begin
var c := a + b;
Print(c);
a := b;
b := c;
end;
Решение 2. С помощью множественного присваивания
var (a,b) := (1,1);
Print(a,b);
loop n-2 do
begin
(a,b) := (b,a+b);
Print(b);
end;
Наибольший общий делитель
Задача. Найти НОД(a,b), используя алгоритм Евклида:
НОД(a,0) = a
Решение 1. С помощью трёх переменных
repeat
var c := a mod b;
a := b;
b := c;
until b=0;
Print(a);
Решение 2. С помощью множественного присваивания
repeat
(a,b) := (b,a mod b);
until b=0;
Print(a);
Cумма цифр
Задача. Найти сумму цифр целого положительного числа m
Решение.
var s := 0;
while m>0 do
begin
s += m mod 10;
m := m div 10;
end;
Максимумы и минимумы
Задача. Найти max из введенных чисел
Решение 1. Ввод данных в цикле
var max := x;
loop n-1 do
begin
x := ReadReal;
if max < x then
max := x;
end;
Решение 2. C помощью ReadSeqReal
foreach var x in ReadSeqReal(n) do
if x > max then
max := x;
Задача. Найти минимальный элемент x, удовлетворяющий условию p(x)
Решение 1. Ввод данных в цикле
loop n do
begin
var x := ReadReal;
if (x < min) and p(x) then
min := x;
end;
if min = real.MaxValue then
Println(‘Нет элемента, удовлетворяющего условию’);
Суммирование рядов
Задача. Вычислить $$sumlimits_{i=0}^n frac{a^i}{i!}$$
Решение.
var x := a;
var s := x;
for var i := 2 to n do
begin
x *= a / i;
s += x;
end;
Предел последовательности
Задача. Вычислить $$limlimits_{n to infty} a_{n} = sqrt{x}$$
Для решения используется следующая рекуррентная последовательность:
$$a_1=x, a_{i+1}=frac{1}{2}left(a_n+frac{x}{a_n}right)$$
Решение 1.
var x := ReadReal;
var eps := 1e-10;
var a := x;
var b := real.MaxValue;
while Abs(b – a) >= eps do
begin
b := a;
a := (a + x/a) / 2;
end;
Print(a,Sqrt(x));
Решение 2. С помощью множественного присваивания
while Abs(b – a) >= eps do
(b,a) := (a, (a + x / a) / 2);
Поиск значения
Задача. Есть ли среди введенных число k?
Решение 1. Неэффективное – без break
loop n do
begin
var x := ReadInteger;
if x = k then
Exists := True;
end;
Решение 2. Эффективное – с break
loop n do
begin
var x := ReadInteger;
if x = k then
begin
Exists := True;
break;
end;
end;
Решение 3. С использованием while
var i := 1;
while (i<=n) and not Exists do
begin
var x := ReadInteger;
i += 1;
if x = k then
Exists := True;
end;
Определение простоты числа
Задача. Является ли число n>1 простым?
for var i:=2 to Round(Sqrt(n)) do
if n mod i = 0 then
begin
IsPrime := False;
break;
end;
Разложение числа на простые множители
Решение.
var i := 2;
repeat
if x mod i = 0 then
begin
Print(i);
x := x div i;
end
else i += 1;
until x = 1;
Корень функции на отрезке
Задача. Дана непрерывная на $$[a,b]$$ функция $$f(x)$$, $$f(a) cdot f(b) < 0$$, имеющая на $$(a,b)$$ ровно один корень. Найти его методом половинного деления
Решение.
var (fa,fb) := (f(a), f(b));
Assert(fa*fb < 0);
while (b-a) > eps do
begin
var x := (b + a)/2;
var fx := f(x);
if fx = 0 then
break;
if fa*fx < 0 then
b := x
else (a,fa) := (x,fx);
end;
Println((b + a)/2);
Источник