Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] двумерные массивы на C++ Builder. вопрос в решении задания (http://forum.oszone.net/showthread.php?t=246785)

KnightMrak 12-11-2012 18:55 2024258

двумерные массивы на C++ Builder. вопрос в решении задания
 
Доброго времени суток.
Я только начал изучать массивы, и столкнулся с такой проблемой у меня есть массив 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 2024280

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

lxa85 12-11-2012 19:33 2024286

KnightMrak, предоставь пожалуйста полный исходный текст. Та строка что есть, мало понятна.
Цитата:

Цитата 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 2024343

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

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

lxa85 12-11-2012 21:32 2024387

Цитата:

Цитата KnightMrak
Я знаю как это должно выглядеть математически »

Тогда пишите математику. Как только математика задачи будет решена, переведем ее в C++.

KnightMrak 12-11-2012 22:29 2024430

Дан двумерный массив 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 2025020

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 2032498

lxa85, Спасибо за помощь.

KnightMrak 11-12-2012 21:23 2043375

Доброго времени суток.
Вот написал код, а он не хочет компилиться!=(
Подскажите где допустил ошибку?.
Вод код программы:
Код:

//---------------------------------------------------------------------------
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); }

А вот скрины ошибок:


Заранее благодарен.
П.С. Задане: Дан массив 3х4, нужно найти вектор-разницу 1 и 3 строки(от 1-й строки отнять 3-ю).

lxa85 12-12-2012 01:44 2043575

Цитата:

Цитата KnightMrak
for(i=0;i<m;i++)
StringGrid2->Cells[0][i]=IntToStr(V); } »

Если мы говорим IntToStr(V), то мы пытаемся перевести массив в строку. Это ошибка.
Если мы говорим IntToStr(V[i]), то мы пытаемся перевести элементы массива в строки. Это уже будет иметь смысл.

KnightMrak 12-12-2012 19:04 2044107

Спс. Я понял, всё заработало.


Время: 23:43.

Время: 23:43.
© OSzone.net 2001-