Помощь - Поиск - Пользователи - Календарь
Полная версия: Матрица
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Аделина
Здрям^ки! smile.gif
Не могу понять почему не идет программа.
Нужно определить min элемент главной диагонали, и поменять местами max элемент с a[1,3] , ещё вывести строку где находится min.
:low:
Код

program primer_3;
uses crt;
var i,j,min,k,max,n,m,p:word;
     a:array[1..5] of array[1..5] of word;
begin
randomize;
for j:=1 to 5 do
begin
for i:=1 to 5 do
begin
a[i,j]:=random(25);
write(a[i,j]:2,' ');
end;
writeln;
end;
min:=a[1,1];
max:=a[1,1];
for j:=1 to 5 do
begin
for i:=1 to 5 do
begin
if i=j then
 begin
 if min>a[i,j] then
  begin
  min:=a[i,j];
  k:=j;
  end;
 if max<a[i,j] then
  begin
  max:=a[i,j];
  n:=i;
  m:=j;
  end;
 end;
end;
end;
writeln('min=',min,' ','max=',max);
for j:=1 to 5 do
begin
for i:=1 to 5 do
begin
if j=k then
write(a[i,j]:2,' ');
end;
end;
a[3,1]:=p;
a[3,1]:=a[n,m];
a[n,m]:=p;
for j:=1 to 5 do
begin
for i:=1 to 5 do
begin
write(a[i,j]:2,' ');
end;
writeln;
end;
writeln;

readln;
end.
klem4
Код
uses crt;
const n=5;
var x:array[1..n,1..n] of integer;
   i,j,max,min,t:integer;
   nfind:integer;
   imax,jmax:integer;

Begin
  clrscr;
  randomize;
  for i:=1 to n do
   begin
      for j:=1 to n do
       begin
          x[i,j]:=random(11);
          write(x[i,j]:2);
          write(' ');
       end;
      writeln;
   end;

   min:=x[1,1];
   nfind:=1;

    for i:=2 to n do
     if x[i,i]<min then
      begin
         min:=x[i,i];
         nfind:=i;
      end;

   writeln;
   writeln('nfind=',nfind);

  max:=x[1,1];
  imax:=1;
  jmax:=1;
  for i:=1 to n do
   for j:=1 to n do
    if x[i,j]>max then
     begin
        imax:=i;
        jmax:=j;
        max:=x[i,j]
     end;
  t:=x[imax,jmax];
  x[imax,jmax]:=x[1,3];
  x[1,3]:=t;

  for i:=1 to n do
   begin
      for j:=1 to n do
       begin
          write(x[i,j]:2);
          write(' ');
       end;
      writeln;
   end;
  readln;
  end.
Altair
ребят, вы сошли сума? Почему такие большие коды?


Const
n=5;
Var
a:array[1..n,1..n] of integer;
i,j,min,max,si,sj:integer;
begin
{поиcк мин элемента}
Min:=a[1,1];
For i:=2 to n do if Min<a[i,i] then begin min:=a[i,i]; j:=i end;
{выводим строку с мин. элементом}
For i:=1 to n do write(a[j,i],' ');
{Ищем макс. элемент }
max:=0;
For i:=1 to n do for j:=1 to n do
begin
 If a[i,j]>max then begin si:=i; sj:=j; max:=a[i,j] end;
end;
{меняем a[1,3] на max}
min:=a[1,3];
a[1,3]:=max;
a[si,sj]:=min;
end.

p.s. я нарушил правила, и не проверял прогу, если что, считайте, что я просто хотел продемонстрировать алгоритм. smile.gif

Ввод данных я не стал реализовывать, это элементарно...
volvo
Цитата(Аделина @ 13.02.05 17:39)
Нужно определить min элемент главной диагонали, и поменять местами max элемент с a[1,3], ещё вывести строку где находится min.

