1-11 класс
  • 1-11 класс
  • 1 класс
  • 2 класс
  • 3 класс
  • 4 класс
  • 5 класс
  • 6 класс
  • 7 класс
  • 8 класс
  • 9 класс
  • 10 класс
  • 11 класс
Выберите класс
Предметы
Семакин
§23 ГДЗ Семакин 10 класс (Информатика)
Семакин, Хеннер, Шеина
10 класс
Класс
10
Предмет
Информатика
Автор
Семакин, Хеннер, Шеина

§23 ГДЗ Семакин 10 класс (Информатика)

Задача
  1. Для чего используются подпрограммы?
  2. В чем различие между процедурами и функциями?
  3. Какие существуют способы передачи данных между подпрограммой и вызывающей ее программой?
  4. Составьте программу вычисления площади кольца по значениям внутреннего и внешнего радиусов, используя подпрограмму вычисления площади круга (два варианта: с процедурой и с функцией).
  5. Составьте программу сложения двух простых дробей. Результат должен быть несократимой дробью. Используйте подпрограмму вычисления НОД по алгоритму Евклида. Простая дробь задается двумя целыми числами: числителем и знаменателем.
  6. По координатам вершин треугольника вычислите его периметр, используя подпрограмму вычисления длины отрезка между двумя точками.
  7. Даны три целых числа. Определите, у которого из них больше сумма цифр. Подсчет суммы цифр организуйте через подпрограмму.
Подробный ответ

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

2. Процедура выполняет действия и не возвращает значение, а функция вычисляет одно значение и может использоваться в выражениях. В процедуру данные обычно передаются через параметры-аргументы, в функцию — через параметры и возвращаемое значение.

3. Данные между вызывающей программой и подпрограммой передаются через параметры, а также через глобальные переменные.

4. Площадь кольца равна разности площадей двух кругов:

$$S=\pi R^2-\pi r^2=\pi(R^2-r^2)$$

Ниже приведены два варианта программы: с процедурой и с функцией.

var r1, r2: real;

procedure pCircleSquare(r: real; var S: real);
begin
  S := Pi * sqr(r);
end;

function fCircleSquare(r: real): real;
begin
  fCircleSquare := Pi * sqr(r);
end;

begin
  Write(‘r1, r2 = ‘);
  ReadLn(r1, r2);
  WriteLn(‘Функция S = ‘, abs(fCircleSquare(r1) — fCircleSquare(r2)):5:2);
  pCircleSquare(r1, r1);
  pCircleSquare(r2, r2);
  WriteLn(‘Процедура S = ‘, abs(r1 — r2):5:2);
end.

5. Для сложения дробей сначала находим общий знаменатель, затем числитель суммы и сокращаем дробь, разделив числитель и знаменатель на НОД. НОД удобно находить по алгоритму Евклида.

Если даны дроби $$\frac{a}{b}$$ и $$\frac{c}{d}$$, то

$$\frac{a}{b}+\frac{c}{d}=\frac{ad+bc}{bd}$$

После этого:

$$g=\gcd(ad+bc,\,bd), \quad \frac{ad+bc}{bd}=\frac{(ad+bc)/g}{(bd)/g}$$

program SumFractions;
var
  a, b, c, d, num, den, g: integer;

function GCD(x, y: integer): integer;
begin
  while y <> 0 do
  begin
    g := x mod y;
    x := y;
    y := g;
  end;
  GCD := x;
end;

begin
  ReadLn(a, b, c, d);
  num := a * d + c * b;
  den := b * d;
  g := GCD(abs(num), abs(den));
  num := num div g;
  den := den div g;
  WriteLn(num, ‘/’, den);
end.

6. Периметр треугольника равен сумме длин его сторон. Длину стороны находим по формуле расстояния между двумя точками:

$$d=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2}$$

var a1, b1, a2, b2, a3, b3: integer;
  p, a, b, c: real;

procedure dlina(x1, x2, y1, y2: integer; var d: real);
begin
  d := sqrt(sqr(x2 — x1) + sqr(y2 — y1));
end;

begin
  Read(a1, b1, a2, b2, a3, b3);
  dlina(a1, a2, b1, b2, a);
  dlina(a2, a3, b2, b3, b);
  dlina(a3, a1, b3, b1, c);
  p := a + b + c;
  Write(p:0:2);
end.

7. Для каждого числа находим сумму его цифр и сравниваем полученные значения.

Сумму цифр удобно вычислять подпрограммой:

$$s=\sum \text{цифр числа}$$

var
  a, b, c, sa, sb, sc: integer;

function SumDigits(n: integer): integer;
var s: integer;
begin
  s := 0;
  n := abs(n);
  while n > 0 do
  begin
    s := s + n mod 10;
    n := n div 10;
  end;
  SumDigits := s;
end;

begin
  ReadLn(a, b, c);
  sa := SumDigits(a);
  sb := SumDigits(b);
  sc := SumDigits(c);
  if (sa >= sb) and (sa >= sc) then
    WriteLn(a)
  else if (sb >= sa) and (sb >= sc) then
    WriteLn(b)
  else
    WriteLn(c);
end.

Ответ

1. Подпрограммы нужны для упрощения программы, повторного использования кода и разделения задачи на части.
2. Процедура не возвращает значение, функция возвращает одно значение и может входить в выражение.
3. Передача данных осуществляется через параметры и глобальные переменные.
4–7. Программы приведены выше.



Общая оценка
4.6 / 5
Другие учебники
Другие предметы