Как составить алгоритм программы суммы

4.2. Задача «Сумма двух чисел»

Рассмотрим совсем простую задачу.

  • Входные данные: Целые числа $a$ и $b$ на одной строке (разделённые пробелом).
  • Выходные данные: Сумма $a$ и $b$.
  • Ограничения: $0 le a, b le 9$.
  • Пример
Ввод Вывод
9 7 16
  • Ограничение по времени (с): 1 секунда
  • Ограничение по памяти: 512 Mb.

Поскольку задача решается в одно действие, шаг Спроектировать алгоритм мы пропустим и перейдём сразу к псевдокоду.

SumOfTwoDigits(a, b):
    return a + b

Так как псевдокод не уточняет ввод $a$ и $b$, ниже мы приводим решения для языков C++, Java и Python3, а также рекомендации по компиляции и реализации. Вы можете скопировать и вставить код в файл, скомпилировать, запустить и протестировать с разными данными, а затем сдать исходный файл в систему проверки. Разумеется, мы рассчитываем, что вы знакомы с основами одного из языков программирования, который используется в нашей системе тестирования: C++, Python3, Java.

C++

#include <iostream>

int sum_of_digits(int first, int second) {
    return first + second;
}

int main() {
    int a = 0;
    int b = 0;
    std::cin >> a;
    std::cin >> b;
    std::cout << sum_of_digits(a, b);
    return 0;
}

Java

import java.util.Scanner;

class SumOfTwoDigits {
    static int sumOfTwoDigits(int first_digit, int second_digit) {
        return first_digit + second_digit;
    }

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int a = s.nextInt();
        int b = s.nextInt();
        System.out.println(sumOfTwoDigits(a, b));
    }
}

Python3

def sum_of_digits(first_digit, second_digit):
    return first_digit + second_digit

if __name__ == '__main__':
    a, b = map(int, input().split())
    print(sum_of_digits(a, b))

Ваша цель — реализовать алгоритм, который дает верный результат с ограничениями по времени и памяти и при любом вводе. Нет необходимости проверять, что входные данные соответствуют ограничениям: например, в задаче Сумма двух чисел вам не нужно следить за тем, чтобы целые числа $a$ и $b$ действительно были однозначными числами (это гарантировано).

Глава прочитана

Задачи

0 / 0 задач выполнено Перейти

При вычислении
суммы или произведения ряда чисел
пользуются соответствующими формулами.

ФОРМУЛА
СУММЫ

Si=Si-1+xi

Сумма равна
предыдущей сумме плюс аргумент. Начальная
сумма равна нулю. При нахождении
количества аргумент равен одному.

ФОРМУЛА
ПРОИЗВЕДЕНИЯ

Pi=Pi-1*xi

Произведение равно
предыдущему произведению, умноженному
на аргумент. Начальное произведение
всегда равно единице.

Математически
данные формулы записываются так (рис.
9.14).

Если в аргументе
около имени какой-нибудь величины стоит
индекс
счетчика
,
то внутри цикла необходимо поставить
блок ввода этой величины.

Рис.
9. 14. Формулы для вычисления суммы и
произведения

В качестве примера
рассмотрим блок-схемы алгоритмов для
приведенных на рис. 9.14 примеров.

9.3.1.4. Вложенные циклы

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

или вложенных
циклов
.
Глубина вложения циклов (то есть
количество вложенных друг в друга
циклов) может быть различной.

Рис.
9. 15. Блок-схемы алгоритмов вычисления
суммы и произведения

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

Рассмотрим два
примера вычисления вложенных циклов.

Рис.
9. 16. Вложенный цикл “до”

Вложенный
цикл “до”

Пример

Вычислите
произведение тех элементов заданной
матрицы A(10,10),
которые расположены на пересечении
четных строк и четных столбцов (рис.
9.16).

Вложенный
цикл “пока”

Рис.
9. 17. Вложенный цикл “пока”

Пример

Вычислите сумму
элементов заданной матрицы А(5,3)
– рис. 9.17.

9.4. Языки программирования

9.4.1. Программный способ записи алгоритмов. Уровни языка программирования

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

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

Следовательно,
язык для
записи алгоритмов должен быть формализован.

Такой язык принято называть языком
программирования,

а запись алгоритма на этом языке —
программой
для компьютера.

