![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Selena |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
Помогите мне пожалуйста найти ошибку.
У меня такая задача. Даны матрицы А[1:5,1:6] и В[1:5,1:6]. Из произведений нечетных элементов строк матрицы В сформировать вектор D. Если минимальный элемент 1-ой строки матрицы А больше минимального элемента 2-ой строки матрицы А, то в матрицу А добавить 3-ий столбец, являющийся значениями вектора D, иначе в матрице В поменять местами 1 и 5 столбцы. В п/п (подпрограмме) формирования вектора D использовать п/п нахождения произведений элементов вектора. Модуль типов MyType
Модуль ввода элементов массивов VVod1
Модуль вывода элементов Vyvod
Модуль типовых алгоритмов 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)). Я уже все перепробывола что мне в голову пришло, но ничего не получается. |
![]() ![]() |
Atos |
![]()
Сообщение
#2
|
![]() Прогрессор ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
![]() ![]() ![]() A, собственно, почему Proiz - это процедурный тип? У тебя это просто название конкретной функция. К тому же ты пытаешься вызвать её без входных параметров Цитата Function Proiz(na,ma:Byte; Aa:mas1):integer; |
Selena |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
Входные параметры у меня в модуле MyType
func=function(Aa:Mas1;na:Byte):integer; Сообщение отредактировано: Selena - 22.11.2005 7:54 |
Atos |
![]()
Сообщение
#4
|
![]() Прогрессор ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
![]() |
klem4 |
![]()
Сообщение
#5
|
|||
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Selena,
Function Proiz(na,ma:Byte; Aa:mas1):integer;Far; Так этот самы Proiz у тебя описан как самая обыкновенная процедура, и процедурный тип func ты тут не используешь, по крайней в преведенном тобом коде, который я представил выше его нету
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
|||
Selena |
![]()
Сообщение
#6
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
А как ее записать в процедурном типе? Я тут разбиралась и еще больше запуталась. Объясните пожалуйста.
|
Selena |
![]()
Сообщение
#7
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
Ну помогите кто-нибудь! Очень надо!
![]() |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Selena, вот начало той программы, которая тебе нужна (формирование матриц A и B, и вектора D и вывода их на монитор... Если нужен вывод в файл - просто открой его и передавай вместо Output)... Процедурный тип присутствует. Все рабочее, проверено. Если что-то непонятно, спрашивай...
![]() P.S. К сожалению, все в одном файле, но главное - алгоритм... const |
Selena |
![]()
Сообщение
#9
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
For Volvo.
Огромное спасибо. Именно то что мне было не понятно. ![]() ![]() |
Selena |
![]() ![]()
Сообщение
#10
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
Я переделала задачу по твоему алгоритму, он мне выдает ошибку при компиляции(в том месте, где выжелено жирным шрифтом). Да, еще. Объясни что такое from: tmatrix, какую функчию выполняет в пвоем примере.
Вот что у меня получилось:
Сообщение отредактировано: volvo - 23.11.2005 19:22 |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Selena, обрати внимание, как у тебя описана функция Proiz:
Function Proiz(na,ma:Byte; Aa:mas1):integer;Far; Она принимает 3 параметра(2 байта и один массив) ... и что ты передаешь в нее: Da[i]:=Func(from[i],ma); 2 параметра (массив и байт)... Конечно будет несоответствие типов... Данные должны передаваться в том порядке, в котором они следуют в описании... Цитата что такое from: tmatrix, какую функчию выполняет в пвоем примере У тебя задание - сформировать вектор из матрицы, так? Вот я и передаю, из КАКОЙ матрицы будет формироваться вектор... Ну не люблю я глобальные переменные... |
Selena |
![]() ![]()
Сообщение
#12
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
Последний вопрос. Я нашла ошибку. Программа работает. Но почему-то она считае вектор D не из нечетных элементов, а вообще непонятно из каких элементов.
Вот переделанная.
|
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
To: Selena
Function Proiz(Aa:mas1;na:Byte):integer; Far; |
Selena |
![]()
Сообщение
#14
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
Спасибо.
![]() |
Selena |
![]()
Сообщение
#15
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
Не подскажете что здесь не так? Замена стобца вектором D не происходит, а выдает одни нули вместо матрицы А1
|
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
![]() ...Это во-первых. А во вторых, ты же меняешь матрицу Aa, а хочешь, чтобы изменилась Ba ![]() Я бы сделал так: Procedure Vstavka(Aa:mas2;from:mas1;na,ma,nstl:Byte;Var Ba:mas2); ![]() |
Selena |
![]()
Сообщение
#17
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
В матрицу В добавить 3-ью строку, являющуюся суммой элементов с одинаковыми индексами 1,4 и 5 строк.
Не подскажите как сделать? Это к это же задачи |
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
Selena, что значит "Добавить"? У тебя есть матрица из 5 строк. Что будет с 3, 4 и 5 из них, когда ты добавишь новую 3-ю строку?
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 6:30 |