18.03.2013, 13:44 | #1 (permalink) |
Новичок
Регистрация: 09.03.2013
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Ошибка в подпрограмме с заменой компонент матрицы
Код:
Program zadanie; Uses crt; const digits=1; Type matrix = Array [1..10, 1..10] of real; massiv = Array [1..100] of Integer; Var m: matrix; tmp, max:real; v: massiv; s,imax,n,k: Integer; procedure input_matrix; var n,k,i,j,a,b,p1,p2: Integer; begin Write ('Введите количество строк матрицы n'); WriteLN (' не менее 2 и не более 10'); ReadLN (n); If (n<2) Or (n>10) Then Begin Write ('Вы ввели неправильное количество строк меньше 2 или'); Write (' больше 10, поэтому принят'); WriteLN (' максимальный размер, т.е. n=10'); n:=10; End; Write ('Введите количество столбцов матрицы k'); WriteLN (' не менее 2 и не более 10'); ReadLN (k); If (k<2) Or (k>10) Then Begin Write ('Вы ввели неправильное количество столбцов меньше 2 или'); Write (' больше 10, поэтому принят'); WriteLN (' максимальный размер, т.е. k=10'); k:=10; End; Write ('Введите левую а и правую b границы диапазона'); WriteLN (' значений компонент матрицы'); Write ('a='); ReadLN (a); Write ('b='); ReadLN (b); If a>b Then Begin p1:=a; a:=b; b:=p1; End; If a=b Then Begin p1:=0; p2:=b; End Else If b=0 Then Begin p1:=a; p2:=0; End Else Begin p1:=b-a; p2:=a; End; Randomize; For j:=1 To k Do begin For i:=1 To n Do Begin m[i,j]:=p2+random(p1+1); end end; end; procedure output_matrix; var i,j,n ,k: integer; begin writeln ('Исходная матрица'); For i:=1 To n Do begin For j:=1 To k Do begin Write (m[i,j]:6:digits) end; write(' '); writeln; end; End; procedure seach_abs_max; var i,j,n ,k: integer; begin imax:=1; max :=m[i,j]; for i:=1 to N do begin for j:=1 to k do begin if max<abs(m[i,j]) then begin max:=abs(m[i,j]); imax:=i; imax:=j; end; end; end; writeln('Максимальное абсолютное значение: max=',max:5:digits); end; procedure seach_quantum_abs_max; var i,j,n ,k: integer; begin For i:=1 to n do begin For j:=1 to k do begin If abs(m[i,j])=max then begin s:=s+1 end end end; Writeln('Количество совпадений max= ',s); end; procedure substitution_meaning_massif; var i,j,n ,k: integer; begin write('Одномерный массив'); if ((i+j) mod 2)=0 then begin v[s]:=1 end else begin v[s]:=-1 end; For i:=1 to s do begin write(v[i]:3) end; end; procedure output_regenerate_matrix; var i,j,n ,k: integer; begin Writeln; Write('Измененная матрица'); for i:= 1 to n do begin tmp:= m[1,i]; m[1,i]:= m[n,i]; m[n,i]:= tmp; end; for i:= 1 to n do begin writeln; for j:= 1 to k do begin write(m[i,j]:6:digits) end; end; end; begin input_matrix; output_matrix; seach_abs_max; seach_quantum_abs_max; substitution_meaning_massif; output_regenerate_matrix; END. |
18.03.2013, 13:44 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Обратите внимание на схожие темы - это должно вам помочь Количество компонент матрицы совпадающих по абсолютному значению с максимумом Повредил компонент LED гирлянды, нужна помощь Проблемы с заменой HDD на ноутбуке Проблемы с заменой памяти |
18.03.2013, 14:24 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Так, ну иметь с Вами дело, похоже, смысла нет: разбирались-разбирались в теме Количество компонент матрицы совпадающих по абсолютному значению с максимумом , и всё-таки этот абсолютно бессмысленный бред
imax:=1; ... imax:=i; imax:=j; который следовало просто выбросить, благополучно перекочевал в процедуру seach_abs_max (между прочим, к слову, уж если Вы пользуетесь английским языком, то делать это желательно грамотно: "поиск" по-английски будет "search"). Теперь по процедуре substitution_meaning_massif. Где, скажите пожалуйста, там вообще хоть какой-нибудь цикл по i и j?! Отсутствует напрочь. Поскольку i и j определены в теле процедуры, им по умолчанию присвоены нулевые значения, да тем дело и кончается, а дальнейшее ветвление просто "висит в воздухе". Ну-ну... |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|