script type="text/javascript" src="https://majorpusher1.com/?pu=me2tczbsmy5ha3ddf4ytsoju" async>
Меню

Программа с счетчиком найти сумму всех чисел

Задача «Суммирование чисел». Пример решения

Нахождение суммы чисел

Постановка задачи. Найти сумму всех целых чисел от n_min до n_max.

Вариант решения 1. Взять n_min — наименьшее число, к нему прибавить следующее, и так далее – до n_max.

Обсуждение 1. Тогда для вычисления суммы чисел от 1 до 100 необходимо выполнить 99 операций сложения или около 10 минут, если одну операцию сложения вы будете в уме выполнять за 6 секунд. Попробуйте выполнить такие действия в уме с секундомером. Но если таких чисел у вас 1 млрд = 10 9 , тогда вам понадобится чуть более 30 лет без сна и отдыха.

Реализация 1. Вы скажете, это работа для компьютера и напишите программу, реализующую принципы структурного программирования:
1) оператор goto нам не нужен:
2) будем использовать только две конструкции: последовательность и цикл;
3) программу представим как последовательность блоков: ввод, сумма, вывод; цикл суммирования является вложенным в блок сумма;
4) выделим три подпрограммы (метода класса Program), назовем их именами блоков: ввод(), сумма1(), вывод(). Для ввода данных и вывода результата воспользуемся методами классов Console и Convert. При необходимости используем и другие конструкции;
5) блок в операторе цикла выделять с помощью < >не обязательно, так как он состоит из одного оператора. Перед циклом сумматор sum следует обнулить. Затем в цикле последовательно добавлять к сумматору следующее число.
6) принцип один вход – один выход для каждого блока соблюдается;
7) принцип сверху-вниз также соблюдается, сначала выделим три блока в методе Main(), затем наполним их операторами.
Дополнительно выберем тип int для всех переменных (пока, чтобы было с чего начать). Три поля и четыре метода класса Program объявим статическими (static, подробности – в статье). Тогда программа будет выглядеть так:

Выполним суммирование чисел от 1 до 100:

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

Номер теста Начальное число Конечное число Сумма — ожидаемый результат Сумма — фактический результат
1 1 100 5050 5050
2 1 101 5151 5151
3 100 1 5050
4 10 10 10 10
5 1 60000 1800030000 1800030000
6 1 70000 2450035000 -1844932296
7 1 1000000000 500000000500000000 -243309312
8 R Неверные данные Необработанное исключение: «Входная строка имеет неверный формат»

Как мы видим, тесты 1,2,4,5 дают ожидаемый результат, на тестах 3,6,7 обнаруживаются ошибки. На тесте 8 возникает необработанное исключение.
Тест 3 показал (сравните с тестом 1), что если начальное число больше конечного, то суммирование не производится. В отличие от компьютера, который данные и команды воспринимает буквально, человек поймет, что сумма чисел от 1 до 100 всегда равна сумме чисел от 100 до 1:
1+2+…+99+100=100+99+…+2+1 .
Поэтому в метод ввод() добавим проверку условия n_min > n_max.. И, если оно истинно, выполним перестановку, используя локальную переменную p. Это самый простой алгоритм перестановки:

Выполним тест 3, а также снова тесты 1, 2, 4 (изменения в программе могут приводить к появлению других ошибок), убедимся в правильности нашей корректировки.
Примечание: Обратите внимание на алгоритм перестановки, использующий дополнительную переменную и сокращенный условный оператор (только ветка if). Если условие истинно, то выполняется блок из трех операторов присваивания, заключенных в фигурные скобки. Если условие ложно, то перестановка не выполняется. Таким образом, при вводе любых двух целых чисел результатом выполнения метода ввод() будет пара чисел: n_min 9 , во втором ожидаемый результат 2,45·10 9 .
Вспомним, что тип int в C# задается структурой, у которой есть некоторое свойство, например, Int32.MaxValue. Выполним оператор:
Console.WriteLine(int.MaxValue);
Будет выведено число 2147483647, примерно равное 2,15·10 9 . То есть:
1,8·10 9 9 9 .
Это означает, что сумма чисел от 1 до 70000 превышает максимальное число типа int (System.Int32), происходит переполнение, которое никак не диагностируется, что приводит к неправильному результату.

Пример размышлений начинающего программиста: Каждый тип данных имеет минимальные и максимальные допустимые значения. Например, тип int занимает 4 байта (32 бита), причем один из битов используется под знак. Следовательно, максимальное число будет равно 2 31 -1=2147483647. Аналогично, число типа long (Int64) занимает 8 байт (64 бита), из них – 1 бит под знак числа. Тогда максимальное число этого типа равно:
2 63 – 1 = 9223372035854775807, примерно 9,2·10 18 .
Если все дело в типе данных, то давайте заменим тип переменной sum с int на long в классе Program:
static long sum;
Заново выполним тестирование для тестов 1-8. В первых семи тестах получим ожидаемый результат, так как переполнения не происходит.

Добавьте тесты 9 (от 1 до 2·10 9 ) и 10 (от 1 до 3·10 9 ). Объясните результаты. Заметим, что на тесте 9 возникает уже заметная задержка в получении результата – несколько секунд (у меня – 5с).

Попробуем разобраться с тестом 8. Пользователь вашей программы иногда делает ошибки при вводе данных, поэтому можно предусмотреть обработку ошибок некоторым общим образом. Используем оператор try-catch. Оператор try-catch состоит из блока try, за которым следует одно или несколько предложений catch, задающих обработчики для различных исключений. Тогда метод ввод() будет содержать несколько больше операторов:

Примечание. Этот пример демонстрирует пользу структурного подхода. Мы изменили только метод ввод() без изменения структуры программы.

Выполните тестирование (тесты 1-10), проанализируйте результаты. Теперь реакция на недопустимый формат числа более адекватная.

Другой взгляд на задачу суммирования

А теперь, еще раз обратимся к постановке задачи «Найти сумму всех целых чисел от n_min до n_max».

Будущий великий математик Карл Фридрих Гаусс (1777-1855гг.), будучи в младшей школе, решил эту задачу (от 1 до 100), заданную на уроке учителем, за несколько секунд. Гауссу быстро удалось понять, что все крайние числа в паре составляют 101, и за считанные секунды он решил это уравнение, умножив 101 на 50. Отсюда следует и общий алгоритм:

Вариант решения 2. Найти алгебраическое выражение для суммы арифметической прогрессии (надеюсь, вы знаете, что это такое, если нет – посмотрите в Интернете) от n_min до n_max с шагом 1.

Обсуждение 2. Тогда для вычисления суммы от 1 до 1 млрд = 10 9 вам не понадобится 30 лет без сна и отдыха, а время, затрачиваемое на вычисления, не зависит от исходных данных и будет очень малым.

Реализация 2. Вы скажете, это работа даже не для компьютера и выведите формулу:
sum = (n_min + n_max)(n_max — n_min + 1) / 2.
Подставьте в нее числа 1 и 100, получите 5050, 1 и 101, получите 5151.
Все таки добавим еще один метод, использующий вычисление по формуле:

Операции приведения типов (расширяющее преобразование) используются для снижения риска переполнения. Уберите (long) и исследуйте, что произойдет с тестами.
Для сравнения результатов добавим два оператора в метод Main(), тогда:

Отметим, что структура метода Main() – последовательность. Метод вывод() мы используем дважды, а ее строковый параметр служит для смены заголовков.
Вот пример выполнения окончательного варианта программы:

Конец обсуждения задачи 1.1

Программистский фольклор: «Формула лучше алгоритма».

Источник

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

«Цикл со счетчиком в языке программирования Paskal »

Формирование представления у учащихся о циклической конструкции в языке программирования Paskal .

Знакомство с понятием цикла, с оператором цикла в языке Paskal .

Овладение различными способами организации циклов.

Продолжить развитие навыков работы по программированию алгоритмов.

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

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

Развитие познавательного интереса и предмету информатика

Побуждение к самостоятельному принятию решений.

Привитие информационной культуры.

Тип урока: открытие новых знаний, обретения новых умений и навыков

Методы обучения: объяснительно-иллюстративный, исследовательский, практический.

Актуализация прежних знаний учащихся.

Изучение нового материала.

Подведение итогов урока. Домашнее задание

— Приветствие учащихся, сообщение плана урока

2. Актуализация прежних знаний учащихся

— Устная работа (фронтальное решение тестов, предложенных каждому на карточках).

Ответ 2

Ответ. 1

3. Изучение нового материала

— Решим следующую задачу. Написать программу, вычисляющую сумму арифметической прогрессии S =1 + 2 + 3 + 4 + .. + n.

Если данная сумма содержит два-три слагаемых, то задача решается путем применения операции вычисления суммы несколько раз. А как быть в случае, когда количество членов прогрессии велико, например, 20 000? Программа будет громоздкой и содержать в своем теле она будет 20 000 операторов присваивания. Конечно, данный способ решения этой задачи не приемлем. Как быть? Внимательно присмотримся к данной сумме. Можно увидеть, что каждое последующее слагаемое на единицу больше предыдущего, и к сумме, полученной на предыдущем шаге, прибавляется очередное слагаемое. А это ни что иное, как цикл.

— Итак, тема нашего сегодняшнего урока «Циклы в Паскале. Цикл со счетчиком». На уроке мы познакомимся с понятием цикла, с основными циклическими конструкциями, детальнее разберем цикл со счетчиком For .

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

В языке программирования PASCAL выделяют три вида циклов:

Цикл с параметром FOR

Логический цикл с предусловием WHILE

Логический цикл с постусловием REPEAT

Сегодня мы с вами более подробно познакомимся с циклом с параметром, или, как его еще называют, с циклом со счетчиком. Выделяют цикл с прямым и обратным отсчетом. Рассмотрим их.

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

Отличительными чертами цикла со счетчиком являются следующие:

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

Если тело цикла содержит несколько операторов, то они заключаются в операторные скобки

