Задачи на циклы for pascal abc

Задачи на циклы for pascal abc thumbnail

for1-15

Приветствуем читателей нашего сайта! Сегодня мы с вами решим for1-15 из вот этого задачника.

For1. Даны целые числа K и N (N > 0). Вывести N раз число K.

Организовываем простой цикл от 1 до требуемого числа.

program for1;

var
K, N, i: integer;

begin
read(K, N);
for i := 1 to N do write(K, ‘ ‘); {Пишем К через пробел }
end.

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

Так как A < B, то цикл должен будет выводить все числа от А до B. Чтобы сосчитать количество чисел, используем формулу: <конечное_значение> — <начальное_значение> + 1.

program for2;

var
A, B, i, count: integer;

begin
read(A, B);
for i := A to B do write(i, ‘ ‘); {выписываем числа от меньшего к большему}
count := B – A + 1; {считаем количество чисел}
writeln;
write( ‘Количество чисел – ‘, count);
end.

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

Задача решается аналогично предыдущей. Только на этот раз используем  downto, так как числа будут двигаться сверху вниз. Чтобы исключить А и В из списка выводимых чисел, от В отнимаем 1, а к А наоборот прибавляем.

program for3;

var
A, B, i, count: integer;

begin
read(A, B);
for i := B – 1 downto A + 1 do write(i, ‘ ‘); {выписываем числа от большего к меньшему}
count := (B – 1) – (A + 1) + 1; {считаем количество чисел}
writeln;
write( ‘Количество чисел – ‘, count);
end.

For4. Дано вещественное число — цена 1 кг конфет. Вывести стоимость 1, 2, …, 10 кг конфет.
Каждую итерацию цикла выводим цену, умноженную на i.

program for4;

var
i: integer;
price_one: real;

begin
read(price_one);
for i := 1 to 10 do writeln(i, ‘ кг. стоит – ‘, price_one * i, ‘ ‘);
end.

For5°. Дано вещественное число — цена 1 кг конфет. Вывести стоимость 0.1, 0.2, …, 1 кг конфет.

Такая же программа, как предыдущая, только теперь умножаем на  i / 10.

program for5;

var
i: integer;
price_one: real;

begin
read(price_one);
for i := 1 to 10 do writeln(i / 10, ‘ кг. стоит – ‘, price_one * (i / 10), ‘ ‘);
end.

For6.Дано вещественное число — цена 1 кг конфет. Вывести стоимость 1.2, 1.4, …, 2 кг конфет.

program for6;

var
i: integer;
price_one: real;

begin
read(price_one);
for i := 1 to 5 do writeln(1 + i / 5, ‘ кг. стоит – ‘, price_one + price_one * (i / 5), ‘ ‘);
end.

For7. Даны два целых числа A и B (A < B). Найти сумму всех целых чисел от A до B включительно.

Организовываем цикл и складываем все числа.

program for7;

var
A, B, i, S: integer;

begin
read(A, B);
S := 0;
for i := A to B do S := S + i;
write( ‘Сумма – ‘, S);
end.

For8. Даны два целых числа A и B (A < B). Найти произведение всех целых чисел от A до B включительно.

Создаем цикл и умножаем все числа.

program for8;

var
A, B, i, P: integer;

begin
read(A, B);
P := 1;
for i := A to B do P := P * i;
write( ‘Произведение – ‘, P);
end.

For9. Даны два целых числа A и B (A < B). Найти сумму квадратов всех целых чисел от A до B включительно.

Организовываем такой же цикл, как и в предыдущей задаче, но одновременно суммируем квадраты всех чисел. Чтобы высчитать квадрат, используем функцию Sqr.

program for9;

var
A, B, i, S: integer;

begin
read(A, B);
S := 0; {PascalABC делает это автоматически, но если у вас другой компилятор советуем обнулять переменные вручную}
for i := A to B do S := S + Sqr(i); {складываем все квадраты}
writeln;
write( ‘Сумма квадратов – ‘, S);
end.

For10. Дано целое число N (> 0). Найти сумму 1 + 1/2 + 1/3 + … + 1/N (вещественное число).

program for10;

var
N, i: integer;
S : real;

begin
read(N);
S := 0;
for i := 1 to N do S := S + 1 / i;
write( ‘Сумма – ‘, S:1:2);
end.

For11.Дано целое число N (> 0). Найти сумму N2 + (N + 1)2 + (N + 2)2 + … + (2·N)2 (целое число).

program for11;

var
N, i: integer;
S : integer;

begin
read(N);
S := 0;
for i := N to 2 * N do S := S + Sqr(i);
write( ‘Сумма – ‘, S);
end.

