Здравствуйте, дорогие читателинашего сайта. На этой недели счетчик посещаемости наконец-то сдвинулся с мертвой точки. Это не может не радовать. Если вы новоиспеченный постоянный посетитель этого сайта, оставьте комментарий к любому посту, чтобы мы не думали, что на нашем сайте обитают только боты 🙂 Ну что ж, приступим к решению задач 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 еще графический нарисовать?