Pascal. Программы 11 класс

Повторение функций mod и div

Оператор цикла while

Задача 1. (урок )
Составить программу, которая раскладывает любое целое положительное число (в рамках типа integer) на цифры разрядов, начиная с единиц и печатает в строчку.
Пример: если ввести с клавиатуры число 2345, то на экране должна появиться строчка 
5  4  3  2
Пояснение: если вводимое число будем присваивать переменной а, то удобно использовать функцию а mod 10 для отделения последней цифры числа. Затем переприсваиваем a:= a div 10 (отбрасываем последнюю цифру) и следующий разряд опять отделяем функцией а mod 10 и переприсваиваем a:= a div 10, до тех пор пока a <>0, т.е. пока в а не останется ни одной цифры.
текст программы:
var a,k:integer;
begin
writeln('целое положительное число');
readln(a);
while a<>0 do
begin
k:=a mod 10;
write(k,' ');
a:=a div 10;
end;
end.

Задача 2. (урок )
Составить программу, которая любое целое положительное число, которое вводиться с клавиатуры переводит в двоичную систему счисления (или в двоичную форму).
Пояснение: при переводе целых положительных чисел из 10-ой СС в 2-ую СС выполняются следующие действия: число делим на 2 и фиксируем остаток от деления - это "младшая" цифра получаемого двоичного числа, далее делим частное от деления на 2 и фиксируем остаток - это следующая цифра двоичного числа и т.д. пока частное не станет равно нулю.
Фиксировать остаток от деления на 2 удобно функцией  k:=a mod 2, получать частное - переприсваивать a:= a div 2Для решения задачи удобно использовать цикл "пока" while a<>0.
Остается придумать, как записать двоичное число. Выводить остатки на экран не удобно, т.к. мы получаем цифры двоичного числа в обратном порядке. Будем использовать следующий прием: полученный остаток будем последовательно умножать на p:=1,10, 100 и т.д. и накапливать сумму на каждом шаге цикла s:=s+k*p.
Пример: 14 = 1110
s:=0
p:=1
1 шаг: k:=14 mod 2=0, s:=0+0*1=0, a:=14 div 2=7, p:=1*10=10
2 шаг: k:=7 mod 2=1, s:=0+1*10=10, a:=7 div 2=3, p:=10*10=100
3 шаг: k:=3 mod 2=1, s:=10+1*100=110, a:=3 div 2=1, p:=100*10=1000
4 шаг: k:=1 mod 2=1, s:=110+1*1000=1110, a:=1 div 2=0, p:=1000*10=10000
a=0 выход из цикла
результат 1110

текст программы
var a,k,s,p:integer;
begin
s:=0;
p:=1;
writeln('целое положительное число');
readln(a);
while a<>0 do
begin
k:=a mod 2;
s:=s+k*p;
a:=a div 2;
p:=p*10;
end;
writeln('двоичная форма ',s);
end.

Замечание: данная программа может быть использование для перевода чисел в любую другую систему счисления с основанием не больше 10.

Задача 3. (урок )
Составить программу, которая заращивает с клавиатуры целые числа, до тех пор пока с клавиатуры не будет введен 0.
Пояснение: в качестве оператора цикла будем использовать оператор while с условием x<>0, но в этом случае первое число нужно вводить до цикла иначе по умолчанию х=0 и сразу осуществляется выход из цикла.
текст программы 
var x:integer;
begin
writeln('введите целое число');
readln(x);
while x<>0 do
begin
writeln('введите целое число');
readln(x);
end;
end.

Задача 4. (урок )
Составить программу, которая заращивает с клавиатуры десять натуральных чисел и подсчитывает среди них сумму однозначных кратных 3.
Пояснение: проверка что число однозначное - a div 10=0, кратности 3 - a mod 3=0.

текст программы с оператором for
var a,s,i:integer;
begin
s:=0;
for i:=1 to 10 do
begin
writeln('введите натуральное число');
readln(a);
if (a div 10=0) and (a mod 3=0) then s:=s+a;
end;
writeln('сумма - ',s);
end.

текст программы с оператором while
var a,s,i:integer;
begin
s:=0;
i:=1;
while i<=10 do
begin
writeln('введите натуральное число');
readln(a);
if (a div 10=0) and (a mod 3=0) then s:=s+a;
i:=i+1;
end;
writeln('сумма - ',s);
end.