For12°.Дано целое число N (> 0). Найти произведение 1.1 · 1.2 · 1.3 · …(N сомножителей).

program for12;

var
N, i: integer;
P: real;

begin
read(N);
P := 1;
for i := 1 to N do P := P * (1 + i / 10 );
write( ‘Произведение – ‘, P:1:2);
end.

For13°. Дано целое число N (> 0). Найти значение выражения 1.1 – 1.2 + 1.3 – … (N слагаемых, знаки чередуются). Условный оператор не использовать.

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

program for13;

var
N, A, i: integer;
S: real;

begin
Write(‘N = ‘);
readln(N);
S := 1.1;
A := 1; {Сначала положительное}
for i := 2 to N do {первую итерацию цикла мы уже произвели, поэтому начинаем отсчет с 2}
begin
A := -A; {Теперь отрицательное}
S := S + A * (1 + i / 10); {Складываем}
end;
Writeln(S:5:1); {Отдадим под дробную часть одно знакоместо}
end.

For14. Дано целое число N (> 0). Найти квадрат данного числа, используя для его вычисления следующую формулу:
N2 = 1 + 3 + 5 + … + (2·N – 1).
После добавления к сумме каждого слагаемого выводить текущее значение суммы (в результате будут выведены квадраты всех целых чисел от 1 до N).

program for14;

var
i, N: integer;
Pow: real;

begin
write(‘N = ‘);
read(N);
Pow := 0;
for i := 1 to N do
begin
Pow := Pow + (2 * i – 1);
writeln(Pow);
end;
end.

For15°. Дано вещественное число A и целое число N (> 0). Найти A в степени N: AN = A·A· … ·A (числа A перемножаются N раз).

program for15;

var
i, N: integer;
A, Pow: real;

begin
write(‘A = ‘);
read(A);
write(‘N = ‘);
read(N);
Pow := 1;
for i := 1 to N do Pow := Pow * A;
write(Pow:1:2);
end.

На сегодня все! Не забывайте кликать по кнопочкам и подписываться на обновления нашего сайта!

Источник

Решенные задачи Pascal: операторы цикла

Pascal операторы цикла — Repeat

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

Проверить:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var
a,b,temp,c:integer;
flag: boolean;
begin
writeln(‘A=’);
readln(a);
writeln(‘B=’);
readln(b);
temp:=a;
repeat
temp:=temp-b;
inc(c);
until temp-b>=0;
writeln(‘result: ‘,c);
end.

Pascal операторы цикла — While

While 1: Определите значение переменной P после выполнения следующего фрагмента программы:

1
2
3
4
5
P:=1; i:=3;
while i <= 9 do begin
P := P * (i div 3);
i := i + 1;
end;

Варианты:
1) 1
2) 3
3) 9
4) 24

Проверить:

While 2: Определите значение переменной S после выполнения следующего фрагмента программы:

1
2
3
4
5
S:=0; i:=7;
while i > 1 do begin
S := S + i div 2;
i := i – 1;
end;

Варианты:
1) S = 0
2) S = 7
3) S = 12
4) S = 24

Проверить:

While 3: Даны целые положительные числа N и K. Используя только операции сложения и вычитания, найти частное от деления нацело N на K, а также остаток от этого деления.

Решение данного задания смотрите в видео уроке по Паскалю:

While 4: Дано целое число N (> 0). С помощью операций деления нацело и взятия остатка от деления определить, имеется ли в записи числа N цифра «2». Если имеется, то вывести TRUE, если нет — вывести FALSE.

Проверить:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
number:integer;
flag: boolean;
begin
writeln(‘введите целое число (number>0) number=’);
readln(number);
flag:=false;
while (number div 10)>0 do
begin
if (number mod 10) = 2 then flag:=true;
number:=number div 10;
end;
writeln(flag);
end.
Читайте также:  Эдмонд гамильтон цикл звездный волк

While 5:
Дано целое число N (>1). Найти наибольшее целое число K, при котором выполняется неравенство 3K<N

* Из задачника М. Э. Абрамян (While10)

Предлагаем посмотреть разбор задачи на видео:

While 6:
Дано число A (>1). Вывести наибольшее из целых чисел K, для которых сумма 1+1/2+…+1/K будет меньше A, и саму эту сумму

* Из задачника М. Э. Абрамян (While14)

Проверить:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var
Temp:Real;
A,K :Integer;
begin
Write(‘Введите A: ‘);
Readln(A);
K:=0;
Temp:=0;
while Temp<=A do
begin
inc(K,1);
Temp:=Temp+1/K;
end;
Writeln(K-1,’ ‘,Temp-1/K);
end.

