Как найти суммы переменных циклов

Вопрос состоит в том, чтобы получить сумму всех результатов данного цикла. Как это сделать?

summa = 120
procent = 5
pribavka = 3
i = 0
a = summa - (summa / 100* procent)
print(a)
while i < 6:
    summa_next_day = summa + pribavka
    pribavka += 3
    summa_procent = summa_next_day - ((summa_next_day) / 100 * procent)
    print(summa_procent)
    i += 1

задан 23 дек 2018 в 19:03

Kamikoto's user avatar

4

summa = 120
procent = 5
pribavka = 3
i = 0
a = summa - (summa / 100* procent)
print(a)
114.0

while i < 6:
    summa_next_day = summa + pribavka
    pribavka += 3
    summa_procent = summa_next_day - ((summa_next_day) / 100 * procent)
    print(summa_procent)
    i += 1

116.85
119.7
122.55
125.4
128.25
131.1
# 116.85+119.7+122.55+125.4+128.25+131.1 = 743.85

# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
pribavka = 3
sum([ (summa + pribavka*(it+1)) - ((summa + pribavka*(it+1)) / 100 * procent) for it in range(6)])

743.85

ответ дан 23 дек 2018 в 20:25

S. Nick's user avatar

S. NickS. Nick

70.2k96 золотых знаков36 серебряных знаков55 бронзовых знаков

Если я правильно понял вопрос, нужна сумма всех summa_procent? Тогда просто добавить еще одну одну переменную и в нее плюсовать результаты:

summa = 120
procent = 5
pribavka = 3
i = 0
a = summa - (summa / 100* procent)
# Инициализируем переменную
gross_sum = 0
print(a)
while i < 6:
    summa_next_day = summa + pribavka
    pribavka += 3
    summa_procent = summa_next_day - ((summa_next_day) / 100 * procent)
    # Прибавляем новый результат к общей сумме
    gross_sum += summa_procent
    print(summa_procent)
    i += 1
# Выводим общую сумму
print(gross_sum)

ответ дан 24 дек 2018 в 16:56

Nick's user avatar

NickNick

788 бронзовых знаков

Материалы по курсу «Основы программирования»

Синтаксис цикла while выглядит так:

while ‹условие›:
    ‹тело цикла›
  • ‹условие› — логическое выражение, т.е. выражение, которое может быть
    истинным или ложным.
  • ‹тело цикла› — последовательность операторов с отступом

Если тело цикла состоит из одного оператора, то цикл, также как и if,
можно записать в одну строчку:

while ‹условие›: ‹тело цикла›

Но так лучше не писать из стилистических соображений.

Как он выполняется:

  • Вычисляется значение выражения ‹условие›.
  • Если условие ложное, цикл прерывается, ‹тело цикла› ни разу не выполняется.
  • Если условие истинноое, выполняется ‹тело цикла›.
  • И потом снова вычисляется ‹условие›.
  • Если оно ложное — цикл прерывается, если истинное, снова выполняется ‹тело
    цикла›
    .
  • И так далее.

Т.е. пока значение ‹условия› истинное, поочерёдно вычисляется ‹условие›
и выполняется тело цикла.

Сравним с if:

Блок либо выполнится, либо не выполнится.

Блок может выполняться много раз.

Итерация — однократное выполнение тела цикла.

Пример. Просуммировать все числа от 1 до 100.

sum = 0
i = 1
while i <= 100:
    sum = sum + i
    i = i + 1

В переменной i находится очередное число. В начале оно равно 1, затем
на каждой итерации (проходе, витке) цикла оно увеличивается на 1. В результате
на первом витке i равно 1, на втором — i равно 2 и т.д. Таким образом,
в переменной i на входе в цикл находится номер текущей итерации.

Переменная sum изначально равна нулю, на каждом витке цикла её содержимое
увеличивается на номер этой итерации цикла (значение переменной i). В итоге,
значение переменной sum после завершения цикла увеличится на сумму чисел
от 1 до 100. Начальным её значением было число 0, поэтому после завершения
цикла в ней будет сумма чисел от 0 до 100.