В настоящее время
в мире существует несколько сотен
реально используемых языков
программирования. Для каждого есть своя
область применения.

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

По этому критерию
можно выделить следующие уровни языков
программирования:

  • машинные;

  • машинно-оpиентиpованные
    (ассемблеpы);

  • машинно-независимые
    (языки высокого уровня).

Машинные языки
и машинно-ориентированные языки

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

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

Языки высокого
уровня делятся на:

  • Процедурные
    (алгоритмические)

    (Basic, Pascal, C и др.), которые предназначены
    для однозначного описания алгоритмов;
    для решения задачи процедурные языки
    требуют в той или иной форме явно
    записать процедуру ее решения.

  • Логические
    (Prolog, Lisp и др.), которые ориентированы
    не на разработку алгоритма решения
    задачи, а на систематическое и
    формализованное описание задачи с тем,
    чтобы решение следовало из составленного
    описания.

  • Объектно-ориентированные
    (Object Pascal, C++, Java и др.), в основе которых
    лежит понятие
    объекта, сочетающего в себе данные и
    действия над нами.

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

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Сегодня мы начнём рассматривать алгоритмы обработки
информации в массивах. Достаточно часто встречается ситуация, при которой нам
необходимо сложить элементы массива, рассмотрим задачу. На складе яблоки
хранятся в мешках, известно количество мешков и количество яблок в каждом
мешке. Директор склада попросил нас написать программу, которая вычисляет
количество яблок на складе.

Обозначим через n количество мешков на складе, через i
– номер текущего мешка, а через s – сумму яблок в мешках. Очевидно, что
для решения данной задачи нам удобно будет представить склад в виде массива
целых чисел a, элементами которого будут мешки с яблоками. Значениями
элементов будут количества яблок в мешках.

Составим блок-схему алгоритма решения задачи.
Блок-схема начинается с блока «Начало», далее будет следовать блок ввода
количества мешков на складе – n.
За ним будет следовать цикл «Для i от 1 до n», в котором будет блок ввода i-того
элемента массива. Далее мы должны задать значение суммы яблок в мешках, равной
нулю, так как пока ни одного мешка мы не просмотрели, s =
0
.
Потом снова будет следовать цикл «Для i от 1 до n», внутри
которого будет одна команда – присваивания переменной s сумму её
текущего значения и значения количества яблок в i-том мешке, s = s + a[i].
Таким образом, после просмотра всех n мешков, s будет содержать
сумму яблок во всех мешках. Далее будет следовать блок вывода s, блок-схема всегда заканчивается
блоком «Конец».

Блок-схема
алгоритма решения задачи

Начнём написание программы. Запишем служебное слово program. Назовём нашу программу sklad.
В разделе описания переменных var укажем,
что нам нужен массив a,
так как количество мешков в момент написания программы неизвестно, возьмём
размерность массива равной максимально возможному количеству мешков, например 100 элементов типа integer. А также нам понадобится
переменная n,
в которой будет храниться количество мешков на складе, переменная i,
которая будет хранить индекс текущего элемента массива, и переменная s, которая будет хранить значение
суммы яблок в мешках. Так как в данной задаче все величины выражаются в целых
числах, все переменные будут типа integer.

Между
служебными словами begin и end запишем тело программы.
Для начала выведем на экран поясняющее сообщение о том, что это программа
подсчёта яблок на cкладе
с запросом на ввод количества мешков на складе. Затем запишем команду
считывания значения переменной n с переходом на следующую строку. Далее запишем цикл for i:=1
to
n
do,
который будет содержать команду вывода на экран запроса на ввод количества
яблок в i-том мешке и команду считывания с переходом на следующую строку
значения

i-того элемента массива a.
Таким образом, мы ввели количество яблок в мешках.

Теперь
присвоим переменной s значение 0 и запишем цикл for i:=1
to
n
do,
который будет содержать всего одну команду – присваивание переменной «С», суммы
её текущего значения и значения И-того элемента массива «A»,

s:=
s
+
a[i].
Далее будет следовать команда вывода на экран поясняющего сообщения с текстом
«Количество яблок на складе:», а также значения переменной s.

Программа
решения задачи

