Глава 1
ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ
§ 1. Алгоритмическая конструкция ВЕТВЛЕНИЕ
Коротко о главном:
Условный оператор if в программе используется в случаях, когда компьютеру необходимо принимать решения в зависимости от некоторого условия.
Полная форма условного оператора if в общем виде:
If then
else .
If then .
= (равно),
(больше),
= (больше либо равно),
(не равно).
and – логическое «и»;
or – логическое «или»;
not – логическое отрицание.
Упражнение 1
Составьте программу, которая задаёт вопрос: «В каком году был основан город Минск (например, в 1067г., В 993 г., либо в 1147 г.)?». В случае верного ответа программа должна сообщить «Верно», в противном случае – «Вы ошиблись».
Ответ:
Program upr1_1;
Var a: integer;
Begin
writeln ('В каком году был основан город Минск: в 1067г., В 993 г., либо в 1147 г.?');
readln (a); {ввод варианта ответа пользователя на поставленный вопрос}
if a=1067
then writeln ('Верно')
else writeln ('Неверно');
{если а=1067, то на экран выводится сообщение "Верно", в остальных случаях на экран выводится сообщение "Неверно"}
End.
Результат работы программы может выглядеть так:
В каком году был основан город Минск: в 1067г., В 993 г., либо в 1147 г.?
1067
Верно
В каком году был основан город Минск: в 1067г., В 993 г., либо в 1147 г.?
1147
Неверно
Упражнение 2
Составьте программу, которая определяет, является ли введённое целое число нечётным, и выводит на экран соответствующее сообщение: «Да» либо «Нет».
Ответ:
Program upr1_2;
Var a: integer;
Begin
writeln ('Введите целое число');
readln (a); {ввод целого числа}
if a mod 2 = 0
then writeln ('Да')
else writeln ('Нет');
{если а делится на 2 без остатка и в этом случае является чётным, то на экран выводится сообщение "Да", иначе - на экран выводится сообщение "Нет"}
End.
Результат работы программы может выглядеть так:
Введите целое число
10
Да
Введите целое число
15
Нет
Упражнение 3
Составьте программу, которая возводит в квадрат введённое целое число, если оно отрицательное, и выводит на экран результат.
Ответ:
Program upr1_3;
Var a: integer;
Begin
writeln ('Введите целое число');
readln (a); {ввод целого числа}
if a
then a:=sqr(a) ;
writeln (a);
{если а меньше нуля и в этом случае является отрицательным, то число возводится в квадрат, иначе - ничего не происходит. На экран выводится значение переменной а.}
End.
Результат работы программы может выглядеть так:
Введите целое число
5
5
Введите целое число
-3
9
Упражнение 4
Составьте программу, которая выводит на экран пример на умножение двух целых чисел, запрашивает ответ пользователя, проверяет его и выводит на экран соответствующее сообщение: «Правильно!» либо «Вы ошиблись», а так же правильный результат.
Ответ:
Program upr1_4;
Var a, b, c: integer;
Begin
writeln ('Введите два целых числа через пробел');
readln (a, b); {ввод двух целых чисел}
write ('решите пример: ', a,' * ',b,' = ');
readln (c); {ввод результата произведения двух целых чисел}
if c=a*b
then writeln ('Правильно!')
else writeln ('Вы ошиблись');
{если введённое число равно произведению введённых ранее чисел, то на экран выводится сообщение "Правильно!", иначе , на экран выводится сообщение "Вы ошиблись"}
End.
Результат работы программы может выглядеть так:
Введите два целых числа через пробел
5 6
решите пример: 5 * 6 = 30
Правильно!
Введите два целых числа через пробел
5 6
решите пример: 5 * 6 = 28
Вы ошиблись
Упражнение 5
Составьте программу, которая проверяет, является ли человек заданного возраста школьником, если возраст школьника от 6 до 17 лет, и выводит на экран соответствующее сообщение: «Является» либо «Не является».
Ответ:
Program upr1_5;
Var a: integer;
Begin
writeln ('Введите возраст человека');
readln (a); {ввод целого числа - возраста человека}
if (a=6) and (a
then writeln ('Является')
else writeln ('Не является');
{если введённое число попадает в промежуток от 6 до 17 включительно, то на экран выводится сообщение "Является", иначе - на экран выводится сообщение "Не является"}
End.
Результат работы программы может выглядеть так:
Введите возраст человека
14
Является
Введите возраст человека
18
Не является
Упражнение 6
Составьте программу, которая проверяет, равны ли 3 введённых целых числа, выводит на экран соответствующее сообщение: «Равны» либо «Не равны».
Ответ:
Program upr1_6;
Var a, b, c: integer;
Begin
writeln ('Введите 3 целых числа через пробел');
readln (a, b, c); {ввод трёх целых чисел}
if (a=b) and (b=c)
then writeln ('Равны')
else writeln ('Не равны');
{если введённые числа равны между собой, то на экран выводится сообщение "Равны", иначе - на экран выводится сообщение "Не равны"}
End.
Результат работы программы может выглядеть так:
Введите 3 целых числа через пробел
3 4 5
Не равны
Введите 3 целых числа через пробел
3 4 3
Не равны
Введите 3 целых числа через пробел
3 3 3
Равны
§ 2. Составление и реализация алгоритмов с ветвлением.
Коротко о главном:
Упражнение 1
Составьте программу, которая проверяет, делится ли на 3 введённое число, и выводит на экран соответствующее сообщение: «Делится» либо «Не делится».
Ответ:
Program upr2_1;
Var a: integer;
Begin
writeln ('Введите целое число');
readln (a); {ввод целого числа}
if a mod 3 = 0
then writeln ('Делится')
else writeln ('Не делится');
{если при делении на 3 введённого числа получаем остаток ноль, то на экран выводится сообщение "Делится", иначе , на экран выводится сообщение "Не делится"}
End.
Результат работы программы может выглядеть так:
Введите целое число
10
Не делится
Введите целое число
9
Делится
Упражнение 2
Составьте программу, которая сообщает, можно ли разделить поровну между двумя друзьями n конфет, выводя на экран соответствующее сообщение: «Да» либо «Нет». Нарисуйте блок – схему алгоритма решения этой задачи.
Ответ:
Program upr2_2;
Var n: integer;
Begin
writeln ('Сколько конфет у друзей?');
readln (n); {ввод целого числа}
if n mod 2 = 0
then writeln ('Да')
else writeln ('Нет');
{если при делении на 2 введённого числа получаем остаток ноль, то на экран выводится сообщение "Да", иначе , на экран выводится сообщение "Нет"}
End.
Результат работы программы может выглядеть так:
Сколько конфет у друзей?
5
Нет
Сколько конфет у друзей?
8
Да
Блок – схема:
Упражнение 3
Составьте программу, которая запрашивает три целых числа и, если ни одно из чисел не равно нулю, выводит на экран их среднее арифметическое. Нарисуйте блок – схему алгоритма решения этой задачи.
Ответ:
Program upr2_3;
Var a, b, c: integer;
Begin
writeln ('Введите три целых числа через пробел');
readln (a, b, c); {ввод трёх целых чисел}
if (a0) and (b0) and (c0)
then writeln ((a+b+c)/3);
{если ни одно из введённых чисел не равно нулю, то на экран выводится их среднее арифметическое}
End.
Результат работы программы может выглядеть так:
Введите три целых числа через пробел
5 2 1
2.66666666666667
Введите три целых числа через пробел
6 0 7
Блок – схема:
Упражнение 4
Составьте программу, которая определяет, принадлежит ли введённое целое число х интервалу (10,20), и выводит на экран соответствующее сообщение: «Принадлежит» либо «Не принадлежит».
Ответ:
Program upr2_4;
Var x: integer;
Begin
writeln ('Введите целое число');
readln (x); {ввод целого числа}
if (x10) and (x
then writeln ('Принадлежит')
else writeln ('Не принадлежит');
{если введённое число больше 10 и меньше 20, то на экран выводится сообщение "Принадлежит", иначе на экран выводится сообщение "Не принадлежит"}
End.
Результат работы программы может выглядеть так:
Введите целое число
17
Принадлежит
Введите целое число
21
Не принадлежит
Упражнение 5
В компьютер поступают результаты соревнований по плаванию (количество минут и секунд) для трёх спортсменов. Составьте программу, которая выводит на экран лучший результат.
Ответ:
Program upr2_5;
Var t1, t2, t3, m1, s1, m2, s2, m3, s3: integer;
Begin
writeln ('Ведите результаты соревнований первого спортсмена через пробел (мин сек)');
readln (m1,s1);
writeln ('Ведите результаты соревнований первого спортсмена через пробел (мин сек)');
readln (m2,s2);
writeln ('Ведите результаты соревнований первого спортсмена через пробел (мин сек)');
readln (m3,s3); {ввод результатов соревнований трёх спортсменов}
t1:=m1*60+s1;
t2:=m2*60+s2;
t3:=m3*60+s3; {перевод результата из вида минуты и секунды в секунды}
if (t1минут ',s1,' секунд ');
if (t2минут ',s2,' секунд ');
if (t3минут ',s3,' секунд ');
{поиск наибольшего значения из трёх введённых и печать наибольшего}
End.
Результат работы программы может выглядеть так:
Ведите результаты соревнований первого спортсмена через пробел (мин сек)
3 47
Ведите результаты соревнований первого спортсмена через пробел (мин сек)
3 59
Ведите результаты соревнований первого спортсмена через пробел (мин сек)
3 51
3 минут 47 секунд
Упражнение 6
Составьте программу, которая выводит на экран число сотен в заданном числе, если оно трёхзначное, а в противном случае сообщает: «Число не трёхзначное».
Ответ:
Program upr2_6;
Var a: integer;
Begin
writeln ('Ведите целое число');
readln (a); {ввод целого числа}
if (a=100) and (a
then writeln (a div 100,' сотен')
else writeln('Число не трёхзначное') ;
{проверка условия трёхзначности числа и печать числа сотен, если условие выполняется, в противном случае вывод сообщения "Число не трёхзначное"}
End.
Результат работы программы может выглядеть так:
Ведите целое число
356
3 сотен
Ведите целое число
99
Число не трёхзначное
Ведите целое число
1024
Число не трёхзначное
Упражнение 7
Составьте программу, которая по заданному а исследует корни уравнения ах=5 и выводит на экран значение вычисленного корня либо сообщение «Корней нет».
Ответ:
Program upr2_7;
Var a: integer;
Begin
writeln ('Ведите целое число');
readln (a); {ввод целого числа}
if a=0 then writeln ('корней нет')
else writeln('Значение корня ', 5/a) ;
{проверка условия а=0, если условие выполняется, то на экран выводится сообщение "Корней нет", в противном случае вывод значения вычисленного корня}
End.
Результат работы программы может выглядеть так:
Ведите целое число
6
Значение корня 0.833333333333333
Ведите целое число
0
корней нет
Упражнение 8
Составьте программу, которая проверяет, можно ли в данном круге радиуса r вырезать круг радиуса а. Если можно, то рисует в графическом окне круг радиуса а в круге радиуса r, иначе – выводит на экран сообщение «Нельзя».
Ответ:
Program upr2_8;
uses graphabc;
Var a, r: integer;
Begin
writeln ('Ведите значение радиуса r');
readln (r); {ввод значения радиуса r}
writeln ('Ведите значение радиуса a');
readln (a); {ввод значения радиуса a}
if a
begin
SetWindowSize (640,480);
SetBrushStyle (bsClear);
SetPenWidth (4);
SetPenColor (clRed);
Circle (350, 240, r);
SetPenColor (clGreen);
Circle (350, 240, a);
end
else writeln('Нельзя');
{проверка условия а=0, если условие выполняется, то на экран выводятся нарисованные окружности, в противном случае вывод сообщения "Нельзя"}
End.
Результат работы программы может выглядеть так:
Ведите значение радиуса r
150
Ведите значение радиуса a
160
Нельзя
Ведите значение радиуса r
150
Ведите значение радиуса a
130
Упражнение 9
Составьте программу, которая определяет, является ли треугольник с заданными длинами сторон равносторонним, равнобедренным или разносторонним, и выводит на экран соответствующее сообщение: «равносторонний», «Равнобедренный» либо «Разносторонний». Предполагается, что треугольник с заданными сторонами существует.
Ответ:
Program upr2_9;
Var a, b, c: integer;
Begin
writeln ('Ведите длины сторон треугольника через пробел');
readln (a, b, c); {ввод значений длин сторон треугольника}
if (a=b) and (b=c)
then writeln('Равносторонний')
else
if (a=b) or (a=c) or (b=c)
then writeln('Равнобедренный')
else writeln('Разносторонний');
{проверка условия того, что все три стороны равны, если условие выполняется, то на экран выводится сообщение "Равносоторонний", в противном случае проверка условия того, что равны хотя бы 2 стороны, если условие выполняется, то на экран выводится сообщение "Равнобедренный", в противном случае на экран выводится сообщение "Разносторонний"}
End.
Результат работы программы может выглядеть так:
Ведите длины сторон треугольника через пробел
3 4 5
Разносторонний
Ведите длины сторон треугольника через пробел
3 3 5
Равнобедренный
Ведите длины сторон треугольника через пробел
5 5 5
Равносторонний
Упражнение 10
Для продажи книг в магазине используется компьютер. Составьте программу, которая по стоимости книги и сумме денег, внесённой покупателем, выводит на экран сумму причитающейся сдачи, если денег внесено больше. Если сдача не требуется, программа выводит на экран «Спасибо!».
Ответ:
Program upr2_10;
Var a, b: integer;
Begin
writeln ('Ведите стоимость книги');
readln (a); {ввод значения стоимости книги}
writeln ('Ведите сумму внесённых денег');
readln (b); {ввод значения стоимости книги}
if aСдача ', b-a)
else
if a=b then writeln('Спасибо!')
{проверка условия того, что денег внесено больше, если истина, то на экран выводится сообщение "Сдача" и размер сдачи, в противном случае проверка условия того, что денег внесено столько же, сколько стоит книга, если условие выполняется, то на экран выводится сообщение "Спасибо!"}
End.
Результат работы программы может выглядеть так:
Ведите стоимость книги
15000
Ведите сумму внесённых денег
20000
Сдача 5000
Ведите стоимость книги
15000
Ведите сумму внесённых денег
15000
Спасибо!
§ 3. Алгоритмическая конструкция ПОВТОРЕНИЕ.
Коротко о главном:
Есть несколько форм оператора for: оператор цикла с параметром и оператор цикла с предусловием.
Параметр цикла for в теле цикла нельзя изменять с помощью команды присваивания.
Параметр цикла, его начальное и конечное значения должны принадлежать к одному типу данных (чаще всего integer, но могут быть и другие, кроме вещественного).
Оператор цикла с предусловием применяется в случае, если число повторений тела цикла заранее неизвестно и определяется в ходе выполнения цикла.
Цикл с предусловием может выполняться бесконечно, если значение условия всегда будет истинным.
Цикл с предусловием не выполнится ни разу, если условие сразу оказывается ложным.
Упражнение 1
Сколько раз выполнится тело цикла
For n:=3 to 6 do write (‘*’);?
Ответ:
раза (для n=3, 4, 5, 6).
Упражнение 2
Составьте программу, которая 6 раз выведет на экран фразу «Я люблю свою Родину!» в строку через пробел.
Ответ:
Program upr3_2;
Var i: integer;
Begin
for i:=1 to 6 do {Параметр i меняется от 1до 6 с шагом 1}
write('Я люблю свою Родину! '); {Вывод текстового сообщения «Я люблю свою Родину!»}
End.
Результат работы программы может выглядеть так:
Я люблю свою Родину! Я люблю свою Родину! Я люблю свою Родину! Я люблю свою Родину! Я люблю свою Родину! Я люблю свою Родину!
Упражнение 3
Составьте блок – схему и напишите программу вывода на экран:
А) 5 первых четных натуральных чисел;.
Ответ:
Program upr3_3A;
Var i, x: integer;
Begin
x:=2; {первое чётное натуральное число равно 2}
for i:=1 to 5 do {Параметр i меняется от 1до 5 с шагом 1}
begin write(x,' '); {вывод очередного чётного числа}
x:=x+2 ; {Следующее чётное число на 2 больше предыдущего}
end;
End.
Результат работы программы может выглядеть так:
2 4 6 8 10
Б) n первых натуральных чисел;.
Блок – схема:
Ответ:
Program upr3_3B;
Var i, n: integer;
Begin
writeln ('Ведите n');
readln (n); {ввод значения числа n}
for i:=1 to n do {Параметр i меняется от 1 до n с шагом 1}
write(i,' '); {вывод очередного натурального числа}
End.
Результат работы программы может выглядеть так:
Ведите n
7
1 2 3 4 5 6 7
Упражнение 4
Составьте программу, которая вычисляет сумму натуральных чисел от 10 до 15 и выводит на экран результат.
Ответ:
Program upr3_4;
Var i, S: integer;
Begin
S:=0; {Начальное значение суммы}
for i:=10 to 15 do {Параметр i меняется от 10 до 15 с шагом 1}
S:=S+i; {увеличение суммы на очередное число}
write('Сумма = ',S); {вывод конечного значения суммы}
End.
Результат работы программы может выглядеть так:
Сумма = 75
Упражнение 5
Составьте программу, которая определяет, сколько слагаемых должно быть в сумме 1+2+3+4+…, чтобы сумма оказалась:
А) больше 20;
Б) больше заданного числа n.
Результат – количество слагаемых – выведите на экран. Составьте блок – схемы.
Ответ А:
Program upr3_5A;
Var i, S: integer;
Begin
S:=1; {Начальное значение суммы}
i:=1; { Первое слагаемое равно 1}
while S
begin
i:=i+1; {Очередное слагаемое на 1 больше предыдущего}
S:=S+i; {увеличение суммы на очередное число}
end;
write(i, ' слагаемых'); {вывод конечного значения суммы}
End.
Результат работы программы может выглядеть так:
6 слагаемых
Блок – схема:
Ответ Б:
Program upr3_5B;
Var i, n, S: integer;
Begin
writeln ('Ведите n');
readln (n); {ввод значения числа n}
S:=1; {Начальное значение суммы}
i:=1; { Первое слагаемое равно 1}
while S
begin
i:=i+1; {Очередное слагаемое на 1 больше предыдущего}
S:=S+i;{увеличение суммы на очередное число}
end;
write(i, ' слагаемых'); {вывод конечного значения суммы}
End.
Результат работы программы может выглядеть так:
Ведите n
20
6 слагаемых
Блок – схема:
Упражнение 6
Составьте программу, которая рисует красные круги радиуса 30 по вертикали вдоль левого края графического окна.
Ответ:
Program upr3_6;
uses graphabc;
Var x, y, r: integer;
Begin
SetWindowSize (640,480);
ClearWindow;
SetBrushColor (clRed);
x:=32; y:=32; {начальное значение x, y}
r:=30;
while ydo
begin
Circle (x, y, r); {Пока y
y:=y+60; {Смещение координаты y для следующего круга}
end ;
End.
Результат работы программы может выглядеть так:
Упражнение 7
Составьте программу, которая имитирует движение голубого шарика радиуса 20 по горизонтали слева направо вдоль нижнего края графического окна.
Ответ:
Технология создания:
нарисовать объект и организовать временную паузу;
нарисовать объект на прежнем месте цветом фона (стереть объект);
повторять действия 1) и 2), изменяя координаты объекта.
Program upr3_7;
uses graphabc;
Var x, y, r: integer;
Begin
SetWindowSize (640,480);
ClearWindow;
x:=22; y:=22; {начальное значение x, y}
r:=20;
while y
begin {Пока y
SetBrushColor (clBlue);
Circle (x, y, r);
Sleep(10); {Пауза в милисекундах}
SetBrushColor (clWhite);
SetPenColor (clWhite);
Circle (x, y, r); {Стирание объекта}
y:=y+4; {Смещение координаты y для следующего круга}
end ;
End.
§ 4. Составление и реализация алгоритмов с повторением.
Упражнение 1
Составьте программу, которая вычисляет произведение натуральных чисел от 5 до 10 и выводит на экран результат.
Ответ:
Program upr4_1;
Var i, P: integer;
Begin
P:=1; {Начальное значение произведения}
for i:=5 to 10 do {Параметр i меняется от 5 до 10 с шагом 1}
P:=P*i; {увеличение произведения на очередное число}
write('Произведение = ',P); {вывод конечного значения произведения}
End.
Результат работы программы может выглядеть так:
Произведение = 151200
Упражнение 2
Составьте программу, которая выводит на экран квадраты n первых натуральных чисел.
Ответ:
Program upr4_2;
Var i,n: integer;
Begin
writeln ('Ведите n');
readln (n); {ввод значения числа n}
for i:=1 to n do {Параметр i меняется от 1 до n с шагом 1}
write(sqr(i),' '); {вывод конечного значения через пробел}
End.
Результат работы программы может выглядеть так:
Ведите n
14
1 4 9 16 25 36 49 64 81 100 121 144 169 196
Упражнение 3
Составьте программу, которая выводит на экран значение выражения:
А) 5n; Б) а10; В) (а+1)n.
Ответ А:
Program upr4_3А;
Var i,n, P: integer;
Begin
writeln ('Ведите n');
readln (n); {ввод показателя степени}
P:=1; {Начальное значение P равно1}
for i:=1 to n do {Параметр i меняется от 1 до n с шагом 1}
P:=P*5; {В переменной P накапливается значение степени}
write('P=',P);
End.
Результат работы программы может выглядеть так:
Ведите n
3
P=125
Ответ Б:
Program upr4_3B;
Var i, a, P: integer;
Begin
writeln ('Ведите a');
readln (a); {ввод основания}
P:=1; {Начальное значение P равно1}
for i:=1 to 10 do {Параметр i меняется от 1 до 10 с шагом 1}
P:=P*a; {В переменной P накапливается значение степени}
write('P=',P);
End.
Результат работы программы может выглядеть так:
Ведите a
2
P=1024
Ответ В:
Program upr4_3V;
Var i,a, n, P: integer;
Begin
writeln ('Ведите a');
readln (a); {ввод основания}
writeln ('Ведите n');
readln (n); {ввод показателя степени}
P:=1; {Начальное значение P равно1}
for i:=1 to n do {Параметр i меняется от 1 до n с шагом 1}
P:=P*(a+1); {В переменной P накапливается значение степени}
write('P=',P);
End.
Результат работы программы может выглядеть так:
Ведите a
2
Ведите n
3
P=27
Упражнение 4
Составьте программу, которая рисует картинку «Звёздное небо»: n маленьких разноцветных кругов («звёзд»), радиус которых определяется случайным образом в диапазоне от 4 до 14, на тёмно – синем фоне.
Ответ:
Program upr4_4;
uses graphabc;
Var n, i, x, y: integer;
Begin
writeln ('Ведите n');
readln (n); {ввод числа звёзд}
SetWindowSize (640,480);
ClearWindow(clBlue);
for i:=1 to n do
begin
SetBrushColor (rgb(i*100,i*25,i*50)); {цвет кисти разных оттенков}
x:=random(640); y:=random(480);
Circle (x, y, random(11)+4);
end;
End.
Результат работы программы может выглядеть так:
Ведите n
80
Упражнение 5
Составьте программу, которая рисует 10 окружностей зелёного цвета разных радиусов с одним центром.
Ответ:
Program upr4_5;
uses graphabc;
Var n, i, x, y: integer;
Begin
SetWindowSize (640,480);
ClearWindow;
SetBrushColor (clGreen); {зелёный цвет кисти}
for i:=10 downto 1 do {изменение параметра i от 10 до 1 с шагом 1}
Circle (320, 240, 20*i);
{рисование окружностей разного радиуса, начиная с самой большой}
End.
Результат работы программы может выглядеть так:
Упражнение 6
Составьте программу, которая определяет, являются ли два данных натуральных числа взаимно простыми, и выводит на экран соответствующее сообщение: «Да» либо «Нет». (Натуральные числа называются взаимно простыми, если их наибольший делитель равен 1).
Ответ:
Program upr4_6;
Var i, a, b: integer;
Begin
writeln ('Ведите a');
readln (a); {ввод первого числа}
writeln ('Ведите b');
readln (b); {ввод второго числа}
while ab do {Проверка равенства чисел}
if ab then a:=a-b else b:=b-a;
{Всегда из большего вычитаем меньшее}
if a=1 then writeln ('Да')else writeln ('Нет');
{Поскольку после выполнения цикла a и b равны, то мы одно из них сравниваем с 1}
End.
Результат работы программы может выглядеть так:
Ведите a
5
Ведите b
4
Да
Ведите a
20
Ведите b
4
Нет
Упражнение 7
Составьте программу, которая определяет, является ли данное натуральное число простым, и выводит на экран соответствующее сообщение: «Да» либо «Нет». (Простое число делится на 1 и на само себя).
Ответ:
Program upr4_7;
Var i,a, k: integer;
Begin
write ('Ведите a = '); readln (a); {ввод числа}
k:=0;
for i:=2 to (a div 2) do
if a mod i = 0 then k:=1;
{Если остаток от деления а на i равен нулю, то значит найден делитель}
if k=1 then writeln ('Нет')else writeln ('Да');
{Если найден делитель и число соответственно не простое, то выводится сообщение "Да", иначе - "Нет"}
End.
Результат работы программы может выглядеть так:
Ведите a = 20
Нет
Ведите a = 17
Да
Упражнение 8
Составьте программу, которая определяет, через сколько лет сумма в S р., положенная в банк под P% годовых с капитализацией, увеличится в 3 раза.
Ответ:
Program upr4_8;
Var s0, p, i, k: integer; s: real;
Begin
writeln ('Ведите сумму вклада '); readln (s0);
{ввод первоначальной суммы вклада}
writeln ('Ведите процентную ставку '); readln (p);
{ввод процентной ставки}
s:=s0; k:=0;
while s
begin
s:=s+s*p/100; k:=k+1;
{Ежегодное увеличение суммы и счётчика }
end;
writeln('Через ', k,' лет');
End.
Результат работы программы может выглядеть так:
Ведите сумму вклада
3000000
Ведите процентную ставку
15
Через 8 лет
Упражнение 9
Составьте программу вывода на экран n первых чисел Фибоначчи. (Числа Фибоначчи – это члены числовой последовательности 1, 1, 2, 3, 5, 8, 13, …, которые вычисляются по следующему правилу: а1=1, а2=1, а3=а2+а1, … аn=an-1+an-2).
Ответ:
Program upr4_9;
Var i, a, b, n: integer;
Begin
writeln ('Ведите n '); readln (n); {ввод n}
a:=1; b:=1;
if n mod 2 0 {Проверка чётности введённого числа n}
then
for i:=1 to n div 2+1 do
{Параметр цикла изменяется от 1 до n делённое нацело надвое плюс 1, например: для n=9 параметр цикла изменяется до 5, с шагом 1}
begin
write(a,' ');
if in div 2 {Проверка условия: параметр цикла меньше либо равен n делённое нацело надвое}
then write(b,' ');
a:= a+b; b:=b+a; {Изменение значений первого и второго слагаемого}
end
else
for i:=1 to n div 2 do {Параметр цикла изменяется от 1 до n делённое нацело надвое с шагом 1}
begin
write(a,' '); {Печать первого слагаемого}
a:= a+b; write(b,' '); b:=b+a;
{Печать второго слагаемого и изменение значений первого и второго слагаемого}
end ;
End.
Результат работы программы может выглядеть так:
Ведите n
9
1 1 2 3 5 8 13 21 34
Ведите n
10
1 1 2 3 5 8 13 21 34 55
Упражнение 10
Составьте программу «Угадай!» . Программа «задумывает» случайное число в диапазоне от 0 до 99. После каждой попытки играющего угадать число программа выводит на экран одно из сообщений: «Больше», «Меньше» или «Угадано». На отгадывание числа даётся 10 попыток. Программа завершается после выполнения одного из условий: дан правильный ответ либо все попытки исчерпаны.
Ответ:
Program upr4_8;
Var x, i, a, k: integer;
Begin
x:=random(100); {Случайное число от 0 до 99 помещается в переменную х}
writeln ('Задумано число от 1 до 99. Угадайте его!');
writeln ('У вас есть 10 попыток.');
i:=1; k:=0; {Номер попытки и количество сделанных попыток}
while i
begin
write('Попытка №',i,'. Введите предполагаемое число: ');readln (a);
{ввод числа}
i:=i+1;
if ax
then write('Меньше')
else if aБольше')
else begin write('Угадано'); i:=11; end;
writeln; {Переход на следующую строку}
k:=k+1;
end;
write('Число попыток: ',k);
End.
Результат работы программы может выглядеть так:
Задумано число от 1 до 99. Угадайте его!
У вас есть 10 попыток.
Попытка №1. Введите предполагаемое число: 50
Меньше
Попытка №2. Введите предполагаемое число: 25
Меньше
Попытка №3. Введите предполагаемое число: 12
Меньше
Попытка №4. Введите предполагаемое число: 6
Меньше
Попытка №5. Введите предполагаемое число: 3
Меньше
Попытка №6. Введите предполагаемое число: 2
Меньше
Попытка №7. Введите предполагаемое число: 1
Угадано
Число попыток: 7