Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Программа подсчета ненулевых значений (http://forum.oszone.net/showthread.php?t=292777)

Dante_Deathcore 19-12-2014 13:46 2445722

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

Iska 19-12-2014 14:03 2445728

Dante_Deathcore, изучите Правила Форума, п.6.

Dante_Deathcore 19-12-2014 15:06 2445761

Но я, к сожалению, черновую работу не сохранил. Придется поверить на слово, а не считать меня лентяем.

Iska 19-12-2014 15:11 2445763

Ну, я-то лично верю ;). Напишите по памяти.

Grabber2006 19-12-2014 15:45 2445785

Код:

#include "stdafx.h"
#include <iostream>


int _tmain(int argc, _TCHAR* argv[])
{
        int nSum = 0;
        std::cout << "Vvedite 10 tselyh chisel:\n";
        for (int i = 0; i < 10; i++)
        {
                int nValue = 0;
                std::cin >> nValue;
                if (nValue != 0) nSum = nSum + nValue;
        }
        std::cout << "Summa chisel ravna: " << nSum << "\n";
        return 0;
}


Drongo 19-12-2014 16:28 2445805

Помню, когда начинал учить программирование, после изучения 2-й главы циклы, в состоянии был написать "мысленно" код считывания 10 значений с циклом. Там ведь знаний-то никаких специальных не требуется:

1. Как считываются данные
2. Оформить п. 1 циклом из 10 проходов.
3. Перед суммированием проверить что введённое число не равно нулю.
4. Вывести результат.

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

Dante_Deathcore 19-12-2014 17:20 2445818

Начал с указания типа - int.
Знаю, что работа идет с массивами. Его размер - 10. Потом шла "просьба о вводе (cout) и сам ввод (cin)" собственно. Каждый раз учитывается шаг/счетчик - i++ .
И дальше я, к сожалению, не знаю, что и как, хотя "чисто логически" понимаю. . Знаю, что введенную с клавиатуры переменную необходимо сравнивать с 0 (n>0). Это с оператором if идет (тут тоже нужен счет - фиксировать i (количество ненулевых) - i<=10).
Прошу, помогите.

Iska 19-12-2014 17:44 2445826

Цитата:

Цитата Dante_Deathcore
Прошу, помогите. »

Сообщение #5 пропустили? Если не сумма, а количество — так там просто поменять.

Dante_Deathcore 19-12-2014 17:45 2445827

Цитата:

Цитата Iska
Сообщение #5 пропустили? »

Оно не верно. То есть - не соответствует условию (шапка темы).

Grabber2006 19-12-2014 17:52 2445830

Код:

#include "stdafx.h"
#include <iostream>


int _tmain(int argc, _TCHAR* argv[])
{
        int nSum = 0;
        std::cout << "Vvedite 10 tselyh chisel:\n";
        for (int i = 0; i < 10; i++)
        {
                int nValue = 0;
                std::cin >> nValue;
                if (nValue != 0) nSum = nSum + 1;
        }
        std::cout << "Chislo nenulevyh chisel: " << nSum << "\n";
        return 0;
}

:)

Dante_Deathcore 20-12-2014 06:50 2446001

