Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите разобраться откуда в массиве это число 
:(
    Опции темы
kLASTER
Дата 3.11.2013, 04:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 14.9.2011

Репутация: нет
Всего: нет



После нахождения среднего арифм., это значение записывается в массив. Почему?

вот собственно код:
Код

#ifndef FILE41_H_
#define FILE41_H_

namespace SALES
{
  const int QUARTERS = 4;
  struct Sales
  {
    double sales[QUARTERS];
    double average;
    double max;
    double min;
  };
  void setSales(Sales & s, double ar[], int n);
}
#endif


файл 2:
Код

#include <iostream>
#include "file41.h"

using namespace std;

namespace SALES
{
  static double save = 0;
  double trash = 0;
  
  void setSales(Sales & s, double ar[], int n)
  {
    for(int i = 0; i < 7; i++)
    {
      s.sales[i] = ar[i];
      cout << s.sales[i] << " ";
    }
    cout << endl;
    
//Вычисляем и сохраняем среднее арифметическое
    
    for(int i = 0; i <= 3; i++)
    {
      trash += s.sales[i];
      cout << trash;
    }
    s.average = trash/QUARTERS;
    for(int i = 0; i < 7; i++)
      cout << s.sales[i] << " ";
  

файл 3:
Код

#include <iostream>
#include "file41.h"
#include "file42.cpp"


int main()
{
  using SALES::QUARTERS;
  using SALES::Sales;
  using std::cout;
  using std::cin;
  int count;
  Sales Struc1;
  Sales Struc2;
  
  cout << "Enter count: ";
  cin >> count;
  double * p = new double[count];
  cout << "Enter sign a massive:" << endl;
  for(int i = 0; i < count; i++)
  {
    double numb;
    cin >> numb;
    p[i] = numb;
  };
  setSales(Struc1, p, count);
  
  system("PAUSE");
  return 0;
}



Во втором файле после поиска ср.арифм., если пройтись по массиву, то появляется в массиве значение среднего арифметического. Откуда? Я же не записываю это значение в массив?!
Заранее спасибо!!!
PM MAIL   Вверх
feodorv
Дата 3.11.2013, 05:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(kLASTER @  3.11.2013,  05:34 Найти цитируемый пост)
то появляется в массиве значение среднего арифметического. Откуда?

Как это откуда. Сами же используете "грязный хак", намеренно или нет:
Цитата(kLASTER @  3.11.2013,  05:34 Найти цитируемый пост)
  const int QUARTERS = 4;
  struct Sales
  {
    double sales[QUARTERS];

То есть в массиве sales 4 элемента. Далее:
Цитата(kLASTER @  3.11.2013,  05:34 Найти цитируемый пост)
   for(int i = 0; i < 7; i++)
    {
      s.sales[i] = ar[i];

А тут почему-то уже предполагается 7. Далее:
Цитата(kLASTER @  3.11.2013,  05:34 Найти цитируемый пост)
    for(int i = 0; i <= 3; i++)
    {

Здесь снова 4 (зачем только константа QUARTERS существует?). Далее:
Цитата(kLASTER @  3.11.2013,  05:34 Найти цитируемый пост)
    s.average = trash/QUARTERS;
    for(int i = 0; i < 7; i++)
      cout << s.sales[i] << " ";

А здесь снова 7.


Хак грязный, потому что здесь фактически sales[4] есть average (который Вы успешно и печатаете), sales[5] есть max, и sales[6] есть min. Налицо выход за пределы массива в C-стиле, не факт что в C++ это допустимо. Довольно странно, что Вы не видите противоречия между значением константы QUARTERS и числом распечатываемых значений массива...


Однако это не предел:
Цитата(kLASTER @  3.11.2013,  05:34 Найти цитируемый пост)
  cout << "Enter count: ";
  cin >> count;
  double * p = new double[count];

Вот тогда зачем тогда в подпрограмме setSales массив p предполагается из 7 (или более корректно, из 4) элементов???


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
kLASTER
Дата 4.11.2013, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 14.9.2011

Репутация: нет
Всего: нет



Верно, везде было условие i < QUARTERS, при поиске ответа на вопрос начал экспериментировать, так и осталось 7 и 3.

Цитата

Хак грязный, потому что здесь фактически sales[4] есть average

Почему average - sales[4]? Я сохраняю trush/QUARTERS в s.average. Т.е. никакие другие данные не должны попадать в массив. А здесь ср.ариф. в s.sales[5]?
Вот мой результат:
user posted image
Откуда?
PM MAIL   Вверх
feodorv
Дата 4.11.2013, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(kLASTER @  4.11.2013,  08:54 Найти цитируемый пост)
Т.е. никакие другие данные не должны попадать в массив.

Цитата(feodorv @  3.11.2013,  06:02 Найти цитируемый пост)
Довольно странно, что Вы не видите противоречия между значением константы QUARTERS и числом распечатываемых значений массива...



Цитата(kLASTER @  4.11.2013,  08:54 Найти цитируемый пост)
Почему average - sales[4]?

Потому что индекс в C/C++ отсчитывается от 0, а не от единицы.


Цитата(kLASTER @  4.11.2013,  08:54 Найти цитируемый пост)
Верно, везде было условие i < QUARTERS, при поиске ответа на вопрос начал экспериментировать, так и осталось 7 и 3.

Что мешает исправить?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1134 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.