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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2008, 17:31   #1
Fonarik
 
Регистрация: 28.10.2008
Сообщений: 9
По умолчанию Delphi. Массивы,алгоритм симметрии строки

Добрый день всем, стоит задача:
Задана матрица N*M, получить массив B, присвоив его k-му элементу значение 1, если k-я строка матрицы симметрична, и значение 0 в противном.
В чем загвостка:
сделал алгоритм прохода по массиву А (т.е. первый), чтобы проверял 1й и последний, 2й с предпоследним элементом каждой строки, но не понимаю по какой причине вылетает из цикла 2 строки (отмечено жирным) и просходит заполнение всех элементов массива B 1-цами.
Фрагмент кода: (m = кол-во строк, n=кол-во столбцов)
for i:=1 to m do begin
for j:=1 to n div 2 do begin
if A[i,j]=A[i,n-j+1] then begin B[i]:=1;
stringgrid2.cells[0,i]:=floattostrF(B[i],fffixed,6,0); end
else B[i]:=0;

stringgrid2.cells[0,i]:=floattostrF(B[i],fffixed,6,0); end;

Препод говорит, что не правильно задан алгоритм, т.е. первые 3 строки в данном фрагменте. Прошу помощи, что не так? Т.к. сам уже бьюсь с этой программой 2 дня.

Заранее всем спасибо кто откликнеться.
Fonarik вне форума Ответить с цитированием
Старый 28.10.2008, 18:07   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Код:
   for i:=1 to m do begin
     k := 1;  // предположение - строка симметрична
     for j:=1 to n div 2 do begin
       if A[i,j] <> A[i,n-j+1] then begin
          k := 0; // ан нет
          break;
       end;
     end;
     b[i] := k
   end;
alexBlack вне форума Ответить с цитированием
Старый 28.10.2008, 18:22   #3
Fonarik
 
Регистрация: 28.10.2008
Сообщений: 9
По умолчанию

Спс,alexBlack, но делаю как ты пишешь:
Цитата:
var k:extended;
begin
for i:=1 to m do begin
k := 1; // предположение - строка симметрична
for j:=1 to n div 2 do begin
if A[i,j]<>A[i,n-j+1] then begin
k:=0; // ан нет
break;
end;
end;
stringgrid2.cells[0,i]:=floattostrF(k,fffixed,6,2);
end;
end;
И заполняется массив B 1цами...
Fonarik вне форума Ответить с цитированием
Старый 28.10.2008, 19:02   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Наверно у Вас все строки симметричные, у меня нормально заполняется.
puporev вне форума Ответить с цитированием
Старый 28.10.2008, 19:10   #5
Fonarik
 
Регистрация: 28.10.2008
Сообщений: 9
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Наверно у Вас все строки симметричные, у меня нормально заполняется.
ввожу массив А:
3 -1 2 -1 2
2 7 3 7 2
-3 0 4 1 5

в В пишет:
1
1
1
На всякий случай весь код вывожу:
Цитата:
type
mas2=array[1..3,1..5] of extended;
mas1=array[1..3] of extended;
var
Form1: TForm1;
a:mas2;
b:mas1;
n,m,i,j:integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
n:=3; edit1.Text:=floattostr(n);
m:=3; edit2.text:=floattostr(m);
stringgrid1.ColCount:=n+1;
stringgrid1.RowCount:=m+1;
stringgrid2.Rowcount:=m+1;
stringgrid1.Cells[0,0]:='массив À:';
stringgrid2.cells[0,0]:='массив B:';
for i:=1 to m do begin
stringgrid1.cells[0,i]:='i='+inttostr(i); end;
for j:=1 to n do begin
stringgrid1.Cells[j,0]:='j='+inttostr(j);
end;


end;

procedure TForm1.Button1Click(Sender: TObject);
begin
n:=strtoint(edit1.Text);
m:=strtoint(edit2.text);
stringgrid1.ColCount:=n+1;
stringgrid1.RowCount:=m+1;
stringgrid2.rowcount:=m+1;
for i:=1 to m do stringgrid1.cells[0,i]:='i='+inttostr(i);
for j:=1 to n do stringgrid1.cells[j,0]:='j='+inttostr(j);

end;

procedure TForm1.Button2Click(Sender: TObject);
var k:extended;
begin
for i:=1 to m do begin
k := 1; // предположение - строка симметрична
for j:=1 to n div 2 do begin
if A[i,j]<>A[i,n-j+1] then begin
k:=0; // ан нет
break;
end;
end;
stringgrid2.cells[0,i]:=floattostrF(k,fffixed,6,2);
end;
end;
Fonarik вне форума Ответить с цитированием
Старый 28.10.2008, 19:36   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Ну, посмотрел. Вводите Вы массив в таблицу, ну и что? А как программа узнает, что Вы ввели? Надо ведь массиву А передать значения из таблицы.
puporev вне форума Ответить с цитированием
Старый 28.10.2008, 19:59   #7
Fonarik
 
Регистрация: 28.10.2008
Сообщений: 9
По умолчанию

puporev, методом проб и ошибок добился я результата, нужно было вставить (выделено жирным), чтоб получилось правильно:
var k:extended;
begin
for i:=1 to m do
for j:=1 to n do
A[i,j]:=strtofloat(stringgrid1.cells[j,i]);

for i:=1 to m do begin
k := 1;
for j:=1 to n div 2 do begin
A[i,j]:=strtofloat(stringgrid1.cells[j,i]);
if A[i,j]<>A[i,n-j+1] then begin
k:=0;
break;
end;
end;
stringgrid2.cells[0,i]:=floattostrF(k,fffixed,6,2);
end;[/CODE]

Всем большое спасибо

Последний раз редактировалось Fonarik; 28.10.2008 в 20:18.
Fonarik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм поиска HEX строки в файле Vlad_3310 Общие вопросы Delphi 8 17.06.2008 10:02
Массивы символов (строки) символьные файлы. anarchist Помощь студентам 2 24.12.2007 09:16
Одномерные массивы и строки Magnit Паскаль, Turbo Pascal, PascalABC.NET 4 12.04.2007 15:04