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

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

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

> Процедурный тип
Selena
сообщение 22.11.2005 7:16
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 39
Пол: Женский
Реальное имя: Ольга

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


Помогите мне пожалуйста найти ошибку.

У меня такая задача.
Даны матрицы А[1:5,1:6] и В[1:5,1:6]. Из произведений нечетных элементов строк матрицы В сформировать вектор D. Если минимальный элемент 1-ой строки матрицы А больше минимального элемента 2-ой строки матрицы А, то в матрицу А добавить 3-ий столбец, являющийся значениями вектора D, иначе в матрице В поменять местами 1 и 5 столбцы. В п/п (подпрограмме) формирования вектора D использовать п/п нахождения произведений элементов вектора.

Модуль типов MyType

Unit MyType;
Interface
Uses Wincrt;
Type
mas1=array[1..50] of integer;
mas2=array[1..10,1..10] of integer;
func=function(Aa:Mas1;na:Byte):integer;
Var
f:text;
priz,priz1,priz2:Byte;
A:Mas2;B:Mas2; C,D:Mas1;
Implementation
End.



Модуль ввода элементов массивов VVod1

Unit Vvod1;
Interface
Uses Mytype;
Procedure FormMatr(na,ma:Byte;Pa,Qa:Integer;Var Aa:mas2);
Implementation
Procedure FormMatr;
Var i,j:Byte;
Begin
For i:=1 to na do For j:=1 to ma do
Begin Aa[i,j]:=Random(Qa-Pa)+Pa; End;
End;
End.



Модуль вывода элементов Vyvod

Unit Vyvod;
Interface
Uses MyType,WinCrt;
Procedure VyvodVek(na:Byte;Var Aa:mas1);
Procedure VyvodMatr(na,ma:Byte;Var Ba:mas2);
Implementation
Procedure VyvodVek;
Var i:Byte;
Begin
For i:=1 to na do
Write(f,Aa[i]:10,' ');
writeLn(f,'');
End;
Procedure VyvodMatr;
Var i,j:Byte;
Begin
For i:=1 to na do
begin
For j:=1 to ma do
Write(f,Ba[i,j]:3,' '); writeLn(f,'');
end;
End;
End.



Модуль типовых алгоритмов TypAlg1
Исходный код

Unit TipAlg1;
Interface
Uses Wincrt,MyType;
Procedure FormD(Aa:mas2;na,ma:Byte;Proiz:Func;Var Da:mas1;Var k:Byte);
Procedure Vstavka(Aa:mas2;na,ma,k2:Byte;Var Ba:mas2);
Procedure zamena(Aa:mas2;ma:Byte;nomer1,nomer2:Byte;Var Ba:mas2);
Function Proiz(na,ma:Byte; Aa:mas1):integer;Far;
Function MinStr(Aa:mas2;nomer,ma:Byte):integer;
Implementation
{Получение произведений}
Function Proiz;
Var i:Byte; Pr:integer;
Begin
Pr:=1;
For i:=1 to na do
If i mod 2=0
Then Pr:=Pr*Aa[i];
Proiz:=Pr;
End;

{Формирование вектора D}
Procedure FormD;
Var i,j:Byte;C:Mas1;
Begin
For i:=1 to na do
Begin
For j:=1 to ma do
C[j]:=Aa[i,j];
Da[i]:=Proiz(C,ma);k:=k+1;
End;
End;

{Поиск минимального элемента в строке}
Function MinStr;
Var i,j:Byte; minchStr,minchStol:Integer;
Begin
minchStr:=Aa[nomer,1];
For j:=1 to ma do
If Aa[nomer,1]<minchStr Then minchStr:=Aa[i,j];
MinStr:=minchStr;
End;


Procedure Vstavka;
Var i,j:Byte;
Begin
For i:=na+1 downto k2 do
For j:=1 to ma do
Aa[i,j]:=Aa[i-1,j];
For j:=1 to ma do
Aa[k2,j]:=D[i];
End;