Этот цикл обязательно завершится, т.к. до начала цикла переменная i хранила
значение меньше 100, на каждом проходе цикла переменная i увеличивается
и поэтому рано или поздно превысит 100 — условие i <= 100 станет ложным
и цикл прервётся.

Этот пример можно записать компактнее:

sum = 0
i = 1
while i <= 100:
    sum += i
    i += 1

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

является сокращением для

‹перем› = ‹перем›  ‹знак›  ‹выраж›

Вернёмся к циклу while. Для цикла вида

while ‹условие›:
    ‹тело цикла›

если в теле цикла нет явных конструкций прерывания цикла (break, return),
можно быть уверенным, что после завершения цикла ‹условие› будет ложным.

А внутри самого цикла ‹условие› истинное.

Пример. Написать функцию is_prime(n), проверяющую число на простоту.

def is_prime(n):
    проверить число на простоту

Число простое, если оно больше чем 2 и делится только на себя и на единицу.
Число делится на другое, если остаток от деления равен нулю.

def is_prime(n):
    перебирать все числа от 2 до бесконечности,
     пока не найдётся делитель
    сравнить делитель с n

Считаем, что n у нас не меньше 2. Среди чисел от 2 до бесконечности
рано или поздно найдётся делитель числа n — для составного числа это будет
один из делителей n, для простого — само n.

def is_prime(n):
    divisor = 2
    while n не делится на divisor:
        увеличить divisor на 1

    return divisor == n

Уточняем дальше:

def is_prime(n):
    divisor = 2
    while n % divisor != 0:
        divisor += 1

    return divisor == n

Данная функция зациклится, если n будет отрицательным, нулём или единицей.
Она определена только для n >= 2.

Функцию можно оптимизировать, перебирая делители не до бесконечности
(фактически, до n), а до √n:

def is_prime(n):
    divisor = 2
    while (divisor <= n**0.5) and (n % divisor != 0):
        divisor += 1

    return а что тут написать?›

Цикл продолжается, пока divisor <= √n и при этом n не делится на divisor
без остатка. Соответственно, чтобы цикл прекратился, должно нарушится
хотя бы одно из условий:

  • divisor > √n,
  • n делится на divisor без остатка.

Признаком того, что число простое, является первое условие — очередной кандидат
в делители превысил √n.

def is_prime(n):
    divisor = 2
    while (divisor <= n**0.5) and (n % divisor != 0):
        divisor += 1

    return divisor > n**0.5

Пример. Найти сумму цифр целого числа.

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

Целочисленное деление в Python — это операция //, возвращает целую часть
частного:

>>> 30 / 4
7.5
>>> 36 / 4
9.0
>>> 30 // 4
7
>>> 36 // 4
9

Назовём функцию sum_digits(n):

def sum_digits(n):
    найти сумму цифр

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

def sum_digits(n):
    sum = 0
    while цифры не кончились:
        найти очередную (последнюю) цифру
        увеличить sum на очередную цифру
        отбросить последнюю цифру числа
    return sum

Уточняем:

def sum_digits(n):
    sum = 0
    while n != 0:
        last_digit = n % 10
        sum += last_digit
        n //= 10
    return sum

В предпоследней строке мы воспользовались сокращённой записью для n = n // 10.

Приёмы использования цикла while

Перебор всех значений

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

Шаблон решения:

‹установка на начало›
while ‹значения не кончились›:
    ‹сделать что-то с текущим значением›
    ‹перейти к следующему›

Под этот шаблон хорошо подходит предыдущий пример — суммирование цифр числа:

def sum_digits(n):
    sum = 0
    while n != 0:
        last_digit = n % 10
        sum += last_digit
        n //= 10
    return sum
  • Здесь ‹установки на начало› нет, т.к. в переменной n уже лежит исходное
    число.
  • ‹значения не кончились› — условие n != 0 — цифры в числе не кончились.
  • ‹сделать что-то с текущим› — две первые строчки тела цикла:
    last_digit = n % 10
    sum += last_digit
    
  • ‹перейти к следующему› — n //= 10 — отбрасывание последней цифры.

