Поиск:

Ответ в темуСоздание новой темы Создание опроса
> из IDE в builder 6, обработчик событий под массивчик 
:(
    Опции темы
киса2009
  Дата 13.12.2009, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 21.9.2009
Где: Москва))

Репутация: нет
Всего: нет



Еще раз всем привет.Есть код программки, которая создает массив из элементов по функции, и в каждой строчке меняет максимальный элемент по модулю с диагональным
Код

#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <iostream.h>

const double X = M_PI /10;

void SetValue(double **A, int i, int j)
{
   A[i][j]  = cos(double(i+j))*X;
   cout << A[i][j] << " ";
}
int main()
{
  int N, i, j;
  printf("Razmernost A:");
  scanf("%d", &N);
  double** A = new double*[N];
  for (i=0;i<N;i++)
    A[i] = new double[N];
  for (i=0; i<N; i++)
  {
    for (j=0; j<N; j++)
    {
      SetValue(A, i, j);
    }
  }
//vivod
printf("\nVvedennaya matrica :\n");
for (i=0; i<N; i++)
{
  for (j=0;j<N;j++)
  printf("%f\t",A[i][j]);
  printf("\n");
}

for(i=0; i<N; i++)
{
  double conk=fabs(A[i][0]);
  int k=0;
  for(j=0; j<N; j++)
  {

    if(fabs(A[i][j])>conk)
      {
    k=j;
    conk=fabs(A[i][j]);
      }
  }
  double tmp=A[i][i];
  A[i][i]=A[i][k];
  A[i][k]=tmp;
}


printf("\nOut :\n");
for (i=0; i<N; i++)
{
  for (j=0;j<N;j++)
  printf("%f\t",A[i][j]);
  printf("\n");
}
for(i=0; i<N; i++)
  delete[] A[i];

delete []A;
getch();

return 0;
}


Нужно реализовать её в билдере(сделать обработчик для кнопки, исходную матрицу вбить к примеру в один stringgrid,подсчитанную в другой)
Проблема в том, что никак не получается связать с ячейками..
Может кто-нибудь подсказать алгоритм "переврда"?
PM MAIL ICQ   Вверх
smoke_man
Дата 13.12.2009, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Кидаешь два StringGrid`а у одного ставишь свойство Options  -  goEditing в true.
Далее заполняешь свой массив, например так:
Код

int RowCount = StringGrid1->RowCount;
int ColCount = StringGrid1->ColCount;
for(int i = 1 ; i < RowCount; i++)
   for(int j = 1; j < ColCount ; j++)
         a[i][j] = StrToFloat(StringGrid1->Cells[i][j]);


Таким же образом записываешь обработанный результат в другой StringGrid:
Код


for(int i = 1 ; i < ArrayCount; i++)
   for(int j = 1; j < ArrayCount ; j++)
         StringGrid2->Cells[i][j] =  FloatToStr(a[i][j]);


Добавлено через 1 минуту и 16 секунд
Только не забудь сделать проверки - чтоб не было переполнения.


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
киса2009
Дата 13.12.2009, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 21.9.2009
Где: Москва))

Репутация: нет
Всего: нет



Спасибо=)
Я вот только понять не могу, как значения функции загнать в ячейки..
PM MAIL ICQ   Вверх
smoke_man
Дата 13.12.2009, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Ты имеешь виду SetValue?


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
киса2009
Дата 13.12.2009, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 21.9.2009
Где: Москва))

Репутация: нет
Всего: нет



именно
все переменные плюс const double X = M_PI /10; обьявила,
N = Form1->StringGrid1 -> RowCount;
N = Form1->StringGrid1 -> ColCount;

for(int i = 1 ; i < N; i++)
   for(int j = 1; j < N ; j++) сделала, а как быть с 
   A[i][j]  = cos(double(i+j))*X;
   cout << A[i][j] << " "; не пойму..точнее как это правильно записать
PM MAIL ICQ   Вверх
smoke_man
Дата 13.12.2009, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Тогда тебе  один StringGrid не нужен. Кидаешь на форму  два Edit`а, в которые вводятся размерности исходного массива, а дальше уже используется твоя функция SetValue.

Добавлено @ 01:04
Так можно от функции отказаться - непосредственно сразу считать значение. Строку с cout удали.

Это сообщение отредактировал(а) smoke_man - 13.12.2009, 01:05


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
киса2009
Дата 13.12.2009, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 21.9.2009
Где: Москва))

Репутация: нет
Всего: нет



