Показать полную графическую версию : [решено] Программа подсчета ненулевых значений
Dante_Deathcore
19-12-2014, 13:46
Помогите написать программу подсчета ненулевых значений из десяти вводимых с клавиатуры чисел. Ввод необходимо организовать с помощью оператора цикла for.
Dante_Deathcore, изучите Правила Форума (http://forum.oszone.net/announcement-21-187.html), п.6.
Dante_Deathcore
19-12-2014, 15:06
Но я, к сожалению, черновую работу не сохранил. Придется поверить на слово, а не считать меня лентяем.
Ну, я-то лично верю ;). Напишите по памяти.
Grabber2006
19-12-2014, 15:45
#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;
}
Помню, когда начинал учить программирование, после изучения 2-й главы циклы, в состоянии был написать "мысленно" код считывания 10 значений с циклом. Там ведь знаний-то никаких специальных не требуется:
1. Как считываются данные
2. Оформить п. 1 циклом из 10 проходов.
3. Перед суммированием проверить что введённое число не равно нулю.
4. Вывести результат.
Человек, написавший даже в черновом варианте, в состоянии описать реализацию простейшего кода в 10 строк хотя бы словами(псевдокод).
Dante_Deathcore
19-12-2014, 17:20
Начал с указания типа - int.
Знаю, что работа идет с массивами. Его размер - 10. Потом шла "просьба о вводе (cout) и сам ввод (cin)" собственно. Каждый раз учитывается шаг/счетчик - i++ .
И дальше я, к сожалению, не знаю, что и как, хотя "чисто логически" понимаю. . Знаю, что введенную с клавиатуры переменную необходимо сравнивать с 0 (n>0). Это с оператором if идет (тут тоже нужен счет - фиксировать i (количество ненулевых) - i<=10).
Прошу, помогите.
Прошу, помогите. »
Сообщение #5 пропустили? Если не сумма, а количество — так там просто поменять.
Dante_Deathcore
19-12-2014, 17:45
Сообщение #5 пропустили? »
Оно не верно. То есть - не соответствует условию (шапка темы).
Grabber2006
19-12-2014, 17:52
#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
Вот, я сделал 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;
}
Вот так будет.#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
Последний вопрос... что значит это:
+ i + »
Последний вопрос... что значит это: »
Вставку в строку вывода значения переменной «i». Рассматривайте выражение в целом:
… "enter number " + i + ": " … »
Да. Обычный проверочный тестовый вывод значений в цикле. Но там немного ошибка, нужно так.
cout << "enter number " << i << ": "; »
Сказалось что в момент написания примера работал с текстовыми строками в другом проекте и параллельно писал сообщение сюда. :)
Тм можно складывать их так
String str1 = "test1";
String str2 = "test2";
String str3 = str1 + str2;
Dante_Deathcore
21-12-2014, 16:44
Вот, посоветовался, подумал, подсказали.
Вот решение. Заберет кто, если столкнулся с подобной задачей.
#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");
}
В данном контексте подобная реализация с массивами сомнительна.
1. Зачем создавать массив если следом за ним идёт цикл сохранения в массив и сразу же считывание этого значения?
2. Сохранять в массив нужно тогда когда вы предполагаете дальнейшее использование значений. В данной программе идёт проверка после ввода, и если условие удовлетворяется, инкрементируется счётчик. Всё. Введённое число в дальнейших расчётах не участвует. Не вижу необходимости в использовании массива... Выводите вы k, а не значения a[i] и на этом программа завершается.
3. Грубо говоря, в память у вас будет использоваться в холостую.
Drongo, запросто — требование «сверху». С другой стороны — в С++ нумерация элементов массива разве отличается от С? Не с нуля?
С одной стороны я поддерживаю Iska, т.к. использование массивов скроей всего действительно требование "сверху" в рамках изучения программирования (все знают, что там любят такие задачки).
С другой стороны, в задании, как его приводит Dante_Deathcore, нет строго указания на массивы, в отличии от ручного ввода данных, и здесь я вынужден согласиться с Drongo.
Сисадмин же во мне говорит "делай бекап и не порть данные, пригодятся".
Программист, ссылаясь на ТЗ, говорит – порть смело, память лишней не бывает!
Забавно :)
С другой стороны — в С++ нумерация элементов массива разве отличается от С? Не с нуля? »Кстати да, с нуля, иногда могут "игнорировать" нулевой элемент если хочется красивости и симметричности 1-й элемент = 1 счёчику обхода. Но тогда объявляют массив с размером n + 1, т.е. 10 уже никак не получится обойти если начать с единицы, т.е. i будет равна 10, а 10-й элемент массива имеет порядковый номер 9 (счёт же идёт с нуля...). Короче тут выход за границы диапазона. Ошибка.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC