Pascal abc примеры цикл

Вывод последовательностей 1 2 3 4 5 и 5 4 3 2 1

var i: integer;
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

var i,x: integer;
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

var
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

var
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

var
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

var n: integer;
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

var
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

var
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.

Вывод цифр числа

var x: integer;
 
begin
write(‘Введите x: ‘);
readln(x);
write(‘Цифры числа x в обратном порядке: ‘);
while x<>0 do
begin
write(x mod 10,’ ‘);
x := x div 10;
end;
end.

Вывод букв английского алфавита

var c: char;
 
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

const n = 25;
 
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

const n = 25;
 
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

const n = 10;
 
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

const n = 10;
 
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.

Алгоритм Евклида поиска НОД

begin
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

const n = 9;
 
begin
for var i:=1 to n do
begin
for var j:=1 to n do
write(i*j:4);
writeln;
end;
end.

Определение простоты числа

begin
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 существует в двух формах:

for счетчик:=значение to конечное_значение do
тело_цикла;
for счетчик:=значение downto конечное_значение do
тело_цикла;

Счетчик – это переменная любого из перечисляемых типов (целого, булевого, символьного, диапазонного, перечисления). Начальные и конечные значения могут быть представлены не только значениями, но и выражениями, возвращающими совместимые с типом счетчика типы данных. Если между начальным и конечным выражением указано служебное слово to, то на каждом шаге цикла значение параметра будет увеличиваться на единицу. Если же указано downto, то значение параметра будет уменьшаться на единицу.

Читайте также:  Цикл образования тиреоидных гормонов

Количество итераций цикла for известно именно до его выполнения, но не до выполнения всей программы. Так в примере ниже, количество выполнений цикла определяется пользователем. Значение присваивается переменной, а затем используется в заголовке цикла. Но когда оно используется, циклу уже точно известно, сколько раз надо выполниться.

var
i, n: integer;
 
begin
write (‘Количество знаков: ‘);
readln (n);
 
for i := 1 to n do
write (‘(*) ‘);
 
readln
end.

Цикл while

Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, если false – то нет.

Когда тело цикла было выполнено, то ход программы снова возвращается в заголовок цикла. Условие выполнения тела снова проверяется (находится значение логического выражения). Тело цикла выполнится столько раз, сколько раз логическое выражение вернет true. Поэтому очень важно в теле цикла предусмотреть изменение переменной, фигурирующей в заголовке цикла, таким образом, чтобы когда-нибудь обязательно наступала ситуация false. Иначе произойдет так называемое зацикливание, одна из самых неприятных ошибок в программировании.

var
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 – его повторение.

var
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 <условие> do // заголовок цикла
    <оператор> // тело цикла

    ::=

    Цикл while на блок-схеме

    Цикл с предусловием (while) в Pascal abc.net

  • Итерация — однократное повторение тела цикла.
  • В цикле while тело может не выполниться ни разу.

Пример: Вычислить сумму четных чисел от 2 до 20.

✍ Решение: 

    sum := 0;
    x := 2;
    while x <= 20 do
    begin
    sum += x;
    x += 2;
    end;

Задание: Определите наименьшее натуральное число, квадрат которого больше заданного целого числа. Стандартную функцию извлечения квадратного корня не использовать.

Пример: Даны положительные числа A и B (A ≥ B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A.

✍ Решение: 

Begin
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 предназначен для экстренного выхода из цикла. Обычно используется в условном операторе: при выполнении условия — выход из цикла.

Как работать с последовательностями чисел?

Например, в случае, когда последовательность чисел должна заканчиваться нулем, то примерный код обработки последовательности может быть таким:

begin
// …
while True do // бесконечный цикл
begin
// ввод очередного элемента последовательности
var b := ReadInteger; // или ReadReal
if b = 0 then
break; // выход из цикла при вводе элемента, равного нулю
// обработка очередного элемента последовательности
end;
// вывод результатов
end.

Задание: Дана последовательность целых чисел, признак завершения которой — число (оно не считается элементом последовательности). Вывести номера чётных чисел последовательности (числа нумеровать с 1). Если последовательность не содержит чётных элементов, выводить ничего не нужно.

Цикл с постусловием (repeat) в Pascal abc.net

    Синтаксис цикла repeat:

    repeat // заголовок цикла
    <операторы> // тело цикла
    until <условие>

    Цикл repeat на блок-схеме

    Цикл с постусловием (repeat) в Pascal abc.net

  • В цикле repeat тело выполнится хотя бы один раз.

Пример: Вычислить сумму четных чисел от 2 до 20.

✍ Решение: 

    sum := 0;
    x := 2;
    repeat
    sum += x;
    x += 2;
    until x = 22;

Оператор цикла со счетчиком (for) в Pascal abc.net

    Синтаксис цикла for:

    выглядит так:
    for := do

    выглядит так:

    выглядит так:
    to | downto

  • переменная-счетчик должна иметь порядковый тип (целый, символьный или перечислимый);
  • переменная-счетчик цикла for не должна меняться внутри цикла for;
  • Новое в Pascal abc.net:

  • описание переменной цикла в его заголовке:
  • for [var] i: integer := 1 to 5 do
    <оператор>
  • автоопределение типа при описании:
  • for var i := 1 to 5 do
    <оператор>

    Значение переменной цикла после завершения цикла будет не определено (локальная).

Пример: Даны целые числа A и B (A ). Вывести в порядке возрастания все целые числа, расположенные между A и B (не включая сами числа A и B), а также количество N этих чисел.

✍ Решение: 

    begin
    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):