это почему не нужен?)))
мне в первый нужно сформировать массив, соотв.значениям формулы
aij = cos (i + j ) * x, х=п/10,
а во второй уже с замененными значениями

Добавлено через 5 минут и 11 секунд
Цитата(smoke_man @  13.12.2009,  01:01 Найти цитируемый пост)
Так можно от функции отказаться - непосредственно сразу считать значение

а как?=[

Добавлено через 13 минут и 49 секунд
сделала для первого такой кусочек
Код

int i,j,N;
double **a;

void __fastcall TForm1::Button5Click(TObject *Sender)
{
N = Form1->StringGrid1 -> RowCount;
N = Form1->StringGrid1 -> ColCount;
 Form1->Edit1->Text=IntToStr(N);
for(int i = 1 ; i < N; i++)
   for(int j = 1; j < N ; j++)
          a[i][j]  = cos(double(i+j));
         a[i][j] = StrToFloat(StringGrid1->Cells[i][j]);
}

но,как ни странно, не правильно
PM MAIL ICQ   Вверх
smoke_man
Дата 13.12.2009, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Если делать все по выше написанному, то, например, так(с учетом 2-х Edit):
Код

int counti = StrToInt(Edit1->Text);
int countj = StrToInt(Edit2->Text);

//Создаем массив counti на countj
....

for(int i = 0 ; i < counti ; i++)
   for(int j = 0; j < countj; j++)
       A[i][j] = cos(double(i+j))*X;
//Устанавливаем размерность StringGrid1  в соответствии с массивом А
StringGrid1->RowCount = counti+1;
StringGrid1->ColCount = countj+1;
//Выводим значения

for(int i = 0 ; i < counti; i++)
   for(int j = 0; j < countj ; j++)
         StringGrid1->Cells[i+1][j+1] = FloatToStr(A[i][j]);
//Производим остальные действия
....
//Устанавливаем размерность StringGrid2  в соответствии с массивом А
StringGrid2->RowCount = counti+1;
StringGrid2->ColCount = countj+1;
//Выводим результат
for(int i = 0 ; i < counti; i++)
   for(int j = 0; j < countj ; j++)
         StringGrid2->Cells[i+1][j+1] = FloatToStr(A[i][j]);


Это сообщение отредактировал(а) smoke_man - 13.12.2009, 01:24


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
киса2009
Дата 13.12.2009, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 21.9.2009
Где: Москва))

Репутация: нет
Всего: нет



это все под кнопку?=[[[
PM MAIL ICQ   Вверх
smoke_man
Дата 13.12.2009, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Да. 


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
киса2009
Дата 13.12.2009, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 21.9.2009
Где: Москва))

Репутация: нет
Всего: нет



user posted image
ошибку при нажатии на кнопку выдает
PM MAIL ICQ   Вверх
smoke_man
Дата 13.12.2009, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Где именно возникает ошибка?


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
киса2009
Дата 13.12.2009, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 21.9.2009
Где: Москва))

Репутация: нет
Всего: нет



Смотри, решила пойти последовательно, пока все остальное опустила, оставила только один StringGrid, два эдита и одну кнопку.
такой код
Код

#include <vcl.h>
#include <math.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
double **A;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int counti = StrToInt(Edit1->Text);
int countj = StrToInt(Edit2->Text);


for(int i = 0 ; i < counti ; i++)
   for(int j = 0; j < countj; j++)
       A[i][j] = cos(double(i+j));

StringGrid1->RowCount = counti+1;
StringGrid1->ColCount = countj+1;

for(int i = 0 ; i < counti; i++)
   for(int j = 0; j < countj ; j++)
         StringGrid1->Cells[i+1][j+1] = FloatToStr(A[i][j]);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1Change(TObject *Sender)
{
StringGrid1->RowCount=StrToInt(Edit1->Text);        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit2Change(TObject *Sender)
{
StringGrid1->ColCount=StrToInt(Edit2->Text);        
}
//---------------------------------------------------------------------------

после ввода размерности при нажатии на кнопку  вылетает ошибка
user posted image
PM MAIL ICQ   Вверх
smoke_man
Дата 13.12.2009, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Так под массив A надо память выделить.


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
киса2009
Дата 13.12.2009, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 21.9.2009
Где: Москва))

Репутация: нет
Всего: нет



double ** A= new double * [counti];
  for(int i=0;i<counti;i++)
      A[counti]= new double [countj];
так?

Это сообщение отредактировал(а) киса2009 - 13.12.2009, 02:23
PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0852 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.