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

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

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

 
 Ответить  Открыть новую тему 
> Ссылки, обратный порядок..
b0b
сообщение 12.12.2005 19:40
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

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


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

Ссылочный тип данных:
1. Составить программу, которая переворачивает список, т.е. изменяет ссылки так, чтобы его элементы оказались расположены в обратном порядке.

Модули:
2. В модуль включить подпрограмму нахождения произведения квадратных матриц А и В третьего порядка. В основной программе для трех квадратных матриц А, В и С 3-го порядка, вычислить Т=А*В*С.

В первой не знаю с чего начать.
Во второй, теоретически догадываюсь.

С уважением.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.12.2005 19:44
Сообщение #2


Гость






Цитата
Во второй, теоретически догадываюсь.

Смотри, как это реализуется практически:
Вычисление произведения матриц
 К началу страницы 
+ Ответить 
b0b
сообщение 12.12.2005 19:59
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

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


Цитата(volvo @ 12.12.2005 19:44) *

Смотри, как это реализуется практически:
Вычисление произведения матриц


уже начал писать...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
b0b
сообщение 12.12.2005 20:44
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

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


program laba9;

{$APPTYPE CONSOLE}

uses
SysUtils;

const
n=3;
var
mat1,mat2,mat3,resmat1,resmat2:array[1..n, 1..n] of integer;
i,x,y,r,t:integer;

begin

writeln('Enter 1st matrix: ');
for y:=1 to n do
for x:=1 to n do
begin
write('a[',x,',',y,']: ');
readln(mat1[x,y]);
end;

Writeln('Enter 2nd matrix: ');
for y:=1 to n do
for x:=1 to n do
begin
write('b[',x,',',y,']: ');
readln(mat2[x, y]);
end;

{подсчет матрицы AxB}

for y:=1 to n do
for x:=1 to n do
begin
r:=0; {обнуляем сумму произведений}
for i:=1 to n do {идем под горизонтали Mat1 и по вертикали}
r:=r+mat1[i,y]*mat2[x,i]; {Mat2; умножаем и добавляем в R}
resmat1[x,y]:=r; {Resmat1[x, y] = результат = R}
end;

writeln;
writeln('AxB=');

for y:=1 to n do
begin
for x:=1 to n do
write(resmat1[x,y]:4,' ');
writeln;
end;

readln;

Writeln('Enter 3rd matrix: ');
for y:=1 to n do
for x:=1 to n do
begin
write('b[',x,',',y,']: ');
readln(mat3[x, y]);
end;

for y:=1 to n do
for x:=1 to n do
begin
r:=0;
for i:=1 to n do
r:=r+resmat1[i,y]*mat3[x,i];
resmat2[x,y]:=r;
end;

writeln;
writeln('AxBxC=');

for y:=1 to n do
begin
for x:=1 to n do
write(resmat2[x,y]:4,' ');
writeln;
end;

readln;

end.


вот. все работает.
немогу подогнать под условие задачи..sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.12.2005 21:15
Сообщение #5


Гость






Const
n = 3;
Type
mxType = array[1 .. n, 1 .. n] Of Integer;

Procedure multMatrix(Var res: mxType; A, B: mxType);
Var x, y, r: Integer;
Begin
for y:=1 to n do
for x:=1 to n do begin
r:=0;
for i:=1 to n do
r:=r+A[i,y]*B[x,i];
res[x,y]:=r;
end;
End;


и в основной программе:

Writeln('Enter 1st matrix: ');
{
Здесь - ввод 1 матрицы ( A )
...
}

Writeln('Enter 2nd matrix: ');
{
Здесь - ввод 2 матрицы ( B )
...
}

{
подсчет матрицы AxB
}
multMatr(resmat1, mat1, mat2);
writeln('AxB='); { ... Распечатываешь resmat1 }

readln;
Writeln('Enter 3rd matrix: ');
{
Вводишь 3-ю матрицу ( C )
...
}
multMatr(resmat2, resmat1, mat3);
writeln('AxBxC='); { ... Распечатываешь resmat2 }
...
 К началу страницы 
