Составьте на паскале программу упорядочения по возрастанию

Содержание
  1. 1. Ознакомьтесь с материалами презентации к параграфу, содержащейся в электронном приложении к учебнику. Используйте эти материалы при подготовке ответов на вопросы и выполнении заданий.
  2. 2. Для чего нужна подпрограмма?
  3. 3. В чем основное отличие процедур и функций?
  4. 4. Напишите программу наименьшего общего кратного следующих четырех чисел: 36, 54, 18 и 15, используя процедуру вычисления наибольшего общего делителя двух чисел.
  5. 5. Напишите программу перестановки значений переменных в порядке возрастания. Используйте процедуру swap.
  6. 6. Видоизмените программу сортировки массива выбором так, чтобы в ней использовалась процедура выбора наибольшего элемента массива.
  7. 7. Напишите программу вычисления выражения с факториалами.
  8. 8. Напишите программу вычисления выражения: s = x^3 + x^5 + x^n, где x и n вводятся с клавиатуры вручную. Используйте подпрограмму вычисления степени.
  9. 9. Напишите функцию, которая вычисляет длину отрезка по координатам его концов. С помощью этой функции напишите программу, вычисляющую периметр треугольника по координатам его вершин.
  10. 10. Напишите функцию, вычисляющую площадь треугольника по целочисленным координатам его вершин. С помощью этой функции вычислите площадь четырехугольника по координатам его вершин.
  11. Ответ или решение 1

Приветствую всех! Здесь мы рассматриваем процедуры, в которых описываем изменение содержимого двух чисел процедурой Swap, нахождение максимумов и минимумов, упорядочение трех чисел по возрастанию и убыванию, а также циклический сдвиг трех элементов вправо или влево на 1 элемент.

Вариант 1 для описания процедуры Minmax(X, Y). Сначала решим эту задачу, используя тот же принцип, что и в предыдущей задаче – изменять значения X и Y местами. Только, если в задаче Proc10 процедура Swap(X, Y) изменяла значения переменных X и Y в любом случае, то процедура Minmax(X, Y) будет это делать только в том случае, если числа X и Y расположенны по убыванию (X > Y). Если переменные X и Y расположенны по возрастанию, то процедура реагировать не будет: переменная X и так будет минимальной, а Y – максимальной.

Вариант 2 для описания процедуры Minmax(X, Y). Из задачи Proc10 нам известна процедура Swap(X, Y) по изменению значений чисел X и Y. Давайте используем данную процедуру в задаче Proc11. Нам нужно в пременную X записать наименьшее из значений, а в Y – наибольшее. Естественно, что если X Y, то будет вызываться другая, дополнительная процедура Swap(X, Y), которая изменит значения переменных (X станет меньшим, Y – большим). Эту процедуру "вставим" внутри данной процедуры Minmax(X, Y). Для этого из задачи Proc10 берем и полностью копируем процедуру Swap(X, Y), и вставляем сразу после описания основной процедуры Minmax(X, Y), до того момента, как началась выполняться данная процедура. В этом случае процедура Swap(X, Y) будет как бы вспомогательной по отношению к основной в данном случае процедуре.

Читайте также:  Шрифт букв с днем рождения

А теперь берем предыдущий вариант процедуры Minmax(X, Y), и в теле этой процедуры (между begin и end) вместо кода:

при тех же условиях (X > Y) ставим вызов процедуры Swap(X, Y):

if X > Y then Swap(X, Y)

То есть вместо блока операторов между begin-end ставим просто одну процедуру, которая выполнит необходимые вычисления. А теперь объединим всё это вместе и запишем второй вариант решения задачи Proc11 задачника Абрамяна, используя вспомогательную процедуру Swap(X, Y) из задачи Proc10. Вот как это будет выглядеть:

В этой задаче для записи 3-х чисел в порядке возрастания мы используем уже знакомую процедуру Minmax(X, Y) из задачи Proc11, которая переписывает 2 числа в порядке возрастания. В той задаче у нас было 2 варианта для процедуры Minmax(X, Y), здесь будем использовать 1-й вариант. В задании Proc12 данная процедура выступает в роли вспомогательной процедуры по отношению к основной SortInc3(A, B, C), которая и вызывает 3 раза процедуру Minmax(X, Y).

