C/C++ - [решено] двумерные массивы на C++ Builder. вопрос в решении задания

Аватара пользователя
KnightMrak

C/C++ - [решено] двумерные массивы на C++ Builder. вопрос в решении задания

Сообщение KnightMrak »

Доброго времени суток.

Я только начал изучать массивы, и столкнулся с такой проблемой у меня есть массив 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

Re: C/C++ - [решено] двумерные массивы на C++ Builder. вопрос в решении задания

Сообщение XPEHOMETP »

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

Re: C/C++ - [решено] двумерные массивы на C++ Builder. вопрос в решении задания

Сообщение KnightMrak »

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


Цитата KnightMrak:





Код:

Код: Выделить всё

for(i=0;i<4;i++)
V[i]=A[i][j]-A[1][j];

C/C++ - [решено] двумерные массивы на C++ Builder. вопрос в решении задания




Векторная разница столбцов или строк? Что должно быть неизменно? Индекс строки или индекс столбца?

При i=3, V не выйдет за пределы массива?

void не возвращает результата.
Аватара пользователя
lxa85

Re: C/C++ - [решено] двумерные массивы на C++ Builder. вопрос в решении задания

Сообщение lxa85 »

Векторная разница 1 строки и 3 строки. Полного кода нету, это всё что было дано в книге.

Я знаю как это должно выглядеть математически, но как написать в C++ Builder, я туговат=(



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

Re: C/C++ - [решено] двумерные массивы на C++ Builder. вопрос в решении задания

Сообщение KnightMrak »

Цитата KnightMrak:



Я знаю как это должно выглядеть математически
C/C++ - [решено] двумерные массивы на C++ Builder. вопрос в решении задания




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

Re: C/C++ - [решено] двумерные массивы на C++ Builder. вопрос в решении задания

Сообщение lxa85 »

Дан двумерный массив 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, я не понимаю.=(
Аватара пользователя
KnightMrak

Re: C/C++ - [решено] двумерные массивы на C++ Builder. вопрос в решении задания

Сообщение KnightMrak »

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

Re: C/C++ - [решено] двумерные массивы на C++ Builder. вопрос в решении задания

Сообщение lxa85 »

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. Изображение )
Аватара пользователя
KnightMrak

Re: C/C++ - [решено] двумерные массивы на C++ Builder. вопрос в решении задания

Сообщение KnightMrak »

Доброго времени суток.

Вот написал код, а он не хочет компилиться!=(

Подскажите где допустил ошибку?.

Вод код программы:



Код:

Код: Выделить всё

//--------------------------------------------------------------------------- 
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-ю).
Аватара пользователя
KnightMrak

Re: C/C++ - [решено] двумерные массивы на C++ Builder. вопрос в решении задания

Сообщение KnightMrak »

Цитата KnightMrak:



for(i=0;iCells[0]=IntToStr(V); }
C/C++ - [решено] двумерные массивы на C++ Builder. вопрос в решении задания




Если мы говорим IntToStr(V), то мы пытаемся перевести массив в строку. Это ошибка.

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

Вернуться в «Программирование и базы данных»