While 7:
Дано целое число K и набор ненулевых целых чисел; признак его завершения — число . Вывести количество чисел в наборе, меньших K

* Из задачника М. Э. Абрамян (Series14)

Проверить:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
i,R,K:Longint;
begin
write(‘Введите K : ‘);
readln(K);
R:=1;
i:=0;
while(R<>0) do
begin
write(‘Введите число из набора: ‘);
Readln(R);
if R<K then i:=i+1;
end;
i:=i-1;
Writeln(i);
readln;
end.

While 8:
Спортсмен-лыжник начал тренировки, пробежав в первый день 10 км. Каждый следующий день он увеличивал длину пробега на P процентов от пробега предыдущего дня (P — вещественное, 0<P<50). По данному P определить, после какого дня суммарный пробег лыжника за все дни превысит 200 км, и вывести найденное количество дней K (целое) и суммарный пробег S (вещественное число).

* Из задачника М. Э. Абрамян (While16)

Проверить:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
P, S, D:Real;
K :Integer;
begin
Write(‘Введите процент: ‘);
Readln(P);
K:=1;
D:=10;
S:=10;
while S<=200 do
begin
inc(K,1);
D:=D+D*P/100;
S:=S+D;
end;
Writeln(K,’ ‘,S);
end.

Pascal операторы цикла — For

For 1: Дано вещественное число — цена 1 кг конфет. Вывести стоимость 0.1, 0.2, …, 1 кг конфет.

* Из задачника М. Э. Абрамян

Проверить:

1
2
3
4
5
6
7
8
9
10
11
12
var c,m:real;
i:integer;
begin
writeln(‘Цена?’);
readln(c);
m:=0.1;
for i := 1 to 10 do
begin
writeln(‘ price of ‘,m, ‘ kg = ‘,c*m);
m:=m+0.1;
end;
end.

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

* Из задачника М. Э. Абрамян

Проверить:

1
2
3
4
5
6
7
8
9
10
11
var a, b, i: integer;
begin
writeln(‘A:’);
readln(a);
writeln(‘B:’);
readln(b);
for i:= b-1 downto a+1 do
write(i:3 );
writeln;
writeln(‘kolvo: ‘,b-a-1);
end.

For 3:
Дано целое число N>0. Найти сумму

* Из задачника М. Э. Абрамян (For11)

Проверить:

1
2
3
4
5
6
7
8
9
var
N, Rez,i :Integer;
begin
Write(‘Введите N: ‘);
Readln(N);
rez:=0;
For i:=0 to N do Rez:=Rez+sqr(N+i);
Writeln(Rez);
end.

Сейчас предлагаем решить сложную олимпиадную задачу на Паскале:

Пять делителей: Найти сумму всех чисел от 1 до заданного n, имеющих ровно пять делителей. Единица и само число входят в число его делителей

Проверить:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var c,n,s,k,i:integer;
begin
c:=0;
s:=0;
readln(n);
for i:=2 to n do
begin
k:=i;
while k>0 do begin
if i mod k = 0 then
c:=c+1;
k:=k-1;
end;
if c= 5 then s:=s+i;
c:=0;
end;
writeln(s);
end.

Источник

Простейшие алгоритмы

№1. Сумма вводимых целых чисел

begin
var n := ReadInteger(‘Введите число слагаемых:’);
 
var s := 0.0;
for var i:=1 to n do
begin
var x := ReadReal($’Введите слагаемое №{i}:’);
s += x;
end;
 
Println($’Сумма равна {s}’);
end.

В алгоритме используются интерполированные строки вида $’Сумма равна {s}’.
Они начинаются с $. Выражение в фигурных скобках, расположенное в такой строке, заменяется на его значение.

№2. Произведение целых чисел

begin
var n := ReadInteger(‘Введите число множителей: ‘);
 
var p := 1.0;
for var i:=1 to n do
begin
var x := ReadReal(‘Введите множитель: ‘);
p *= x;
end;
 
Println($’Произведение равно {p}’);
end.

№3. Двойной факториал n!!=n*(n-2)*(n-4)*…*2 (или 1)

begin
var x := ReadInteger(‘Введите x: ‘);
 
var p := 1;
while x>=2 do
begin
p *= x;
x -= 2;
end;
 
Println($’Двойной факториал равен {p}’);
end.

№4. Сколько нечетных среди n введенных

begin
var n := ReadInteger(‘Введите n: ‘);
 
var c := 0;
for var i:=1 to n do
begin
var x := ReadInteger(‘Введите целое число: ‘);
if x mod 2 <> 0 then
c += 1;
end;
 