Запустим программу на выполнение, пусть на складе
будет 4 мешка яблок, в первом мешке будет 100 яблок, во втором – 200, в третьем
– 300, а в четвёртом – 400. Действительно, всего на складе должна быть тысяча
яблок. Программа работает верно.

Пример
работы программы

Ещё раз рассмотрим нахождение суммы элементов массива
на примере нашей программы. В начале для хранения суммы элементов массива
выделяется ячейка памяти, в нашем случае это переменная s, затем ей присваивается значение,
равное 0, после чего для каждого элемента массива этой переменной присваивается
сумма её значения и значения элемента массива.

Теперь мы знаем, как найти сумму элементов массива.
Рассмотрим ещё одну задачу. Написать программу для нахождения суммы цифр целого
положительного числа. Длина числа до девяти цифр.

Обозначим число, которое вводится – k, количество его цифр – n, номер текущей цифры – i,
сумму цифр – s,
а также нам понадобится массив a, элементами которого будут цифры данного числа.

Для
начала составим блок-схему данного алгоритма. Она будет начинаться с блока
«Начало», за которым будет следовать блок ввода числа k, далее нам нужно
проинициализировать переменную i
она
будет равна нулю, так как массив цифр a пока не содержит ни одной цифры.

Теперь
нам нужно сделать из числа k
массив цифр. Запишем для этого цикл «Пока» с условием k >
0,
который
будет содержать команду выделения последней цифры числа k и записи её в
массив a.
Для этого достаточно использовать функцию нахождения остатка от деления,
которая в языке Pascal
называется mod,
так в начале нам нужно определить, в какой элемент массива a мы будем записывать данную цифру.
Для этого к числу i нужно прибавить единицу.

Теперь
i-тому элементу массива a присвоим значение последней цифры числа k, это будет остаток от его деления на
10. Теперь нужно убрать из числа k его последнюю цифру, для этого
достаточно присвоить числу k результат его безостаточного
деления на 10, данная операция записывается в языке Pascal
словом div.
Таким образом, после выполнения указанного цикла действий в массиве a
будут содержаться цифры числа k,
а в переменной i будет содержаться номер элемента массива a, в который была сохранена старшая по
разряду цифра. Он будет совпадать с количеством цифр в числе, поэтому присвоим
переменной n
значение переменной i. А также присвоим
переменной s
значение 0. Далее будет следовать уже знакомый нам цикл вычисления суммы
элементов массива a.
После него будет блок вывода

s

суммы цифр числа. Блок-схема будет заканчиваться
блоком «Конец».

Блок-схема
алгоритма решения задачи

Посмотрим, как работает наш алгоритм на примере числа
345. В начале переменной i присваивается значение 0. Так как 345 больше 0 – i увеличится
на 1, после чего первому элементу массива будет присвоено значение остатка от
деления 345 на 10, то есть 5. Само число k будет без остатка поделено на 10, и
станет равным 34. Далее так как 34 больше 0, значение переменной i
снова
увеличится на 1 и станет равным 2. Так i-тому элементу массива
будет присвоен результат остатка от деления 34 на 10, то есть 4. А число k снова будет поделено без остатка на
10 и станет равным 3. Так как 3 больше 0, переменная i станет равной 3, третьему
элементу массива a
будет присвоено значение 3, а число k снова будет поделено без остатка на
10 и станет равным 0. После завершения работы цикла массив a будет
содержать цифры числа k
в порядке, обратном их следованию в числе, а переменная i
будет
содержать номер элемента массива, который хранит цифру числа k с
самым высоким разрядом, это же число будет равно количеству элементов массива,
поэтому присвоим переменной n
значение i.
Теперь остаётся лишь просуммировать элементы массива. И вывести значение суммы
на экран. Она будет равна 12.

 Приступим к написанию программы. Назовём нашу
программу sum.
Так как число по условию не длиннее 9 цифр и значение цифры может быть только
целым, раздел описания переменных будет содержать массив a из 9 элементов типа integer, а также переменные i,
n,
s
и k
типа integer.
Тело программы будет начинаться с команды вывода на экран поясняющего сообщения
о том, что пользователь работает с программой нахождения суммы цифр числа, и
запрос на ввод числа. Далее будет следовать команда считывания числа k. Теперь присвоим переменной i
значение ноль и запишем цикл преобразования числа k в массив цифр. Он будет
продолжаться, пока k
больше 0 и будет содержать команду увеличения i на 1, команду
присваивания i-тому элементу массива a значения остатка от деления k на 10 и команду присваивания
переменной k
её значения, поделённого без остатка на 10.