Procedure zamena;
Var i,j:Byte;Pa:Byte;
Begin
For j:=1 to ma do
Begin
Pa:=A[nomer1,j]; A[nomer1,j]:=A[nomer2,j];A[nomer2,j]:=Pa;
End;
End;
end.


Головная программа
Исходный код

Program Lab3;
Uses WinCrt,MyType,Vvod1,Vyvod,TipAlg1;
Var
min1,min2:integer;
Begin
Assign(f,'C:\Rezlab\lab3.txt');ReWrite(f);
Randomize;
FormMatr(5,6,0,30,A);
WriteLn(f,‘Матрица А’);
VyvodMatr(5,6,A);
FormMatr(5,6,0,20,B);
WriteLn(f,‘Матрица В’);
VyvodMatr(5,6,B); WriteLn(f,’’);
FormD(B,5,6,Proiz,D,k);
VyvodVek(5,D);
Writeln('');
Min1:=MinStr(A,1,6);
Min2:=MinStr(A,2,6);
WriteLn(f,'min1=',min1:5,'min2=',min2:5); WriteLn(f,‘’);
If min1>min2 then
Begin
Vstavka(A,5,7,3,A);
WriteLn(f,'Матрица с добавленным столбцом');
VyvodMatr(5,7,A);
End
Else
Begin
Writeln(f,'Матрица с перестановленными столбцами');
Zamena(B,6,1,5,B)
VyvodMatr(5,6,B);
End; close(f); End.


Когда я компилирую мне выдает ошибку, что что-то не вторядке с тродцедурным типом Proiz (FormD(B,5,6,Proiz,D,k)). Я уже все перепробывола что мне в голову пришло, но ничего не получается.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 23.11.2005 22:45
Сообщение #2


Гость






blink.gif А зачем вложенные циклы? Вот этого достаточно:
...
for i:=1 to na do
Aa[i, nstl]:=Da[i];
...
Это во-первых. А во вторых, ты же меняешь матрицу Aa, а хочешь, чтобы изменилась Ba no1.gif Не пойдет...

Я бы сделал так:
Procedure Vstavka(Aa:mas2;from:mas1;na,ma,nstl:Byte;Var Ba:mas2);
Var i: Byte;
begin
Move(Aa, Ba, sizeof(Aa));
for i:=1 to na do
Ba[i, nstl] := Da[i];
end;

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

Сообщений в этой теме
Selena   Процедурный тип   22.11.2005 7:16
Atos   :blink: :blink: :blink: A, собственно, почему P...   22.11.2005 7:45
Selena   Входные параметры у меня в модуле MyType func=func...   22.11.2005 7:51
Atos   :blink: Вообще не понял. Причём здесь func, если ...   22.11.2005 8:01
klem4   Selena, Function Proiz(na,ma:Byte; Aa:mas1):integ...   22.11.2005 8:02
Selena   А как ее записать в процедурном типе? Я тут разбир...   22.11.2005 19:38
Selena   Ну помогите кто-нибудь! Очень надо! :unsur...   22.11.2005 20:21
volvo   Selena, вот начало той программы, которая тебе нуж...   23.11.2005 1:46
Selena   For Volvo. Огромное спасибо. Именно то что мне был...   23.11.2005 18:05
Selena   Я переделала задачу по твоему алгоритму, он мне вы...   23.11.2005 19:20
volvo   Selena, обрати внимание, как у тебя описана функци...   23.11.2005 19:28
Selena   Последний вопрос. Я нашла ошибку. Программа работа...   23.11.2005 19:47
volvo   To: Selena Function Proiz(Aa:mas1;na:Byte):intege...   23.11.2005 19:54
Selena   Спасибо. :cool:   23.11.2005 19:59
Selena   Не подскажете что здесь не так? Замена стобца вект...   23.11.2005 22:18
volvo   :blink: А зачем вложенные циклы? Вот этого достато...   23.11.2005 22:45
Selena   В матрицу В добавить 3-ью строку, являющуюся суммо...   24.11.2005 4:01
volvo   Selena, что значит "Добавить"? У тебя ес...   24.11.2005 9:14


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

 



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