Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Матрицы

Автор: Mr. Anderson 18.12.2006 4:46

unsure.gif

Цитата

Сформировать матрицу 7х7 с помощью функции Random. Из неё получить две матрицы. Первая получится перестановкой строк в порядке возрастания средних арифметических элементов в каждой строке. Вторая получится перестановой столбцов в порядке возрастания средних арифметических элементов в каждом столбце. Результат получить в текстовом файле. Проблема в том, что вторая матрица получается перестановкой столбцов первой матрицы (с переставленными строками), а не исходной. Что нужно добавить или исправить в программе? Заранее благодарю.


Код

program matrix;
uses crt;
const n=7;
      name='C:\neo.out';
      lin='*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*';
var fiogr:string[50];
    neo:text;
    sumstr,sumst:integer;
    srsumstr,srsumst:real;
    i,j:byte;
    t,f:boolean;
    v,u:real;
    c,d:shortint;
    a,b:array[1..n] of real;
    matr:array[1..n,1..n] of shortint;
    begin
    clrscr;
    assign(neo,name);
    rewrite(neo);
    writeln('Laboratornaya rabota 7');
    writeln('Vvedite FIO, gruppu');
    readln(fiogr);
    writeln('Zadacha na dvujmerniy massiv');
    writeln(neo,' Rezultat vichisleniy sojraneni v failie ', name);
    writeln(neo,'     Laboratornaya rabota 7');
    writeln(neo,'  Zadacha na dvujmerniy massiv');
    writeln(neo,lin);
    writeln(neo,fiogr);
    writeln(neo,lin);
    randomize;
    writeln(neo,'       Isjodnaya matritsa');
    for i:=1 to n do
    for j:=1 to n do
    matr[i,j]:=random(99)-49;
    for i:=1 to n do begin
    for j:=1 to n do begin
    write(neo,'  ',matr[i,j]:3);
    end;
    writeln(neo);
    end;
    writeln(neo,lin);
    writeln(neo,'  Sriedniye arifmieticheskiye strok');
    for i:=1 to n do begin
    sumstr:=0;
    for j:=1 to n do
    sumstr:=sumstr+matr[i,j];
    srsumstr:=sumstr/n;
    a[i]:=srsumstr;
    write(neo,'  a[',i,']=',a[i]:6:2);
    if i mod 4 =0 then writeln(neo);
    end;
    writeln(neo);
    writeln(neo,lin);
    writeln(neo,' Orsortirovanniy massiv iz srednij arifmeticheskij');
    writeln(neo,'             eliemientov strok');
    repeat
    t:=true;
    for i:=1 to n-1 do
    if a[i]>a[i+1] then
    begin
    for j:=1 to n do begin
    c:=matr[i,j];
    matr[i,j]:=matr[i+1,j];
    matr[i+1,j]:=c;
    end;
    u:=a[i];
    a[i]:=a[i+1];
    a[i+1]:=u;
    t:=false;
    end;
    until t;
    for i:=1 to n do
    begin
    write(neo,'  a[',i,']=',a[i]:6:2);
    if i mod 4 =0 then  writeln(neo);
    end;
    writeln(neo);
    writeln(neo,lin);
    writeln(neo,'  Otsortirovannaya matritsa po strokam');
    for i:=1 to n do begin
    for j:=1 to n do begin
    write(neo,'  ',matr[i,j]:3);
    end;
    writeln(neo);
    end;
    writeln(neo,lin);
    writeln(neo,'  Sriedniye arifmieticheskiye stolbtsov');
    for j:=1 to n do begin
    sumst:=0;
    for i:=1 to n do
    sumst:=sumst+matr[i,j];
    srsumst:=sumst/n;
    b[j]:=srsumst;
    write(neo,'  ','b[',j,']=',b[j]:6:2);
    if j mod 4 =0 then writeln(neo);
    end;
    writeln(neo);
    writeln(neo,lin);
    writeln(neo,'  Orsortirovanniy massiv iz srednij arifmeticheskij');
    writeln(neo,'             eliemientov stolbtsov');
    repeat
    f:=true;
    for j:=1 to n-1 do
    if b[j]>b[j+1] then
    begin
    for i:=1 to n do begin
    d:=matr[i,j];
    matr[i,j]:=matr[i,j+1];
    matr[i,j+1]:=d;
    end;
    v:=b[j];
    b[j]:=b[j+1];
    b[j+1]:=v;
    f:=false;
    end;
    until f;
    for j:=1 to n do
    begin
    write(neo,'  ','b[',j,']=',b[j]:6:2);
    if j mod 4 =0 then writeln(neo);
    end;
    writeln(neo);
    writeln(neo,lin);
    writeln(neo,'  Otsortirovannaya matritsa po stolbtsam');
    for i:=1 to n do begin
    for j:=1 to n do begin
    write(neo,'  ',matr[i,j]:3);
    end;
    writeln(neo);
    end;
    close(neo);
    readln;
    end.



Прикрепленные файлы
Прикрепленный файл  MATRIXX.PAS ( 3.27 килобайт ) Кол-во скачиваний: 143

Автор: мисс_граффити 18.12.2006 19:00

создать еще одну матрицу (есть matr, сделай matr1)
и, например, в ней получать вторую... а matr переделать в третью.
или изначально записать в них одинаковые значения, потом из одной получить вторую, из другой третью.
а еще можно через подпрограммы... не создавая доп. матрицу.

Автор: Mr. Anderson 18.12.2006 23:59

Цитата
А как можно через подпрограмму. blink.gif
Я попытался составить. Выдаёт ошибку.


