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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2012, 20:37   #11
CrOsP
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 26
По умолчанию

Подскажите пожалуйста !
CrOsP вне форума Ответить с цитированием
Старый 12.11.2012, 21:23   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, разберите такую программу:
Код:
const
  N = 4;

var A:array[1..N, 1..N] of integer;
  B : array[1..4*N-4] of integer;
  i,j,k : integer;
begin
  {сначала заполним матрицу так, чтобы циферки 
    шли по порядку - чтобы было нагляднее увидеть,
    откуда-что берётся.
    Одноврменно будем выдавать матрицу на экран построчно}
  WriteLn('Исходная матрица: ');
  k:=1;
  for i:=1 to N do begin
    for j:=1 to N do begin
       A[i,j] := k;
       Write(A[i,j]:3,' ');
       Inc(k);
    end;
    WriteLn;
  end;
  WriteLn;


  {
   теперь заполним массив B числами расположенными 
    "по кромке" матрицы

    внимание! В задаче в матрицу нужно записывать не сами числа, 
    а их значность. Но мы, для отладки и просмотра алгоритма 
    запишем в матрицу B сами числа из матрицы.

  }

  k:=1;
  WriteLn('Отладка: сначала идём по верхней "кромке" матрицы: ');
  for i:=1 to N do begin {сначала идём по верхней "кромке" матрицы
                          1 ... ->...  N  }
    B[k] := A[1, i];
    Write(B[k]:3,' ');
    inc(K);
  end;
  WriteLn;

  WriteLn('Отладка: идём по крайнему правому столбцу сверху вниз: ');
  for i:=2 to N do begin {теперь идём по крайнему правому столбцу сверху вниз}
    B[k] := A[i, N];
    Write(B[k]:3,' ');
    inc(K);
  end;
  WriteLn;


  WriteLn('Отладка: идём по нижней строчке Справа налево вплоть по первого столбца: ');
  for i:=N-1 downto 1 do begin
    B[k] := A[N, i];
    Write(B[k]:3,' ');
    inc(K);
  end;
  WriteLn;


  WriteLn('Отладка: поднимаемся по первому столбцу от предпоследней строчки до второй строчки: ');
  for i:=N-1 downto 2 do begin
    B[k] := A[ i , 1];
    Write(B[k]:3,' ');
    Inc(k)
  end;
  Dec(k);
  WriteLn;

  WriteLn('Всё. Закончили формирование массива B!');
  WriteLn('Полностью массив B:');
  for i:=1 to K do  Write(B[i]:3,' ');
  WriteLn;

  Readln
end.

Последний раз редактировалось Serge_Bliznykov; 12.11.2012 в 21:31.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.11.2012, 21:40   #13
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Mad_Cat, кстати, алгоритм у Вас очень хороший (хотя, безусловно и хитромудрый (в хорошем смысле слова, конечно!!) )

но есть один косячок. при i=N получается выход за пределы массива B:

оцените (ваш код с отладочными сообщениями):
Код:
for i:=1 to n do
begin
b[i]:=a[1,i];
if (i+n-1)>4*N-4 then
  WriteLn('ERROR! i+n-1 = ',i+n-1, ' при i=',i); 
b[i+n-1]:=a[i,n];
if (i+2*n-2)>4*N-4 then
  WriteLn('ERROR! i+2*n-2 = ',i+2*n-2, ' при i=',i); 
b[i+2*n-2]:=a[n,n-i+1];
if (i+3*n-3)>4*N-4 then
  WriteLn('ERROR! i+3*n-3 = ',i+3*n-3, ' при i=',i); 
b[i+3*n-3]:=a[n-i+1,1];
end;

  WriteLn('Полностью массив B по методу Mad_Cat:');
  for i:=1 to 4*N-4 do  Write(B[i]:3,' ');
  WriteLn;
