Задачник-практикум по основам программирования. Учебное пособие по курсу «Информатика»
.pdfНайти единственное решение или выдать сообщение, если система имеет бесчисленное множество решений или не имеет решения.
2.23.Элементы прямоугольного равнобедренного треугольника задаются в зависимости от указанного номера варианта. В первом варианте вводится катет а, во втором – гипотенуза b, в третьем – высота h, опущенная из вершины прямого угла на гипотенузу, в четвертом – площадь S.
Составить программу, которая по заданному номеру варианта и значению соответствующего элемента вычисляла бы значение всех остальных элементов треугольника.
2.24.Элементы равностороннего треугольника задаются в зависимости от указанного номера варианта. В первом варианте вводится сторона a, во втором – площадь S, в третьем – высота h, в четвертом – радиус r вписанной окружности, в пятом – радиус R описанной окружности. Составить программу, которая по заданному номеру варианта и значению соответствующего элемента вычисляла бы значение всех остальных элементов треугольника.
2.25.Пусть элементами круга являются радиус – первый вариант, диаметр – второй вариант и длина окружности – третий вариант.
Составить программу, которая для каждого варианта запрашивала бы соответствующее значение и вычисляла бы площадь круга.
2.26.Дано натуральное число n. Определить по последней цифре числа n последнюю цифру квадрата этого числа.
2.27.Дано натуральное число n. Определить по последней цифре числа n последнюю цифру куба этого числа.
2.28.Дано натуральное число n. Если оно делится на 4, вывести ответ n = 4*k, где k – соответствующее частное; если остаток деления на 4 равен i, то вывести n = 4*k + i.
Например, 12 = 4*3 или 22 = 4*5 + 2.
2.29.Даны два действительных числа x и y. Арифметические действия над числами пронумерованы (1 – сложение, 2 – вычитание, 3 – умножение, 4 – деление).
Составить программу, которая бы вводила номер действия и по введенному значению выполняла бы то или иное действие над числами.
2.30.Для целого числа от 1 до 99 напечатать фразу «Мне k лет», учитывая при этом, что при некоторых значениях k слово «лет» надо заменить словом «год» или «года».
21
Например, 17 лет, 22 года, 21 год.
2.31.Написать программу, которая бы по введенному номеру единицы измерения (1 – миллиметр, 2 – сантиметр, 3 – дециметр, 4 – метр, 5 – километр) и длине отрезка L выдавала бы соответствующее значение длины отрезка в метрах.
2.32.Написать программу, которая по введенному номеру единицы измерения (1 – миллиграмм, 2 – грамм, 3 – килограмм, 4 – центнер, 5 – тонна) и массе M выдавала бы соответствующее значение массы
вкилограммах.
2.33.Написать программу, которая бы по введенному номеру времени года (1 – зима, 2 – весна, 3 – лето, 4 – осень) выдавала соответствующие этому времени года месяцы, количество дней в каждом из месяцев.
2.34.Составить программу, которая по заданному году и номеру месяца определяет количество дней в этом месяце. Следует учесть, что в феврале может быть либо 28 дней, либо 29, если год високосный. Год считается високосным по григорианскому календарю, если номер года в столетии не равен нулю и делится на 4, а если равен нулю, то количество столетий должно делиться на 4.
Например, 2004, 2008, 2000 годы – високосные, а 1900 не был високосным.
2.35.Определить по дате день недели, на который эта дата приходится. Пусть d – число месяца,
m – номер месяца,
c – две старшие цифры года (количество столетий), y – две младшие цифры года (номер года в столетии).
Номер дня недели (от 0 до 6) равен остатку от деления на 7 «кода дня» – выражения, в котором квадратные скобки [ ] означают целую часть, а знак ÷ – деление нацело.
1)По формуле Зеллера номер дня недели (0 – воскресенье, 1 – по- недельник,..., 6 – суббота) определяется по «коду дня», который равен
[ 2.6∙m – 0.2 ] + d + y + y ÷ 4 + c ÷ 4 – 2 c,
причем нумерация месяцев начинается с марта, а январь и февраль считаются месяцами предыдущего года.
2)По методу М. Ленуара [2] номер дня недели (0 – среда, 1 – чет- верг,..., 6 – вторник) определяется по «коду дня», который равен
[365.25 ∙ y ] + [ 30.56 ∙ m] + d + N,
22
1 для января или февраля високосного года, |
|
|
для января или февраля обычного года, |
где N= 2 |
|
|
для остальных месяцев. |
0 |
|
Год считается високосным по григорианскому календарю, если y ≠ 0 и y делится на 4 или y = 0 и c делится на 4.
3) Метод М. Ленуара дает точный результат для дат XX века, а для XXI века день недели оказывается следующим за искомым. По формуле Зеллера для некоторых дат XX века «код дня» может быть отрицательным, например, для 1 августа 2007 года «код дня» равен –11.
Точный результат можно получить, используя алгоритм 199б [3], который по дате современного григорианского календаря опреде- ляет номер дня в юлианском периоде:
(146097 ∙ c) ÷ 4 + (1461 ∙ y) ÷ 4 + (153 ∙ m + 2) ÷ 5 + d + 1721119,
причем нумерация месяцев (от 0 до 11) начинается с марта, а январь и февраль считаются 10-м и 11-м месяцами предыдущего года. Так как число 1721119 делится на 7 с остатком 1, то при опре- делении номера дня недели (0 – понедельник, 1 – вторник,..., 6 – воскресенье) для вычисления «кода дня» можно использовать упрощенную формулу номера дня в юлианском периоде: (146097 ∙ c) ÷ 4 + (1461 ∙ y) ÷ 4 + (153 ∙ m + 2) ÷ 5 + d + 1
ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ
Задание 1
Составить программу для вычисления y по заданной формуле. Прове- рить работу программы на контрольных примерах (тестах): в нормальных условиях, при граничных значениях входных данных и в исключительных ситуациях.
|
|
a + x, если x > 0 |
||
1) |
|
x |
|
|
y = |
, |
если x ≤ 0 |
||
|
|
|
||
|
|
|||
|
a + x |
|
|
|
23
|
|
|
x − a |
|
|
если a < 0 |
||||
2) |
y = |
|
|
|
|
, |
||||
|
|
|
||||||||
x + 2a |
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
если a ≥ 0 |
||
|
|
x − a, |
|
|
||||||
|
|
|
a + b, |
|
|
если a > b |
||||
3) |
y = |
|
ab |
|
|
|
|
|
|
|
|
, |
|
|
|
если a ≤ b |
|||||
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|||||
|
|
a + b |
|
|
|
|
|
|
|
|
4) |
y = |
max {a, b}+ a + b |
|
|||||||
|
|
|
a − b |
|
|
|
|
|
||
5) |
y = |
|
x − a − |
|
|
x − a |
|
|||
|
|
min { a, b} |
||||||||
|
|
|
|
|
|
|
||||
|
|
|
min |
|
+ b, |
a + b |
||||
|
|
|
a |
2 |
|
|||||
6) |
y = |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
a + b |
||
|
|
|
|
|
|
|
|
|
||
|
|
|
a – b − min a + b, |
|
||||||
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ax3 |
|
+ b, |
|
|
||||||
|
y = |
|
|
3 + b |
|
, |
||||||
7) |
ax |
2 |
||||||||||
|
( |
|
|
|
|
|
|
|
) |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ab |
|
, |
|
|
|
|
|
|
|
|
|
|
|
x |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
a |
|
x, |
|
|
|
|
|
|||
8) y = |
|
|
|
|
|
|
3 |
, |
|
|
||
ax + x |
|
|
|
|||||||||
|
|
|
+ x |
3 |
, |
|
|
|
||||
|
|
x |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
если x > a
если x < a
если x = a
если a > 0 если a < 0 если a = 0
24
|
|
|
если c < a |
|
|
abc, |
|||
9) |
|
+ c, |
если c = a |
|
y = ab |
||||
|
c |
|
|
|
|
|
|
, |
если c > a |
|
|
|||
|
ab |
|
|
|
|
|
ax2 |
+ b, |
|
|
|
|
если x > 0 |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y = |
b |
|
, |
|
|
|
|
|
если x < 0 |
|
|
10) |
|
|
|
|
|
|
|
|
|
|||
|
2 |
|
|
|
|
|
|
|||||
|
|
ax |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
2 |
|
|
|
|
|
max {a |
, b |
}, |
если x = 0 |
|
||||||
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
если x = 0 |
|
|
|
|
max {a, b}, |
|
|||||||||
11) |
y = |
|
a − x, |
|
|
|
|
если x > 0 |
|
|||
|
|
|
|
|
|
|||||||
|
|
|
x |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, |
|
|
|
|
если x < 0 |
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
a − x |
|
|
|
|
|
|
|
|||
|
|
a − bx , |
|
|
|
|
если x < b |
|
||||
|
|
a + b |
|
|
|
|
|
|
||||
12) |
y = |
|
|
|
{a, b}, |
|
|
если x = b |
|
|||
min |
|
|
|
|||||||||
|
|
|
a + b, |
|
|
|
|
если x > b |
|
|||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a2 + b2 , |
|
|
|
|
если a2 + b2 ≥ 1 |
|||||
|
y = |
|
|
|
|
a2 , b2 |
, |
если a2 + b2 |
< 1 и a > b |
|||
13) |
min |
|
||||||||||
|
|
|
|
{ |
|
|
|
} |
|
|
||
|
|
|
a2 |
+ b2 , |
|
|
если a2 + b2 |
< 1 и a ≤ b |
||||
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
max {a, b}, |
|||
14) |
|
− b2 , |
||
y = a2 |
||||
|
|
x |
|
|
|
|
|
, |
|
|
|
− b2 |
||
|
a2 |
|
||
если a2 |
− b2 |
> x |
и a ≥ x |
если a2 − b2 > x |
и a < x |
||
если a2 |
− b2 |
≤ x |
|
25
|
x2 + ax + b, |
|||||||
15) |
|
x |
2 |
+ ax + b, |
||||
y = |
|
|||||||
|
|
|
|
|
|
|
|
|
|
max {a, b}− x, |
|||||||
|
|
|
|
|
|
|
|
|
|
|
2 |
+a, |
|
|
|||
|
x |
|
|
|
||||
|
|
x 2 +a |
|
|
||||
16) |
y = |
|
|
|
|
|
, |
|
|
|
|
a |
|
||||
|
|
|
|
|
|
|
||
|
min {a, x}, |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
abc |
|
, |
|||
|
|
ab + c |
|
|||||
|
|
|
||||||
17) |
|
|
|
|
|
|
|
|
y = min {a, b}, |
||||||||
|
|
|
|
|
|
|
|
|
|
max {a, b}, |
|||||||
если ax + b ≤ 0 и a >
если ax + b ≤ 0 и a ≤ если ax + b > 0
если x [ 0;1
если x < 0
если x > 1
если b ≥ 0 и ab ≤ 0
если b ≥ 0 и ab > 0 если b < 0
|
|
|
2 |
, |
|
|
|
если x > 0 |
и b > 0 |
||
|
ax |
|
|
|
x + b, |
||||||
18) |
ax2 + |
|
если x > 0 |
и b ≤ 0 |
|||||||
y = |
|
|
|
|
|
|
если x ≤ 0 |
и b > 0 |
|||
|
x, |
|
|
|
|
|
|||||
|
|
+ b |
2 |
, |
|
если x ≤ 0 |
и b ≤ 0 |
||||
|
x |
|
|
||||||||
|
|
2 |
+ b |
2 |
−c, |
если a > b |
и c > 0 |
||||
|
a |
|
|
||||||||
19) |
|
a + b, |
если a > b |
и c ≤ 0 |
|||||||
y = |
2 |
+ b 2 +c, |
если a ≤ b |
и c > 0 |
|||||||
|
a |
||||||||||
|
|
|
|
|
|
|
|
если a ≤ b |
и c ≤ 0 |
||
|
abc, |
|
|
|
|||||||
|
|
2 |
+ a, |
|
если x |
2 |
> a |
и x > 0 |
|||
|
x |
|
|
|
|||||||
20) |
|
x2 + a, |
если x2 > a |
и x ≤ 0 |
|||||||
y = |
2 |
− a, |
|
если x2 ≤ a |
и x > 0 |
||||||
|
x |
|
|||||||||
|
|
2 |
, |
|
|
|
|
если x |
2 |
≤ a |
и x ≤ 0 |
|
x |
|
|
|
|
|
|
||||
26
|
abc, |
|
|
|
|
|
если b > 0 |
и a > 0 |
||||||||||||
|
|
abc, |
|
|
|
если b > 0 |
и a ≤ 0 |
|||||||||||||
|
|
|
|
|
||||||||||||||||
21) |
y = |
2 + b2 , |
|
|
если b ≤ 0 |
и a > 0 |
||||||||||||||
|
a |
|
|
|||||||||||||||||
|
|
2 |
+ b |
2 |
+ c |
2 |
, |
если b ≤ 0 |
|
и a ≤ 0 |
||||||||||
|
a |
|
|
|
|
|||||||||||||||
|
|
2 |
|
|
|
|
|
2 |
|
|
|
|
|
2 |
|
|
2 |
|
|
|
|
a |
|
+ b |
|
, |
|
|
если a |
|
+ b |
|
< 1 |
и a > |
|||||||
|
a2 + b2 |
, |
|
|
если a |
2 |
+ b |
2 |
< 1 |
и a ≤ |
||||||||||
22) |
|
a + b |
|
|
|
|
|
|||||||||||||
y = |
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
a − b, |
|
|
|
|
|
если a2 + b2 |
= 1 |
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
если a2 + b2 > 1 |
|
|||||||
|
min {a, b}, |
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
+ b, |
|
|
если a > b |
и x > 0 |
|||||||||||
|
ax |
|
|
|
|
|||||||||||||||
|
|
ax2 + b, |
|
|
если a > b |
и x ≤ 0 |
||||||||||||||
|
|
b |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23) |
y = |
|
|
, |
|
|
|
|
|
|
если a ≤ b и x > 0 |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
2 |
|
|
|
|
|
|
|||||||||||
|
ax |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
2 |
, |
|
|
|
|
|
|
если a ≤ b и x ≤ 0 |
|||||||||
|
ax |
|
|
|
|
|
|
|
||||||||||||
|
min {a, b}, |
|
если |
x = 0 |
|
|
|
|
||||||||||||
|
|
a + b, |
|
|
если x ≤ 0 |
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
x |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
24) |
y = |
|
|
|
, |
|
|
|
если x > 0 и a > 0 |
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
a + b |
|
|
|
|
|
если x > 0 и a ≤ 0 |
|
||||||||||||
|
a + b, |
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a + b , |
|
|
|
если a > 0 |
и b ≥ 0 |
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a − b |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
25) |
a − b, |
|
|
|
|
|
если a > 0 |
и b < 0 |
|
|||||||||||
y = |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
max {a, b}, если |
a ≤ 0 и b ≤ 0 |
|
|||||||||||||||||
|
|
a + b, |
|
|
если a ≤ 0 и b > 0 |
|
||||||||||||||
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27
3. ЦИКЛЫ
Цикл – это механизм для повторения действий. Оператор цикла состоит из двух частей: заголовка и тела. Заголовок управляет количеством повторений тела цикла.
Тело – оператор, который определяет повторяемые действия.
В зависимости от заголовка цикла оператор цикла имеет несколько вариантов:
1)Оператор цикла с предусловием while B do S
2)Оператор цикла с постусловием
repeat S1; S2;...Sn until B
3) Оператор цикла с параметром for i:=e1 to e2 do S
или
for i:=e1 downto e2 do S
Здесь B – логическое выражение,
S,S1,S2,...Sn – операторы, i – параметр цикла,
e1,e2 – начальное и конечное значения параметра цикла. Оператор цикла с предусловием выполняется, пока логическое выра-
жение B принимает значение ИСТИНА.
Оператор цикла с постусловием выполняется, пока логическое вы- ражение B принимает значение ЛОЖЬ (т. е. до тех пор, пока логическое выражение B не примет значение ИСТИНА).
В операторе цикла с параметром после очередного выполнения тела цикла параметр цикла i автоматически принимает следующее (to) или предыдущее (downto) значение.
Например, для реализации вычисления факториала k = n! можно использовать различные варианты оператора цикла:
а) {оператор цикла с предусловием} k:=1; i:=2;
while i<=n do
28
begin k:=k*i; i:=i+1
end;
б) {оператор цикла с постусловием} k:=1; i:=2;
repeat k:=k*i; i:=i+1
until i>n;
в) {оператор цикла с параметром} k:=1;
for i:=2 to n do k:=k*i;
Пример 3.1. Дано натуральное число n. Найти значение арифметичес- кого выражения 1.1 – 1.2 + 1.3 –… (n слагаемых, знаки чередуются).
Будем хранить модуль текущего слагаемого в переменной x, и менять ее значение от 1.1 с шагом 0.1. Знаком текущего слагаемого будет управ- лять переменная z.
program Сycl_1; var x,S: real;
i,n,z: integer; begin
writeln(’n=’);
readln(n);
x:=1.1;
z:=1;
S:=0;
for i:=1 to n do begin
S:=S+z*x;
x:=x+0.1; z:=-z
end;
writeln(’S=’,S:7:1)
end.
29
Упражнения
1)Реализовать решение этого примера c использованием операторов цикла с предусловием и с постусловием.
2)При решении этого примера можно обойтись без переменной x, используя соответствующее выражение. Запишите вариант программы, составив новое выражение для вычисления слагаемого.
Пример 3.2. Не используя вложенные циклы, вычислить y по фор-
муле
y = 1! + 2! + 3! +... + n! program Cycl_2;
var p,y: real; i,n: integer;
begin writeln(’n=’); readln(n); p:=1;
y:=0;
for i:=1 to n do begin
p:=p*i;
y:=y+p
end;
writeln(’y=’,y:8:0)
end.
Упражнения
1)Объясните, почему переменные p и y следует описывать как вещес- твенные?
2)Не используя вложенные циклы, вычислить
y=1! – 2!+3! –...+ (-1)n-1n!
3) Не используя вложенные циклы, вычислить y=x+x2+x3+...+xn
Пример 3.3. Для заданного натурального числа n подсчитать k – ко- личество всех цифр в десятичной записи числа n и вывести все нечетные цифры числа n в обратной последовательности.
program Cycl_3;
var n,k,x: integer;
30