После окончания цикла присвоим переменной n значение переменной i,
а переменной s
– ноль. После чего запишем цикл for i:=1
to
n
do,
который будет содержать команду присваивания переменной s суммы её текущего значения и
значения i-того
элемента массива a.
Далее будет следовать команда вывода на экран поясняющего сообщения «Сумма цифр
числа:», а также значения переменной s.

Исходный
код программы

Запустим программу на выполнение. Введём число 34 964.
Получим ответ. Сумма цифр данного числа будет равна 26. Программа работает
правильно, следовательно, задача решена.

Пример
работы программы

Обратим внимание, что данную задачу можно решать и без
использования массива. Для этого достаточно присвоить переменной s значение 0 в начале программы, и при
выделении каждой цифры числа сразу добавлять её значение к s.

Изменим нашу программу. Уберём из неё цикл нахождения
суммы элементов массива, команду присваивания переменной s значения 0 перенесём сразу после
ввода числа, а также изменим цикл выделения цифр числа. Теперь можно убрать из
раздела описания переменных переменные i и n, а также массив a.

Изменённая
программа

Из-за того, что изменённая программа имеет в своём
составе меньшее количество команд и использует меньшее количество переменных,
то есть потребляет меньше оперативной памяти, она будет работать быстрее. Снова
запустим программу на выполнение и введём то же число, что и в первый раз, 34
964. Как и в первый раз, программа вывела ответ 26. Программа работает верно.

Пример
работы изменённой программы

Важно запомнить:

Алгоритм
нахождения суммы элементов массива
состоит из трёх шагов:

1)     
Выделения ячейки памяти для хранения
суммы.

2)     
Присваивания ей значения 0.

3)      Перебора элементов массива с вычислением для каждого суммы
его значения и значения ячейки памяти для хранения суммы и с присваиванием
результата ячейке памяти для хранения суммы.

Мы научились применять алгоритм нахождения суммы
элементов массива
при решении задач.

Видеоурок 1: Разбор заданий ЕГЭ на алгоритмы

Видеоурок 2: Разбор задания ЕГЭ на циклы

Лекция: Построение алгоритмов и практические вычисления

Циклы

Составим блок-схему алгоритма вычисления суммы знакопеременного ряда:

с заданной точностью ε.

Необходимо представить алгоритм в виде псевдокода.

Для решения данной задачи используем обозначения:

S – частичная сумма ряда (стартовое значение равно 0);

ε – точность вычисления;

i – номер очередного слагаемого;

m – значение очередного слагаемого;

p – числитель очередного слагаемого.

Требуемая точность вычисления будет достигнута в случае, когда очередное слагаемое станет по абсолютной величине меньше ε. Составим блок-схему алгоритма:

На псевдокоде запись алгоритма будет выглядеть следующим образом:

алг Сумма (арг вещ х, ε рез вещ S)
        дано  l  0<х<1

надо  l  S=x-x2/2+x3/3+x4/4+…

нач цел i, вещ m, p

вводх, ε

        S := 0;   i :=1
        m :=1;   p := -1
нц покаabc(m)>ε

Р := -p*x

            m := p/i
            S := S+m  

            i := i+1
        кц

        вывод S

кон

Массивы

Массивы – это множество элементов, значение которых относится к одному типу. 

Все значения массива являются упорядоченными и имеют свой индекс.

Индекс позволяет присвоить элементу массива свое место.

 Именно поэтому найти некий элемент в массиве можно с помощью его имени и индекса.

Максимальное количество элементов данного массива – это его размерность.

Если массив состоит из некоторого ряда элементов, то он называется векторным или одномерным, если же он состоит из нескольких рядов, то он называется матричным или многомерным массивом.

Пример 1

. В массиве а каждый элемент равен 0 или 1. Заменить все нули единицами и наоборот.

Решение. Достаточно одного оператора присваивания в теле цикла:

a[i] := 1 – a[i]

Пример 2

. В массиве каждый элемент равен 0,1 или 2. Переставить элементы массива так, чтобы сначала располагались все 0, затем все 1 и, наконец, все 2. Дополнительный массив не использовать.

