Помощь - Поиск - Пользователи - Календарь
Полная версия: Обработка массива.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Eduard
Надо расставить строки таким образом, чтобы элементы в первом столбце были упорядочены по убыванию. Вычислить среднее арифметическое элементов 1-ого столбца.

Не работает программа, подскажите, что неправильно.

uses crt;
var a:array[1..100,1..100]of integer;
N, M, i, j, e :integer;
begin
   write('N, M -> ');
   readln(N, M); 
   write('Input matrix -> ');
   for i:=1 to N do for j:=1 to M do
    begin
      write('A[',i,',',j,'] -> ');
      readln(a[i, j]);
      for i:=1 to n do
         for j:=1 to n-1 do
           begin
             if a[j]<a[j+1] then
               begin
                 e:=a[j];
                 a[j]:=a[j+1];
                 a[j]:=e;
                end;
           end;
      writeln (a[i,j]);
     end;
end.


Вычисление среднего арифметического, я не знаю куда поставить.

Еще есть вариант решения задачи, но он не совсем правильно работает и вычисление среднего арифметического, я не знаю куда поставить.

Const t=100; 
Var a: array[1..t,1..t] of integer;
B: array[1..t,1..2] of integer;
N, k, I, j: integer;
Begin
Writeln(‘n=’);
Readln(n);
For i:=1 to n do
For j:=1 to n do read(a[I,j]);
For i:=1 to n do
B[i,1]:=a[i,1];
For i:=1 to n-1 do
For j:=1 to n do
If b[i,1]<b[j,1] then
Begin
k:=b[i,1];
b[i,1]:=b[j,1];
b[j,1]:=k;
End;
For i:=1 to n do
Begin
If a[i,1]<>b[i,1] then
Begin
For j:=1 to n do
If a[j,1]=b[i,1] then b[i,2]:=j;
End
Else b[i,2]:=i;
End;
For i:=1 to n do
Begin
K:=b[i,2];
For j:=1 to n do write(a[k,j]:4);
Writeln;
End;
End.
Lapp
Цитата(Eduard @ 6.05.2011 6:14) *

Надо расставить строки таким образом, чтобы элементы в первом столбце были упорядочены по убыванию. Вычислить среднее арифметическое элементов 1-ого столбца.

Не работает программа, подскажите, что неправильно.

uses crt;
var a:array[1..100,1..100]of integer;
N, M, i, j, e :integer;
begin
   write('N, M -> ');
   readln(N, M); 
   write('Input matrix -> ');
   for i:=1 to N do for j:=1 to M do
    begin
      write('A[',i,',',j,'] -> ');
      readln(a[i, j]);
      for i:=1 to n do
         for j:=1 to n-1 do
           begin
             if a[j]<a[j+1] then
               begin
                 e:=a[j];
                 a[j]:=a[j+1];
                 a[j]:=e;
                end;
           end;
      writeln (a[i,j]);
     end;
end.


Вычисление среднего арифметического, я не знаю куда поставить.

Еще есть вариант решения задачи, но он не совсем правильно работает и вычисление среднего арифметического, я не знаю куда поставить.

Const t=100; 
Var a: array[1..t,1..t] of integer;
B: array[1..t,1..2] of integer;
N, k, I, j: integer;
Begin
Writeln(‘n=’);
Readln(n);
For i:=1 to n do
For j:=1 to n do read(a[I,j]);
For i:=1 to n do
B[i,1]:=a[i,1];
For i:=1 to n-1 do
For j:=1 to n do
If b[i,1]<b[j,1] then
Begin
k:=b[i,1];
b[i,1]:=b[j,1];
b[j,1]:=k;
End;
For i:=1 to n do
Begin
If a[i,1]<>b[i,1] then
Begin
For j:=1 to n do
If a[j,1]=b[i,1] then b[i,2]:=j;
End
Else b[i,2]:=i;
End;
For i:=1 to n do
Begin
K:=b[i,2];
For j:=1 to n do write(a[k,j]:4);
Writeln;
End;
End.


У тебя вложенные циклы используют одну переменную. Как это может правильно работать? ))
Lapp
Ты забыл закрыть цикл ввода, поэтому получились "вложенные" циклы smile.gif.
Но у тебя там еще куча ошибок...
Путаница с типами. Ты перекладываешь строки целиком (что хорошо), но сравнивать-то надо первые элементы. Но тип e при этом должен быть не целый, а массив.
Перекладывание ты тоже непрравильно делаешь (я исправил).

