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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2008, 09:11   #1
Дима82
Форумчанин
 
Аватар для Дима82
 
Регистрация: 09.05.2008
Сообщений: 108
По умолчанию Двумерные массивы 3 (Pascal)

С клавиатуры вводится произвольная матрица (не более 5x5), после чего делается ее контрольный вывод. Поменять местами минимальный элемент заданной строки с максимальным элементом главной диагонали матрицы.

Код:
Program Lab5;
Uses crt;
Const M=5;
      N=5;
Var A: array[1..M,1..N] of real;
    C: array[1..M] of real;
    P,I:1..M;
    Q,J:1..N;
Begin
 Clrscr;
 Write('BBedite razmernost matricy ne bolee 5*5: ');
 Readln(P,Q);
 Writeln('BBedite elementy matricy:');
 For I:=1 to P do
  For J:=1 to Q do begin
   Write('A[',I: 1,',',J: 1,']=');
   Readln(A[I,J])
 End;
 Writeln('Kontrolnyi Byvod matricy: ');
 For I:=1 to P do
 Begin
  For J:=1 to Q do Write (A[I,J]:4:2,'':3);
 End;
 For I:=1 to P do
 Begin
  Min:=A[I,1];
  For J:=2 to Q do if A[I,J]<Min then begin
  Min:=A[I,J];

Readln
End.
Как поменять, не получается...
Дима82 вне форума Ответить с цитированием
Старый 08.06.2008, 12:39   #2
Дима82
Форумчанин
 
Аватар для Дима82
 
Регистрация: 09.05.2008
Сообщений: 108
По умолчанию

Код:
Program Lab5;
Uses crt;
Const M=5;
      N=5;
Var A: array[1..M,1..N] of integer;
    P,I:1..M;
    Q,J:1..N;
    Min,Max:integer;
Begin
 Clrscr;
 Write('BBedite razmernost matricy ne bolee 5*5: ');
 Readln(P,Q);
 Writeln('BBedite elementy matricy:');
 For I:=1 to P do
  For J:=1 to Q do begin
   Write('A[',I: 1,',',J: 1,']=');
   Readln(A[I,J])
 End;
 Writeln('Kontrolnyi Byvod matricy: ');
 For I:=1 to P do
 Begin
  For J:=1 to Q do Write (A[I,J]:4);
  Writeln;
 End;
 Write('Nomer stroki:');
 Readln(I);
 Min:=A[I,1];
 For J:=2 to Q do if A[I,J]<Min then Min:=A[I,J];
  Write('Minimalnoe:');
  Writeln(Min);
 Max:=A[I,I];
 For I:=1 to P do if A[I,I]>Max then Max:=A[I,J];
  Write('Maximalnoe na glavnoi diagonali:');
  Writeln(Max);
 Writeln('Zamena: ');
\\ как поменять местами???
Readln
End.
Я тут нашёл максимальное и минимальное, как их поменять местами то?

Последний раз редактировалось Дима82; 08.06.2008 в 12:48.
Дима82 вне форума Ответить с цитированием
Старый 08.06.2008, 12:56   #3
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Вам приводили около 20 минимум рабочих программ с массивами на разные темы....
Вы их досканально разобрали?

Вы или нехотите понимать что Вам пишут, либо издеваетесь.

Ошибки то одни и теже делаете......
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 08.06.2008, 12:59   #4
Дима82
Форумчанин
 
Аватар для Дима82
 
Регистрация: 09.05.2008
Сообщений: 108
По умолчанию

Какие ошибки? Вроде, их нет, осталось сделать замену, у меня не получается...
Ну так, что поможете...

Помогите, пожалуйста, мне срочно надо...

Последний раз редактировалось Stilet; 09.06.2008 в 08:01.
Дима82 вне форума Ответить с цитированием
Старый 08.06.2008, 14:12   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Уже не первую программу пишете по матрицам, поправляли Вас, переделывали. Вы все свое. Лишние непонятные переменные, эти P Q M N, дублирующие друг друга, неформатированный код и пр., все это затрудняет чтение ваших программ и отталкивает своей несуразностью.
Для того чтобы поменять два элемента в матрице, нужно знать их координаты, т.е. номер строки и столбца, тогда используя буфер это делается в три строчки, как при сортировке обменом(пузырьком), только не в цикле, а один раз. Я написал программу, это суррогат из Вашего кода и моих добавок. Делал быстро, так что не обессудьте, но программу вашу еще ремонтировать нужно, хотя она и так работает.
P.S. Матрица квадратная, зачем 2 размера?
Код:
Program Lab5;
Uses crt;
Var A: array[1..5,1..5] of integer;
    P,I,j,Min,k,jmin,Max,imax,jmax,x:integer;