Решение. Можно не переставлять элементы массива, а подсчитать количество 0,1,2 и заново заполнить массив требуемым образом.

алг Сумма (арг цел n, рез арг вещ таб А[1:n] )
        дано  l  массив А содержит нули, единицы и двойки

надо  l  упорядочить массив по возрастанию

нач цел i, k1, k2

                   k1 := 0;  k2 :=0

нц дляот 1 до n

                         если А[i] =0
                             
то  k1 := k1+1; всё

                          если А[i] =1
                              
то  
k2 := k2+1всё

                   кц
нц дляот 1 до k1

                         А[i] =0
                   
кц   

                   нц для от k1+1 до k2+2
                         
А[i] =1
                   
кц  

                   нц для i от k1+k2 до n
                         
А[i] =2
                   
кц       

кон

Пример 3

. Даны два n-элементных массива x и Y одного типа. Поменять местами все xi и Yi, (i=1…n) не используя промежуточные величины.

Решение. Обмен можно выполнить в цикле для всех от 1 до с помощью серии из трех операторов присваивания:

x[i] := x[i] + y[i]

y[i] := x[i] – y[i]

x[i] := x[i] – y[i]

Пример 4

. Найти сумму элементов одномерного массива А(n).

Решение. Для суммирования положительных элементов массива вместо оператора S := S+А[i] необходимо записать:

   если А[i]>0

       то S := S+А[i]

       всё

На псевдокоде алгоритм расчета суммы выглядит следующим образом:

алг Сумма (арг цел n, арг вещ таб А[1:n], рез вещ S )
        дано  l  массив А  

надо  l  найти сумму элементов массива

нач

             цел i

             S := 0

             нц для от 1 до n

                    S := S+А[i]

             кц

кон

Действия над массивом

Данные в массиве можно искать или же сортировать. 

Основным действием, которое производится над массивом, называется поиск

Именно он лежит в основе множества других возможных манипуляций с массивами. В зависимости от того упорядочен массив или нет, поиск выполняется различным образом.

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

Сортировка – это действие, которое приводит к изменению положения элементов в заданном массиве, согласно поставленным условиям.

Сортировка производится перед поиском для более быстрого его завершения.

Существует большое разнообразие способов сортировки. Давайте рассмотрим некоторые из них:

1. Сортировка с помощью обмена

Данный способ сортировки предусматривает сравнение элемента с соседними и в случае необходимости смена их местами. Подобные перемещения элементов массива относительно друг друга производятся до тех пор, пока массив не будет упорядочен. В литературе данный метод можно так же встретить под названием «метод пузырьков» или «пузырьковая сортировка». Элементы в массиве передвигаются на свое место подобно пузырькам, которые поднимается на высоту, согласно собственному размеру.

Пример сортировки массива с помощью псевдокода:

алг Обменная_сортировка (арг цел n, арг рез вещ таб А[1:n] )
        дано  l  А – массив размерности n

надо  l  упорядочить массив по возрастанию

нач

цел i, j

вещ Tmp

нц дляiот2доn

нц дляjотnдо1

еслиА[j]<А[j-1]

тоTmp :=А[j];  А[j] :=А[j-1];

А[j-1] :=Tmp

всё

            кц

           кц

          кон

2. Метод сортировки прямым включением

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

Пример алгоритма методом сортировки прямым включением:

алг Сортировка_вставкой (арг цел n, арг рез вещ таб А[1:n] )
        дано  l  А – массив размерности n

надо  l  упорядочить массив по возрастанию

нач

цел i, j

вещ Tmp

нц дляiот2доn

Tmp :=А[j];  j :=i-1;

нц покаj>= 1 и А[j]>Tmp

А[j+1] :=А[j]

j :=i-1

 кц

            А[j+1] :=Tmp

          кц

кон

3. Метод сортировки прямым выбором

Данный способ заключается в поиске элемента, который будет самым большим (меньшим), после чего он ставится в начало массива. И так до тех пор, пока сортировка не будет выполнена полностью.

Пример алгоритма сортировки методом прямого выбора:

алг Сортировка_выбором (арг цел n, арг рез вещ таб А[1:n] )
        дано  l  А – массив размерности n

надо  l  упорядочить массив по возрастанию

нач

цел i, k