println($’Количество нечетных равно {c}’);
end.

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

begin
var x: real;
repeat
x := ReadReal(‘Введите x>0: ‘);
if x<=0 then
Println(‘Неверный ввод’);
until x>0;
end.

№6. Табулирование функции f(x) на отрезке в точках, разбивающих отрезок на N частей

Дан отрезок [a,b]

function f(x: real) := sin(x)*x;
 
begin
var N := ReadInteger(‘Введите N: ‘);
Assert(N>0);
var (a,b) := ReadReal2(‘Введите a и b: ‘);
 
var h := (b-a)/N;
var x := a;
loop N+1 do
begin
Writeln(x:5:2,f(x):10:4);
x += h;
end;
end.

№6a. Решение, использующее while. Погрешность округления и вычислительная погрешность

function f(x: real): real:= sin(x)*x;
 
begin
var N:=ReadInteger(‘Введите N: ‘);
Assert(N>0);
var (a,b):=ReadReal2(‘Введите a и b: ‘);
 
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.

Рекуррентные соотношения

№7. Вывод 10 первых степеней двойки

begin
var x := 2;
for var i := 1 to 10 do
begin
writeln(i:2,x:5);
x *= 2;
end;
end.

№8. Вывод всех двухзначных чисел, кратных 5

begin
var x := 10;
while x < 100 do
begin
writeln(x:3);
x += 5;
end;
end.

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

begin
var n := ReadInteger(‘Введите целое число n (n > 1): ‘);
Assert(n>1);
var (a,b) := (1,1);
Print(a,b);
loop n-2 do
begin
(a,b):=(b,a+b);
Print(b);
end;
end.

В алгоритме используются кортежи. В момент переприсваивания в цикле создаются буферные переменные, что позволяет нам избежать их объявления вручную.

№10. Найти НОД(A,B), используя алгоритм Евклида:

НОД(A,B) = НОД(B,A mod B); НОД(A,0) = A

begin
var (a,b):=ReadInteger2(‘Введите целые числа A и B: ‘);
while b<>0 do
(A,B):=(B,A mod B);
println($’НОД(A,B) = {A}’);
end.

№11. Найти сумму цифр целого числа m

begin
var m := ReadInteger(‘Введите целое число m: ‘);
 
var (s,m1) := (0,abs(m));
while m1 > 0 do
begin
s += m1 mod 10;
m1 := m1 div 10;
end;
 
println($’Сумма цифр числа {m} равна {s}’);
end.

Для работы с отрицательными числами в алгоритме используется стандартная функция abs(x) возвращающая модуль от x.

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

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

begin
var n := ReadInteger(‘Введите целое число n (n>0): ‘);
assert(n>0);
 
var x := ReadReal(‘Введите 1 число: ‘);
var max := x;
for var i := 2 to n do
begin
x := ReadReal($’Введите {i} число: ‘);
if max < x then
max := x;
end;
 
Println($’Максимальное из введенных чисел: {max}’);
end.

№12a. Найти min, удовлетворяющее условию p(x)

// Условие взятое как пример (Если число положительное, то условие p(x) возвращает true, иначе false)
function p(x: real): boolean:=x > 0;
 
begin
var n := ReadInteger(‘Введите целое число n (n>0): ‘);
assert(n>0);
 
var min := real.MaxValue;
for var i := 1 to n do
begin
var x := ReadReal($’Введите {i} число: ‘);
if (x < min) and p(x) then
min := x;
end;
 
if min = real.MaxValue then
println(‘Нет чисел, удовлетворяющих условию’)
else println($’Минимальное из введенных чисел, удовлетворяющее условию: {min}’);
end.

Суммирование рядов (конечных и бесконечных)

№13. Вычислить Σ(i=1..n) a^i/i!

begin
var a:=ReadReal(‘Введите a: ‘);
var n:=ReadInteger(‘Введите n (n>0): ‘);
assert(n>0);
var x := a;
var s := x;
for var i := 2 to n do
begin
x *= a / i;
s += x;
end;
Println($’Сумма = {s}’);
end.

№13a. Вычислить Σ(i=1..∞) (-1)^i * a^i/i!

begin
var a:=ReadReal(‘Введите a (0 < a < 1): ‘);
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;
 
Println($’Сумма = {s}’);
end.

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

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

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

№15. Является ли число N>1 простым?

