1. Организовать беспрерывный ввод чисел с клавиатуры, пока пользователь не введёт 0. После ввода нуля, показать на экран количество чисел, которые были введены, их общую сумму и среднее арифметическое. Подсказка: необходимо объявить переменную-счетчик, которая будет считать количество введенных чисел, и переменную, которая будет накапливать общую сумму чисел.
Посмотреть код
задача do while c++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
usingnamespacestd;
intmain()
{
setlocale(LC_ALL,"rus");
intamountDigits=0;// количество введенных чисел
doubletotalSum=0;// общая сумма
doubledigit=0;//
cout<<"Введите числа, для расчета (выйти - 0)\n\n";
do
{
cout<<"Число "<<amountDigits+1<<" = ";
cin>>digit;
if(digit)// если digit любое значение кроме 0(false)
{
amountDigits++;
totalSum+=digit;
}
}while(digit);// пока digit любое значение отличное от 0
Не зачет, на пересдачу :) – так сказал бы один знакомый препод, увидев такие решения.
В первой программе ошибка деления на ноль. Достаточно ввести ноль первым числом.
Мелочь, но в первой задаче вы на равенство нулю проверяете дважды. МБ лучше сразу из цикла выйти? – типа while (true) { if (0 == val) break; sum += val; ++num; }
Во второй задаче достаточно ввести конец диапазона меньше чем начало диапазона и программа зациклится. Не хватает “защиты от дурака”. Я думаю логично попросить числа в диапазоне (5, 1), как и (1, 5).
По третьей задаче все окей. По крайней мере я косяков не вижу.
подскажите , не могу понять как именно выполняется условие , в первой задаче , на отличие введенного числа от нуля? ведь не задается условие на прерывание цикла при вводе нуля запутался)
while (true) { if (0 == val) break; sum += val; ++num; }
if (digit) – до выполнения инструкции оператор if проверяет условие, если оно истинно, тогда исполняется инструкция. Условие можно записать как (digit != 0) но не обязательно. В случае if (digit) при любом ненулевом значении digit условие будет истинно, но если digit равно нулю (0 автоматически возвращает false), при проверке условия будет возвращено ложь и инструкция не будет исполнена. К примеру, мне кажется что во второй задаче, в 21 строке if (i % 2 != 0) можно записать просто как if (i % 2)
Спасибо, что дали ответ на вопрос новичка. По поводу, как лучше записать if (i % 2 != 0) или if (i % 2) – мнения программистов расходятся. Согласно последним соглашениям о кодировании – лучше применять явные условия. Цитирую: “В булевских выражениях («if», «for», «while», «do» и первом операнде тернарного оператора “?”) всегда записывайте равенство и неравенство в явном виде.”
Да я и сам новичок – второй месяц как начал читать книгу по с++))) Очень интересует вопрос (не нашел на сайте форума потому спрошу здесь): если изучить материалы, предоставленные на сайте и решать все эти задачи, можно ли считать себя программистом (хотя бы отчасти)? можно ли тогда составить начальное резюме и пробовать искать работу? Если нет то что еще надо выучить и знать для этого? Спасибо)
Да ты что? ))) это только самое-самое начало. Сайт мой еще нуждается, как минимум, в 100 статьях. + много задач. На моем сайте пока есть только очень простые задачи. А чтобы считать себя программистом хотя бы отчасти – надо пару-тройку языков изучить.
как вы думаете такой варианt приемлем для решения первой задачи? int main() { int number; int sum; int i=0;
float aveRage;
do {
cout << "Please enter the " << i + 1 <> number; cout << "Number you entered is " << number << endl;
i ++; sum += number; aveRage = sum / i++;
} while (number != 0);
cout << "The total number of digits that were inserted is " << i ++ << endl; cout << "The total amount of insereted digits summed together is " <<sum - 1 << endl; cout << "The average of these numbers is " << aveRage << endl;
1) У тебя в цикле я не вижу ввода значений в number; 2) Вычисление среднего можно вынести за цикл. Итого ужимаем до:
int main(){ int i,sum=0,number=0;
for(i=1;number;i++,sum+=number) { cout<>number; }
cout<<"The total number of digits that were inserted is "<<i<<endl << "The total amount of insereted digits summed together is "<<sum<<endl <<"The average of these numbers is " << sum/i<< endl; cin.get(); return 0; }
cout<<"The total number of digits that were inserted is "<<i<<endl << "The total amount of insereted digits summed together is "<<sum<<endl <<"The average of these numbers is " << sum/i<< endl; cin.get(); return 0; }
У вас там совсем нет никакого ввода, типа cin >> number …
Он там был, Сайт почему то его сьел, и подставил выражение number; У меня то же самое в посте. Видимо какие-то спецсимволы сработали.
Вообще то, почти никогда не следует спрашивать “вариант приемлем для решения?”. Нужно компилировать и выполнять. Если выполняется верно при всех мыслимых наборах входных данных – значит это приемлемое решение, что бы там ни было написано.
Куда интереснее (и имеет широкое практическое применение) задача №1 если чуть-чуть изменить условие:
> После ввода нуля, показать на экран количество чисел, которые были введены, их общую сумму, среднее арифметическое и среднеквадратичное отклонение от среднего (или дисперсию … рассеивание).
норм )
Все что было тобой отправлено с помощью Orphus – исправили. Спасибо, Алексей! )
Не зачет, на пересдачу :) – так сказал бы один знакомый препод, увидев такие решения.
В первой программе ошибка деления на ноль. Достаточно ввести ноль первым числом.
Мелочь, но в первой задаче вы на равенство нулю проверяете дважды. МБ лучше сразу из цикла выйти? – типа
while (true) {
if (0 == val)
break;
sum += val;
++num;
}
Во второй задаче достаточно ввести конец диапазона меньше чем начало диапазона и программа зациклится. Не хватает “защиты от дурака”. Я думаю логично попросить числа в диапазоне (5, 1), как и (1, 5).
По третьей задаче все окей. По крайней мере я косяков не вижу.
подскажите , не могу понять
как именно выполняется условие , в первой задаче , на отличие введенного числа от нуля? ведь не задается условие на прерывание цикла при вводе нуля
запутался)
while (true) {
if (0 == val)
break;
sum += val;
++num;
}
такой код более понятно )
if (digit) – до выполнения инструкции оператор if проверяет условие, если оно истинно, тогда исполняется инструкция. Условие можно записать как
(digit != 0) но не обязательно. В случае if (digit) при любом ненулевом значении digit условие будет истинно, но если digit равно нулю (0 автоматически возвращает false), при проверке условия будет возвращено ложь и инструкция не будет исполнена.
К примеру, мне кажется что во второй задаче, в 21 строке if (i % 2 != 0) можно записать просто как if (i % 2)
Спасибо, что дали ответ на вопрос новичка.
По поводу, как лучше записать if (i % 2 != 0) или if (i % 2) – мнения программистов расходятся. Согласно последним соглашениям о кодировании – лучше применять явные условия. Цитирую: “В булевских выражениях («if», «for», «while», «do» и первом операнде тернарного оператора “?”) всегда записывайте равенство и неравенство в явном виде.”
Да я и сам новичок – второй месяц как начал читать книгу по с++))) Очень интересует вопрос (не нашел на сайте форума потому спрошу здесь): если изучить материалы, предоставленные на сайте и решать все эти задачи, можно ли считать себя программистом (хотя бы отчасти)? можно ли тогда составить начальное резюме и пробовать искать работу?
Если нет то что еще надо выучить и знать для этого?
Спасибо)
Да ты что? ))) это только самое-самое начало. Сайт мой еще нуждается, как минимум, в 100 статьях. + много задач. На моем сайте пока есть только очень простые задачи. А чтобы считать себя программистом хотя бы отчасти – надо пару-тройку языков изучить.
(((((((((( мда, вот и интерес к программированию пропал..
Решение в третьем задание получилось совсем иное.
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
int iHeight(0), iConstructing(0), iCounting(0), iSymbols(1);
cout < < "Введите высоту треугольника:"; cin >> iHeight;
iConstructing = iHeight;
do
{
iCounting = 0;
while (iCounting < = (iConstructing - 1)) { cout << " "; iCounting++; } iCounting = 0; while (iCounting < iSymbols) { cout << "^"; iCounting++; } cout << endl; iSymbols += 2; iConstructing--; } while (iConstructing); return 0; }
как вы думаете такой варианt приемлем для решения первой задачи?
int main()
{
int number;
int sum;
int i=0;
float aveRage;
do
{
cout << "Please enter the " << i + 1 <> number;
cout << "Number you entered is " << number << endl;
i ++;
sum += number;
aveRage = sum / i++;
}
while (number != 0);
cout << "The total number of digits that were inserted is " << i ++ << endl;
cout << "The total amount of insereted digits summed together is " <<sum - 1 << endl;
cout << "The average of these numbers is " << aveRage << endl;
return 0;
}
1) У тебя в цикле я не вижу ввода значений в number;
2) Вычисление среднего можно вынести за цикл.
Итого ужимаем до:
int main(){
int i,sum=0,number=0;
for(i=1;number;i++,sum+=number) {
cout<>number;
}
cout<<"The total number of digits that were inserted is "<<i<<endl
<< "The total amount of insereted digits summed together is "<<sum<<endl
<<"The average of these numbers is " << sum/i<< endl;
cin.get();
return 0;
}
Хотя не. Если с do while то
int main(){
int i=0,sum=0,number=0;
do{
i++;
cout<> number;
sum+=number;
} while(number);
cout<<"The total number of digits that were inserted is "<<i<<endl
<< "The total amount of insereted digits summed together is "<<sum<<endl
<<"The average of these numbers is " << sum/i<< endl;
cin.get();
return 0;
}
У вас там совсем нет никакого ввода, типа cin >> number …
Он там был, Сайт почему то его сьел, и подставил выражение
number;
У меня то же самое в посте. Видимо какие-то спецсимволы сработали.
Вообще то, почти никогда не следует спрашивать “вариант приемлем для решения?”.
Нужно компилировать и выполнять. Если выполняется верно при всех мыслимых наборах входных данных – значит это приемлемое решение, что бы там ни было написано.
Куда интереснее (и имеет широкое практическое применение) задача №1 если чуть-чуть изменить условие:
> После ввода нуля, показать на экран количество чисел, которые были введены, их общую сумму, среднее арифметическое и среднеквадратичное отклонение от среднего (или дисперсию … рассеивание).
Всё становится куда веселее…