Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.11.2011, 19:14
MuzFAN MuzFAN вне форума
Прохожий
 
Регистрация: 01.11.2011
Сообщения: 4
Репутация: 10
По умолчанию Не могу до конца разобраться...

Помогите довести задачу до ума.
"Дан массив размера 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  
Старый 01.11.2011, 21:08
lmikle lmikle сейчас на форуме
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Путь Idx1 и Idx2 индексы мин и макс элементов, причем Idx1 < Idx2 (если они равны, то делать ничего не надо, если Idx1 > Idx2 - то поменять их местами).

Тогда при цикле I от Idx1 до (Idx2 div 2) элемент A[i] будет соответсвовать A[Idx2-I+Idx1]. Просто меняешь местами.
Ответить с цитированием
  #3  
Старый 01.11.2011, 21:37
Аватар для DelphiM0ZG
DelphiM0ZG DelphiM0ZG вне форума
Новичок
 
Регистрация: 22.10.2011
Сообщения: 62
Репутация: 666
По умолчанию

У меня получилось так. Можно обойтись и без дополнительного массива, но как пример, думаю, что этого будет достаточно.

Код:
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  
Старый 01.11.2011, 21:58
MuzFAN MuzFAN вне форума
Прохожий
 
Регистрация: 01.11.2011
Сообщения: 4
Репутация: 10
По умолчанию

DelphiM0ZG, спасибо)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:32.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025