Другой пример с сегодняшней лекции:

sum = 0
i = 1
while i <= 100:
    sum += i
    i += 1
  • ‹установка на начало› — i = 1,
  • ‹значения не кончились› — i <= 100,
  • ‹сделать что-то с текущим› — sum += i — увеличение суммы на номер витка,
  • ‹перейти к следующему› — i += 1.

Поиск значения при помощи цикла while

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

Шаблон решения.

установка на первое значение
while значения не кончились and текущее  не искомое:
    переходим к следующему

if значения кончились:
    сделать что-то, когда искомого значения нет
else:
    текущее значение  искомое, сделать что-то с ним

Пример. Ранее мы рассматривали пример на определение простоты числа.
Рассмотрим его ещё раз, но уже с точки зрения приёма поиска при помощи цикла
while.

Если число составное, то у него найдутся два делителя: m = n × k, при этом
либо n == k, т.е. m = n² = k², либо один из делителей будет меньше √n,
а второй — больше, чем √n.

Поэтому, чтобы определить, составное ли это число, нужно найти делитель,
который будет не больше, чем √n. Т.е. задача проверки на простоту сводится
к проверке на поиск делителя.

def is_prime(n):
    установка на начало
    while не достигли конца and не нашли:
        перейти к следующему

    if достигли конца:
        сделать что-то, когда не нашли
    else:
        сделать что-то, когда нашли

Немного уточним фразы в псевдокоде:

def is_prime(n):
    установка на первый кандидат в делители
    while кандидат в делители не больше n and это не делитель:
        перейти к следующему

    if кандидат в делители больше n:
        сделать что-то, когда не нашли
    else:
        сделать что-то, когда нашли

Можем уточнить две последние фразы: если делитель найден, число составное,
функция возвращает ложь. Если не найден — простое, функция возвращает истину:

def is_prime(n):
    установка на первый кандидат в делители
    while кандидат в делители не больше n and это не делитель:
        перейти к следующему

    if кандидат в делители больше n:
        return True
    else:
        return False

Кандидата в делители положим в переменную divisor и перепишем на Python ещё
несколько фраз в псевдокоде:

def is_prime(n):
    divisor = 2
    while divisor <= n**0.5 and n % divisor != 0:
        divisor += 1

    if divisor > n**0.5:
        return True
    else:
        return False

Получили готовую работающую функцию. Но её можно упростить.

Как мы знаем, конструкцию вида

if условие:
    return True
else:
    return False

можно упростить до

В рассматриваемой функции мы видим похожую конструкцию:

    if divisor > n**0.5:
        return True
    else:
        return False

Теперь мы можем упростить его до одной строчки:

Целиком функция примет вид:

def is_prime(n):
    divisor = 2
    while divisor <= n**0.5 and n % divisor != 0:
        divisor += 1

    return divisor > n**0.5

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

def gcd(m, n):
    найти НОД

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

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

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

def gcd(m, n):
    установка на начало
    while не достигли конца and текущее  не искомое:
        перейти к следующему

    if достигли конца:
        случай, когда НЕ нашлось
    else:
        случай, когда нашлось

Кандидат в делители будем хранить в переменной res. Перебирать числа будем
в порядке убывания, начнём с абсолютного значения m. На самом деле, можно
и с n, можно выбрать из них наименьшее, но это нам не важно, нам важно
рассмотреть поиск.

  • ‹установка на начало — res = abs(m)
  • ‹не достигли конца› — res > 0
  • ‹текущее — не искомое› — НЕ общий делитель. Общий делитель — делится
    на оба числа без остатка. Т.е. НЕ общий делитель — not (m % res == 0 and
    n % res == 0)
    .
  • ‹перейти к следующему› — res -= 1, т.к. перебираем по убыванию.

Вернёмся к коду:

def gcd(m, n):
    res = abs(m)
    while res > 0 and not (m % res == 0 and n % res == 0):
        res -= 1

    if достигли конца:
        случай, когда НЕ нашлось
    else:
        случай, когда нашлось

