Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Сумма 2мерного массива


Автор: Wild 20.11.2004, 18:31
При подсчете суммы элементов 2мерного массива, она оказалась
ОТРИЦАТЕЛЬНОЙ! Как такое возможно?(все элементы в массиве были положительными, целого типа ). smile

Автор: Pakshin A. S. 20.11.2004, 18:41
Как там говорится... ОШИБКА В 17 СТРОКЕ... КОД сюды!!!

Автор: bel_nikita 20.11.2004, 19:01
Wild
А сумма какого типа? Вывод суммы как осуществляется? Через %d?

Автор: _hunter 20.11.2004, 20:56
если под целым типом подразумевается "целое, знаковое" то скорее всего переполнение прошло ( это если в коде ошибок нет )

Автор: Artiom 20.11.2004, 23:10
Переменная, в которую писалась сумма не была инициализирована нулем.

Автор: Wild 21.11.2004, 13:53
Да, через %d.

Добавлено @ 13:55
Код

#include<stdio.h>
#include<conio.h>
#include<iostream>
extern int summa(const int nstr, const int nstb);
int main()
{
   const int nstr = 5;
   const int nstb = 5;
   int i,j,a[nstr][nstb];
   for (i=0;i<nstr;i++)
   for (i=0;i<nstr;i++){
         printf(" \n");
       for (j=0;j<nstb;j++){
               a[i][j] = rand();
               printf(" %d",a[i][j]);
       }
   }        
             printf(" \nSumma elementov 2mernovo massiva : %d\n ",summa(nstr,nstb));
      _getch();            
   }
   int summa(const int nstr, const int nstb )
   {
       int i,j,s;
       int a[nstr][nstb];
       for (i=0;i<nstr;i++ ){
           for (j=0;j<nstb;j++){
               s+=a[i][j];
           }
       }
       return s;        
       }

Автор: bel_nikita 21.11.2004, 14:14
Wild
а пример разве компилится? мне кажется, что нет smile

Автор: bel_nikita 21.11.2004, 14:43
Код

// на самом деле пофиг какая размерность массива, двух-трех мерный. в памяти лежит все последовательно, поэтому нужно занть адрес начала массива и количество его всех элементов
int summa(const int* array, int size )
{
 int s = 0;

 for (int i=0; i<size; i++ )
   s+=array[i];
 
return s;
}

const int nstr = 5;
const int nstb = 5;

int main(int argc, char* argv[])
{
 int a[nstr][nstb];
 for (int i=0;i<nstr;i++)
 {
  printf(" \n");
  for (int j=0;j<nstb;j++)
  {
   a[i][j] = rand();
   printf(" %d",a[i][j]);
  }
 }
 printf(" \nSumma elementov 2mernovo massiva : %d\n ", summa(&a[0][0],sizeof(a)/sizeof(a[0][0])) );
}


sizeof(a) / sizeof(a[0][0]) - определение кол-ва элементов в массиве

Автор: Wild 21.11.2004, 19:47
Компилится (DEV-C++).
Добавлено @ 19:51
А скажите, пожалуйста, DEV-C++ нормальная штука, или лучше WatCom, или Borland C++?

Автор: bel_nikita 22.11.2004, 00:08
Wild
Цитата
А скажите, пожалуйста, DEV-C++ нормальная штука, или лучше WatCom, или Borland C++?
Сложный вопрос smile То же самое, что вкуснее: яблоко или груша?

З.Ы.: Нормально, но лучше MSVC 7.1 smile

Автор: Wild 23.11.2004, 20:06
А где взять лицензионную версию (бесплатно конечно) не подскажешь? smile

Автор: _hunter 23.11.2004, 22:58
Цитата
лицензионную версию (бесплатно

такого не бывает
копия ( восьми-дисковая продается у нас на радиорынке )

Автор: bel_nikita 24.11.2004, 19:58
Цитата
А где взять лицензионную версию (бесплатно конечно) не подскажешь

MSVC 7.1 - не знаю
Можно бета версию Visual C++ 2005 скачасть с сайта Микрософта
Вот, еще: http://www.intel.com/software/products/compilers/clin/
Да, вообще этих компиляторов полно. Лучше послушай совет _hunter'а smile

Автор: azesmcar 25.11.2004, 08:17
Одним словом "Инициализация"

Когда создаешь переменную система лишь выделяет память, но не отвечает за то что по этому адресу написано...
Всегда делан int s = 0;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)