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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2015, 16:37   #1
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию Индекс вышел за пределы массива и поиск столбца с числом

{28. Дано число k и матрица размера 4 x 9. Перед1|после2 строки3|столбца4 матрицы с номером k вставить строку3|столбец4 из нулей. }

Код:
program var3_28;

var
   key: integer;
   m, n, i, j, l, f, k, i1,j1: integer;
   a: array[1..5, 1..10]of integer;

begin
   randomize;
   writeln('1 - Перед строкой  матрицы с номером k вставить строку из нулей');
   writeln('2 - После столбца матрицы с номером k вставить столбец из нулей');
   readln(key);
   repeat
      write('Введите количество строк');
      read(m);
   until m in [1..5];
   repeat
      write('Введите количество столбцов');
      read(n);
   until n in [1..10];
   for i := 1 to m do
      for j := 1 to n do
         repeat
            f := 0;
            a[i, j] := random(n * m) + 1;{минимальный набор чисел от 1 до n*m}
            for k := 1 to m do
               for l := 1 to n do
                  if (a[i, j] = a[k, l]) then inc(f);
         until f = 1;
   writeln('Исходная матрица:');
   for i := 1 to m do
   begin
      for j := 1 to n do
         write(a[i, j]:4);
      writeln;
   end;
   writeln;
   write('Введите число для поиска k =');
   read(k);
   case key of
      1:
         begin
            i1 := 0;
            i := 1;
            while (i <= m) and (i1 = 0) do
            begin
               j := 1;
               while (j <= n) and (i1 = 0) do
                  if a[i, j] = k then i1 := i
                  else j := j + 1;
               if i1 = 0 then i := i + 1;
            end;
            if i1 = 0 then write('В матрице нет такого числа')
            else
            begin
               m := m + 1;
               for i := m downto i1 + 1 do
                  for j := 1 to n do
                     a[i, j] := a[i - 1, j];
               for j := 1 to n do
                  a[i1, j] := 0;
               writeln('Вставка строки перед строкой ', i1);
               for i := 1 to m do
               begin
                  for j := 1 to n do
                     write(a[i, j]:4);
                  writeln;
               end;
            end;
         end;
      2:
     
         begin
          j1 := 0;
            j := 1;
            if k = m then
               for i := 1 to n do
                  a[i, m + 1] := 0
            else
            begin
               for i := 1 to n do
                  for j := m + 1 downto j1 + 2 do
                     a[i, j] := a[i, j - 1];
               for i := 1 to n do a[i, j1 + 1] := 0;
            end;
            writeln('Вставка столбца из нолей после столбца ', j1);
            writeln;
            for i := 1 to n do
            begin
               for j := 1 to m + 1 do
                  write(a[i, j]:4);
               writeln;
            end;
         end;
   end;  
end.
Здесь 2 проблемы,ругается на индекс вышел за границу массива,хотя укладываюсь в размеры.

И в 2-ом пункте он не может найти столбец с поисковым числом и вставить после него нули.
Otar4ik вне форума Ответить с цитированием
Старый 06.09.2015, 23:00   #2
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Код:
program var3_8;

var
   a: array[1..5, 1..10] of integer;
   key: integer;
   m, n, i, j, l, f, k: integer;

begin
   randomize;
   writeln('1 - Перед строкой  матрицы с номером k вставить строку из нулей');
   writeln('2 - После столбца матрицы с номером k вставить столбец из нулей');
   readln(key);
   repeat
      write('Введите количество строк: ');
      readln(m);
   until m in [1..4];
   repeat
      write('Введите количество столбцов: ');
      readln(n);
   until n in [1..9];
   for i := 1 to m do
      for j := 1 to n do
         repeat
            f := 0;
            a[i, j] := random(n * m) + 1;{минимальный набор чисел от 1 до n*m}
            for k := 1 to m do
               for l := 1 to n do
                  if (a[i, j] = a[k, l]) then inc(f);
         until f = 1;
   writeln('Исходная матрица:');
   for i := 1 to m do
   begin
      for j := 1 to n do
         write(a[i, j]:4);
      writeln;
   end;
   writeln;
   write('Введите число k = ');
   readln(k);
   case key of
      1:
         begin
            if (m < k) or (k<=0) then
            begin
                writeln('Нету такой строки');
            end
            else
            begin
                for i:=m downto k do
                    for j:=1 to n do
                        a[i+1,j]:=a[i,j];
                for j:=1 to n do
                    a[k,j]:=0;
                inc(m);
            end;
         end;
      2:
         begin
            if (n < k) or (k<=0) then
            begin
                writeln('Нету такого столбца');
            end
            else
            begin
                for i:=n downto k do
                    for j:=1 to m do
                        a[j,i+1]:=a[j,i];
                inc(k);
                for i:=1 to n do
                    a[i, k]:=0;
                inc(n);
            end;
         end;
   end;
   writeln('Результат программы:');
   for i := 1 to m do
   begin
      for j := 1 to n do
         write(a[i, j]:4);
      writeln;
   end;
   readln;
end.
Подправил, должно работать.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 07.09.2015, 09:39   #3
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию

Большое спасибо вам!смотрю на свой код и ваш и смотрю свои ошибки.
Otar4ik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм Хаффмана..Индекс вышел за пределы массива schoolboy99 Помощь студентам 0 31.03.2015 21:09
C++.Определите среднее значение элементов массива Х(20). Найдите индекс элемента массива, наиболее близкого к среднему значению. dunhill55 Помощь студентам 1 16.12.2012 19:02
Выход за пределы массива NFXrus Помощь студентам 10 09.12.2011 23:13
Как узнать вышел ли элемент за пределы другого элемента JQuery? Arassir JavaScript, Ajax 1 07.10.2011 12:43
C++ - выход за пределы массива kefir Помощь студентам 5 12.06.2010 14:09