✍ Решение: 

    Begin
    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):

Читайте также:  Oracle работа с курсорами в цикле

Не забудьте, что использование функции возведения в степень запрещено.

Как работать с последовательностью чисел?

Например, если необходимо как-то обработать последовательность чисел с заданным количеством элементов, то примерный код может быть таким:

begin
// предварительные действия
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

Для того, чтобы реализовать цикл с конкретным числом итераций, не используя счетчик цикла, возможен упрощенный вариант:
  

Пример:

// Выводить 5 раз слово “Привет!”
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.

✍ Решение: 

    begin
    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

✍ Решение: 

    begin
    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

✍ Решение: 

    begin
    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 набор.

Источник

Паскаль - Урок 6: Циклы while, for, repeat

Вчера мы узнали о понятии циклы в паскале в общих чертах, сегодня узнаем о каждом из циклов в паскале поподробней и увидим как они задаются. Будем разбирать цикл 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;

– логическое выражение, истинность которого проверяется вначале выполнения циклического оператора;

– любые выполняемые операторы языка.

Порядок выполнения цикла:

Пока условие истинно выполняется тело цикла. Как только условие становится ложно выполнение цикла прекращается.

Блок – схема цикла с предусловием:

Паскаль - Урок 6: Циклы while, for, repeat

Примечание: в прямоугольных блоках показано любое действие, которое выполняется в цикле или после него (шаг цикла), в овалах – начало или конец всей программы или её части. Главную роль в данной блок – схеме играет её центральная часть.

Пример:

Задача: вычислить сумму ряда 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. Ввод данных в цикле

var c := 0;
loop n do
begin
var x := ReadInteger;
if x mod 2 <> 0 then
c += 1;
end;

Решение 2. Отделение ввода данных от обработки данных

Используем ReadSeqInteger, возвращающую последовательность введенных целых.
Далее используем цикл foreach по последовательности.

var sq := ReadSeqInteger(n);
var c := 0;
foreach var x in sq do
if x mod 2 <> 0 then
c += 1;

Защита от неверного ввода

Решение 1. Используем TryRead и цикл while

var i: integer;
Print(‘Введите i (>0):’);
while not TryRead(i) or not (i>0) do
Print(‘Неверный ввод. Повторите:’);

Решение 2. Используем цикл repeat

var i: integer;
repeat
Print(‘Введите i (>0):’);
until TryRead(i) and (i>0);

Табулирование функции

Задача. Затабулировать функцию f(x) на [a,b] в точках, разбивающих [a,b] на n частей

Решение 1. С помощью loop

Assert(n>0);
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 h := (b-a)/n;
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 частей

foreach var x in PartitionPoints(a,b,n) do
Println(x,f(x));

Числа Фибоначчи

Задача. Вывести n первых чисел Фибоначчи

Решение 1. С помощью трёх переменных

var n := ReadInteger;
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 n := ReadInteger;
var (a,b) := (1,1);
Print(a,b);
loop n-2 do
begin
(a,b) := (b,a+b);
Print(b);
end;

Наибольший общий делитель

Задача. Найти НОД(a,b), используя алгоритм Евклида:

НОД(a,b) = НОД(b,a mod b);
НОД(a,0) = a

Решение 1. С помощью трёх переменных

var (a,b) := ReadInteger2;
repeat
var c := a mod b;
a := b;
b := c;
until b=0;
Print(a);

Решение 2. С помощью множественного присваивания

var (a,b) := ReadInteger2;
repeat
(a,b) := (b,a mod b);
until b=0;
Print(a);

Cумма цифр

Задача. Найти сумму цифр целого положительного числа m

Решение.

var m := ReadInteger;
var s := 0;
while m>0 do
begin
s += m mod 10;
m := m div 10;
end;

Максимумы и минимумы

Задача. Найти max из введенных чисел

Решение 1. Ввод данных в цикле

var x := ReadReal;
var max := x;
loop n-1 do
begin
x := ReadReal;
if max < x then
max := x;
end;

Решение 2. C помощью ReadSeqReal

var max := real.MinValue;
foreach var x in ReadSeqReal(n) do
if x > max then
max := x;

Задача. Найти минимальный элемент x, удовлетворяющий условию p(x)

Решение 1. Ввод данных в цикле

var min := real.MaxValue;
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!}$$

Решение.

Read(a, n);
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.

Assert(x>=0);
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. С помощью множественного присваивания

var (a,b) := (x,real.MaxValue);
while Abs(b – a) >= eps do
(b,a) := (a, (a + x / a) / 2);

Поиск значения

Задача. Есть ли среди введенных число k?

Решение 1. Неэффективное – без break

var Exists := False;
loop n do
begin
var x := ReadInteger;
if x = k then
Exists := True;
end;

Решение 2. Эффективное – с break

var Exists := False;
loop n do
begin
var x := ReadInteger;
if x = k then
begin
Exists := True;
break;
end;
end;

Решение 3. С использованием while

var Exists := False;
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 простым?

var IsPrime := True;
for var i:=2 to Round(Sqrt(n)) do
if n mod i = 0 then
begin
IsPrime := False;
break;
end;

Разложение числа на простые множители

Решение.

Assert(x>=2);
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)$$ ровно один корень. Найти его методом половинного деления

Решение.

Assert(b>a);
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);

Источник