Вопрос. А может ли res быть равным нулю? Отрицательным быть не может, т.к.
это абсолютное значение числа (res = abs(m)). Нулём может, только когда
m сам равен нулю. Но если одно из чисел равно нулю, то наибольший общий
делитель — второе число.

В остальных случаях res не будет равен нулю, т.к. искомый элемент (общий
делитель) обязательно найдётся — в худшем случае это будет 1.

Поэтому, в случае, когда делителя не нашлось (m == 0), возвращаем n,
а в остальных случаях — найденный общий делитель:

def gcd(m, n):
    res = abs(m)
    while res > 0 and not (m % res == 0 and n % res == 0):
        res -= 1

    if res == 0:
        return n
    else:
        return res

Примечание. Часто для результата функции заводят переменную с именем res.

Войти на сайте МЭШ

Войдите с учетной записью ученика или учителя МЭШ,
чтобы получить доступ к личному кабинету.

Сумма чисел последовательности – Пример 1

Задача

Найти сумму всех целых чисел от 100 до 500. 

Напишем программу, которая решает данную задачу, без использования формулы. Если мы будем просто записывать результат сложения в переменную s, например, как

(s=100+101+102+103+…+500),

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

Как же нам поступить?
Если мы обратим внимание на запись выше, то у нас постоянно используется сложение “+“.
Можно попробовать добавлять числа к переменной s постепенно. Например, используя такую запись

s = s + i.

Что мы сделали:
1) справа мы поставили вычисление выражения s + i, то есть мы берем значение переменной s и добавляем к нему значение переменной i;
2) слева мы поставили имя переменной s, то есть весь результат вычисления справа будут сохраняться в эту же переменную s, таким образом мы будем изменять значение переменной s
Останется только изменять значение переменной i в нужном диапазоне. Это можно сделать с помощью цикла for.
 

Числа от 100 до 500, которые относятся к нашему диапазону, должны по очереди попадать в переменную i

Пример
// ВАЖНО! В начале необходимо обнулить переменную s, 
// чтобы на первом шаге число 100 добавлялось к нулю, 
// а не к тому что в памяти!
s=0;  
for ( i = 100; i <= 500; i++)  // заголовок цикла, в котором переменная i 
    s = s + i;                    // меняет свое значение от 100 до 500 с шагом 1,
                  // в теле цикла постепенно к переменной s, 
                  // добавляем значение изменяющейся переменной i,
                  // и результат сохраняем обратно в переменной s

Данное решение очень похоже на вычисление суммы по действиям:
(s = 0 + 100 = 100, \ s = 100 + 101 = 201, \ s = 201 + 102  = 303 \ … )

Максимальное число в последовательности

Максимальное число среди заданных чисел

При изучении условного оператора мы затрагивали тему поиска максимального числа из нескольких введенных чисел. В задаче “Максимум из четырех чисел” мы использовали следующий алгоритм:
1. присвойте значение переменной M первой из четырех переменных;
2. если значение второй переменной больше, чем значение, находящееся в переменной M, то замените значение переменной на значение второй переменной;
3. если значение третьей переменной больше, чем значение, находящееся в переменной M, то замените значение переменной M на значение третьей переменной;
4. если значение четвертой переменной больше, чем значение, находящееся в переменной M, то замените значение переменной на значение четвертой переменной.

Видно, что каждое  число (обозначим его за X) мы сравнивали с переменной M, следующим образом:

псевдокод
ввод Х
если (M < X), то
  M = X

Главное в этом коде определить, какое начальное значение будет у переменной M.
Обычно, при решении задачи на поиск максимума или минимума, начальное значение переменной M присваивают равной первому числу.
Таким образом, вышеуказанный код необходимо выполнить на 1 раз меньше, чем количество чисел (т.к. первое число необходимо ввести и сохранить в качестве начального значения переменной M).
Если у нас количество чисел задается с клавиатуры (например, в переменную n), то мы можем организовать цикл (от 2 до n), используя для хранения числа одну и ту же переменную.

Попробуйте написать программу самостоятельно.

Минимальное не из всех

Максимальное не среди всех

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

Например, если мы ищем максимальное отрицательное число, то имея набор данных: ({5, -2, 4, 2, -1, -3}) мы получим в начальном значении максимума число 5, а оно положительное и больше любого отрицательного. И, следовательно, условие X > M всегда будет ложно.

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

Исправить это можно с помощью добавления внутри цикла следующего условия:

псевдокод
если X - отрицательное, то
  если M >= 0 или M < X, то
    M = X

В указанном коде условие M >= 0 позволяет выполнить действие M = Х даже в том случае, если первоначально в переменную попало значение, которое заведомо больше остальных (в рассмотренном нами примере – значение равное 5).

Еще заметим, что если диапазон изменения чисел известен, то в качестве начального значения максимума (минимума) можно брать минимальное (максимальное) число из указанного диапазона.

Номер максимального и минимального числа

Подсказка

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

Второй максимум

Задача

Дано N чисел. Найти второй по величине максимальный элемент последовательности.

Данная задача допускает два толкования.
Например, если нам дан набор чисел: (10 15 20 35 14 35 10), то каким должен быть ответ?
Под “вторым по величине максимальным элементом” или просто “вторым максимумом”, можно понимать:
1) значение, которое стояло бы на предпоследнем месте, если бы мы все значения расставили (отсортировали) по неубыванию (каждый следующий больше или равен предыдущему). Тогда для рассмотренного набора чисел ответом будет значение 35;
2) значение элемента, больше которого только максимальный. Тогда ответ – 20.
Если в наборе чисел только один максимальный элемент (все остальные меньше), то оба толкования совпадают, и ответ будет одинаковый для обоих случаев, иначе – ответ будет разный.

Рассмотрим первый случай (алгоритм будем записывать на псевдокоде).
Для нахождения ответа будем использовать две переменные:
1) максимум1 – максимальное значение (первый максимум);
2) максимум2 – второй максимум (наш ответ).

Если диапазон изменения значений известен, то в качестве начальных значений принимаем число, которое заведомо меньше нижней границы диапазона (например, при диапазоне от -1000

до 1000

– берем число

-1001)
Если диапазон значений неизвестен, то можно первые два вводимых числа записать в начальные значения переменных максимум1 и максимум2, а затем сравнить эти две переменных.

ввод N //количество чисел
ввод a, б
максимум1 = а
максимум2 = б
если б > а, то
    максимум1 = б
    максимум2 = а

Далее рассматриваем все остальные элементы (первые 2 уже просмотрели, значит начинать будем с 3го)

нц для i от 3 до n
    ввод а
    если а > максимум1 //встретилось значение большее максимума1
      то 
        максимум2 = максимум1 //бывший первый максимум станет вторым
        максимум1 = а  //первым максимумом станет новый элемент
      иначе
        //очередной элемент не больше максимум1
        //его необходимо сравнить со значением максимум2
        если а > максимум 2
          то
            максимум2 = а  //принимаем его в качестве нового значения максимум2
                           // максимум1 в этом случае не меняется
        все
    все
кц

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


Содержание

  • 1. Нахождение суммы положительных элементов массива из n целых чисел
    • 1.1. Реализация с помощью цикла for
    • 1.2. Реализация с помощью цикла while
    • 1.3. Реализация с помощью цикла do…while
  • 2. Найти сумму элементов массива, которые размещаются на парных индексах
  • 3. Найти произведение элементов массива, которые больше заданного числа
  • 4. Определение наличия (отсутствия) заданного символа в массиве символов (тип char)
  • 5. Определение наличия (отсутствия) заданного числа в массиве чисел. Массив имеет n целых чисел
  • 6. Поиск позиции последнего вхождения элемента k в массиве из n целых чисел
  • 7. Поиск позиции первого вхождения элемента k в массиве из n целых чисел
  • 8. Подсчет количества элементов k в массиве из n целых чисел
  • 9. Подсчет количества элементов в массиве из n вещественных чисел, которые меньше заданного значения k
  • 10. Подсчет количества элементов в массиве из n вещественных чисел, значение которых находится в пределах диапазона [a .. b].
  • 11. Подсчет количества парных элементов в массиве из n целых чисел
  • Связанные темы

