Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] двумерные массивы на C++ Builder. вопрос в решении задания

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

Новый участник


Сообщения: 7
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


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

Отправлено: 18:55, 12-11-2012

 

Ветеран


Сообщения: 1807
Благодарности: 146

Профиль | Отправить PM | Цитировать


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

Отправлено: 19:28, 12-11-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


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

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 19:33, 12-11-2012 | #3


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 20:35, 12-11-2012 | #4


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Цитата KnightMrak:
Я знаю как это должно выглядеть математически »
Тогда пишите математику. Как только математика задачи будет решена, переведем ее в C++.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 21:32, 12-11-2012 | #5


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 22:29, 12-11-2012 | #6


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


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]. )

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:42, 13-11-2012 | #7


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 15:14, 25-11-2012 | #8


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток.
Вот написал код, а он не хочет компилиться!=(
Подскажите где допустил ошибку?.
Вод код программы:
Код: Выделить весь код
//--------------------------------------------------------------------------- 
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, 11-12-2012 в 21:43.


Отправлено: 21:23, 11-12-2012 | #9


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


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

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:44, 12-12-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] двумерные массивы на C++ Builder. вопрос в решении задания

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Двумерные массивы Hardcore Программирование и базы данных 2 11-10-2010 06:05
C/C++ - Двумерные массивы Hardcore Программирование и базы данных 3 05-10-2010 22:35
[решено] Не выполняются задания по времени в "Назначенные задания" ? Night-Elf Microsoft Windows NT/2000/2003 10 05-03-2010 10:11
C/C++ - C++ builder очень лёгкий вопрос S1stem Программирование и базы данных 6 03-07-2008 18:17
Динамические двумерные массивы Nealles Программирование и базы данных 3 05-09-2003 21:59




 
Переход