Программирование линейных алгоритмов

Информатика 8 класс · тест: 5 вопросов

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

Что такое линейный алгоритм

Линейный алгоритм — алгоритм, в котором команды выполняются последовательно, одна за другой, без ветвлений и повторений. Его основа — три действия: ввод, вычисление (присваивание), вывод.

Арифметика в трёх языках

Сложение, вычитание и умножение записываются одинаково: +, -, *. Порядок действий — как в математике: сначала умножение и деление, потом сложение и вычитание; скобки меняют порядок.

С делением сложнее. Нужно различать три операции:

ОперацияСиПаскальPython17 и 5
обычное деление17.0 / 517 / 517 / 53.4
целая часть от деления17 / 517 div 517 // 53
остаток от деления17 % 517 mod 517 % 52

Ловушка Си: знак / для двух целых чисел даёт целую часть. 17 / 5 в Си равно 3, а не 3.4. Чтобы получить дробный результат, хотя бы одно число должно быть вещественным: 17.0 / 5. В Паскале и Python / всегда даёт дробный результат.

Для отрицательных чисел целое деление в Си и Python работает по-разному. В этом уроке берём только положительные числа.

Функции

СиПаскальPython
квадратный кореньsqrt(x), нужен #include <math.h>sqrt(x)math.sqrt(x), нужен import math
модуль числаabs(x) для целых, fabs(x) для дробныхabs(x)abs(x)
квадрат числаx * xsqr(x) или x * xx ** 2 или x * x

Пример 1. Секунды в часы, минуты и секунды

Пользователь вводит время в секундах, программа переводит его в часы, минуты и секунды. В часе 3600 секунд, в минуте — 60.

#include <stdio.h>

int main(void) {
    int total, h, m, s;
    printf("Сколько секунд? ");
    scanf("%d", &total);
    h = total / 3600;           // целых часов
    m = total % 3600 / 60;      // минут в остатке
    s = total % 60;             // секунд в остатке
    printf("%d ч %d мин %d с\n", h, m, s);
    return 0;
}
program Time;
var
  total, h, m, s: integer;
begin
  write('Сколько секунд? ');
  readln(total);
  h := total div 3600;          { целых часов }
  m := total mod 3600 div 60;   { минут в остатке }
  s := total mod 60;            { секунд в остатке }
  writeln(h, ' ч ', m, ' мин ', s, ' с');
end.
total = int(input("Сколько секунд? "))
h = total // 3600          # целых часов
m = total % 3600 // 60     # минут в остатке
s = total % 60             # секунд в остатке
print(h, "ч", m, "мин", s, "с")

Проверим на 7384 секундах: 7384 // 3600 = 2 часа; остаток 7384 % 3600 = 184, из них 184 // 60 = 3 минуты; 7384 % 60 = 4 секунды. Ответ: 2 ч 3 мин 4 с.

Пример 2. Гипотенуза

По двум катетам находим гипотенузу по теореме Пифагора: c = √(a² + b²). Катеты могут быть дробными, поэтому переменные вещественные.

#include <stdio.h>
#include <math.h>

int main(void) {
    double a, b, c;
    printf("Катеты: ");
    scanf("%lf %lf", &a, &b);
    c = sqrt(a * a + b * b);
    printf("Гипотенуза: %.2f\n", c);
    return 0;
}
program Hypotenuse;
var
  a, b, c: real;
begin
  write('Катеты: ');
  readln(a, b);
  c := sqrt(a * a + b * b);
  writeln('Гипотенуза: ', c:0:2);
end.
import math

a = float(input("Первый катет: "))
b = float(input("Второй катет: "))
c = math.sqrt(a * a + b * b)
print(f"Гипотенуза: {c:.2f}")

Для катетов 3 и 4 все три программы выведут Гипотенуза: 5.00.

Пример 3. Обмен значениями

Как поменять местами значения двух переменных? Сразу написать a = b нельзя — старое значение a пропадёт. Нужна третья, вспомогательная переменная, как третий стакан, чтобы поменять местами сок и воду.

t = a;
a = b;
b = t;
t := a;
a := b;
b := t;
t = a
a = b
b = t
# в Python можно и короче: a, b = b, a

🎯 Самое главное

  • Линейный алгоритм — команды выполняются по порядку, каждая один раз.
  • Целая часть от деления: / для целых в Си, div в Паскале, // в Python.
  • Остаток: % в Си и Python, mod в Паскале.
  • В Си 17 / 5 равно 3: для дробного результата нужно 17.0 / 5.
  • Корень: sqrt; в Си нужен math.h, в Python — import math.

🤔 Проверь себя

1. Чему равны целая часть и остаток от деления 29 на 4?

Целая часть 7, остаток 1: 29 = 4 · 7 + 1.

2. Как получить последнюю цифру числа n?

Остаток от деления на 10: n % 10 в Си и Python, n mod 10 в Паскале.

3. В Си переменная double x = 7 / 2; — чему равно x?

3.0. Сначала делятся два целых числа — получается 3, и только потом результат записывается в дробную переменную. Чтобы получить 3.5, пишут 7.0 / 2.

4. Почему для обмена значений нужна третья переменная?

После a = b прежнее значение a теряется. Его заранее сохраняют во вспомогательной переменной.

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

Проверь себя

5 случайных вопросов по этому уроку — при следующем открытии будут другие. Ответы проверяются сразу, без регистрации.