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

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

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

 
 Ответить  Открыть новую тему 
> Задача с массивом(не могу сообразить), В чём ошибка?
сообщение
Сообщение #1





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

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


Нужна помощь. Пока препода дождешься сессия пройдет. Вот условие задачи:
Найти минимальные в строках значения компонент вещественной матрицы m(n,k) и записать их в одномерный массив v(n) .
Найти максимальное значение компонент массива v(n). Если максимумов в массиве несколько, то запомнить индекс первого встреченного при переборе из максимумов.
Поменять местами компоненты последней строки матрицы m(n,k) и строки, содержащей первый из встреченных максимумов. Если максимум окажется в последней строке, то оставить матрицу без изменения.
Вычислить сумму компонент матрицы m(n,k) .
На экран вывести исходную матрицу m(n,k), массив v(n) , первую встреченную максимальную компоненту с индексом, изменённую матрицу m(n,k) , сумму компонент матрицы m(n,k).
Вот моё творение:

Program task3;
type matrix=array [1..10, 1..10] of real;
odn=array [1..10] of real;
var m:matrix;
v: odn;
g,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; c:real;
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;
g:=c;
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:',g);
perestanovka(m,n,k,y);
write('summa komponentov:',x);
readln;
end.


Проблема с первым встречным индексом (его определяет функция odn), программа не правильно его определяет, да и значение не правильно выдаёт. В чём ошибка?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
В чём ошибка?

Чем более извращенный способ нахождения первого вхождения максимума ты выбираешь - тем сложнее отлавливать ошибки:

function maxzn(var v: odn; var n:integer):integer;
var i:integer; c:real;
begin
q:=1;
c:= v[1]; { <--- Эта строка должна быть здесь, а не там, где была... }
for i:=1 to n do begin
if v[i]>c then begin
c:=v[i]; q:=i;
end;
end;
maxzn:=q;
g:=c;
end;



А насколько все могло быть проще:
function maxzn(var v: odn; var n:integer):integer;
var i: integer;
begin
q := 1;
for i := 2 to n do
if v[i] > v[q] then q := i;

maxzn := q;
g := v[q];
end;


Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 23.10.2021 8:33
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name