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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2013, 11:42   #1
Petyu
Пользователь
 
Регистрация: 04.12.2012
Сообщений: 23
Сообщение Получение новой матрицы прибавлением к элементам

Пишу программу на получение новой матрицы прибавлением к элементам каждого столбца первой матрицы мин элемента соответствующего столбца второй матрицы.
Подскажите что не так в коде. Раньше программировал delphi
Код:
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
int i,j,n;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 n=StrToInt(Edit1->Text);
 
 
StringGrid1->ColCount = n;
StringGrid1->RowCount = n;
StringGrid2->ColCount = n;
StringGrid2->RowCount = n;
StringGrid3->ColCount = n;
StringGrid3->RowCount = n;
 
randomize();
for(i = 0; i < n; i++){
    for(j = 0; j < n; j++) {
    StringGrid1->Cells[i][j] = IntToStr(random(50)-25);
     StringGrid2->Cells[i][j] = IntToStr(random(50)-25);
 
    }
    }
     double** a = new double*[n];
 
for(i=0;i<=n;i++){
   a[i]=new double[n];
                        }
  double** b = new double*[n];
for(i=0;i<=n;i++){
   b[i]=new double[n];
                        }
   double** c = new double*[n];
for(i=0;i<=n;i++){
   c[i]=new double[n];
                        }
   double* d = new double[n];
 
for (i=0;i<=n;i++){
for (j=0;j<=n;j++)
   a[i][j]=StrToInt(StringGrid1->Cells[i][j]);
   b[i][j]=StrToInt(StringGrid2->Cells[i][j]);
  }
for (j=0;j<=n;j++){
d[j]=b[j][j];
for (i=0;i<=n;i++)
if (d[j]>b[i][j]) d[j]=b[i][j];
}
for (i=0;i<=n;i++){
for(j=0;j<=n;j++){
c[i][j]=a[i][j]+d[j];
                 }
                 }
for (i=0;i<=n;i++){
for(j=0;j<=n;j++){
StringGrid3->Cells[i][j]=IntToStr(c[i][j]);
 
}
}
}
//---------------------------------------------------------------------------
Petyu вне форума Ответить с цитированием
Старый 15.03.2013, 12:36   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

У вас массивы (включая Cells стрингрида) имеют размер н, а вы бегаете от 0 до н включительно, т.е. н+1 элемент.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 15.03.2013, 13:12   #3
Petyu
Пользователь
 
Регистрация: 04.12.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Ezhik Kihze Посмотреть сообщение
У вас массивы (включая Cells стрингрида) имеют размер н, а вы бегаете от 0 до н включительно, т.е. н+1 элемент.
парадокс в том что на делфи работает. переписал на с++ компилятор всё пропускает но во время работы программы вылетает ошибка. Подозреваю что ошибка в данной части кода
Код:
...double** a = new double*[n];

for(i=0;i<=n;i++){
   a[i]=new double[n];
                        }...
но исправляяя её получается ещё хуже
Petyu вне форума Ответить с цитированием
Старый 15.03.2013, 13:50   #4
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

еще раз: НЕТ у вас элемента a[n]
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 15.03.2013, 14:03   #5
Petyu
Пользователь
 
Регистрация: 04.12.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Ezhik Kihze Посмотреть сообщение
еще раз: НЕТ у вас элемента a[n]
ну напиши как тогда обьявление массивов должно выглядить и дальнейшая работа с ними к примеру сложение двух массивов
Petyu вне форума Ответить с цитированием
Старый 16.03.2013, 15:30   #6
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Petyu
Либо размер гридов увеличь на 1 (n+1), либо в циклах бегай до i < n, а не i <= n.
FataLL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задать элементам массива значения соответствующих по номеру элементов главной диагонали матрицы Марикан Помощь студентам 0 19.11.2012 21:50
Формирование новой матрицы (с#) RIOs Помощь студентам 1 10.04.2012 12:27
Формирование и вывод новой матрицы DarkSwan Visual C++ 10 05.11.2010 17:03