Вариант 1 для описания процедуры SortDec3(A, B, C). В этом случае для её описания 3 раза используем тело процедуры Mimmax(X, Y) из задачи Proc11, которая записывает переменные в порядке возрастания, но при этом саму процедуру как вспомогательную к основной SortDec3(A, B, C) не используем.

Но это в общем случае неправильный вариант решения задач (использовать реализацию некоторой процедуры несколько раз внутри другой, не описывая самой процедуры). Вместо того, чтобы 1 раз описать процедуру Minmax(X, Y), а потом 3 раза вызвать, мы 3 раза полностью использовали её код. Это крайне неэффективный способ и так делать нельзя. Смотрите следующий вариант решения.

Вариант 2 для описания процедуры SortDec3(A, B, C). Здесь мы как раз используем недостающую процедуру Minmax(X, Y) по перезаписи чисел X и Y в порядке возрастания из задачи Proc11 (первый вариант решения). Данный вариант решения аналогичен решению в примере Proc12, только здесь надо числа A, B, C размещать в порядке убывания, а это значит, что числа С, В, А должны распологаться в порядке возрастания. Больше ничего не изменится.

1. Ознакомьтесь с материалами презентации к параграфу, содержащейся в электронном приложении к учебнику. Используйте эти материалы при подготовке ответов на вопросы и выполнении заданий.

2. Для чего нужна подпрограмма?

3. В чем основное отличие процедур и функций?

4. Напишите программу наименьшего общего кратного следующих четырех чисел: 36, 54, 18 и 15, используя процедуру вычисления наибольшего общего делителя двух чисел.

5. Напишите программу перестановки значений переменных в порядке возрастания. Используйте процедуру swap.

program z5;
procedure swap (var x,y: integer);
var m: integer;
begin
m:=x;
x:=y;
y:=m
end;

Читайте также:  Телефон филипс пишет что недостаточно памяти

var a, b, c: integer;
BEGIN
Writeln(‘Введите значения a, b, c’);
Readln(a, b, c);
if a>b then swap (a, b);
if a>c then swap (a, c);
if b>c then swap (b, c);

6. Видоизмените программу сортировки массива выбором так, чтобы в ней использовалась процедура выбора наибольшего элемента массива.

program z6;
type tArray = array [1..10] of integer ;
procedure swap (A:tArray);
var max, i: integer ;
begin
max:=A[1];
for i:=2 to 10 do
if A[i]>max then max:=A[i];
write (max) end;

var A:tArray;
i: integer ;

BEGIN //Случайным образом присвоим значения элементам массива и выведем его на экран
for i:=1 to 10 do A[i]:=random(50);
write (‘Массив: ‘);
for i:=1 to 10 do write(A[i], ‘ ‘);

writeln;
write (‘Наибольшее значение в массиве: ‘);
swap (A);
END.

7. Напишите программу вычисления выражения с факториалами.

program z7;
var res, i, n:integer;
function fac(n:integer): integer;
var p, i: integer;
begin
p:=1;
for i:=2 to n do
p:=p*i;
fac:=p;
end;

BEGIN
res:=0;
write (‘Введите n ‘);
readln (n);
for i:=1 to n do res := res + fac(i);
writeln (‘Сумма факториалов равна ‘, res);
END.

8. Напишите программу вычисления выражения:
s = x^3 + x^5 + x^n, где x и n вводятся с клавиатуры вручную. Используйте подпрограмму вычисления степени.

program z8;
var n, n1, x, r, res, i: integer; //В программе у нас будут только целые числа, i – счетчик

//Процедура вычисления степени
procedure stepen (var a,b: integer; var z: integer);
var i:integer;
begin
z:=1;
for i:=1 to b do z:=z*a;
end;

BEGIN
res := 0;
write (‘Введите n = ‘);
readln (n);
write (‘Введите x = ‘);
readln (x);

for i:=1 to n do begin //Цикл, где вычисляется x в степени от 1 до n b полученный результат добавляется в res, который изначально равен 0
stepen (x, i, r); //Процедура
res := res + r;
end;