begin
write(‘Введите целое число N (N>1): ‘);
var N := ReadInteger;
assert(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;
 
if IsPrime then
writeln(‘Число ‘, N, ‘ является простым’)
else writeln(‘Число ‘, N, ‘ является составным’);
end.

Другие алгоритмы

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

begin
var x := ReadInteger(‘Введите целое число x (x>1): ‘);
assert(x>1);
 
var i := 2;
write(x, ‘ = 1’);
repeat
if x mod i = 0 then
begin
Print(‘*’, i);
x := x div i;
end
else i += 1;
until x = 1;
end.

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

№18. Дана непрерывная на отрезке функция f(x), имеющая на отрезке ровно один корень. Найти его методом половинного деления

Дан отрезок [a,b] (f(a)*f(b)<=0)

Читайте также:  У кого из композиторов есть цикл из 24 пьес

// В качестве примера взяты 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.

© Буцев Виктор, Белоусько Тихон, Зуев Семен, Гончаров Владислав, Батраков Михаил, Гаджиев Казанфар, Пак Владислав

Источник

Переменной factorial сначала присваивается значение 1.
0! = 1 и 1! = 1.

Если вы ввели число больше единицы, то выполняется цикл, в теле которого на каждой итерации значение переменной factorial умножается на следующее натуральное число (переменную i).             

Задача №2
Найти сумму n-го количества элементов ряда 1, -0.5, 0.25, -0.125, …

1.Откройте программу Free Pascal,Turbo Pascal и т.д. Создайте новый документ.
Сохраните под именем summa.pas

2. Сумма ряда,как вы заметили уменьшается на -1/2.

Переменной а сначала присваивается значение 1.

Переменной sum (сумма) присваиваем значение ноль.

for i:=1 to n do4.После записи цикла, мы в перемееную sum вносим переменную a, и потом переменную a будем делить на -1/2
и опять вносить в sum.

Задача №3
Составить программу, позволяющую напечатать квадраты натуральных чисел от 1 до n.

1.Откройте программу Free Pascal,Turbo Pascal и т.д. Создайте новый документ.Сохраните под именем kvadrat.pas
2. Квадрат числа- возведение натуральных чисел от 1 до n включительно во 2-ю степень.

Например, квадрат числа 7 выглядит так:
7^2=49

3. Алгоритм решения задачи: 

Переменной k сначала присваивается значение 1.
i это число, которое будет возводиться в квадрат, а s это квадрат числа.

                                                       for i := 1 to n do

Задача №4
Составить программу, позволяющую напечатать кубы натуральных чисел от 1 до n.

1.Откройте программу Free Pascal,Turbo Pascal и т.д. Создайте новый документ.Сохраните под именем kub.pas
2. Куб числа- возведение натуральных чисел от 1 до n включительно во 3-ю степень.

Например, куб числа 5 выглядит так:
5^3=125

3.Переменные i и j нужны в качестве переменных первого – внешнего и второго – внутреннего циклов. Переменная k для нечетных чисел (k:=1), а s для суммы чисел. 

Тип этих переменных целый, но longint, так как могут быть достаточно большие целые числа, большие 32767.

4. Алгоритм решения задачи: 

                                                       for i := 1 to n do

                                                       …………………….

                                                       for j := 1 to i do

Задача №5

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

1.Откройте программу Free Pascal,Turbo Pascal и т.д. Создайте новый документ.Сохраните под именем desytzap.pas
2. Составить программу, где все четырехзначные числа состоят из разных цифр.

Например: 1023;1320,2130 и т.д.

3.Организовать цикл по числу тысяч, t от 1 до 9, а затем внутренние циклы: по числу сотен, s от 0 до 9; по числу десятков, d от 0 до 9; по числу единиц, e от 0 до 9; проверка условия: если цифры различны, тогда составленное из них четырехзначное число  выдавать на экран. 

4. Алгоритм решения задачи: 

                                                                       for t := 1 to 9 do 

                                                                       for s := 0 to 9 do 

                                                                       for d := 0 to 9 do                                                                   

                                                                       for e := 0 to 9 do 

Задача №6
Двузначное десятичное число в сумме с числом, записанным теми же цифрами, но в обратном порядке, дает полный квадрат. Найти все такие числа.

1.Откройте программу Free Pascal,Turbo Pascal и т.д. Создайте новый документ.Сохраните под именем polnkvadr.pas
2. Сумма чисел должна давать полный квадрат.

Например: 29+92=121 и sqrt(121)=11.

3. Функция round(x) округляет вещественное число x до целого.

    Извлечь квадратный корень из суммы это стандартная функция sqrt(x).

4. Алгоритм решения задачи: 

                                                                     for d := 1 to 9 do 

Читайте также:  Как правильно называть циклы

                                                                     for e := 1 to 9 do 

Источник

Циклы с предусловием (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):

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

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

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

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

Источник