Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2012, 18:34   #1
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию Среднее значение

Требовалось написать программу, которая запрашивает числа и считает среднее значение. Число 9999 говорит о том, что последняя цифра введена и выводит среднее значение. В моей программе число 9999 тоже приписывается к переменной, считающей сумму чисел. Я смог исправить этот недочет, но можно ли сделать как то покрасивее?
Код:
#include <iostream>
#include <conio.h>
#include <clocale>

using namespace std;

int main()
{
	setlocale (LC_CTYPE,"Russian");
	int a = 0, b = 0, c = 0, n = 0;         //а - введенное число, b - сумма введенных чисел, c - кол-во введенных чисел, n - ср. арифм.
	do
	{
	cout << "Введите число: ";
	cin >> a;
	b += a;
	c++;
	}
	while (a != 9999);

	c = c - 1;
	b = b - 9999;
	n = b / c;
	cout << "Среднее значение " << n << endl;

	_getch();
	return 0;
}
Dima-War вне форума Ответить с цитированием
Старый 22.03.2012, 21:50   #2
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Неужели нету других вариантов?
Dima-War вне форума Ответить с цитированием
Старый 22.03.2012, 22:34   #3
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Код:
#include <iostream>
#include <clocale>

using namespace std;

int main() {
	
   setlocale (LC_CTYPE,"Russian");
   // a - введенное число, s - сумма введенных чисел, n - кол-во введенных чисел, sa - ср. арифм.
   int      a , s = 0, n = 0 ; 
   double   sa ;
   
   cout << "Введите число: " ; cin >> a;
   while (a != 9999) {
      s += a ;
      n++ ;
      cout << "Введите число: " ; cin >> a;
   }
   if ( n > 0 ) {
      sa = (double)s / n ;
      cout << "Среднее значение " << sa << endl;
   }

   return 0 ;

}
Vago вне форума Ответить с цитированием
Старый 23.03.2012, 07:28   #4
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Да... Проверку на ноль я забыл поставить. Спасибо.
Dima-War вне форума Ответить с цитированием
Старый 23.03.2012, 08:05   #5
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Вот более "элегантное" решение.

Код:
#include <iostream>
#include <clocale>
#include <stdlib.h>

using namespace std;

int main() {
	
   setlocale (LC_CTYPE,"Russian");
   // a - введенное число, s - сумма введенных чисел, n - кол-во введенных чисел
   double      a = 0 , s = 0, n = 0;

   m1:cout << "Введите число: " ; cin >> a;
      if(a != 9999){
      s += a;
      if(a != 0)n++;}
      else{
      cout << "Среднее значение " << s/n << endl;
      system("pause");
      return 0 ;
      }
      goto m1;
}
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 23.03.2012 в 10:20.
Smitt&Wesson вне форума Ответить с цитированием
Старый 23.03.2012, 09:54   #6
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Вот более "элегантное" решение.

Код:
#include <iostream>
#include <clocale>
#include <stdlib.h>

using namespace std;

int main() {
	
   setlocale (LC_CTYPE,"Russian");
   // a - введенное число, s - среднее арифм.
   int      a = 0, s = 0 ; 

   do
   {
      s = (s + a)/2 ;
      cout << "Введите число: " ; cin >> a;
   }while(a != 9999);
   cout << "Среднее значение " << s << endl;
   system("pause");
   return 0 ;

}
Запустил, ввёл 1, 2, 4, 9999, получил 2 ...
Запустил, ввёл 1, 1, 1, 9999, получил 0 ...
Запустил, ввёл 3, 3, 3, 3, 9999, получил 2 !

В чём, простите, состоит "элегантность"?...
Vago вне форума Ответить с цитированием
Старый 23.03.2012, 10:14   #7
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
В чём, простите, состоит "элегантность"?...
Я код исправил. Собственно пытался сотворить по этой статье, но чего-то недопонял. Разбираться дальше не стал.
Кстати, это именно тот случай где уместно применение непопулярного оператора goto.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 23.03.2012, 10:37   #8
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Я код исправил.
Код:
#include <iostream>
#include <clocale>
#include <stdlib.h>

using namespace std;

int main() {
	
   setlocale (LC_CTYPE,"Russian");
   // a - введенное число, s - сумма введенных чисел, n - кол-во введенных чисел
   double      a = 0 , s = 0, n = 0;

   m1:cout << "Введите число: " ; cin >> a;
      if(a != 9999){
      s += a;
      if(a != 0)n++;}
      else{
      cout << "Среднее значение " << s/n << endl;
      system("pause");
      return 0 ;
      }
      goto m1;
}
Запустил, ввёл 2, 0, 0, 2, 9999, получил 2 !
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Среднее значение tanyuxxxa Помощь студентам 4 03.03.2012 14:08
Среднее значение Guzal Помощь студентам 20 07.11.2010 18:12
Среднее значение Storm.7117 Microsoft Office Excel 3 13.01.2010 15:09
Среднее значение acidcool SQL, базы данных 11 16.08.2009 16:34
среднее значение MyQwErTy Паскаль, Turbo Pascal, PascalABC.NET 3 09.11.2008 21:17