Вот, я сделал while (для программного продукта 2010 года). В подобный вид можете с for, а то чего-то....торможу(

Код:

#include <iostream>
using namespace std;
int main ()
{
        int kol=0, x, i=1;
        const int n=10;
        while (i<=n)
        {
        cout<<"enter number"; cin>>x;
        if (x!=0)
          {
                  kol++;
          }
        i++;
        }
    cout<<"Result "<<kol<<endl;
        system("pause");
        return 0;
}


Drongo 20-12-2014 16:00 2446115

Вот так будет.
Код:

#include <iostream>
using namespace std;
int main ()
{
  int kol = 0, x;
 
  for(int i = 1; i <= 10; i++){
      cout << "enter number " <<  i << ": ";
      cin >> x;
      if (x != 0)
        kol++;
    }

  cout << "Result " << kol << endl;
  system("pause");

  return 0;
}

Разницы между while и for нет, за исключением что при while нужно заранее объявить все переменные: счётчик, пороговое значение

Код:

  int a = 10; // пороговое значение
  count = 0; // счётчик

  while(count < a){
      cout << "Num: " << count << endl;
      count++;
    }

А в for объявление стартовой переменной, пороговое значение и инкремент счётчика выполняется в одном теле

Код:

  for(int i = 0; i < 10; i++)
      cout << "Num: " << i << endl;


Dante_Deathcore 21-12-2014 09:51 2446307

Последний вопрос... что значит это:
Цитата:

Цитата Drongo
+ i + »


Iska 21-12-2014 12:44 2446343

Цитата:

Цитата Dante_Deathcore
Последний вопрос... что значит это: »

Вставку в строку вывода значения переменной «i». Рассматривайте выражение в целом:
Цитата:

Цитата Drongo
Код:

… "enter number " + i + ": " …
»


Drongo 21-12-2014 16:19 2446421

Да. Обычный проверочный тестовый вывод значений в цикле. Но там немного ошибка, нужно так.
Цитата:

Цитата Drongo
Код:

cout << "enter number " << i << ": ";
»

Сказалось что в момент написания примера работал с текстовыми строками в другом проекте и параллельно писал сообщение сюда. :)
Тм можно складывать их так
Код:

String str1 = "test1";
String str2 = "test2";
String str3 = str1 + str2;


Dante_Deathcore 21-12-2014 16:44 2446429

Вот, посоветовался, подумал, подсказали.
Вот решение. Заберет кто, если столкнулся с подобной задачей.

Код:

#include <iostream>
using namespace std;
int main()

{
        int sum, i, k;
        int a[10];
        cout<<"Enter 10 numbers \n";
        k=0;
    for (i=1; i<=10; i++)
        {
                cin>>a[i];
                if (a[i]!=0) k++;
        }
        cout<<"Result: "<<k<<"\n";
        system("pause");
}


Drongo 22-12-2014 01:32 2446656

В данном контексте подобная реализация с массивами сомнительна.

1. Зачем создавать массив если следом за ним идёт цикл сохранения в массив и сразу же считывание этого значения?
2. Сохранять в массив нужно тогда когда вы предполагаете дальнейшее использование значений. В данной программе идёт проверка после ввода, и если условие удовлетворяется, инкрементируется счётчик. Всё. Введённое число в дальнейших расчётах не участвует. Не вижу необходимости в использовании массива... Выводите вы k, а не значения [i]a и на этом программа завершается.
3. Грубо говоря, в память у вас будет использоваться в холостую.

Iska 22-12-2014 01:46 2446661

Drongo, запросто — требование «сверху». С другой стороны — в С++ нумерация элементов массива разве отличается от С? Не с нуля?

lxa85 22-12-2014 03:22 2446679

С одной стороны я поддерживаю Iska, т.к. использование массивов скроей всего действительно требование "сверху" в рамках изучения программирования (все знают, что там любят такие задачки).
С другой стороны, в задании, как его приводит Dante_Deathcore, нет строго указания на массивы, в отличии от ручного ввода данных, и здесь я вынужден согласиться с Drongo.
Сисадмин же во мне говорит "делай бекап и не порть данные, пригодятся".
Программист, ссылаясь на ТЗ, говорит – порть смело, память лишней не бывает!
Забавно :)

Drongo 22-12-2014 12:40 2446779

Цитата:

Цитата Iska
С другой стороны — в С++ нумерация элементов массива разве отличается от С? Не с нуля? »

Кстати да, с нуля, иногда могут "игнорировать" нулевой элемент если хочется красивости и симметричности 1-й элемент = 1 счёчику обхода. Но тогда объявляют массив с размером n + 1, т.е. 10 уже никак не получится обойти если начать с единицы, т.е. i будет равна 10, а 10-й элемент массива имеет порядковый номер 9 (счёт же идёт с нуля...). Короче тут выход за границы диапазона. Ошибка.


Время: 15:14.

Время: 15:14.
© OSzone.net 2001-