![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Помогите довести задачу до ума.
"Дан массив размера N. Переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами." Код:
program Project1;
const
n = 10;
type
TIntArray = array [0 .. n - 1] of Integer;
function Zap: TIntArray;
var
i: Integer;
begin
Randomize;
for i:=0 to n - 1 do
Result[i] := Random(n);
end;
function GetMinElementIndex(IntArray: TIntArray): Integer;
var
minInd, i: Integer;
begin
minInd := 0;
for i := 0 to n - 1 do
if IntArray[i] < IntArray[minInd] then
minInd := i;
Result := minInd;
end;
function GetMaxElementIndex(IntArray: TIntArray): Integer;
var
maxInd, i: Integer;
begin
maxInd := 0;
for i := 0 to n - 1 do
if IntArray[i] > IntArray[maxInd] then
maxInd := i;
Result := maxInd;
end;
var
begin
ReadLn;
end.Написал часть задачи, не пойму как можно переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами. Заранее спасибо) Последний раз редактировалось Admin, 01.11.2011 в 20:59. |
|
#2
|
|||
|
|||
|
Путь Idx1 и Idx2 индексы мин и макс элементов, причем Idx1 < Idx2 (если они равны, то делать ничего не надо, если Idx1 > Idx2 - то поменять их местами).
Тогда при цикле I от Idx1 до (Idx2 div 2) элемент A[i] будет соответсвовать A[Idx2-I+Idx1]. Просто меняешь местами. |
|
#3
|
||||
|
||||
|
У меня получилось так. Можно обойтись и без дополнительного массива, но как пример, думаю, что этого будет достаточно.
Код:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
Const
N0=20;
Type
Massif=Array[0..N0-1] Of Integer;
Var
Mas, Masf: Massif;
a: Integer;
i, N, MinInd, MaxInd: Byte;
begin
Repeat
Write('Razmer (2<N<20): N = ');
ReadLn(N);
Until ((N>2) And (N<=20));
WriteLn;
WriteLn('Ishodnyi massiv:');
WriteLn;
Randomize;
For i:=0 To N-1 Do
Begin
Mas[i]:=Random(1000)-Random(1000);
WriteLn('Mas[', i+1, '] = ', Mas[i]);
End;
MinInd:=0;
MaxInd:=0;
For i:=0 To N-1 Do
Begin
If (Mas[MinInd]>Mas[i]) Then
MinInd:=i;
If (Mas[MaxInd]<Mas[i]) Then
MaxInd:=i;
End;
WriteLn;
WriteLn('----------------');
WriteLn;
WriteLn('Min = ', Mas[MinInd]);
WriteLn('Max = ', Mas[MaxInd]);
WriteLn;
WriteLn('Poluchennyi massiv:');
WriteLn;
If (Abs(MaxInd-MinInd)<=2) Then
WriteLn('Mejdu minimalnym i maksimalnym elementami perestavlyat nechego!')
Else If (MaxInd>MinInd) Then
Begin
For i:=MinInd+1 To MaxInd-1 Do
Masf[i]:=Mas[i];
For i:=MinInd+1 To MaxInd-1 Do
Mas[MaxInd-i+MinInd]:=Masf[i];
End
Else If (MaxInd<MinInd) Then
Begin
For i:=MaxInd+1 To MinInd-1 Do
Masf[i]:=Mas[i];
For i:=MaxInd+1 To MinInd-1 Do
Mas[MinInd-i+MaxInd]:=Masf[i];
End;
For i:=0 To N-1 Do
WriteLn('Mas[', i+1, '] = ', Mas[i]);
ReadLn;
end. |
|
#4
|
|||
|
|||
|
DelphiM0ZG, спасибо)
|