Поиск на других ресурсах:

1. Нахождение суммы положительных элементов массива из n целых чисел

Задан массив A из 10 целых чисел. Найти сумму положительных элементов массива

1.1. Реализация с помощью цикла for

В данном примере пропущен ввод массива A

// Нахождение суммы положительных элементов массива
const int Max = 10;
int A[Max]; // заданный массив
int i;

// ввод массива A
// ...

// вычисление суммы
int sum = 0;

for (i=0; i<MaxN; i++)
    if (A[i]>0)
        sum = sum + A[i];
1.2. Реализация с помощью цикла while
// Нахождение суммы положительных элементов массива
const int Max = 10;
int A[Max]; // заданный массив
int i; // дополнительная переменная
int sum = 0; // результат

// ввод массива A
// ...

// вычисление суммы
i=0;
while (i<MaxN)
{
    if (A[i]>0)
        sum+=A[i];
    i++;
}
1.3. Реализация с помощью цикла do…while
// Нахождение суммы положительных элементов массива
const int Max = 10;
int A[Max]; // заданный массив
int i; // дополнительная переменная
int sum = 0; // результат

// ввод массива A
// ...

// вычисление суммы
i=0;

do
{
    if (A[i]>0)
        sum+=A[i];
    i++;
}
while (i<MaxN);

 

2. Найти сумму элементов массива, которые размещаются на парных индексах

В данном примере вычисляются суммы элементов массива A, индексы которых есть парными: 0, 2, 4, … Чтобы определить есть ли число (индекс массива) парным, нужно выполнить проверку

if ((i%2)==0)
{
    // действия, если число парное
    // ...
}


Реализация решения данной задачи тремя видами цикла (ввод массива A пропущен).

// Нахождение суммы элементов массива, имеющих парные индексы (0, 2, 4,...)
const int Max = 10;
int A[Max]; // заданный массив
int i; // дополнительная переменная
int sum1, sum2, sum3; // результаты вычислений разными видами циклов

// ввод массива A
// ...

// вычисление суммы, цикл for
sum1 = 0;
for (i=0; i<Max; i++)
    if ((i%2)==0) // определение парности числа
        sum1+=A[i];

// вычисление суммы, цикл while
sum2 = 0;
i=0;
while (i<MaxN)
{
    if ((i%2)==0) sum2+=A[i];
    i++;
}

// вычисление суммы, цикл do...while
sum3 = 0;
i=0;
do
{
    if ((i%2)==0)
        sum3+=A[i];
    i++;
}
while (i<MaxN);

 

3. Найти произведение элементов массива, которые больше заданного числа

В примере находится произведение элементов массива A, которые больше числа, которое размещается в переменной number.
Реализация задачи с использованием цикла for:

// произведение элементов массива, которые больше заданного числа
const int Max = 10;
int A[Max]; // заданный массив
int number; // заданное число
int i; // дополнительная переменная
int res; // результат - произведение

// ввод массива A
for (i=0; i<MaxN; i++)
{
    A[i] = i;
}

// задание числа number
number = 5;

// поиск произведения - цикл for
res = 1;
for (i=0; i<MaxN; i++)
    if (A[i]>number)
        res = res * A[i];

// res = 3024

Если размерность массива большая, то результат произведения целесообразно держать в переменной типа double (float). Это связано с тем, что результатом произведения могут быть очень большие или очень маленькие числа. При использовании целых типов может возникнуть переполнение.

Фрагмент реализации данной задачи с использованием цикла while

...

// поиск произведения - цикл while
res = 1;
i=0;
while (i<MaxN)
{
    if (A[i]>number)
        res = res * A[i];
    i++;
}
// res = 3024

Реализация с помощью цикла do…while

// поиск произведения - цикл do...while
res = 1;
i=0;

do
{
    if (A[i]>number)
        res = res * A[i];
    i++;
}
while (i<MaxN);

// res = 3024

 

4. Определение наличия (отсутствия) заданного символа в массиве символов (тип char)

Пусть задан массив символов M. Определить, есть ли заданный символ sym в массиве M. В данном примере пропущен этап ввода массива M и символа sym. Реализация алгоритма с использованием цикла for.