Readln;
при n=4, например, получаем:
Цитата:
ERROR! i+3*n-3 = 13 при i=4
при размере массива B [1..4*(N-1) получается размер [1..12]
13-го элемента в массиве B нет!

Это я зачем пишу?..
Затем, чтобы кто-то не наступил на грабельки, взяв (не проверив) готовый код!

я бы предложил подправить код (c) Mad_Cat так:
Код:
for i:=1 to n do
begin
  b[i]:=a[1,i];
  b[i+n-1]:=a[i,n];
  b[i+2*n-2]:=a[n,n-i+1];
  if i<n then 
      b[i+3*n-3]:=a[n-i+1,1];
end;

Последний раз редактировалось Serge_Bliznykov; 12.11.2012 в 21:43.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.11.2012, 21:48   #14
CrOsP
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 26
По умолчанию

Спасибо я уже чуть разобрался в вашем коде ( до того как вы пост сделали ) но смотрите я сделал так
Код:
getMatrFromGrid(m, nrow, nCol, StringGrid1);
 k:=1;
for i:=0 to Nrow-1 do begin
  B[k] := Length(Trim(StringGrid1.Cells[0, i]));
  x:=b[k];
  inc(K);
  ShowMessage(IntToStr(x));
end;
Это с первого элемента вниз по левому краю . Но показывает 4 значения , хотя матрица 3х3 . Подскажите где я напортачил ?
CrOsP вне форума Ответить с цитированием
Старый 12.11.2012, 21:52   #15
CrOsP
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 26
По умолчанию

Смотрите , а если матрица будет не квадратной ,то нужно будет поменять N ? На уже количество строк и столбцов ?
CrOsP вне форума Ответить с цитированием
Старый 12.11.2012, 22:06   #16
CrOsP
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 26
По умолчанию

Если писать как у вас в коде пишет несовместимые типы .
CrOsP вне форума Ответить с цитированием
Старый 12.11.2012, 22:12   #17
CrOsP
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 26
По умолчанию

Нашел ошибку
Код:
getMatrFromGrid(m, nrow, nCol, StringGrid1);
 k:=1;
for i:=1 to Ncol do begin
  b[k] := Length(IntToStr(m[1,i]));
  x:=b[k];
  inc(K);
  ShowMessage(IntToStr(x));
end;
Но все равно выводит 4 значения вместо 3
CrOsP вне форума Ответить с цитированием
Старый 12.11.2012, 22:16   #18
CrOsP
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 26
По умолчанию

Извините пожалуйста ,просто внизу еще 1 шоумеседж остался )) Сейчас сделаю полный код и отпишусь , чтобы Вы проверили .
CrOsP вне форума Ответить с цитированием
Старый 12.11.2012, 22:31   #19
CrOsP
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 26
По умолчанию

УРА РАБОТАЕТ !!
Код:
getMatrFromGrid(m, nrow, nCol, StringGrid1);
 k:=1;
for i:=1 to Ncol do begin
  b[k] := Length(IntToStr(m[1,i]));
  x:=b[k];
  inc(K);
  ShowMessage(IntToStr(x));
end;
for i:=2 to ncol do begin
  B[k] := Length(IntToStr(m[i, Ncol]));
  x:=b[k];
  ShowMessage(IntToStr(x));
  inc(K);
end;
for i:=Ncol-1 downto 1 do begin
  B[k] := Length(IntToStr(m[Nrow,i]));
   x:=b[k];
  inc(K);

  ShowMessage(IntToStr(x));
end;

for i:=Nrow-1 downto 2 do begin
  B[k] :=Length(IntToStr(m[i,1]));
  x:=b[k];
  inc(K);
   ShowMessage(IntToStr(x));


end;
CrOsP вне форума Ответить с цитированием
Старый 12.11.2012, 22:38   #20
CrOsP
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 26
По умолчанию

Рано обрадовался с неквадратными матрицами не работает
CrOsP вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать двоичный файл, записать n целых чисел. Из файла создать массив, элементы числа-палиндромы (на C) Simak63 Помощь студентам 0 30.03.2011 21:06
Создать одномерный массив элементы которого среднеарифметические значения столбцов матрицы Playersum Помощь студентам 3 21.01.2011 09:08
Рассчет суммы цифр чисел элементов, расположеных по кромке матрицы dima-intro Помощь студентам 7 21.12.2010 21:58
Создать матрицу A[1..N,1..N] из целых чисел. Сформировать одномерный массив, элементы которого - максимал spezzA Помощь студентам 2 24.11.2010 19:29
вывести вектор, элементы которого являются наибольшими числами каждой строки матрицы Artur1992 Помощь студентам 1 23.11.2010 11:35