PDA

Просмотр полной версии : паскаль !!!


rubik-nerubik
10.01.2008, 01:22
дюди выручайте оооч срочно
есть задание
Дана матрица n x m найти минимальный и максимальный элементы в строке и заменить первый и последний элементы строк соотстветственно... помогите!!!
program number2;
var a:array[1..3,1..4] of longint;
max,min,buf,k,n,i,j,maxj,minj:longint;
begin
assign(input,'input.txt');
reset(input);
assign(output,'output.txt');
rewrite(output);
readln(n);
readln(k);
for i:=1 to k do
for j:=1 to n do read(a[i,j]);
for i:=1 to k do begin
max:=a[i,1];
min:=a[i,1];
maxj:=1;
minj:=1;
for j:=1 to n do begin
if a[i,j]>max then maxj:=j
else if a[i,j]<min then minj:=j;
end;
if (maxj=n)and(minj=1) then
begin
buf:=a[i,1];
a[i,1]:=a[i,n];
a[i,n]:=buf;
end;
buf:=a[i,1];
a[i,1]:=a[i,maxj];
a[i,maxj]:=buf;
buf:=a[i,n];
a[i,n]:=a[i,minj];
a[i,minj]:=buf;
end;
for i:=1 to k do begin
for j:=1 to n do write(a[i,j],' ');
writeln;
end;
end.






вот задача только как-то неправильно рабтает, достаточно отредить , помогитеееее

diehard
10.01.2008, 04:16
Автор, в четкой формулировке задачи уже половина её решения.

diehard
10.01.2008, 04:29
Если я правильно понял задание, то надо для каждой строки минимальный элемент переставить местами с первым, а максимальный с последним. Тогда это выглядит так:


type index=word;

var i, j, j_max, j_min : index;
A1, AM, Amax, Amin : integer;

BEGIN

for i:=1 to N do
begin
j_max := 1;
j_min := 1;
for j:=1 to M do
begin
if A[i,j] > A[i,j_max] then j_max := j;
if A[i,j] < A[i,j_min] then j_min := j;
end;
A1 := A[i,1];
Amin := A[i,j_min]
AM := A[i,M];
Amax := A[i,j_max];
A[i,1] := Amin;
A[i,j_min] := A1;
A[i,M] := Amax;
A[i,j_max] := AM;
end;

END.


Всю фигню с вводом-выводом и константами допиши сам.

krypt3r
10.01.2008, 13:08
Вроде бы в задании не сказано "обменять", написано "заменить", а про старое значение элемента массива ничего не упоминается, если я правильно понял. Можно и вот так

program laba1;

const
maxrow = 3;
maxcol = 4;

type
TMass = array [1..maxrow, 1..maxcol] of integer;

function FillArray : TMass;
var
i, j : integer;
a : TMass;
begin
Randomize;
for i := 1 to maxrow do
for j := 1 to maxcol do
a[i][j] := Random (1000) - 500;
FillArray := a
end;

procedure PrintArray (a : TMass);
var
i, j : integer;
begin
for i := 1 to maxrow do
for j := 1 to maxcol do
writeln (a[i][j]);
writeln ('=====');
end;

procedure FindMinMax (a : TMass; row : integer; var min : integer; var max : integer);
var
j : integer;
begin
for j := 1 to maxcol do begin
if j = 1 then begin
min := a [row][j];
max := min;
end
else begin
if min > a [row][j] then
min := a [row][j];
if max < a [row][j] then
max := a [row][j];
end;
end;
end;

procedure ReplaceArr (var a : TMass; row, min, max : integer);
begin
a[row][1] := min;
a[row][maxcol] := max;
end;

var
a : TMass;
max, min, i : integer;

begin
a := FillArray;
PrintArray (a);
for i := 1 to maxrow do begin
///max := FindMax (a, 3);
///writeln (max);
FindMinMax (a, i, min, max);
writeln (min);
writeln (max);
writeln ('=====');
ReplaceArr (a, i, min, max);
end;
PrintArray (a);
end.

diehard
10.01.2008, 18:48
Вроде бы в задании не сказано "обменять", написано "заменить", а про старое значение элемента массива ничего не упоминается, если я правильно понял.

Вот потому и пишу, что надо чётко формулировать задание. А то в задании сказано "заменить соответственно", а в коде делает "обменять несоответственно":
buf:=a[i,1];
a[i,1]:=a[i,maxj];
a[i,maxj]:=buf;
buf:=a[i,n];
a[i,n]:=a[i,minj];
a[i,minj]:=buf;