// определение наличия (отсутствия) символа в массиве M
char M[10]; // заданный массив
char sym; // заданный символ
int i;
bool f; // результат: true - символ sym есть в массиве M

// ввод массива M
// ...

// вычисление
f = false;
for (i=0; i<10; i++)
    if (M[i]==sym)
        f = true;

 

5. Определение наличия (отсутствия) заданного числа в массиве чисел. Массив имеет n целых чисел

Задан массив A целых чисел. Определить, есть ли заданное число num в массиве A.
Реализация с использованием цикла while (ввод массива A и переменных n, num пропущен).

// определение наличия (отсутствия) заданного числа в массиве чисел
int A[50]; // заданный массив A
int n; // текущая размерность массива n = 1..50
int num; // искомое число
int i; // дополнительная переменная
bool f; // результат: f=true - число есть в массиве, иначе f=false

// ввод A, n, num
// ...

// вычисление
f = false;
i=0;

while (i<n)
{
    if (A[i] == num)
        f = true;
    i++;
}

 

6. Поиск позиции последнего вхождения элемента k в массиве из n целых чисел

Способ 1 (медленный).

В данном алгоритме результирующая переменная pos определяет позицию последнего вхождения элемента k в массиве из n целых чисел. Если такого символа нет в массиве, то pos = -1. Реализация с помощью цикла do…while

// поиск позиции последнего вхождения элемента k в массиве из n целых чисел
int A[50]; // заданный массив A
int n; // текущая размерность массива n = 1..50
int k; // искомое число
int i; // дополнительная переменная
int pos; // результат - номер позиции, если pos=-1, то числа k не найдено в массиве A

// ввод A, n, k
// ...

// вычисление, реализация с помощью цикла do...while

pos = -1;
i=0;

do
{
    if (A[i] == k)
        pos = i;
    i++;
}
while (i<n);

Способ 2 (быстрый).

Если перебирать (пересматривать) индексы массива от конца к началу, то первый элемент равен k будет позицией последнего вхождения. В этом случае реализация алгоритма (цикл do…while) будет следующей

// поиск позиции последнего вхождения элемента k в массиве из n целых чисел
int A[50]; // заданный массив A
int n; // текущая размерность массива n = 1..50
int k; // искомое число
int i; // дополнительная переменная
int pos; // результат - номер позиции, если pos=-1, то число k не найдено в массиве A

// ввод A, n, k
// ...

// вычисление, реализация с помощью цикла do..while

pos = -1;
i=n-1;

do
{
    if (A[i] == k)
    {
        pos = i;
        i=-1; // выход из цикла
    }
    else
        i--;
}
while (i>=0);

 

7. Поиск позиции первого вхождения элемента k в массиве из n целых чисел

Как было показано в предыдущем пункте, эту задачу можно решать разными способами. В нижеследующем коде массив пересматривается от начала к концу. Как только встречается элемент k, происходит запоминание позиции элемента k и выход из цикла.

Реализация задачи с использованием цикла for.

// поиск позиции первого вхождения элемента k в массиве из n целых чисел
int A[50]; // заданный массив A
int n; // текущая размерность массива n = 1..50
int k; // искомое число
int i; // дополнительная переменная
int pos; // результат - номер позиции, если pos=-1, то число k не найдено в массиве A

// ввод A, n, k
// ...

// вычисление, реализация с помощью цикла for
pos = -1;
for (i=0; i<n; i++)
    if (A[i]==k)
    {
        pos = i;
        break; // выход из цикла
    }

 

8. Подсчет количества элементов k в массиве из n целых чисел

В нижеследующем коде пропущен ввод массива A и значений n, k.

// подсчет количества элементов k в массиве A
int A[50]; // заданный массив A
int n; // текущая размерность массива n = 1..50
int k; // искомое число
int i; // дополнительная переменная
int count; // результат - количество найденных элементов

// ввод A, n, k
// ...

// вычисление, реализация с помощью цикла while
count=0;
i=0;
while (i<n)
    if (A[i++]==k)
        count++;

 

