
Здравствуйте, дорогие читателинашего сайта. На этой недели счетчик посещаемости наконец-то сдвинулся с мертвой точки. Это не может не радовать. Если вы новоиспеченный постоянный посетитель этого сайта, оставьте комментарий к любому посту, чтобы мы не думали, что на нашем сайте обитают только боты 🙂 Ну что ж, приступим к решению задач Begin21-30.
Begin21. Даны координаты трех вершин треугольника: (x1, y1), (x2, y2), (x3, y3). Найти его периметр и площадь, используя формулу для расстояния между двумя точками на плоскости (см. задание Begin20). Для нахождения площади треугольника со сторонами a, b, c использовать формулу Герона: S = √(p ⋅ ( p − a) ⋅ ( p − b) ⋅ ( p − c)), где p — полупериметр.
На первый взгляд задача может показаться весьма и весьма трудной, и для того, чтобы не заблудиться в решении, составим план наших действий:
- Для того, чтобы найти периметр треугольника, находим расстояния между всеми вершинами (ведь расстояния между вершинами это и есть стороны) по формуле √((x2 — x1)2+(y2 — y1)2), а затем суммируем их.
- Для того, чтобы найти площадь, используем формулу Герона.
program Begin21;
var
a, b, c, x1, x2, x3, y1, y2, y3, p, per, s: real;
begin
write('Введите x1, y1: ');
readln(x1, y1);
write('Введите x2, y2: ');
readln(x2, y2);
write('Введите x3, y3: ');
readln(x3, y3);
a := sqrt(sqr(x2 - x1) + sqr(y2 - y1));
b := sqrt(sqr(x3 - x2) + sqr(y3 - y2));
c := sqrt(sqr(x1 - x3) + sqr(y1 - y3));
per := a + b + c; {Находим периметр}
p := per / 2; {Находим полупериметр}
s := sqrt(p * (p - a) * (p - b) * (p - c)); {Находим площадь}
writeln('Периметр треугольника = ', per);
writeln('Площадь треугольника = ', s);
end.Begin22°. Поменять местами содержимое переменных A и B и вывести новые значения A и B.
Эта классическая задача является основой более сложных алгоритмов. Представьте, у Вас есть два кувшина: первый наполнен водой, второй — соком. Требуется поменять жидкости местами, то есть, перелить воду во второй кувшин, а сок — в первый. Как Вы решите данную проблему? Скорее всего, Вы возьмете третий кувшин и временно перельете в него содержимое одного из кувшинов. Так и в Паскале: сначала мы присваиваем значение любой из двух переменных третьей, а уже потом перемещаем значения переменных.
program Begin22;
var
a, b, tmp: real; {Для обозначения временной переменной используем tmp - temporary.}
begin
write('Введите A и B: ');
readln(a, b);
tmp := a;
a := b;
b := tmp;
writeln('A = ', a);
writeln('B = ', b);
end.Begin23. Даны переменные A, B, C. Изменить их значения, переместив содержимое A в B, B — в C, C — в A, и вывести новые значения переменных A, B, C.
И снова мы используем дополнительную переменную.
program Begin23;
var
a, b, c, tmp: real;
begin
write('Введите a, b, и c: ');
readln(a, b, c);
tmp := c; {Присваиваем значение C дополнительной переменной}
c := b;
b := a;
a := tmp;
writeln('A=', a);
writeln('B=', b);
writeln('C=', c);
end.Begin24. Даны переменные A, B, C. Изменить их значения, переместив содержимое A в C, C — в B, B — в A, и вывести новые значения переменных A, B, C.
Задача, противоположная предыдущей.
program Begin24;
var
a, b, c, tmp: real;
begin
write('Введите a, b и c: ');
readln(a, b, c);
tmp := a;
a := b;
b := c;
c := tmp;
writeln('A = ', a);
writeln('B = ', b);
writeln('C = ', c);
end.Begin25. Найти значение функции y = 3·x6 – 6·x2 – 7 при данном значении x.
И снова мы прибегаем к помощи функций power и sqr.
program Begin25;
var
x, y: real;
begin
write('Введите значение x: ');
readln(x);
y := 3 * power(x, 6) - 6 * sqr(x) - 7;
write('Y = ', y);
end.Begin26. Найти значение функции y = 4·(x–3)6 – 7·(x–3)3 + 2 при данном значении x.
program Begin26;
var
x, y: real;
begin
write('Введите значение x: ');
readln(x);
y := 4 * power(x - 3, 6) - 7 * power(x - 3, 3) + 2;
writeln('Y = ', y);
end.Begin27°. Дано число A. Вычислить A8, используя вспомогательную переменную и три операции умножения. Для этого последовательно находить A2, A4, A8. Вывести все найденные степени числа A.
В данной задачи требуется использовать вспомогательную переменную и три операции умножения, поэтому мы не можем использовать функцию power.
program Begin27;
var
A, B: real;
begin
write('Введите значение A: '); {2}
readln(A);
B := A * A; {B = 4}
writeln(A,' во второй степени - ', B);
B := B * B; {B = 16}
writeln(A,' в четвертой степени - ', B);
B := B * B; {B = 256}
writeln(A,' в восьмой степени - ', B);
end.Begin28. Дано число A. Вычислить A15, используя две вспомогательные переменные и пять операций умножения. Для этого последовательно находить A2, A3, A5, A10, A15. Вывести все найденные степени числа A.
Эта задача аналогична предыдущей, но немного сложнее.
program Begin28;
var
A, B, C: real;
begin
write('Введите значение A: ');
readln(A); {2}
B := A * A; {4}
writeln(A, ' во второй степени - ', B);
C := A * B; {8}
writeln(A, ' в третьей степени - ', C);
B := C * B; {32}
writeln(A, ' в пятой степени - ', B);
C := B * B; {1024}
writeln(A, ' в десятой степени - ', C);
B := B * C; {32768}
writeln(A, ' в пятнадцатой степени - ', B);
end.Begin29. Дано значение угла α в градусах (0 < α < 360). Определить значение этого же угла в радианах, учитывая, что 180° = π радианов. В качестве значения π использовать 3.14.
Две следующие задачи является актуальными для нас. Ведь функции sin, cos, arctan работают только с радианами. И программа, которая быстро переводит градусы в радианы или радианы в градусы, очень ценна. А теперь формула: Радианы = Градусы * pi / 180.
program Begin29;
const
pi = 3.14;
var
Gr, Rad: real;
begin
write('Введите градусную меру угла: ');
readln(Gr);
Rad := Gr * pi / 180;
writeln('Это ', Rad:5:3, ' радиан.'); {3 указывает на количество знаков полсе запятой.}
end.Begin30.Дано значение угла α в радианах (0 < α < 2·π). Определить значение этого же угла в градусах, учитывая, что 180° = π радианов. В качестве значения π использовать 3.14.
Формула нахождения градусов следует из предыдущей формулы : Градусы = Радианы * 180 / pi. Кстати, в решении данной задачи я использую стандартное значение Pi = 3.14159265358979
program Begin30;
var
Gr, Rad: real;
begin
write('Введите радианы: ');
readln(Rad);
Gr := Rad * 180 / Pi;
writeln('Это ', Gr:5:3, ' градусов.'); {3 указывает на количество знаков полсе запятой.}
end.На сегодня все! Мы с вами решили целых десять задач. Конечно, они не очень сложные, но ведь цель этих задач познакомить вас с основными функциями, вводом и выводом и показать вам то, как легко и интересно программировать на любом из языков программирования.
Begin28- Power (2,15)=32768, а у вас B := B * C; {8192}
writeln(A, ‘ в пятнадцатой степени — ‘, B);
ой. а вы можете исправить?
не соглашусь с решением 22 задачи
подставьте вот эту строчку
writeln(‘tmp ‘,tmp);
и попробуйте выполнить алгоритм снова
tmp остался равен последнему присвоенному значению, т.е «а»
получается так. сначала было две ёмкости по литру. а на выходе получается 3 ёмкости по литру
Решение правильное. Я даже не понимаю суть вопроса.
Данил,есть же решение этой задачи без добавления буферной переменной.Код получается более коипактный
Никита, Нет решения задачи без добавления буферной переменной. или вы про способ с плюсованием? Если числа будут большими, то одна из переменных может переполниться; и этот способ слишком запупыренный.
Но вы можете скинуть этот кусочек кода, чтобы все заценили.
Вот
a:=b+a;
b:=a-b;
a:=a-b;
Спасибо
Пока что только начала пользоваться сайтом, но хочу выразить благодарность! Спасибо за ваши курсы по Паскалю 🙂 Очень помогают)
Извините, как быть с ограничениями указанными в условии задач.
Мы не ищем легких путей))) в задании 21 можно обойтись лишь переменными координат точек, периметром и площадью.
правда это усложняет формулы до вида:
P:=(sqrt(sqr(x2-x1)+sqr(y2-y1)))+(sqrt(sqr(x3-x2)+sqr(y3-y2)))+(sqrt(sqr(x3-x1)+sqr(y3-y1)));
S:=sqrt((P/2)*(P/2-(sqrt(sqr(x2-x1)+sqr(y2-y1))))*(P/2-(sqrt(sqr(x3-x2)+sqr(y3-y2))))*(P/2-(sqrt(sqr(x3-x1)+sqr(y3-y1)))));
Для повышения читабельности кода такие вещи лучше все-таки разносить по разным переменным, ведь на асимптотике алгоритма это никак не сказывается.
> Здравствуйте, дорогие читателинашего сайта. На этой недели
Вы пропустили пробел))
Удачи вам там!
Здравствуйте,в 22-ю задачу можно решить используя только две переменные.
program Begin22;
var
a, b : real;
begin
write(‘Введите A и B: ‘);
readln(a, b);
a := a + b;
b := a — b;
a := a — b;
writeln(‘A = ‘, a);
writeln(‘B = ‘, b);
end.
P.S.Надеюсь ,что сам не совершил ошибок))))
Ой,нашел этот же способ ниже,простите за беспокойство.
🙂
Автор сей работы ОГРОМНОЕ тебе спасибо .что вносишь столь большой вклад в жизни людей для коих концепция самообразования не пустой звук!!!
Очень удобный и полезный сайт!
Пока всё понятно…
Я не люблю информатику
можно ли в задаче 20 еще графический нарисовать?