+ Ответить 
b0b
сообщение 12.12.2005 21:16
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

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


помогите, пожалуйста, оформить в ввиде модуля с процедурой.. sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
b0b
сообщение 12.12.2005 21:50
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

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


программа

program laba9; 

uses
un1;

var
mat1,mat2,mat3,resmat1,resmat2: matr;

begin
vvod(mat1, 'a');
vvod(mat2,'b');

schet(mat1,mat2,resmat1);

writeln;
writeln('AxB=');
vyvod(resmat1);
readln;

vvod(mat3,'c')

schet(resmat1,mat3,resmat2);

writeln;
writeln('AxBxC=');
vyvod(resmat2);
readln;
end.


модуль

unit un1;   
interface
const
n=3;
type matr=array[1..n, 1..n] of integer;

procedure vvod(var mat: matr; ch: char);
procedure schet(mat1,mat2: matr; var resmat: matr);
procedure vyvod(mat: matr);

implementation

procedure vvod(var mat: matr; ch: char);
var x,y: integer;
begin
writeln('Enter matrix: ',ch);
for x:=1 to n do
for y:=1 to n do
begin
write(ch, '[',x,',',y,']: ');
readln(mat1[x,y]);
end;
end;

procedure schet(mat1,mat2: matr; var resmat: matr);
var x,y,i,r: integer;
{подсчет матрицы AxB}
begin
for x:=1 to n do
for y:=1 to n do
begin
r:=0; {обнуляем сумму произведений}
for i:=1 to n do {идем под горизонтали Mat1 и по вертикали}
r:=r+mat1[x,i]*mat2[i,y]; {Mat2; умножаем и добавляем в R}
resmat[x,y]:=r; {Resmat1[x, y] = результат = R}
end;
end;

procedure vyvod(mat: matr);
var x,y: integer;
begin
for x:=1 to n do
begin
for y:=1 to n do
write(mat[x,y]:4,' ');
writeln;
end;
end;

end.


но чет не пашет..

все работает. исправил.


с чего посоветуете начать первую задачу?

Сообщение отредактировано: volvo - 5.11.2006 21:46
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.12.2005 21:59
Сообщение #8


Гость






Исправь синтаксические ошибки:
procedure vvod(var mat: matr; ch: char); 
begin
...
readln(mat[x,y]); { "mat" <--- Здесь !!! }
...
end;

и
 vvod(mat3,'c'); { <--- ";" Здесь !!! }

schet(resmat1,mat3,resmat2);

Для чего тебе компилятор? Он же все это тебе говорит... wacko.gif

Цитата
с чего посоветуете начать первую задачу?
Ну, во-первых, список одно- или двухсвязный? Процедура нужна обычная или рекурсивная?

Сам список ты уже реализовал?
 К началу страницы 
+ Ответить 
b0b
сообщение 12.12.2005 22:02
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

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


Цитата

Ну, во-первых, список одно- или двухсвязный? Процедура нужна обычная или рекурсивная?
?

односвязный.
обычная.
Цитата
Сам список ты уже реализовал?

сейчас думаю начать. поэтому и спросил, с чего начать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.12.2005 22:04
Сообщение #10


Гость






FAQ: Списки
 К началу страницы 
+ Ответить 
b0b
сообщение 12.12.2005 22:59
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

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


откомпилировал модуль, который дан в FAQ
но слабо представляю, как пользоваться...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.12.2005 23:11
Сообщение #12


Гость






Кстати, вот процедура, "разворачивающая" односвязный список:
procedure invert_list(var first, last: plist);
var p, T: plist;
begin
if (first = nil) or (not assigned(first^.next)) then exit
else begin

p := nil; last := first;
while assigned(first) do begin
T := first^.next;
first^.next := p;
p := first;
first := T
end;
first := p

end
end;
 К началу страницы 
+ Ответить 
b0b
сообщение 12.12.2005 23:19
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

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


BListAddFirst
а как заполнить список?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
b0b
сообщение 13.12.2005 0:09
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

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


все. всем спасибо. написал. уря. smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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