Решение задач. День третий. Задачи Begin21-30


begin21-30

Здравствуйте, дорогие читателинашего сайта. На этой недели счетчик посещаемости наконец-то сдвинулся с мертвой точки. Это не может не радовать. Если вы новоиспеченный постоянный посетитель этого сайта, оставьте комментарий к любому посту, чтобы мы не думали, что на нашем сайте обитают только боты 🙂 Ну что ж, приступим к решению задач Begin21-30.

 

Begin21. Даны координаты трех вершин треугольника: (x1, y1), (x2, y2), (x3, y3). Найти его периметр и площадь, используя формулу для расстояния между двумя точками на плоскости (см. задание Begin20). Для нахождения площади треугольника со сторонами a, b, c использовать формулу Герона:          S = √(p ⋅ ( p − a) ⋅ ( p − b) ⋅ ( p − c)), где p — полупериметр.

На первый взгляд задача может показаться весьма и весьма трудной, и для того, чтобы не заблудиться в решении, составим план наших действий:

  1. Для того, чтобы найти периметр треугольника, находим расстояния между всеми вершинами (ведь расстояния между вершинами это и есть стороны) по формуле √((x2 — x1)2+(y2 — y1)2), а затем суммируем их.
  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, используя вспомогательную переменную и три операции умножения. Для этого последовательно находить A2A4, 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.

На сегодня все! Мы с вами решили целых десять задач. Конечно, они не очень сложные, но ведь цель этих задач познакомить вас с основными функциями, вводом и выводом и показать вам то, как легко и интересно программировать на любом из языков программирования.

  1. Begin28- Power (2,15)=32768, а у вас B := B * C; {8192}

    writeln(A, ‘ в пятнадцатой степени — ‘, B);

  2. не соглашусь с решением 22 задачи

    подставьте вот эту строчку
    writeln(‘tmp ‘,tmp);
    и попробуйте выполнить алгоритм снова

    tmp остался равен последнему присвоенному значению, т.е «а»

  3. получается так. сначала было две ёмкости по литру. а на выходе получается 3 ёмкости по литру

  4. Данил,есть же решение этой задачи без добавления буферной переменной.Код получается более коипактный

  5. Никита, Нет решения задачи без добавления буферной переменной. или вы про способ с плюсованием? Если числа будут большими, то одна из переменных может переполниться; и этот способ слишком запупыренный.
    Но вы можете скинуть этот кусочек кода, чтобы все заценили.

  6. Пока что только начала пользоваться сайтом, но хочу выразить благодарность! Спасибо за ваши курсы по Паскалю 🙂 Очень помогают)

  7. Извините, как быть с ограничениями указанными в условии задач.

  8. Мы не ищем легких путей))) в задании 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)))));

  9. Для повышения читабельности кода такие вещи лучше все-таки разносить по разным переменным, ведь на асимптотике алгоритма это никак не сказывается.

  10. > Здравствуйте, дорогие читателинашего сайта. На этой недели
    Вы пропустили пробел))
    Удачи вам там!

  11. Здравствуйте,в 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.Надеюсь ,что сам не совершил ошибок))))

  12. Автор сей работы ОГРОМНОЕ тебе спасибо .что вносишь столь большой вклад в жизни людей для коих концепция самообразования не пустой звук!!!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *