Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задача с одномерным массивом

Автор: Zharatustra 7.10.2007 19:44

Суть задачи состоит в том что надо найти минимальное и максимальное значение элементоа в массиве и поменять их местами. С первой половиной задачи я справился, а вот со второй вышла заминка. Подскажите, пожалуйста кто-н.


program n1;
uses crt;
var d: array[1..15] of integer;
max,min,n,i: integer;
begin
clrscr;
write ('N=');
readln (n);
for i:=1 to n do
begin
writeln ('D[',i,']=');
readln (d[i])
end;
max:=d[1];
for i:=2 to n do
if d[i]>max then
max:=d[i];
min:=d[1];
for i:=2 to n do
if d[i]<min then
min:=d[i];
writeln ('max=',max,' min=',min);
readln;
end.


Автор: Tan 7.10.2007 19:54

добавь переменную например maxnomer, и храни там номер максимального элемента, так же с минимальным. Ка поменять сам уж разберёшься.

max:=d[1];           
maxnomer := 1;
for i:=2 to n do
if d[i]>max then
begin
max:=d[i];
maxnomer := i;
end;

Автор: compiler 7.10.2007 19:55

оперидили smile.gif


Автор: Zharatustra 7.10.2007 20:51

Ребята, извините, что опять обращаюсь, но не віходит с процедурой вывода массива, выводит то же что и было введено.

 
min:=d[1];
minnomer:=1;
for i:=2 to n do
if d[i]<min then
begin
min:=d[i];
minnomer:=i
end;
writeln ('MAX=',max,' MIN=', min);
for i:=1 to n do
write (' ',d[i]);
readln;
end.


Пожалуйста помогите устранить ошибку.

Автор: Tan 7.10.2007 21:10

program n1;
uses crt;
var d: array[1..15] of integer;
max,min,n,i: integer;
maxnomer, minnomer : integer;
begin
clrscr;
write ('N=');
readln (n);
for i:=1 to n do
begin
writeln ('D[',i,']=');
readln (d[i])
end;
max:=d[1];
maxnomer := 1;
for i:=2 to n do
if d[i]>max then
begin
max:=d[i];
maxnomer := i;
end;
min:=d[1];
minnomer := 1;
for i:=2 to n do
if d[i]<min then
begin
min:=d[i];
minnomer := i;
end;
d[minnomer] := max;
d[maxnomer] := min;
for i := 1 to n do write (d[i]:2);
writeln ('max=',max,' min=',min);
readln;
end.


Я просто дал начальную мысль, думал ты закончишь. Ну вот так выглядит, если брать твой пример за основу. Но это разумеется в случае если рассматривается смена 1 мин и макс элемента.

Автор: Zharatustra 7.10.2007 21:21

Огромное СПАСИБО, Tan!!! И еще, если можно один вопрос - что означает

 (d[i]:2) 
? точнее зачем нужно двоеточее после d[i], я пробовал программа и так работает.

Автор: Tan 7.10.2007 21:23

Чтобы при выводе расстояние между элементами массива было побольше.

Автор: Zharatustra 7.10.2007 21:26

А понятно, то есть это как и при форматном выводе, вместо этого можно сделать и так

write (' ',d[i]); 
.

Автор: Tan 7.10.2007 21:39

Простым языком говоря - 2 это число ячеек, отведённых для вывода элемента массива; так как элементы состоят из 1 цифры, то ещё 1 ячейка остаётся под пробел. Это не то же самое,

write (' ', d[i]);
так как в этом случае у тебя вне зависимости от размера числа (количества цифр) будет пробел перед следующим. Твой вариант для этой задачи тоже годен, так как он существенно ничего не меняет.