Ответы по параграфу 3.3 Программирование линейных алгоритмов



Задание 2. Напишите программу вычисляющую «y» для заданного «x» по формуле
y = x3 + 2.5x2 – x + 1 = ((x+2.5)x-1)x + 1
(Нельзя возводить в степень, в присваивании только одна арифметическая операция, не больше 5-ти операторов присваивания.)

program z_2;
var x, y: real;
BEGIN
 write ('x>>');
 read (x);
 y:= x + 2.5;
 y:= y*x;
 y:= y-1;
 y:= y*x;
 y:= y+1;
 writeln ('y = ', y)
END.

Задание 3. Напишите программу, вычисляющую длину отрезка AB по заданным координатам точек A и B.

Формула нахождения длины отрезка по заданным координатам:
program z_3;
var xA, yA, xB, yB, d: real;
BEGIN
 write ('xA=');
 read (xA);
 write ('yA=');
 read (yA);
 write ('xB=');
 read (xB);
 write ('yB=');
 read (yB);
 d:= sqrt(sqr(xB-xA) + sqr(yB-yA));
 writeln ('d=', d)
END.

Задание 4. Известны длины сторон треугольника a, b, c. Напишите программу, вычисляющую площадь этого треугольника.

program z_4;
var a, b, c, p, S: real;
BEGIN
 writeln('Площадь треугольника по трём его сторонам');
 writeln('Введите стороны треугольника:'); 
 write('a>>'); 
 read (a);
 write('b>>'); 
 read (b);
 write('c>>'); 
 read (c);
 //Проверяем, существует ли такой треугольник
 if ((a+b)>c) and ((a+c)>b) and ((b+c)>a) then begin
 //Вычислим полупериметр
 p := (a+b+c)/2;
 //Теперь вычислим площадь
 S:=sqrt(p*(p-a)*(p-b)*(p-c));
 writeln ('S = ', S:3:2, ' см2');
 end
 else
 writeln ('Треугольник со сторонами ', a,', ', b,', ', c,' не существует');
END.

Задание 5. Известны координаты A, B, C треугольника. Напишите программу, вычисляющую площадь этого треугольника.

Объединим программы из двух предыдущих заданий.
program z_5;
var xA, yA, xB, yB, xC, yC, a, b, c, p, S: real;
BEGIN
 writeln('Площадь треугольника по трём его сторонам');
 writeln('Введите координаты вершин:'); 
 write ('xA=');
 read (xA);
 write ('yA=');
 read (yA);
 write ('xB=');
 read (xB);
 write ('yB=');
 read (yB);
 write ('xC=');
 read (xC);
 write ('yC=');
 read (yC);
 a:= sqrt(sqr(xB-xA) + sqr(yB-yA));
 b:= sqrt(sqr(xC-xB) + sqr(yC-yB));
 c:= sqrt(sqr(xC-xA) + sqr(yC-yA));
 //Проверяем, существует ли такой треугольник
 if ((a+b)>c) and ((a+c)>b) and ((b+c)>a) then begin
 //Вычислим полупериметр
 p := (a+b+c)/2;
 //Теперь вычислим площадь
 S:=sqrt(p*(p-a)*(p-b)*(p-c));
 writeln ('S = ', S:3:2, ' см2');
 end
 else
 writeln ('Треугольник со сторонами ', a,', ', b,', ', c,' не существует');
END.

Задание 6. Если сумма налога исчисляется в рублях и копейках, то налоговая служба округляет ее до ближайшего рубля (до 50 копеек – с недостатком, свыше 50 копеек с избытком). Используйте компьютер, чтобы ввести точную сумму налога и вывести, сколько следует уплатить.

Функция "round(x)" округляет число до ближайшего целого.
program z_6;
var nalog: real; k: integer;
BEGIN
 write ('Введите точную сумму налога: ');
 read (nalog);
 nalog:= round(nalog);
 write ('Следует уплатить "', nalog, '" рублей.');
END.

Задание 7. Исследуйте работу функции random, запустив многократно на выполнение программу в учебнике.

Как можно получить случайное число из интервала:
а) (0, x);
random (x-1) + 1;

б) (0, x];
random (x) + 1;

в) (n, x +n);
random (x+n-1) + n+1;

Задание 8. Одна компания выпустила билеты трёх разрядов: для молодежи, для взрослых и для пенсионеров. Номера билетов каждого разряда лежат в пределах:
Для молодежи: от 1 до 100;
Для взрослых: от 101 до 200;
Для пенсионеров – от 201 до 250.
Выберите случайным образом лотерейный билет в каждом разряде.

program z_8;
var a, b, c: integer;
BEGIN
 a:= random (100)+1;
 b:= random (100)+101;
 c:= random (50)+201;
 writeln ('Для молодежи билет номер ', a);
 writeln ('Для взрослых билет номер ', b);
 writeln ('Для пенсионеров билет номер ', c);
