![]() |
|
|
Регистрация | << Правила форума >> | 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, спасибо)
|