Задача 5. (урок )
Составить программу, которая вычисляет сумму цифр натурального числа, вводимого с клавиатуры.
Пояснение: отделять цифру от числа будем также как в задаче 1 (присваиваем переменной k), сумму считаем через формулу s:=s+k (начальное значение s:=0)
текст программы:

var a,k,s:integer;
begin
s:=0;
writeln('введите натуральное число');
readln(a);
while a<>0 do
begin
k:=a mod 10;
s:=s+k;
a:=a div 10;
end;
writeln('сумма цифр - ',s)
end.

Замечание: данную программу можно использовать для подсчета произведения цифр натурального числа изменив начальное значение накопителя p:=1, формула p:=p*k

Задача 6. (урок )
Составить программу, которая вычисляет количество четных цифр натурального числа, вводимого с клавиатуры.
текст программы:
var a,k,z:integer;
begin
z:=0;
writeln('введите натуральное число');
readln(a);
while a<>0 do
begin
k:=a mod 10;
if k mod 2=0 then z:=z+1;
a:=a div 10;
end;
writeln('количество четных цифр - ',z)
end.


Задача 7. (урок )
Составить программу, которая вычисляет факториал натурального числа, вводимого с клавиатуры.
текст программы:
var a,f,i:integer;
begin
f:=1;
writeln('введите натуральное число');
readln(a);
for i:=1 to n do f:=f*i;
writeln('Факториал ',n,'!','=',f)
end.

Задача 8. (урок )
Составить программу, которая запрашивает натуральное число n с клавиатуры и выводит на экран n первых чисел Фибоначчи.
Числа Фибоначчи это числовая последовательность, где первое и второе число равны 1, следующие получаются сложением двух предыдущих чисел:
1, 1, 2(1+1), 3(2+1), 5(3+2), 8(5+3), 13, 21, 34 и т.д.
Пояснение: вводим переменные: n - натуральное число, i - переменная цикла, a и b - для хранения значений двух соседних чисел Фибоначчи. 
Числа будем выводить в цикле for: один шаг цикла - одно число в последовательности. 
Таким образом нам нужно, чтобы в цикле формировалось следующее число и хранилось предыдущее. Пусть первое (следующее) число будет a и перед циклом a:=1 и в цикле сначала печатаем это число, а потом считаем по формуле a:=a+b для следующего шага цикла.
Предыдущее число b и его нужно будет считать по формуле b:=a-b (следующее - предыдущее) и поэтому перед циклом b:=0.
текст программы:
var n,i,a,b:integer;
begin
writeln('Введите натуральное число');
readln(n);
a:=1;
b:=0;
writeln('Вывод ',n,' первых чисел Фибоначчи');
for i:=1 to n do
begin
write(a,' ');
a:=a+b;
b:=a-b;
end;
end.

Процедуры и функции в Паскале

Задача 9. (урок )
Процедура, которая меняет местами значения двух переменных.
Пояснение: обычно, чтобы поменять местами значения двух переменных, нужна третья переменная, в которой будет храниться значение первой переменной, когда ей присваивается значение второй.
текст программы
var x,y:integer;
procedure chan(var a,b:integer);
var c:integer;
begin
c:=a;a:=b;b:=c;
end;
begin
readln(x,y);
writeln(x,' ',y);
chan(x,y);
writeln(x,' ',y);
end.

Задача 10. (урок )
Процедура, которая для вводимого с клавиатуры целого числа значения возраста выводит на экран это число с соответствующим наименованием:
Например: 21 год, 23 года, 27 лет   Пояснение: Рассмотрим, в каких случаях будет наименование "год", "года", "лет".
Если возраст оканчивается на 1 - то будет год, если на 2,3,4  - "года", в остальных случаях - "лет". Будем расписывать условия через функцию mod и вложенный if.
текст программы
var x:integer;
procedure god(a:integer);
begin
if a mod 10=1 then writeln(a,' год')
else 
if (a mod 10=2)or(a mod 10=3)or(a mod 10=4)then writeln(a,' года')
else writeln(a,' лет');
end;
begin
readln(x);
god(x);
end.

Задача 10. (урок )
Функция, которая определяет наибольшее число из трех, вводимых с клавиатуры.
текст программы
var x,y,z:real;
function max3(a,b,c:real):real;
var m:real;
begin
if a>b then m:=a else m:=b;
if m<c then m:=c;
max3:=m;
end;
begin
readln(x);
readln(y);
readln(z);
writeln(max3(x,y,z));
end.