Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Excel VBA, CAD, Софт, ОС, Windows, Ubuntu, Android, VPS
Win Api, Assembler, C++, Java, Pascal, Lazarus, Delphi, OpenGL, DirectX
C#, Qt, .NET, ASP.NET, Windows Forms, ADO.NET, Framework, WPF, UWP, WinRT, XAML
HTML, CSS, JavaScript, Ajax, PHP, Perl, Python, Ruby, SQL, WordPress, API, XML, JSON, ActionScript, Flash

Ответ
 
Опции темы
Старый 30.12.2016, 10:33   #1
lfybbk
 
Регистрация: 10.05.2016
Адрес: Фурманов, Россия
Сообщений: 9
Репутация: 10

skype: dejhrhe
По умолчанию Написал программу, которая должна выводить среднее арифметическое ряда чисел, вроде все работает, но выводит какое-то левое число

Написал программу, которая должна выводить среднее арифметическое ряда чисел, вроде все работает, но выводит какое-то левое число:
Код:

#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, 10:46   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 8,909
Репутация: 1402

icq: 216409213
По умолчанию

1. 0 и '0' это разное...
2. инт на инт есть инт, поэтому 1 / 2 = 0
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 30.12.2016, 10:58   #3
lfybbk
 
Регистрация: 10.05.2016
Адрес: Фурманов, Россия
Сообщений: 9
Репутация: 10

skype: dejhrhe
Вопрос

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

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

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

skype: dejhrhe
По умолчанию

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

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

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

Код:

#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 в 11:38.
lfybbk вне форума   Ответить с цитированием
Старый 30.12.2016, 11:52   #6
Bugrimov
C/C++, Java
Профессионал
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Адрес: Новосибирск
Сообщений: 1,595
Репутация: 703

skype: javabugrimov
По умолчанию

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

skype: dejhrhe
По умолчанию

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу, которая вычисляет среднее арифметическое последовательности дробных чисел, вводимых с клавиатуры. После тог Viraj Общие вопросы C/C++ 1 23.05.2015 13: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




17:03.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru