Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2012, 10:06   #1
firafs
 
Регистрация: 12.07.2012
Сообщений: 6
По умолчанию StringGrid операции со строками

Суть задачи состоит в следующем.
- имеется матрица 3х3 (значения вводятся пользователем).
- выбирается начальная строка (также пользователем).
- далее программа выбирает из значений в данной строке максимальное. номер столбца, в котором находится данное максимальное значение будет являться номером следующей строки, которую будет рассматривать программа.
- при переходе на новую строку программа складывает значения элементов этой строки с предыдущей

-одновременно с поиском максимальным значением находится минимальное и делится на номер шага.
в конце все это выводится в таблицу вида:

номер шага|минимальное значение/номер шага|1 элемент строки|2элемент строки|3 элемент строки

все это происходит конечное число раз, указанное пользователем.

Например: имеем
0 3 1
4 1 2
2 0 3
выбираем за начальную вторую строку. max = 4. 4 находится в первом столбце, значит переходим на первую строку, при этом элементы первой строки будут равны 0+4 3+1 1+2 = 4 4 3.
снова ищем max. max = 4 (не важно какая именно 4 первая или вторая, допустим первая), тогда остаемся на первой строке и ее элементы будут равны 4 7 4, и т.д.

вот, что вышло у меня. в коде уже, конечно, каша - вчера долго с ним мучился
то, что вышло у меня считает верно только первые 3 шага

попытался сделать, чтобы все менялось в матрице А, а значения для сложения брались из матрицы G, но.. что-то неочень вышло, вообщем need help.

ps: newbie)

Код:
float A[3][3];
for (int i=0; i<3; i++)
  {
   for (int j=0; j<3; j++)
    {
     A[j][i]=StrToFloat(matrixA->Cells[i][j]); // matrixA - объект StringGrid
     G[j][i]=A[j][i];
     };
   };


int z,iter;

z=StrToInt(EditStrA->Text)-1;  // номер начальной строки

iter=StrToInt(EditIter->Text);  // кол-во итераций


int f1=z,f,k=1,i=0;


float a[100];
do {

 // Определение max

 if (A[z][0]>=A[z][1] && A[z][0]>=A[z][2])
   f=0;
 else {
  if (A[z][1]>=A[z][0] && A[z][1]>=A[z][2])
   f=1;
  else
   f=2;
       }

 // Определение min

 if (A[z][0]<=A[z][1] && A[z][0]<=A[z][2])
  a[i]=A[z][0]/k;
 else {
   if (A[z][1]<=A[z][0] && A[z][1]<=A[z][2])
    a[i]=A[z][1]/k;
   else
    a[i]=A[z][2]/k;
      }

 // Вывод данных

  StringGrid2->Cells[0][i]=k;
  StringGrid2->Cells[1][i]=a[i];
  StringGrid2->Cells[2][i]=A[z][0];
  StringGrid2->Cells[3][i]=A[z][1];
  StringGrid2->Cells[4][i]=A[z][2];

   A[f][0]+=G[f1][0]; A[f][1]+=G[f1][1];  A[f][2]+=G[f1][2];

   z=f;


  i++;
  k++;
        }

  while (k<=iter);
Builder C++

Последний раз редактировалось firafs; 12.07.2012 в 10:24.
firafs вне форума Ответить с цитированием
Старый 12.07.2012, 16:11   #2
firafs
 
Регистрация: 12.07.2012
Сообщений: 6
По умолчанию

понял, что ошибка в том, что f1 после первого прохода меняется на 1 (в данном примере) и так и остается, поэтому ко всем строкам потом прибавляется 4 1 2. но как это исправить, неужели нет шарящих людей?
firafs вне форума Ответить с цитированием
Старый 12.07.2012, 19:29   #3
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

разбиритесь с алгоритмом (до его реализации на ЯП), так в вашем же примере
Цитата:
выбираем за начальную вторую строку. max = 4. 4 находится в первом столбце, значит переходим на первую строку, при этом элементы первой строки будут равны 0+4 3+1 1+2 = 4 4 3.
снова ищем max. max = 4 (не важно какая именно 4 первая или вторая, допустим первая), тогда остаемся на первой строке и ее элементы будут равны 4 7 4, и т.д.
почему 4 7 4?
текущая 4 4 3 и предыдущая она же 4 4 3 - новая соответственно должна быть 8 8 6, во всяком случае так следует из вашей постановки.

Так что Вы вначале определитесь более точнее с тем что и как вы хотите, а потом уже беритесь за реализацию.
astecenko вне форума Ответить с цитированием
Старый 12.07.2012, 19:49   #4
firafs
 
Регистрация: 12.07.2012
Сообщений: 6
По умолчанию

возможно, что объяснил несовсем доходчиво, потому и дал пример. предыдущая начальная 0 3 1, она и должна прибавляться. то есть прибавляются элементы строк из начальной матрицы.

спасибо, за интерес к моему вопросу, конечно, но хотелось бы ближе к сути. собсно, если бы я не запутался - я бы тут не писал

Последний раз редактировалось firafs; 12.07.2012 в 20:01.
firafs вне форума Ответить с цитированием
Старый 12.07.2012, 21:10   #5
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

За неимением C++ Builder делад в Delphi 7, но должно быть понятно. Проверьте на своих контрольных примерах.
Вложения
Тип файла: zip Matrix1.zip (254.7 Кб, 7 просмотров)
astecenko вне форума Ответить с цитированием
Старый 13.07.2012, 23:46   #6
firafs
 
Регистрация: 12.07.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от astecenko Посмотреть сообщение
За неимением C++ Builder делад в Delphi 7, но должно быть понятно. Проверьте на своих контрольных примерах.
благодарю, но эта прога на каждом шаге выдает те же значения, что и моя
firafs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операции со строками массивов. Corvette Общие вопросы C/C++ 0 16.10.2011 21:13
Операции со строками. just_dake Помощь студентам 14 16.09.2011 15:32
Операции со строками ArniLand Общие вопросы C/C++ 1 06.04.2010 21:49
Операции над строками Маринка777 Общие вопросы .NET 3 29.11.2009 22:28