Begin
 Clrscr;
 Write('BBedite razmernost matricy ne bolee 5*5: ');
 Readln(P);
 Writeln('BBedite elementy matricy:');
 For I:=1 to P do
 For J:=1 to p do
    begin
      Write('A[',I,',',J,']=');
      Readln(A[I,J])
    End;
 Writeln('Kontrolnyi Byvod matricy: ');
 For I:=1 to P do
     Begin
       For J:=1 to p do
       Write (A[I,J]:4);
       Writeln;
     End;
 Write('Nomer stroki= ');
 Readln(k);
 Min:=A[k,1];jmin:=1;
 For J:=2 to p do
 if A[k,J]<Min then
     begin
       Min:=A[k,J];//находим минимум
       jmin:=j; //запоминаем номер столбца
     end;
 Writeln('Minimalnoe v stroke ',k,'=',min,' v stolbce ',jmin);
 Max:=A[1,1];
 For I:=1 to P do
 if A[I,I]>Max then
      begin
        Max:=A[I,i];//находим максимум
        imax:=i;  //запоминаем номер строки и столбца
        jmax:=i;
      end;
 Writeln('Maximalnoe na glavnoi diagonali= ',max,' v stroke i stolbce ',i);
 Writeln('Zamena: ');
 x:=a[k,jmin]; //меняем местами по координатам в матрице х-буфер для временного 
 a[k,jmin]:=a[imax,jmax];//хранения информации
 a[imax,jmax]:=x;
 for i:=1 to p do
    begin
      for j:=1 to p do
      write(a[i,j]:4);
      writeln;
    end;
Readln
End.

Последний раз редактировалось puporev; 08.06.2008 в 14:14.
puporev вне форума Ответить с цитированием
Старый 08.06.2008, 14:28   #6
Дима82
Форумчанин
 
Аватар для Дима82
 
Регистрация: 09.05.2008
Сообщений: 108
По умолчанию

Цитата:
Уже не первую программу пишете по матрицам, поправляли Вас, переделывали. Вы все свое. Лишние непонятные переменные, эти P Q M N, дублирующие друг друга, неформатированный код и пр., все это затрудняет чтение ваших программ и отталкивает своей несуразностью.
Да, меня так учили, у нас в методичке так, даны некоторые образцы такого типа...

Я у вас хотел спросить, как произвести замену, а вы мне новую программку написали, спасибо, конечно... но не могли бы мне написать на основе моей программки, чтобы учесть в следующий раз ошибки...
Дима82 вне форума Ответить с цитированием
Старый 08.06.2008, 14:38   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

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

Вот вам ваша программа, без изменений. Увы, но пришлось всвязи с заменой внести некоторые дополнительные переменные, а именно:
K -номер задаваемой строки, т.к. I для этих целей использовать нельзя, поскольку эта величина не постоянная.
Jmin -адрес в строке, т.е. номер столбца.
Imax,Jmax-адрес максимального элемента на главной диагонали.
X- буфер при обмене.
Извините, без этого никак.
Код:
Program Lab5;
Uses crt;
Const M=5;
      N=5;
Var A: array[1..M,1..N] of integer;
    P,I:1..M;
    Q,J:1..N;
    Min,Max,Jmin,Imax,Jmax,K,X:integer;
Begin
 Clrscr;
 Write('BBedite razmernost matricy ne bolee 5*5: ');
 Readln(P,Q);
 Writeln('BBedite elementy matricy:');
 For I:=1 to P do
  For J:=1 to Q do begin
   Write('A[',I: 1,',',J: 1,']=');
   Readln(A[I,J])
 End;
 Writeln('Kontrolnyi Vyvod matricy: ');
 For I:=1 to P do
 Begin
  For J:=1 to Q do Write (A[I,J]:4);
  Writeln;
 End;
 Write('Nomer stroki:');
 Readln(K);
 Min:=A[K,1];Jmin:=1;
 For J:=2 to Q do if A[K,J]<Min then
    begin
      Min:=A[K,J];
      Jmin:=J;
    end;
 Write('Minimalnoe:');
 Writeln(Min);
 Max:=A[1,1];
 For I:=1 to P do
 if A[I,I]>Max then
    begin
     Max:=A[I,I];
     Imax:=I;
     Jmax:=I;
    end;
  Write('Maximalnoe na glavnoi diagonali:');
  Writeln(Max);
  Writeln('Zamena: ');
  X:=A[K,Jmin];
  A[K,Jmin]:=A[Imax,Jmax];
  A[Imax,Imax]:=X;
  for I:=1 to P do
     begin
      For J:=1 to Q do
      Write(a[I,J]:4);
      Writeln;
     end;
Readln
End.

Последний раз редактировалось Stilet; 09.06.2008 в 08:02.
puporev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[QBasic|Pascal] двумерные массивы PBJack Помощь студентам 5 06.12.2011 20:39
Двумерные массивы 2 (Pascal) Дима82 Помощь студентам 3 08.06.2008 09:41
Двумерные массивы (Pascal) Дима82 Помощь студентам 11 07.06.2008 16:54
Pascal двумерные массивы I n n a Паскаль, Turbo Pascal, PascalABC.NET 3 08.05.2008 13:50