Короче, примерно вот так:
const
  Max= 100;

type
  tStroka= array [1..Max] of integer;

var
  a: array [1..100] of tStroka;
  N, M, i, j:integer;
  e: tStroka;

begin
  write('N, M -> ');
  readln(N, M);
  write('Input matrix -> ');
  for i:=1 to N do for j:=1 to M do begin
    write('A[',i,',',j,'] -> ');
    readln(a[i, j]);
  end;
  for i:=1 to n do
    for j:=i-1 downto 1 do begin
      if a[j,1]<a[j+1,1] then begin
        e:=a[j];
        a[j]:=a[j+1];
        a[j+1]:=e;
      end;
    end;
  writeln (a[i,j]);
end.

И наконец, ты забываешь вывести результат. Это ты добавь уже сам.. Как и подсчет среднего )). Спрашивай, если что-то неясно.
Eduard
Среднее арифметическое я смог сделать, но вот вывести таблицу с исправленным столбцом что-то не могу.

uses crt;
const
  Max= 100;

type
  tStroka= array [1..Max] of integer;

var
  a: array [1..100] of tStroka;
  N, M, i, j :integer;
  s:real;
  e: tStroka;

begin
  write('N, M -> ');
  readln(N, M);
  write('Input matrix -> ');
  for i:=1 to N do
    for j:=1 to M do
      begin
        write('A[',i,',',j,'] -> ');
        readln(a[i, j]);
      end;
  for i:=1 to n do
    for j:=i-1 downto 1 do
      begin
        if a[j,1]<a[j+1,1] then
          begin
            e:=a[j];
            a[j]:=a[j+1];
            a[j+1]:=e;
          end;
          writeln (a[i,j]);
     end;
for i:= 1 to n do
  begin
   s:=0;
   for j:= 1 to m do
     s:=s+a[i,1];
  end;
   s:=s/N;
write (s);
end.

Lapp
Цитата(Eduard @ 6.05.2011 9:51) *
Среднее арифметическое я смог сделать,
Ага, конечно.. )) Неправильные значения тебя не насторожили?
Зачем тебе там был нужен двойной цикл?? blink.gif
Ладно, разбирайся, короче..

Цитата
но вот вывести таблицу с исправленным столбцом что-то не могу.
И что тебя затруднило?..

const
  Max= 100;

type
  tStroka= array [1..Max] of integer;

var
  a: array [1..Max] of tStroka;
  N, M, i, j :integer;
  s:real;
  e: tStroka;

begin
  write('N, M -> ');
  readln(N, M);
  write('Input matrix -> ');
  for i:=1 to N do
    for j:=1 to M do
      begin
        write('A[',i,',',j,'] -> ');
        readln(a[i, j]);
      end;
  for i:=1 to n do
    for j:=i-1 downto 1 do
      begin
        if a[j,1]<a[j+1,1] then
          begin
            e:=a[j];
            a[j]:=a[j+1];
            a[j+1]:=e;
          end;
          writeln (a[i,j]);
     end;
  s:=0;
  for i:=1 to n do s:= s+a[i,1];
  s:= s/N;
  writeLn ('среднее арифметическое первого столбца = ',s);
  for i:=1 to n do begin
    for j:=1 to m do Write(a[i,j]:4);
    WriteLn
  end;
  readln
end.

Ответь еще на вопросик, плз. Зачем тебе вот эта строка, а?
uses crt;
Это как галстук, что ли? для красоты? без нее несолидно? lol.gif
Eduard
У меня без uses crt программа не запускается.
Lapp
Цитата(Eduard @ 6.05.2011 10:23) *
У меня без uses crt программа не запускается.

Вот эта программа?..
Какой у тебя компилятор?
Eduard
Вот эта программа. TP 7
TarasBer
> У меня без uses crt программа не запускается.

В перлы...
На какие только сказки они ни идут, лишь бы оправдать наличие этого модуля.
Lapp
Цитата(Eduard @ 6.05.2011 10:37) *
Вот эта программа. TP 7

Брехняяяя... (С)
smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.