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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2016, 09:33   #1
lfybbk
Пользователь
 
Регистрация: 10.05.2016
Сообщений: 10
По умолчанию Написал программу, которая должна выводить среднее арифметическое ряда чисел, вроде все работает, но выводит какое-то левое число

Написал программу, которая должна выводить среднее арифметическое ряда чисел, вроде все работает, но выводит какое-то левое число:
Код:
#include <iostream>
#include <string.h>
using namespace std;

char marks [100] = "";
int arraylength = 0;

int array_length()
{
   cin.getline(marks, 100);
   while (marks[arraylength] != '\0')

	{
  arraylength++;
  }
}
int main()
{
  int sum = 0;
  float average;
  
  cout.precision(3);
cout.unsetf(ios::scientific);
  cout.setf(ios::fixed);

  cout<<"\t\t***Averager***\n\n";
  cout<<"Введите ваши оценки"<<endl;
  cout<<">_";
  array_length();
  cout<<"У Вас "<< arraylength<<" оценок"<< endl;

for(int i = 0; i<arraylength; i++)
{
  sum = sum + marks[i];
}

average = sum / arraylength;

cout<<"Ваш средний балл: "<<average<<endl;


  return 0;
}
lfybbk вне форума Ответить с цитированием
Старый 30.12.2016, 09:46   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

1. 0 и '0' это разное...
2. инт на инт есть инт, поэтому 1 / 2 = 0
p51x на форуме Ответить с цитированием
Старый 30.12.2016, 09:58   #3
lfybbk
Пользователь
 
Регистрация: 10.05.2016
Сообщений: 10
Вопрос

Я извиняюсь, что? просто я недавно начал изучать с++, и много ещё не понимаю
Откуда это 52???
Изображения
Тип файла: png Screenshot_20161230-101452.png (36.1 Кб, 121 просмотров)

Последний раз редактировалось lfybbk; 30.12.2016 в 10:19.
lfybbk вне форума Ответить с цитированием
Старый 30.12.2016, 10:32   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Сложены не оценки, а их коды и среднее ~52. Все верно ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.12.2016, 10:36   #5
lfybbk
Пользователь
 
Регистрация: 10.05.2016
Сообщений: 10
По умолчанию

Вот тут я конечно лоханулся... А с интовским массивом можно сделать так, чтобы количество сам считал?

------------------------------

Сократил код:

Код:
#include <iostream>
#include <string.h>
using namespace std;



int main()
{
	int sum = 0;
	float average;
	char marks[100] = "";

	cout.precision(2);
    cout.unsetf(ios::scientific);
	cout.setf(ios::fixed);

	cout << "\t\t***Averager***\n\n";
	cout << "Введите ваши оценки" << endl;
	cout << ">_";
	cin.getline(marks, 100);
	cout << "У Вас " << strlen(marks) << " оценок" << endl;

	for (int i = 0; i < strlen(marks); i++)
	{
		sum = sum + marks[i];
	}

	average = sum / strlen(marks);

	cout << "Ваш средний балл: " << average << endl;


	return 0;
}

Последний раз редактировалось lfybbk; 30.12.2016 в 10:38.
lfybbk вне форума Ответить с цитированием
Старый 30.12.2016, 10:52   #6
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Привет!
Во-первых, ты в sum пишешь сумму кодов символов, а не целочисленные значения. Чтобы не приводить к int, просто пропиши:
sum += (marks[i] - '0'); - то есть вычтешь символьный код '0' из '1' получишь 1 и т.д.
Второе, ты делишь две целочисленные переменные не приводя их к типу float.
Надо прописать так:
average = (float)sum / arraylength;
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 30.12.2016, 11:33   #7
lfybbk
Пользователь
 
Регистрация: 10.05.2016
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Привет!
Во-первых, ты в sum пишешь сумму кодов символов, а не целочисленные значения. Чтобы не приводить к int, просто пропиши:
sum += (marks[i] - '0'); - то есть вычтешь символьный код '0' из '1' получишь 1 и т.д.
Второе, ты делишь две целочисленные переменные не приводя их к типу float.
Надо прописать так:
average = (float)sum / arraylength;
Спасибо, помогло!
lfybbk вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу, которая вычисляет среднее арифметическое последовательности дробных чисел, вводимых с клавиатуры. После тог Viraj Общие вопросы C/C++ 1 23.05.2015 12:35
нужно определить, какое из данных 3 чисел среднее по значению. Среднее арифметическое считать НЕ надо vgfcb Помощь студентам 3 03.12.2013 20:24
Пусть вводится последовательность чисел, которая заканчивается нулем. Найдите среднее арифметическое четных чисел. d_dima Помощь студентам 3 13.03.2013 12:17
Среднее арифметическое ряда чисел nnplanet PHP 3 03.01.2013 20:12
С++ Найти среднее арифметическое положительных и среднее арифметическое отрицательных чисел, минимальное по модулю число. Юрик 530 Помощь студентам 4 03.12.2011 16:26