Войти

Показать полную графическую версию : [решено] двумерные массивы на C++ Builder. вопрос в решении задания


KnightMrak
12-11-2012, 18:55
Доброго времени суток.
Я только начал изучать массивы, и столкнулся с такой проблемой у меня есть массив 3x4 нужно найти векторную разность 1 и 3 строк(при нажатии на Button1 программа должна находить векторную разность и выводить её в Edit1).
Подскажите, как написать код программы.
Бейте не сильно, я только начинаю изучать 2-е массивы
Заранее благодарен.
P.S.
Вот мои наработки:
const int m=3; const int n=4; typedef int AType[m][n]; V[3]; void Vector(AType A) {for(i=0;i<4;i++)V[i]=A[i][j]-A[1][j];}

XPEHOMETP
12-11-2012, 19:28
Чисто стандартный вопрос: как эти массивы попадают в память машины? Либо чтение данных из файла, либо ввод с клавиатуры. Иначе - сферический конь в вакууме.

lxa85
12-11-2012, 19:33
KnightMrak, предоставь пожалуйста полный исходный текст. Та строка что есть, мало понятна.
for(i=0;i<4;i++)
V[i]=A[i][j]-A[1][j]; »
Векторная разница столбцов или строк? Что должно быть неизменно? Индекс строки или индекс столбца?
При i=3, V[i] не выйдет за пределы массива?
void не возвращает результата.

KnightMrak
12-11-2012, 20:35
Векторная разница 1 строки и 3 строки. Полного кода нету, это всё что было дано в книге.
Я знаю как это должно выглядеть математически, но как написать в C++ Builder, я туговат=(

XPEHOMETP, массив вводиться с клавиатуры в ячейки поля StringGrid

lxa85
12-11-2012, 21:32
Я знаю как это должно выглядеть математически »
Тогда пишите математику. Как только математика задачи будет решена, переведем ее в C++.

KnightMrak
12-11-2012, 22:29
Дан двумерный массив 3x4 который мы вводим в поле StringGrid:
1 3 -1
0 2 1
4 3 5
2 0 -3
По условию задачи необходимо найти векторную разницу 1-й и 3-й строки массива (каждую отдельно)
Решение задачи при нажатии на Button1:
Находим векторную разницу 1-й строки массива:
Вектор первой строки = 1-3+1= -1;
Находим векторную разницу 3-й строки массива:
Вектор третей строки = 4-3-5= -4;
После нахождения векторной разности, ответ выводиться в поле Edit1 в виде -1,-4.
Вот решение математически, а вот теперь как это расписать в C++ Builder, я не понимаю.=(

lxa85
13-11-2012, 19:42
KnightMrak, пишу в псевдокоде, т.к. gcc (компилятор) в систему пока "не прикручен".
Делаем предположение, что матрица заполнена числами. Как работать со StrinGrid - я не в курсе, не возникало таких задач, читать справку откровенно лень.
Алгоритм будет несколько избыточным, но да ладно, не велика потеря.
Вводим дополнительный одномерный массив Vector[4]. В нем будем накапливать векторные разницы строк исходного массива.
Цикл i от 1 до 4 //строки
Vector[i]=Matrix[i][1] //первому элементу строки
Цикл j от 2 до 3 //столбцы. Именно от 2х!
Vector[i]=Vector[i]-Matrix[i][j]; // Цикл идет по строке, поэтому у нас меняется индекс столбца
Конец цикла j // столбцы
Конец цикла i //строки
Я могу ошибаться, но по моему в C++ индекс массива начинается с 0. Поэтому в условиях будет "от 0 до 3" и "от 1 до 2" для i и j соответственно.

В результате выполнения циклов мы получили массив Vector[] в котором хранятся векторные разницы строк исходного массива.
Вывести первое и третье значение не составит труда.
(прим. одномерный массив иногда называют вектором. Т.е. каламбурчик, вектор под названием Vector[i]. :) )

KnightMrak
25-11-2012, 15:14
lxa85, Спасибо за помощь.

KnightMrak
11-12-2012, 21:23
Доброго времени суток.
Вот написал код, а он не хочет компилиться!=(
Подскажите где допустил ошибку?.
Вод код программы:
//---------------------------------------------------------------------------
const int m=3;
const int n=4;
typedef int AType[m][n];
typedef int VType[m];
void Vector(AType A, VType &V)
{int i,j;
for(i=0;i<m;i++)
for(j=0;j<3;j+2)V[i]=A[0][i]-A[2][i]; }
void __fastcall TForm1::Button1Click(TObject *Sender)
{ AType A;
VType V;
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)A[i][j]=StrToInt(StringGrid1->Cells[j][i]);
Vector(A,V);
for(i=0;i<m;i++)
StringGrid2->Cells[0][i]=IntToStr(V); }
А вот скрины ошибок:
http://s019.radikal.ru/i605/1212/b6/e68941c0daa1t.jpg (http://radikal.ru/F/s019.radikal.ru/i605/1212/b6/e68941c0daa1.jpg.html)
http://s017.radikal.ru/i444/1212/a9/ae8c03d3c5cbt.jpg (http://radikal.ru/F/s017.radikal.ru/i444/1212/a9/ae8c03d3c5cb.jpg.html)
Заранее благодарен.
П.С. Задане: Дан массив 3х4, нужно найти вектор-разницу 1 и 3 строки(от 1-й строки отнять 3-ю).

lxa85
12-12-2012, 01:44
for(i=0;i<m;i++)
StringGrid2->Cells[0][i]=IntToStr(V); } »
Если мы говорим IntToStr(V), то мы пытаемся перевести массив в строку. Это ошибка.
Если мы говорим IntToStr(V[i]), то мы пытаемся перевести элементы массива в строки. Это уже будет иметь смысл.

KnightMrak
12-12-2012, 19:04
Спс. Я понял, всё заработало.




© OSzone.net 2001-2012