|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.12.2008, 16:48 | #1 |
Регистрация: 01.11.2008
Сообщений: 7
|
Помогите студенту Радиотехники
Нужна помощь. Пока препода дождешься сессия пройдет. Вот условие задачи:
Найти минимальные в строках значения компонент вещественной матрицы m(n,k) и записать их в одномерный массив v(n) . Найти максимальное значение компонент массива v(n). Если максимумов в массиве несколько, то запомнить индекс первого встреченного при переборе из максимумов. Поменять местами компоненты последней строки матрицы m(n,k) и строки, содержащей первый из встреченных максимумов. Если максимум окажется в последней строке, то оставить матрицу без изменения. Вычислить сумму компонент матрицы m(n,k) . На экран вывести исходную матрицу m(n,k), массив v(n) , первую встреченную максимальную компоненту с индексом, изменённую матрицу m(n,k) , сумму компонент матрицы m(n,k). |
05.12.2008, 16:49 | #2 |
Регистрация: 01.11.2008
Сообщений: 7
|
Вот мой исходник:
Program task3; type matrix=array [1..10, 1..10] of real; odn=array [1..10] of real; var m:matrix; v: odn; c,x:real; n,k,y,q:integer; procedure input_matrix (var m:matrix; var n,k:integer); var a,b,p1,p2,i,j:integer; begin write('vvedite chislo strok n matrici '); writeln('ne menee 2 i ne bolee 10'); readln(n); if (n<2) or (n>10) then begin write('vvedeno n<2 ili bolshe 10 poetomu budet prinat '); write('maximalniy razmer n=10'); n:=10; end; write('vvedite chislo stolbcov k matrici '); writeln('oshibka vvoda budet vzyto 10'); readln(k); if (k<2) or (k>10) then begin write('vvedeno chislo menshe 2 ili bolshe 10, poetomu budet prinyat '); write('maximalniy razmer, k=10'); k:=10; end; write('vvedite levuyu a i pravuyu b granicu '); writeln('diapazon znacheniy matrici'); 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 i:=1 to n do for j:= 1 to k do m[i,j]:=random(p1+1)+p2; end; procedure output_matrix (var m:matrix; n,k:integer); var i,j:integer; begin for i:=1 to n do begin for j:=1 to k do write(m[i,j]:4:2, ' '); writeln; end; end; procedure form_matrix(var m:matrix; n,k:integer); var i,j:integer; begin x:=0; for i:=1 to n do begin v[i]:=m[i,1]; for j:=1 to k do begin x:=x+m[i,j]; if m[i,j]<v[i] then v[i]:=m[i,j]; end; end; writeln('Massiv V(n)'); for i:=1 to n do write(v[i]:4:2, ' '); readln; end; function maxzn(var v: odn; var n:integer):integer; var i:integer; begin q:=1; for i:=1 to n do begin c:= v[1]; if v[i]>c then begin c:=v[i]; q:=i; end; end; maxzn:=q; end; procedure perestanovka(var m:matrix; n,k,y:integer); var i,j:integer; z:real; begin if y=n then output_matrix(m,n,k) else begin for j:=1 to k do begin z:=m[y,j]; m[y,j]:=m[n,j]; m[n,j]:=z; end; writeln('izmenennaya matrica M'); output_matrix(m,n,k); end; end; begin input_matrix(m,n,k); writeln('ishodnaya matrica m(n,k):'); output_matrix(m,n,k); form_matrix(m,n,k); y:=maxzn(v,n); writeln('indeks pervogo vstrechnjgo:',y); writeln('ego znachenie:',c); perestanovka(m,n,k,y); write('summa komponentov:',x); readln; end.Program task3; type matrix=array [1..10, 1..10] of real; odn=array [1..10] of real; var m:matrix; v: odn; c,x:real; n,k,y,q:integer; procedure input_matrix (var m:matrix; var n,k:integer); var a,b,p1,p2,i,j:integer; begin write('vvedite chislo strok n matrici '); writeln('ne menee 2 i ne bolee 10'); readln(n); if (n<2) or (n>10) then begin write('vvedeno n<2 ili bolshe 10 poetomu budet prinat '); write('maximalniy razmer n=10'); n:=10; end; write('vvedite chislo stolbcov k matrici '); writeln('oshibka vvoda budet vzyto 10'); readln(k); if (k<2) or (k>10) then begin write('vvedeno chislo menshe 2 ili bolshe 10, poetomu budet prinyat '); write('maximalniy razmer, k=10'); k:=10; end; write('vvedite levuyu a i pravuyu b granicu '); writeln('diapazon znacheniy matrici'); 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 i:=1 to n do for j:= 1 to k do m[i,j]:=random(p1+1)+p2; end; procedure output_matrix (var m:matrix; n,k:integer); var i,j:integer; begin for i:=1 to n do begin for j:=1 to k do write(m[i,j]:4:2, ' '); writeln; end; end; procedure form_matrix(var m:matrix; n,k:integer); var i,j:integer; begin x:=0; for i:=1 to n do begin v[i]:=m[i,1]; for j:=1 to k do begin x:=x+m[i,j]; if m[i,j]<v[i] then v[i]:=m[i,j]; end; end; writeln('Massiv V(n)'); for i:=1 to n do write(v[i]:4:2, ' '); readln; end; function maxzn(var v: odn; var n:integer):integer; var i:integer; begin q:=1; for i:=1 to n do begin c:= v[1]; if v[i]>c then begin c:=v[i]; q:=i; end; end; maxzn:=q; end; procedure perestanovka(var m:matrix; n,k,y:integer); var i,j:integer; z:real; begin if y=n then output_matrix(m,n,k) else begin for j:=1 to k do begin z:=m[y,j]; m[y,j]:=m[n,j]; m[n,j]:=z; end; writeln('izmenennaya matrica M'); output_matrix(m,n,k); end; end; begin input_matrix(m,n,k); writeln('ishodnaya matrica m(n,k):'); output_matrix(m,n,k); form_matrix(m,n,k); y:=maxzn(v,n); writeln('indeks pervogo vstrechnjgo:',y); writeln('ego znachenie:',c); perestanovka(m,n,k,y); write('summa komponentov:',x); readln; end.{ Проблема с первым встречным индексом (его определяет функция odn), программа не правильно его определяет. В чём ошибка?} |
05.12.2008, 17:16 | #3 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Первый максимальный или минимальный специально искать не надо. Если мы просматриваем массив или матрицу снfчала, то при условии if a[i,j]>max, максимальным всегда будет первый с таким значением. Аналогично можно найти последний максимальный элемент, надо только массив смотреть с конца
for i :=n downto 1, или для матрицы for i:=n downto 1 do for j:= m downto 1 do |
05.12.2008, 17:28 | #4 |
Регистрация: 01.11.2008
Сообщений: 7
|
а всё таки может функцию мою поправить както можно?
|
05.12.2008, 17:45 | #5 |
Участник клуба
Регистрация: 10.11.2008
Сообщений: 1,502
|
Код:
Нормальное состояние техники - нерабочее, все остальное частный случай.
|
05.12.2008, 18:51 | #6 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Вот хотел поправить твое, но там столько ошибок, что почти переделал, стиль сохранил, все с процедурами и функциями.
Код:
|
07.12.2008, 10:10 | #7 |
Регистрация: 01.11.2008
Сообщений: 7
|
Спасибо! буду разбираться.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
!!!Помогите студенту с темой!!! | dedans | Помощь студентам | 4 | 20.08.2008 02:17 |
Помогите, пожалуйста, студенту =(( | Fezz | Общие вопросы C/C++ | 2 | 29.11.2007 12:38 |
Помогите студенту... | Vitaliyg_radio | Помощь студентам | 1 | 04.11.2007 18:16 |