program matrixa;
uses crt;
const n=7;
name='C:\neo.out';
lin='*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*';
var fiogr:string[50];
neo:text;
sumstr,sumst:integer;
srsumstr,srsumst:real;
i,j:byte;
t,f:boolean;
v,u:real;
c,d:shortint;
a,b:array[1..n] of real;
type
matr=array[1..n,1..n] of shortint;

procedure creatematrix(var matrix:matr; const n:byte);
var i,j:byte;

begin
randomize;
for i:=1 to n do
for j:=1 to n do
matrix[i,j]:=random(99)-49;
end;

procedure printmatrix(matrix:matr; const n:byte);
var i,j:byte;

begin
for i:=1 to n do begin
for j:=1 to n do begin
write(neo,' ',matrix[i,j]:3);
end;
writeln(neo);
end;
end;

begin
clrscr;
assign(neo,name);
rewrite(neo);
writeln('Laboratornaya rabota 7');
writeln('Vvedite FIO, gruppu');
readln(fiogr);
writeln('Zadacha na dvujmerniy massiv');
writeln(neo,' Rezultat vichisleniy sojraneni v failie ', name);
writeln(neo,' Laboratornaya rabota 7');
writeln(neo,' Zadacha na dvujmerniy massiv');
writeln(neo,lin);
writeln(neo,fiogr);
writeln(neo,lin);
writeln(neo,' Isjodnaya matritsa');

creatematrix(matrix,n);
printmatrix(matrix,n);

writeln(neo,lin);
writeln(neo,' Sriedniye arifmieticheskiye strok');
for i:=1 to n do begin
sumstr:=0;
for j:=1 to n do
sumstr:=sumstr+matr[i,j];
srsumstr:=sumstr/n;
a[i]:=srsumstr;
write(neo,' a[',i,']=',a[i]:6:2);
if i mod 4 =0 then writeln(neo);
end;
writeln(neo);
writeln(neo,lin);
writeln(neo,' Orsortirovanniy massiv iz srednij arifmeticheskij');
writeln(neo,' eliemientov strok');
repeat
t:=true;
for i:=1 to n-1 do
if a[i]>a[i+1] then
begin
for j:=1 to n do begin
c:=matr[i,j];
matr[i,j]:=matr[i+1,j];
matr[i+1,j]:=c;
end;
u:=a[i];
a[i]:=a[i+1];
a[i+1]:=u;
t:=false;
end;
until t;
for i:=1 to n do
begin
write(neo,' a[',i,']=',a[i]:6:2);
if i mod 4 =0 then writeln(neo);
end;
writeln(neo);
writeln(neo,lin);
writeln(neo,' Otsortirovannaya matritsa po strokam');
for i:=1 to n do begin
for j:=1 to n do begin
write(neo,' ',matr[i,j]:3);
end;
writeln(neo);
end;
writeln(neo,lin);

for i:=1 to n do begin
for j:=1 to n do begin
write(neo,' ',matr1[i,j]:3);
end;
writeln(neo);
end;

writeln(neo,' Sriedniye arifmieticheskiye stolbtsov');
for j:=1 to n do begin
sumst:=0;
for i:=1 to n do
sumst:=sumst+matr[i,j];
srsumst:=sumst/n;
b[j]:=srsumst;
write(neo,' ','b[',j,']=',b[j]:6:2);
if j mod 4 =0 then writeln(neo);
end;
writeln(neo);
writeln(neo,lin);
writeln(neo,' Orsortirovanniy massiv iz srednij arifmeticheskij');
writeln(neo,' eliemientov stolbtsov');
repeat
f:=true;
for j:=1 to n-1 do
if b[j]>b[j+1] then
begin
for i:=1 to n do begin
d:=matr[i,j];
matr[i,j]:=matr[i,j+1];
matr[i,j+1]:=d;
end;
v:=b[j];
b[j]:=b[j+1];
b[j+1]:=v;
f:=false;
end;
until f;
for j:=1 to n do
begin
write(neo,' ','b[',j,']=',b[j]:6:2);
if j mod 4 =0 then writeln(neo);
end;
writeln(neo);
writeln(neo,lin);

printmatrix(matrix,n);

writeln(neo,' Otsortirovannaya matritsa po stolbtsam');
for i:=1 to n do begin
for j:=1 to n do begin
write(neo,' ',matr[i,j]:3);
end;
writeln(neo);
end;
close(neo);
readln;
end.



Прикрепленные файлы
Прикрепленный файл  matrixa.pas ( 3.71 килобайт ) Кол-во скачиваний: 155

Автор: мисс_граффити 19.12.2006 0:19

а прочитать, что за ошибка - не судьба?
Unknown Identifier, то есть компилятор не знает, что такое (выделено жирным)
printmatrix(matrix,n);
ты же должен вызывать процедуру для конкретной матрицы!

Автор: Mr. Anderson 19.12.2006 0:35

Исправил, но всё равно выдаёт ошибку. Error 88: "(" expected. после matr в строчке printmatrix(matr,n);

Автор: мисс_граффити 19.12.2006 1:02

так, как у тебя сейчас написано, matr - это тип.
А где переменная такого типа, с которой ты работаешь?
Тебе ведь не приходит в голову требовать, чтобы посчитался sin(real)? вот и здесь то же самое.

Автор: Mr. Anderson 19.12.2006 2:23

wacko.gif Обьясните, пожалуйста, попроще
huh.gif

Автор: volvo 19.12.2006 2:31

Попроще?

Ну, вот тебе попроще... Что будет, если я напишу:

var
a: integer;
begin
A := byte + integer;
end.

?