вещ Min

нц дляiот1доn-1

Min :=А[j];  k :=i

нц дляот i+1 до n

еслиMin > А[j]

тоMin :=А[j]; k :=j

       всё

          кц

          А[k] :=А[i]; А[i] :=Min

кц

кон

Процедуры и функции

Подпрограмма – это готовый алгоритм, который можно использовать многократно в различных программах. 

Подпрограммы включают в основной алгоритм более сложной программы. Они делятся на функции и процедуры.

Функция – выражение, используемое для вычислений, которому присваивается идентификатор функции.

Процедура – это некое действие, которое не позволяет вернуть исходное значение переменных.

Подпрограммы делятся на стандартные и пользовательские. 

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

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

Если же некая стандартная программа была написана вами, и вы сохраняете её в библиотеку, то она называется пользовательской.

Раздел:
Задачи /
Простейшие /

Программа вычисления суммы

Основы программирования 2.0

Основы программирования
Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать.
Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь.
Подробнее…

Условие задачи 2.4

Задача 2.4
Написать программу для вычисления суммы по формуле:


S = (1*2) / (3*4) + (3*4) / (5*6) + … + (85*86) / (87*88)

Хотя в учебнике, из которого я взял эту задачу, она помечена звёздочкой
(что означает средний уровень сложности), особых затруднений её решение не должно
вызвать даже у новичка, если, конечно, он знает, что такое циклы.

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

Алгоритм будет несложным. Мы используем четыре переменных для работы с множителями и одну переменную (Sum) для вычисления суммы:

  1. Сначала мы определяем первый множитель (n1) и присваиваем ему значение 1.
  2. Затем в цикле:
    1. Увеличиваем значения остальных множителей (n2, n3, n4) таким образом, чтобы в первой итерации n2, n3 и n4 были равны соответственно 2, 3 и 4. А последующих итерациях они также будут зависеть от значения первого множителя n1.
    2. Вычисляем выражение (n1 * n2) / (n3 * n4) и прибавляем его к значению переменной Sum.
  3. В итоге после завершения цикла будет вычислена нужная нам сумма.

Ниже приведены решения на Паскале и
С++.

Решение задачи 2.4 на Паскале

program summa;

const
  MAX_NUM = 85;

//****************************************************************
// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
//****************************************************************
var
  n1, n2, n3, n4  : Integer;
  Sum             : Single;

//****************************************************************
// ОСНОВНАЯ ПРОГРАММА
//****************************************************************
begin
  Sum := 0;
  n1 := 1;
  while n1 <= MAX_NUM do
    begin
      n2 := n1 + 1;
      n3 := n2 + 1;
      n4 := n3 + 1;
      Sum := Sum + (n1 * n2) / (n3 * n4);
      Inc(n1, 2);
    end;
  WriteLn('Summa = ', Sum:0:4);
  WriteLn('The end. Press ENTER...');
  ReadLn;
end.

Решение задачи 2.4 на С++

#include 
#include 

using namespace std;

const int MAX_NUM = 85;  

//****************************************************************
// ОСНОВНАЯ ПРОГРАММА
//****************************************************************
int main(int argc, char *argv[])
{
  int n1, n2, n3, n4;
  float Sum;
  
  Sum = 0;
  n1 = 1;
  while (n1 <= MAX_NUM)
  {
    n2 = n1 + 1;
    n3 = n2 + 1;
    n4 = n3 + 1;
    Sum = Sum + float(n1 * n2) / float(n3 * n4);
    n1 = n1 + 2;
  }
  cout << "Summa = " << Sum << endl;  
  
  system("PAUSE");
  return EXIT_SUCCESS;
}

ВАЖНО!
Обратите внимание на строку в примере на С++, которая выделена красным цветом.
Результат выражений (n1 * n2) и (n3 * n4) мы явно преобразуем к типу float.
Если этого не сделать, то деление первого выражения на второе вернёт ноль,
так как n1…n4 – это целочисленные переменные. Поэтому нам надо либо объявлять
n1…n4 как float, либо явно преобразовывать их в тип float. Вот такой вот
С++ заморочистый язык.

Как стать программистом 2.0

Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки…
Подробнее…

Помощь в технических вопросах

Помощь в технических вопросах

Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение – ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации.
Подробнее…

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