Вопросы и задания
1. Для чего используются подпрограммы?
Подпрограммы используются для структурирования программного кода, уменьшения повторяющихся фрагментов кода и облегчения понимания и поддержки программы. Они позволяют разделить программу на более мелкие, самодостаточные части, которые могут быть вызваны из основной программы.
2. В чем различие между процедурами и функциями?
Процедуры (subroutines) выполняют определенные действия, но не возвращают какое-либо значение. Они используются для выполнения действий без необходимости возвращать результат. Функции (functions) также выполняют определенные действия, но возвращают результат (значение). Они могут быть использованы в выражениях или присвоены переменным.
3. Какие существуют способы передачи данных между подпрограммой и вызывающ ей ее программой?
Способы передачи данных между подпрограммой и вызывающей программой включают:
Передачу параметров через аргументы (передача по значению или по ссылке). Использование глобальных переменных, доступных как подпрограмме, так и вызывающей программе. Использование возвращаемых значений (в случае функций). Использование динамического выделения памяти для обмена данными.
4. Составьте программу вычисления площади кольца по значениям внутреннего и внешнего радиусов, используя подпрограмму вычисления площади круга (два варианта: с процедурой и с функцией).
program AreaOfRing;
var InnerRadius, OuterRadius: real;
procedure CalculateCircleArea(var Radius: real; var Area: real); begin Area := Pi * Radius * Radius; end;
var InnerCircleArea, OuterCircleArea, RingArea: real;
begin writeln('Введите внутренний радиус: '); readln(InnerRadius); writeln('Введите внешний радиус: '); readln(OuterRadius); CalculateCircleArea(InnerRadius, InnerCircleArea); CalculateCircleArea(OuterRadius, OuterCircleArea); RingArea := OuterCircleArea - InnerCircleArea; writeln('Площадь кольца: ', RingArea:0:2); readln; end.
5. Составьте программу сложения двух простых дробей. Результат должен быть несократимой дробью. Используйте подпрограмму вычисления НОД по алгоритму Евклида. Простая дробь задается двумя целыми числами: числителем и знаменателем.
program AddFractions;
function GCD(a, b: integer): integer; begin while b <> 0 do begin a := a mod b; a := a + b; b := a - b; a := a - b; end; GCD := a; end;
procedure ReduceFraction(var Numerator, Denominator: integer); var CommonDivisor: integer; begin CommonDivisor := GCD(Numerator, Denominator); Numerator := Numerator div CommonDivisor; Denominator := Denominator div CommonDivisor; end;
var Numerator1, Denominator1, Numerator2, Denominator2: integer;
begin writeln('Введите числитель и знаменатель первой дроби: '); readln(Numerator1, Denominator1); writeln('Введите чиситель и знаменатель второй дроби: '); readln(Numerator2, Denominator2); Numerator1 := Numerator1 * Denominator2 + Numerator2 * Denominator1; Denominator1 := Denominator1 * Denominator2; ReduceFraction(Numerator1, Denominator1); writeln('Сумма дробей: ', Numerator1, '/', Denominator1); readln; end.
6. По координатам вершин треугольника вычислите его периметр, используя подпрограмму вычисления длины отрезка между двумя точками.
program TrianglePerimeter;
type Point = record X, Y: real; end;
function CalculateDistance(P1, P2: Point): real; begin CalculateDistance := sqrt(sqr(P2.X - P1.X) + sqr(P2.Y - P1.Y)); end;
var A, B, C: Point; Perimeter: real;
begin writeln('Введите координаты точки A (X Y): '); readln(A.X, A.Y); writeln('Введите координаты точки B (X Y): '); readln(B.X, B.Y); writeln('Введите координаты точки C (X Y): '); readln(C.X, C.Y); Perimeter := CalculateDistance(A, B) + CalculateDistance(B, C) + CalculateDistance(C, A); writeln('Периметр треугольника: ', Perimeter:0:2); readln; end.
7. Даны три целых числа. Определите, у которого из них больше сумма цифр. Подсчет суммы цифр организуйте через подпрограмму.
program MaxSumOfDigits;
function SumOfDigits(Number: integer): integer; var Sum, Digit: integer; begin Sum := 0; while Number > 0 do begin Digit := Number mod 10; Sum := Sum + Digit; Number := Number div 10; end; SumOfDigits := Sum; end;
var Num1, Num2, Num3, MaxSum: integer;
begin writeln('Введите три целых числа: '); readln(Num1, Num2, Num3); MaxSum := Num1; if SumOfDigits(Num2) > SumOfDigits(MaxSum) then MaxSum := Num2; if SumOfDigits(Num3) > SumOfDigits(MaxSum) then MaxSum := Num3; writeln('У числа ', MaxSum, ' больше сумма цифр.'); readln; end.