writeln (‘Результат: ‘, res); //Вывод на экран полученный результат
END.

9. Напишите функцию, которая вычисляет длину отрезка по координатам его концов. С помощью этой функции напишите программу, вычисляющую периметр треугольника по координатам его вершин.

Комментарий к ответу: В функции мы используем формулу вычисления длины отрезка по ее координатам: квадратный корень из суммы (x2-x1)^2 и (y2-y1)^2. В программе вначале вводим координаты точек вершин треугольника, затем ищем длину каждого отрезка с помощью функции dlina. Находим периметр P, сложив три полученных результата и выводим его округлив до сотых. Программа содержит вычисление корня, поэтому мы использовали вещественный тип данных.

program z9;
var x1, x2, x3, y1, y2, y3, P, AB, BC, AC: real;

Читайте также:  Ошибка: учетные данные не предоставляют доступ к принтеру - как решить?

//Функция вычисления длины отрезка
function dlina (var x1,y1,x2,y2: real): real;
begin
dlina:=sqrt(sqr(x2-x1) + sqr(y2-y1));
end;

BEGIN
writeln(‘Приветствую, введите координаты вершин треугольника.’);
write(‘x1 = ‘); read(x1);
write(‘y1 = ‘); read (y1);
write(‘x2 = ‘); read(x2);
write(‘y2 = ‘); read (y2);
write(‘x3 = ‘); read(x3);
write(‘y3 = ‘); read (y3);
Writeln (‘Координаты: A[‘, x1, ‘;’, y1, ‘]; B[‘, x2, ‘;’, y2, ‘]; C[‘, x3, ‘;’, y3, ‘];’);
AB := dlina(x1, y1, x2, y2);
BC:= dlina(x2,y2,x3,y3);
AC:= dlina(x1,y1,x3,y3);
P:=AB+BC+AC;
Writeln (‘Периметр равен ‘, P:0:2);
END.

10. Напишите функцию, вычисляющую площадь треугольника по целочисленным координатам его вершин. С помощью этой функции вычислите площадь четырехугольника по координатам его вершин.

Площадь треугольника через координаты:

В формуле имеется модуль, в Паскале он обозначается abs(значение).

program z9;
var x1, x2, x3, y1, y2, y3, x4, y4, S1, S2, S: real;

//Функция вычисления площади треугольника по координатам
function plosad (var x1,y1,x2,y2,x3,y3: real): real;
begin
plosad:=abs(((x1-x3)*(y2-y3) – (x2-x3)*(y1-y3))/2);
end;

BEGIN
writeln(‘Приветствую, введите координаты вершин четырехугольника.’);
write(‘x1 = ‘); read(x1);
write(‘y1 = ‘); read (y1);
write(‘x2 = ‘); read(x2);
write(‘y2 = ‘); read (y2);
write(‘x3 = ‘); read(x3);
write(‘y3 = ‘); read (y3);
write(‘x4 = ‘); read(x3);
write(‘y4 = ‘); read (y4);
Writeln (‘Координаты: A[‘, x1, ‘;’, y1, ‘]; B[‘, x2, ‘;’, y2, ‘]; C[‘, x3, ‘;’, y3, ‘];’);
S1 := plosad(x1, y1, x2, y2, x3, y3);
S2 := plosad(x1, y1, x3, y3, x4, y4);
S:=S1+S2;
Writeln (‘Площадь равна ‘, S:0:2);
END.

Ответ или решение 1

var
a, b, c: longint;

begin
writeln (‘Введите переменную a: ‘);
readln (a);
writeln (‘Введите переменную b: ‘);
readln (b);
writeln (‘Введите переменную c: ‘);
readln (c);
if (a > b) and (a > c) and (b > c) then writeln(c, b, a) else
if (b > a) and (b > c) and (c > a) then writeln(a, c, b) else
if (c > a) and (c > b) and (a > b) then writeln(b, a, c) else
if (b > a) and (b > c) and (a > c) then writeln(c, a, b) else
if (c > a) and (c > b) and (b > a) then writeln(a, b, c) else
if (a > b) and (a > c) and (c > b) then writeln(b, c, a)
end.

Оцените статью
Добавить комментарий

Adblock detector