END.

Задание 9. Запишите программу, которая для произвольного натурального двузначного числа определяет:
а) сумму и произведение его цифр;
б) число, образованное перестановкой цифр исходного числа.

program z_9;
var a, b, c, sum, pr: integer;
BEGIN
 writeln ('Введите двузначное натуральное число:');
 readln (a);
 b:= a div 10;
 c:= a mod 10;
 sum:= b+c;
 pr:= b*c;
 writeln ('а) Сумма: ', sum, '; Произведение: ', pr);
 writeln ('б) ', c*10+b)
END.

Задание 10. Запишите программу, реализующую алгоритм работы кассира, выдающего покупателю сдачу (s) наименьшим возможным количеством банкнот по 1000 (k1000), 500 (k500), 100 (k100), 50 (k50) рублей.

program z_10;
var s: integer;
BEGIN
 writeln ('Введите сдачу:');
 readln (s);
 writeln ('Следует сдать:');
 writeln ('банкнот по 1000 руб. - ', s div 1000, ' шт.');
 s:= s mod 1000;
 writeln ('банкнот по 500 руб. - ', s div 500, ' шт.');
 s:= s mod 500;
 writeln ('банкнот по 100 руб. - ', s div 100, ' шт.');
 s:= s mod 100;
 writeln ('банкнот по 50 руб. - ', s div 50, ' шт.');
 s:= s mod 50;
END.

Задание 11. Идет k-я секунда суток. Разработайте программу, которая по введённой k-ой секунде суток определяет, сколько целых часов h и целых минут m прошло с начала суток.

program z_11;
var k: integer;
BEGIN
 writeln ('Введите секунды суток:');
 readln (k);
 write ('Прошло ', k div 3600, ' часа(-ов) ');
 k:= k mod 3600;
 write (k div 60, ' минут');
END.

Задание 12. Запишите программу, которая вычисляет сумму кодов букв в слове «БАЙТ».

program z_12;
BEGIN
 writeln ('Слово "БАЙТ"');
 writeln ('Сумма кодов букв: ', ord('Б')+ord('А')+ord('Й')+ord('Т'))
END.

Задание 13. Запишите на языке Паскаль программу, которая формирует и выводит на экран строку символов, коды которых равны 66, 69, 71, 73, 78.

program z_13;
BEGIN
 writeln ('Код: 66, 69, 71, 73, 78');
 writeln ('Сформированное слово: ', chr(66)+chr(69)+chr(71)+chr(73)+chr(78))
END.

Задание 14. Разработайте программу, которая запрашивает три строковые величины – взаимосвязанные прилагательное, существительное и глагол, а затем выводит все варианты фраз с использованием введенных слов.

program z_14;
var a, b, c: string;
BEGIN
 writeln('Введите прилагательное, существительное и глагол:');
 write ('Прилагательное: ');
 readln (a);
 write ('Существительное: ');
 readln (b);
 write ('Глагол: ');
 readln (c);
 writeln (' ------- ');
 writeln (a, ' ', b, ' ', c);
 writeln (a, ' ', c, ' ', b);
 writeln (b, ' ', a, ' ', c);
 writeln (b, ' ', c, ' ', a);
 writeln (c, ' ', a, ' ', b);
 writeln (c, ' ', b, ' ', a);
END.

Задание 15. Даны значения целочисленных переменных: a=10, b=20. Чему будет равно значение логической переменной rez после выполнения операции присваивания?

а) rez:= (a=10) or (b>10) True
б) rez:= (a>5) and (b>5) and (a<20) and (b<30) True
в) rez:= (not(a<15)) or (b>20) False

Задание 16. Составьте программу, вводящую true, если высказывание является истинным, и false в противном случае:

а) Сумма цифр трехзначного числа x является четным числом.
program z_16a;
var x: integer; //Исходные данные
 a, b, c, s: integer; //Промежуточные величины
 ans: boolean; //Результат
BEGIN
 randomize;
 x:= random (900)+100;
 writeln ('Трёхзначное число x=', x);
 a:=x div 100;
 b:=x mod 100 div 10;
 c:=x mod 10;
 s:=a+b+c;
 writeln ('s=', s);
 ans:= s mod 2=0;
 writeln (ans)
END.

б) Треугольник со сторонами a, b, c является разносторонним.
Проверку существования треугольника со сторонами a, b, c в этой программе мы не выполняем.
program z_16b;
var a, b, c: real; //Исходные данные
 ans: boolean; //Результат
BEGIN
 write ('a=');
 readln (a);
 write ('b=');
 readln (b);
 write ('c=');
 readln (c);
 ans:= (a<>b) and (a<>c) and (b<>c);
 writeln (ans)
END.
Решение заданий из учебника Информатика 8 класс Босова, параграф 3.3 Программирование линейных алгоритмов. Числовые типы данных, символьный и строковый типы данных, логический тип данных.