- •Примеры решения задач с помощью языка программирования “Паскаль”.
- •Пользуясь блок-схемой составим программу
- •Далее процесс повторяем:
- •Программа
- •Программа
- •Алгоритм
- •3. Закончить программу.
- •Составим программу
- •Программа
- •Программа
- •Программа
- •Для этого в Паскале есть стандартные функции round(X) и trunc(X)
- •Программа
- •Программа
- •Программа
- •Программа
- •Программа
Пользуясь блок-схемой составим программу
Program Problem4;
var
a1, b1, a2, b2 : real;
begin
write('Введите длину и ширину первого прямоугольника ');
readln(a1, b1);
write('Введите длину и ширину второго прямоугольника ');
readln(a2, b2);
if ((a1 < a2) and (b1 < b2)) or ((b1 < a2) and (a1 < b2))
then writeln('Первый прямоугольник размещается во втором')
else writeln('Первый прямоугольник не размещается во втором')
end.
Пример 5. Определить и вывести на экран цифры целого числа n.
Разберем математику этого вопроса на частном примере.
Найдем цифры числа 4538. Для этого надо найти остаток от деления 4538 на 10 с помощью операции нахождения остатка от деления целых чисел (mod):
4538 mod 10 = 8, получим последнюю цифру числа (она же является первой справа).
Выдаем сообщение: "1 - я цифра справа равна 8".
После этого выполним целочисленное деление заданного числа 4538 на 10, получим 453 (остаток отбрасывается):
4538 div 10 = 453.
Далее процесс повторяем:
2 - й раз; 453 mod 10 = 3
2 - я цифра справа равна 3,
453 div 10 = 45,
3 - й раз; 45 mod 10 = 5,
3 - я цифра справа равна 5,
45 div 10 = 4,
4 - й раз; 4 mod 10 = 4,
4 - я цифра справа равна 4,
4 div 10 = 0.
Обратите внимание! Процесс будет продолжаться пока число n не равно нулю. Как только оно станет равно нулю цикл заканчивается.
В программе еще надо указывать какая по счету цифра в числе справа. Для этого надо завести еще одну переменную в качестве счетчика. Эта переменная каждый цикл должна увеличиваться на 1.
Программа
Program Problem1; {Опред. и вывод на экран цифр числа.}
var
n, p, i : integer;
begin
write('Введите натуральное число n <= 32767 '); readln(n);
i := 1;
while n <> 0 do
begin
p := n mod 10;
writeln(i, ' - я цифра справа равна ', p);
n := n div 10;
i := i + 1
end
end.
Пример 6. Составить программу перестановки первой и последней цифр введенного натурального числа.
Математику этого вопроса разберем на частном примере.
Пусть пользователем введено число 4538. После перестановки первой и последней цифр число станет таким: 8534.
Определить последнюю цифру числа нетрудно. Это можно сделать уже известным нам способом: 4538 mod 10.
Чтобы найти и отделить первую цифру числа, надо использовать прием, который применялся в предыдущих программах для вывода цифр числа и для подсчета суммы цифр, т. е. отделять по одной цифре справа. Но, если в предыдущих программах такой процесс продолжался до тех пор пока n <> 0 (n не равнялось нулю), а когда n становилось равным нулю, то цикл заканчивался т. е. все цифры, включая первую, отделялись, то теперь надо этот процесс остановить на одну цифру раньше и тогда последним значением переменной n будет первая цифра числа.
В нашем примере она равна 4.
Итак, первая и последняя цифры найдены. Как переставить их в числе.
Для введенного нами числа это можно сделать так. Вычесть из него первую цифру, умноженную на 1000 и вычесть последнюю цифру:
4538
- 4
1000
- 8 = 530.
К
полученному результату прибавить
последнюю цифру - 8, умноженную на 1000 и
прибавить первую цифру: 530 + 8
1000
+ 4 = 8534.
Две последние операции можно записать в одной строке:
4538
- 4
1000
- 8 + 8
1000
+ 4 = 8534.
Возникает одна трудность. Как определить разряд, в котором находится первая цифра числа (первая слева) и на сколько надо умножить ее при вычитании? Тысячи ли это, десятки тысяч или другой разряд?
Для того, чтобы это выяснять заведем переменную, первоначальное значение которой 1, а затем, каждый раз при отделении цифры она умножается на 10.
Посмотрим весь процесс на примере того же числа 4538.
Первоначальные значения: n = 4538, i = 1.
Цикл
продолжается пока n
10, 4538
10 - истина, значит операторы цикла
выполняются первый раз: i := i*10 = 1*10 = 10; -
переменная i получает первое значение,
n := 4538 div 10 = 453.
Проверка
условия: 453
10 - условие выполняется, значит цикл
выполняется второй раз: i := i*10 = 10*10 = 100;
n := 453 div 10 = 45.
Проверка
условия: 45
10 - истина, значит цикл выполняется
третий раз:
i := i*10 = 100*10 = 1000, n := 45 div = 4.
Проверка условия: 4>=10 - ложь, значит операторы цикла не выполняются. Цикл заканчивается.
Конечные значения переменных: n = 4 - первая цифра числа, i = 1000. Теперь остается выполнить сам процесс перестановки цифр и выдать результат на экран.
Программа
Program Problem2; { Перест. первой и последней цифр числа }
var
n, n1, p, a, i : integer;
begin
write('Введите натуральное число n '); readln(n);
a := n; i := 1;
p := n mod 10; {последняя цифра введенного числа}
while n >= 10 do
begin
i := i*10;
n := n div 10;
end;
n1 := a - n*i - p + n + p*i;
writeln('Число после перестановки цифр ', n1);
end.
Пример 7. Составить программу разложения натурального числа n на простые множители.
Прежде вспомним, что к простым числам относятся все те натуральные числа, которые имеют только два делителя - единицу и само себя.
Натуральные числа, имеющие более двух делителей называются составными.
Единица имеет только один делитель - само себя и поэтому она не может относится ни к простым, ни к составным числам. Если выписать простые числа в порядке их возрастания, начиная от самого меньшего - 2, то получим следующий ряд чисел:
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, ...
А теперь вспомним, как в младших классах мы раскладывали натуральные числа на простые множители.
Для этого берем первое простое число - 2 и пробуем делить данное натуральное число на 2, если число делится на 2, тогда надо 2 записать, а число разделить на 2 и снова полученный результат пробуем делить на два, если делится, тогда повторяем процесс деления, если не делится, тогда пробовать делить на следующее простое число - 3 и так далее.
Обычно такой процесс мы записывали "столбиком":
Например: или
Таким
образом, число 360 можно разложить на
следующие простые множители: 360 =
2
2
2
3
3
5.
Самый простой алгоритм для составления программы может быть таким.
В качестве первого делителя взять 2, присвоить это значение некоторой переменной i;
начать цикл "пока i <= n";
если данное число n делится на i, тогда выдать на экран значение i и разделив данное число на i, присвоить новое значение той же переменной n (n := n div i);
далее цикл продолжить, но значение i не увеличивать на 1, а проверить деление нового значения n на прежнее значение i;
если n не делится на i, тогда i увеличить на 1 (i := i + 1) и продолжить цикл, т.е. выполнить проверку условия цикла (i <= n), а затем снова проверить деление n на уже новое значение i.
Обратите внимание, что при таком алгоритме в качестве делителей уже не попадут составные числа. Объясните почему?