9. Подсчет количества элементов в массиве из n вещественных чисел, которые меньше заданного значения k

Реализация с помощью цикла do…while

// подсчет количества элементов, которые меньше заданного k
int A[50]; // заданный массив A
int n; // текущая размерность массива n = 1..50
int k; // сравниваемое значение
int i; // дополнительная переменная
int count; // результат

// ввод A, n, k
// ...

// вычисление, реализация с помощью цикла while
count=0;
i=0;

do
{
    if (A[i]<k)
        count++;
    i++;
}
while (i<n);

 

10. Подсчет количества элементов в массиве из n вещественных чисел, значение которых находится в пределах диапазона [a .. b].
// подсчет количества элементов, которые лежат в заданном диапазоне
double M[50]; // заданный массив M
int n; // текущая размерность массива n = 1..50
double a, b; // сравниваемые значения
int i; // дополнительная переменная
int count; // результат

// ввод A, n, a, b
// ...

// вычисление, реализация с помощью цикла for
count=0;
for (i=0; i<n; i++)
    if ((M[i]>=a)&&(M[i]<=b))
        count++;

 

11. Подсчет количества парных элементов в массиве из n целых чисел
// подсчет количества парных элементов в массиве целых чисел
int A[10]; // заданный массив A
int n; // текущая размерность массива n = 1..10
int i; // дополнительная переменная
int count; // результат - количество парных элементов

// ввод A, n
// ...

// вычисление, реализация с помощью цикла for
count=0;
for (i=0; i<n; i++)
    if ((A[i]%2)==0)
        count++;

 


Связанные темы

  • Одномерные массивы. Циклы for, while, do…while
  • Массивы. Примеры решения распостраненных задач с одномерными массивами

 


JaySky

2 / 2 / 3

Регистрация: 17.02.2014

Сообщений: 65

1

02.02.2015, 17:18. Показов 3180. Ответов 2

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

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

PHP
1
2
3
4
5
6
7
8
9
$query=mysql_query("SELECT * FROM `table`");
while ($a=mysql_fetch_assoc($query)) {
$kol=$a['kolichestvo']; //количество товара
$cena=$a['price']; //цена товара
$summa=$kol*$cena; //количество умножаем на цену
 
//нужно чтобы $summa сам себя суммировал
 
}//while

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



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

02.02.2015, 17:18

Ответы с готовыми решениями:

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

Сумма в цикле
Просуммировать для какого – либо n в цикле.

1^2-3^2+5^2+…(-1)^n*(2*n+1)^2

Вот код цикла:

Сумма в цикле
Есть циклическая сумма примера ((1/x)+5) с иксом x&gt;=2 x&lt;4 с шагом х=0.5
я так понял это должно…

сумма в цикле
Доброго времени суток!
В институте дали такую вот задачу:
Вычислить сумму всех целых нечетных…

2

Para bellum

Эксперт PHP

5750 / 4131 / 1506

Регистрация: 06.01.2011

Сообщений: 11,279

02.02.2015, 17:32

2

Попробуйте так:

PHP
1
2
3
4
5
6
7
8
9
10
# Тут будет результат формирования окончательной суммы
$result = 0;
 
$query=mysql_query("SELECT * FROM `table`");
while ($a=mysql_fetch_assoc($query)) {
    $result += $a['kolichestvo'] * $a['price']; //количество умножаем на цену 
}//while
 
# Выводим сумму
echo $result;



1



BarbosLV

367 / 405 / 165

Регистрация: 29.05.2014

Сообщений: 1,494

02.02.2015, 17:35

3

Ну видимо надо:

PHP
1
2
3
4
5
6
7
8
9
10
11
$query=mysql_query("SELECT * FROM `table`");
while ($a=mysql_fetch_assoc($query)) {
$kol=$a['kolichestvo']; //количество товара
$cena=$a['price']; //цена товара
$summa=$kol*$cena; //количество умножаем на цену
if(!isset($total_sum)) $total_sum = $summa;
else $total_sum += $summa;
 
//нужно чтобы $summa сам себя суммировал
 
}//while



0



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