Уточните, пожалуйста: max во всей матрице или max в главной диагонали...
klem4
Если во всей матрице то решение мое или Oleg_z'a.
Тока у меня полное а у него выч.часть :P
Altair
Между прочим, давать полные коды плохо - тогда тот, кому помогают совсем думать перестанет, и это буцдет медвежья услуга... На сурсах вообще запрещено давать полные коды- volvo свидетель.... smile.gif
Аделина
Спасибки!!!
Oleg_Z: не в моем случае, я ещё только в 10 классе, а в школе требуют обьяснять каждую буковку. А чё такое clrscr? И ещё, как текст с форматированием извлечь из паскаля? я просто, заменила .pas на .txt надо попробовать на .dos <_<
А счет того какой максимум не знаю, скорее всего всей програмки, хотя если будет нужно думаю смогу сделать.
Altair
clrscr - очитска экрана.
writeln('nfind=',nfind) вывод на кэран 'nfind=' и занчения перменной nfind

p.s. а в вашем случае как раз это обязательно - что бы вы сами думали!
Аделина
Цитата(Oleg_Z @ 13.02.05 20:27)
clrscr - очитска экрана.
writeln('nfind=',nfind) вывод на кэран 'nfind=' и занчения перменной nfind

p.s. а в вашем случае как раз это обязательно - что бы вы сами думали!

:nono: Какое значение? Выводится номер строки, присвоенной раньше nfind:=i, нужно где-то в цикле выводить a[i,j]. А вот clrscr очь хороший оператор, мне его очь не хватало :flowers: . и ещё не подскажите ли, зачем нужно uses crt?
Выяснила: мне нужен был max элемент главой диагонали. Программу сделала. :D
Код

Uses crt;
const n=5;
var a:array[1..n] of array[1..n] of word;
   i,j,min,max,imax,imin,k:word;
Begin
clrscr;
randomize;
for i:=1 to n do
begin
 for j:=1 to n do
  begin
  a[i,j]:=random(25);
  write(a[i,j]:2,' ');
  end;
 writeln;
end;
min:=a[1,1];
max:=a[1,1];
for i:=2 to n do
begin
if max<a[i,i] then
 begin
  max:=a[i,i];
  imax:=i;
 end;
if min>a[i,i] then
 begin
  min:=a[i,i];
  imin:=i;
 end;
end;
writeln;
For i:=imin to imin do
begin
 for j:=1 to n do
  begin
   write(a[i,j]:2,' ');
  end;
  writeln;
 end;
if a[1,1]=max then imax:=1;
writeln;
write('max',' ',max,' ','min',' ',min);
writeln;
writeln;
k:=a[3,1];
a[3,1]:=a[imax,imax];
a[imax,imax]:=k;
for i:=1 to n do
begin
 for j:=1 to n do
  begin
   write(a[i,j]:2,' ');
   end;
   writeln;
end;
readln;
end.

Ещё раз спасиб^ки, почерпнула некоторое количество информации,
ЗЫ: Oleg_Z, не хочу спорить, но мне полный код программы, очь помог, в изучении TP7. Ну, а вообще, конечно ты прав, респект.
klem4
uses - подключение модулей (библиотек), которые содержат различные процедуры и.т.д

Вот например модуль CRT содержит процедуру clrscr , с которой ты уже знакома smile.gif
klem4
У тебя что-то не очень понятное там в коде...

Поиск максимума главной диоганали и замена [1,3] ->-<- max

Код

{var nf:integer;}

max:=x[1,1];
  nf:=1;
  for i:=2 to n do
   if x[i,i]>max then
    begin
       max:=x[i,i];
       nf:=i;
    end;
  t:=x[nf,nf];
  x[nf,nf]:=x[1,3];
  x[1,3]:=t;
Altair
Цитата
Какое значение? Выводится номер строки

А номер строки, хранящийся в переменной, это уже не значение этой перменной? smile.gif

Цитата
Oleg_Z, не хочу спорить, но мне полный код программы, очь помог, в изучении TP7. Ну, а вообще, конечно ты прав, респект.

Еще бы он не помог! smile.gif
volvo
klem4
Ну почему же вас так тянет делать лишнее в программах?
Код
max_ix := 1;
for i := 2 to n do
 if x[max_ix, max_ix] < x[i, i] then max_ix := i;


и все, макс. элемент главной диагонали найден, не нужно никаких лишних переменных...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.