IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Матрицы, Помогите доделать программу. Нужно срочно к среде!
Mr. Anderson
сообщение 18.12.2006 0:46
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


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.


Сообщение отредактировано: Mr. Anderson - 18.12.2006 12:56


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


--------------------
Каждое начало имеет свой конец
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 18.12.2006 15:00
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Mr. Anderson
сообщение 18.12.2006 19:59
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


Цитата
А как можно через подпрограмму. 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 килобайт ) Кол-во скачиваний: 133


--------------------
Каждое начало имеет свой конец
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 18.12.2006 20:19
Сообщение #4


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


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

Сообщение отредактировано: мисс_граффити - 18.12.2006 21:03


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Mr. Anderson
сообщение 18.12.2006 20:35
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


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

Сообщение отредактировано: Mr. Anderson - 18.12.2006 20:40


--------------------
Каждое начало имеет свой конец
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 18.12.2006 21:02
Сообщение #6


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Mr. Anderson
сообщение 18.12.2006 22:23
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


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


--------------------
Каждое начало имеет свой конец
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.12.2006 22:31
Сообщение #8


Гость






Попроще?

Ну, вот тебе попроще... Что будет, если я напишу:
var
a: integer;
begin
A := byte + integer;
end.

?
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 23.04.2024 20:32
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"