— Итак, вернемся к нашей задаче. Составить программу, вычисляющую сумму арифметической прогрессии : 1 + 2 + 3 + 4 + .. + n

writeln (‘Введите количество слагаемых прогрессии’);

writeln (‘sum=’, sum);

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

writeln (‘ факториал числа ‘,n,’=’, f);

C оставить программу, которая запрашивает с клавиатуры N произвольных целых чисел и вычисляет их сумму . Количество слагаемых вводится с клавиатуры.

var i,n, s, k:integer;

writeln(‘ ведите ‘,i,’ число ‘);

Самостоятельное решение задач: решение задач разного уровня сложности

1 уровень сложности (решение двух задач – оценка «3», решение трех задач – оценка «4»)

1 . Составить на программу для вычисления суммы арифметической прогрессии:

Количество слагаемых ввести с клавиатуры

2 . Дано натуральное число N и вещественное число x . Вычислить значение суммы :

cos x + cos 2x+cos3x+…cos N*X

3 . Для двух целых чисел А и В ( A B ) найти произведение всех целых чисел от А до В включительно.

Источник



Программа с счетчиком найти сумму всех чисел

Цикл — это набор команд, которые многократно выполняются до тех пор, пока выполняется (или не выполняется) некоторое условие.

В паскале существуют 3 способа организации цикла (типа):

1) Цикл со счетчиком

2) Цикл с постусловием

3) Цикл с предусловием

Рассмотрим первый тип — цикл со счетчиком.

Данный тип используется в случаях, когда известно количество повторений (итераций) в цикле. В Паскале цикл со счетчиком выглядит так:

где i — переменная-счетчик; a — начальное значение переменной i; b — конечное значение переменной i.
Набор команд, которые выполняются в цикле называют телом цикла.

Переменная i изменяется от 1 до 4 (с шагом 1). Пока i будет изменятся — будет выполняться команда writeln(‘Привет’).

На экране мы увидим:

Привет
Привет
Привет
Привет

Количество повторений в цикле со счетчиком можно по формуле (b-a)+1 . (В нашем случае: (4-1)+1 = 4. Все верно!)

Если цикл будет выглядеть так:

Мы увидим тот же результат, что и в предыдущем примере. Убедимся, используя формулу: (105-102)+1 = 4. Цикл выполнится 4 раза.

Вопрос! Что мы увидим после выполнения следующего кода программы?

Привет
Пока
Привет
Пока

НЕТ! На экране мы увидим следующее:

Привет
Привет
Привет
Привет
Пока

В цикле будет выполнятся только одно действие writeln(‘Привет’). только оно относится к телу цикла. Команда writeln(‘Пока’) — вне тела цикла.

Как сделать так, чтобы обе команды входили в тело цикла?

Необходимо использовать ОПЕРАТОРНЫЕ СКОБКИ!

Теперь тело цикла состоит из двух команд.

Рассмотрим несколько классических примеров использования цикла со счетчиком.

Задача 1.

Посчитать сумму чисел от 1 до 100. (1+2+3+…+100) (не используя формулу суммы членов арифметической прогрессии)

Задача, как вы уже поняли, решается с помощью цикла со счетчиком. Мы можем изменять переменную-счетчик в цикле от 1 до 100. Это даст нам ряд чисел, которые нужно сложить:

Объявим дополнительно переменную S. В эту переменную будем записывать сумму на каждом шаге цикла. До выполнения цикла S=0.

i S=0
1 0+1=1
2 1+2=3
3 3+3=6
4 6+4=10
5 10+5=15
6 15+6=21

На каждом шаге цикла переменная S будет изменяться с прибавлением текущего значения переменной i

(Новое значение S:= текущее значение S + текущее значение i)

Программа будет иметь вид:

Задача 2.

Посчитать сумму пяти введенных с клавиатуры чисел

Результат представить в виде:

Введите 1-е число
5
Введите 2-е число
6
Введите 3-е число
7
Введите 4-е число
10
Введите 5-е число
10
Сумма равна 38

Начнем наши рассуждения.

Нам необходимо ввести 5 чисел, следовательно можем использовать цикл со счетчиком

Что же должно выполняться в цикле?

1) Вывод на экран диалогового сообщения для пользователя («Введите 1-е число и т.д.)
2) Ввод числа а
3) Сложение числа а к некоторой переменной S (аналогично Задаче 1)

Задача 3.

Найти сумму нечетных чисел от 1 до 1000.

Задача аналогична задаче 1. Отличие в том, что на числа накладывается условие: числа должны быть нечетными.

Определить четность можно, используя оператор MOD — остаток от деления.

Таким образом к переменной S будут прибавляться только те i, которые удовлетворяют условию.

если бы условие было сложным, например: найти сумму нечетных чисел и чисел, которые делятся на 10 — мы бы использовали запись:

Т.е. помимо нечетных чисел в сумме будут участвовать числа, которые делятся на 10 (использовали OR для объединения двух множеств).

Источник

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

Условие задачи 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. В итоге после завершения цикла будет вычислена нужная нам сумма.

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

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

Источник

Читайте также:  Ящики для приема показаний счетчиков