Консультация № 176559
08.02.2010, 02:01
0.00 руб.
0 2 2
Помогите решить одну задачку:
Выполнить обмен в одномерном массиве,значениями максимального элемента и элемента,имеющего заданное значение(использовать ф-цию нахождения номера максимального элемента,ф-цию нахождения номера элемента, имеющего заданное значение,и процедуру обмена значениями двух элементов)

Обсуждение

давно
Профессор
401888
1232
08.02.2010, 06:55
общий
это ответ
Здравствуйте, angel.nero!
Решение в приложении.

Приложение:
uses crt;
const nmax=100;{максимальный размер массива}
type mas=array[1..nmax] of integer;{тип массива}
function Max(v:mas;x:byte):byte;{поиск номера максимального}
var i,imx:byte;
begin
imx:=1;
for i:=1 to x do
if v[i]>v[imx] then imx:=i;{нашли}
Max:=imx;{присвоили значение функции}
end;
function Zad(v:mas;x:byte;z:integer):byte;{поиск позиции заданного числа}
var i,iz:byte;
begin
iz:=0;
for i:=1 to x do
if v[i]=z then{нашли число}
begin
iz:=i;{его номер}
break;{дальше не ищем}
end;
Zad:=iz;{значение функции}
end;
procedure Obmen(var v:mas;x:byte;imx,iz:byte);{обмен максимального и заданного чисел}
var b:integer;
begin
b:=v[imx];{простой обмен с использованием переменой-буфера}
v[imx]:=v[iz];
v[iz]:=b;
end;

var a:mas;
n,i,k,imax,izad:byte;
begin
clrscr;
randomize;
repeat
write('Размер массива n=');
readln(n);
until n in [1..nmax];
writeln('Исходный массив:');
for i:=1 to n do
begin
a[i]:=random(20)+1;
write(a[i],' ');
end;
writeln;
writeln;
imax:=Max(a,n);
writeln('Номер максимального=',imax);
write('Введите число для поиска k=');
readln(k);
izad:=Zad(a,n,k);
if izad=0 then write('Числа ',k,' в массиве нет!'){если значение функции=0}
else writeln('Номер числа ',k,'=',izad);
if izad=imax then write('Число ',k,' совпадает с максимальным значением!');
if(izad>0)and(izad<>imax)then
begin
Obmen(a,n,imax,izad);
writeln('Обмен элементов:');
for i:=1 to n do
write(a[i],' ');
end;
readln
end.
Неизвестный
08.02.2010, 12:30
общий
это ответ
Здравствуйте, angel.nero.
Текст программы в приложении

Приложение:
{
Выполнить обмен в одномерном массиве,значениями максимального элемента и элемента,
имеющего заданное значение(использовать ф-цию нахождения номера максимального элемента,
ф-цию нахождения номера элемента, имеющего заданное значение
и процедуру обмена значениями двух элементов)
}
Uses
Crt;
Const
MaxCount = 10;
Var
Ar: Array[1..MaxCount] of Byte;
indexMax, indexEl, i, index, max: Byte;

function getIndexOfMaxElement: Byte;
begin
index := 1;
max := Ar[1];
for i := 2 to MaxCount do
if max < Ar[i] then begin
max := Ar[i];
index := i;
end;
getIndexOfMaxElement := index;
end;

function getIndexOfElement(num: Byte): Byte;
begin
index := 0;
for i:= 1 to MaxCount do
if Ar[i] = num then begin
index := i;
break;
end;
getIndexOfElement := index;
end;

procedure Exchange(idx1, idx2 : Byte);
var
tmp : Byte;
begin
tmp := Ar[idx1];
Ar[idx1] := Ar[idx2];
Ar[idx2] := tmp;
end;

begin
ClrScr;
Randomize;
for i := 1 to MaxCount do begin
Ar[i] := Random(255);
Write(Ar[i]:5);
end;
WriteLn;
indexMax := getIndexOfMaxElement;
indexEl := getIndexOfElement(Ar[Random(MaxCount) + 1]);
Exchange(indexMax, indexEl);
for i := 1 to MaxCount do begin
if (i = indexMax) or (i = indexEl) then
TextAttr := $0A
else TextAttr := $07;
Write(Ar[i]:5);
end;
repeat until keypressed;
end.
Форма ответа