IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> линейный массив, переместить элементы
Hooligan
сообщение 7.12.2004 22:06
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Надо элементы, расположенные между min и max переместить в начало массива, с одновременным их удалением. Подскажите пожалуйста, хотя бы алгоритм как их переместить
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.12.2004 22:25
Сообщение #2


Гость






Hooligan
Цитата
с одновременным их удалением

С удалением чего?
 К началу страницы 
+ Ответить 
mithquessir
сообщение 8.12.2004 0:09
Сообщение #3


Гость






volvo
Цитата
С удалением чего?

Наверное, элементов из (min,max).

Hooligan
Если так, то
Код

const
    n = 8;
    a:array[1..n] of integer = (5,-7,1,2,9,10,4,6);
var
    min,max,min_,max_,i,k,x,m,f:integer;
begin
    min := a[1]; min_ := 1;
    max := a[1]; max_ := 1;
    for i := 2 to n do
    begin
         if a[i] < min then
         begin min_ := i; min := a[i]; end;
         if a[i] > max then
         begin max_ := i; max := a[i]; end;
    end;
    for i := 1 to max_ - min_ -1 do
    begin
         x := a[min_+1];
         for k := min_+1 to max_-1{min_} do
         begin
              a[k] := a[k+1];
         end;
         for f := max_-1 to n do
         a[f] := a[f+1];
         inc(min_);
         for m := n downto 2 do
         a[m] := a[m-1];
         a[1] := x;
    end;
    for i := 1 to n do
    WriteLn(a[i]:3);
end.

Не самое рациональное решение, но, вроде, работает. ;)
 К началу страницы 
+ Ответить 
volvo
сообщение 8.12.2004 0:19
Сообщение #4


Гость






mithquessir
При прогоне для массива (5,-7,1,2,9,10,4,6) программа должна выдавать только 6 значений - (5,1,2,9,4,6). А что она у тебя выдает?
 К началу страницы 
+ Ответить 
Hooligan
сообщение 8.12.2004 0:32
Сообщение #5





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


мне самому такая вот мысль неожиданно пришла:
Код

if min_index<max_index then
 while min_index<>max_index-1 do
   begin
     m:=a[i];
     a[i]:=a[min_index+1];
     a[min_index+1]:=m;
     i:=i+1;
     min_index:=min_index+1;
   end
else
 while max_index<>min_index-1 do
   begin
     m:=a[i];
     a[i]:=a[max_index+1];
     a[max_index+1]:=m;
     i:=i+1;
     max_index:=max_index+1;
   end;


Сообщение отредактировано: volvo - 8.12.2004 0:42
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
mithquessir
сообщение 8.12.2004 14:00
Сообщение #6


Гость






volvo
Цитата
При прогоне для массива (5,-7,1,2,9,10,4,6) программа должна выдавать только 6 значений - (5,1,2,9,4,6). А что она у тебя выдает?

Выдает 9,2,1,5,-7,10,4,6.
Цитата
Надо элементы, расположенные между min и max переместить в начало массива, с одновременным их удалением.

Ты не прав, нужно удалять не min,max элементы, а элементы между ними.

Сообщение отредактировано: mithquessir - 8.12.2004 14:04
 К началу страницы 
+ Ответить 
volvo
сообщение 8.12.2004 14:23
Сообщение #7


Гость






mithquessir
Это тебе кто сказал? Ты сам так решил? Прочти условие:
Цитата
Надо элементы, расположенные между min и max переместить в начало массива

Поэтому, пока автор темы не уточнит задание, его делать бессмысленно.
 К началу страницы 
+ Ответить 
Бродяжник
сообщение 8.12.2004 15:23
Сообщение #8


Бывалый
***

Группа: Пользователи
Сообщений: 206
Пол: Мужской

Репутация: -  3  +


...свою пару копеек...
Задачу понимаю так:
Есть массив (вектор) из N чисел. Среди этих чисел есть а) наименьшее, и б) наибольшее. В общем случае они находятся не рядышком, т.е. между ними есть другие числа. И вот эти-то другие числа надо перенести с того места, где они сейчас, в начало массива, сдвинув начальные элементы на освободившееся место. Пример:
Было: 4,3,2,1,0,1,2,3,100,99,98
Стало: 1,2,3,4,3,2,1,0,100,99,98
Тройку чисел 1,2,3 сместили в начало массива.
Так? Если так, тогда рассмотрим "подводные камни".
Кто скажет, как должна работать программа в следующих случаях:
а) 2,2,2,2,2,2,2,2,2
б) 1,2,3,1,2,3,1,2,3
в) 0,0,0,1,2,3,9,9,9
Если кто скажет, как, тогда можно предложить и алгоритм.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 8.12.2004 15:27
Сообщение #9


Гость






Бродяжник
Ты мой предыдущий пост читал? Ждем автора. Он лучше знает, как звучало условие... :yes:
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 17.07.2025 18:22
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"