Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2009, 22:56   #1
Ananim-Pbl6ak
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 77
По умолчанию растяжение массива. только исправить

Задание:Утроить все числа, стоящие
между максимальным и минимальным элементами последовательности
неповторяющихся целых чисел
Код:
Program Insert;
{Выполнил Романов Антон}
const
 dim=30;
Type
	   TVector=Array[1..dim] of byte;

Var
	   Vector:TVector;
	   Num,NumBeg,I,J,max,min,indmax,indmin:Byte;

Begin
   Writeln(', Введите неповторяющиеся целые числа* <= ',dim div 3);
	   Writeln('конец ввода по ENTER');
	   Num:=0;
	   While not EOLN do
		  begin
			Inc(Num);
      Read(Vector[Num]);
		  end;
	   Readln;
     min:=1;max:=1;
     for i:=2 to num do
      begin
       if vector[i]>vector[max] then
       begin
        max:=i ;indmax:=i;
       end
        else if vector[i]<vector[min] then
        begin
         min:=i; indmin:=i;
        end;
      end;
     writeln;
     writeln('минимальный элимент массива* - ',vector[min],',*максимальный элимент массива - ',vector[max]);
     NumBeg:=Num;
   I:=num;
	   Repeat

		  If (I <indmax) and (i>indmin)
		     then
			  begin
 For J:=Num downto I+1 do
         vector[j+2]:=vector[j];
				Vector[I+1]:=vector[i];
        vector[i+2]:=vector[i];
				Inc(Num,2);
			  end;
        dec(i);
	   Until I=0;
  If NumBeg<>Num
    then
       begin
          Writeln('Массив после утроение элиментов между минимумом и максимумом');
          For I:=1 to Num do
	        Write(Vector[I],' ');
     Writeln;
  end
  else
     Writeln('массив не изменился');
	  Readln
End.
помогите исправить:
1) min и indmin, max и indmax попарно дублируют друг друга.
2) если максимальный или минимальный элемент стоит первым, то indmin или indmax будет не определен!
3) главное: не факт, что минимальный элемент стоит перед максимальным!
Ananim-Pbl6ak вне форума Ответить с цитированием
Старый 15.06.2009, 08:56   #2
Ananim-Pbl6ak
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 77
По умолчанию

но с этим все понятно:
1) min и indmin, max и indmax попарно дублируют друг друга.
а как быть с этим??
2) если максимальный или минимальный элемент стоит первым, то indmin или indmax будет не определен!
3) главное: не факт, что минимальный элемент стоит перед максимальным!
Ananim-Pbl6ak вне форума Ответить с цитированием
Старый 15.06.2009, 09:02   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а как быть с этим??
Деж такие задачки рожают?...
В теории я так понимаю: если максимальный или минимальный элемент стоит первым т.е. в начале массива... И не важно какой это элемент главное что экстремум.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.06.2009, 13:08   #4
Ananim-Pbl6ak
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 77
По умолчанию

да вы правильно поняли только как это реализоваться
Ananim-Pbl6ak вне форума Ответить с цитированием
Старый 15.06.2009, 13:59   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну ищещь сначала экстремумы:
Код:
var a:array[1..10] of integer;mx,mn:integer;
begin
 for i:=0 to 10 do begin
  a[i]:=random(4);
  if a[i]>mx then mx:=a[i];
  if a[i]<mn then mn:=a[i];
 end;
Потом находишь положение первого экстремума:
Код:
 i:=0; while(i<10)and(a[i]<>mx)and(a[i]<>mn) then inc(i);
Далее в цикле проходишь от него по массиву пока не встретишь новый экстремум, и во время прохождения анализируешь есть ли повторяющиеся. Если нет то опять от того же экстремума, до нового, но с умножением подмассива.

Для определения повторов рекомендую завести еще один массив, куда записывать какие уже были. А в итерации сверять с тем что записано.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.06.2009, 16:51   #6
Ananim-Pbl6ak
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 77
По умолчанию

вы не можете "ткнуть меня носом" что на что в моем коде менять
Ananim-Pbl6ak вне форума Ответить с цитированием
Старый 15.06.2009, 17:14   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что на что в моем коде менять
Выражу субьективное мнение: Я бы все поменял. Я не очень понял твой код, и делал бы по своему. Возможно даже упростил бы все до максимума, поставив все проверки непосредственно при вводе нового элемента... Или сделал бы функциями или что еще лучше классами...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.06.2009, 08:23   #8
Ananim-Pbl6ak
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 77
По умолчанию

все бы хорошо но от нас требуют в таком виде, начит вместо поиска минимума и максимума надо искать экстремумы, далее утраивать. а что делать с тем что не работает программа если экстремум стоит первым в ряду
Ananim-Pbl6ak вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
растяжение массива.исправить код Flomic Паскаль, Turbo Pascal, PascalABC.NET 1 04.06.2009 16:46
растяжение массива в паскале.Испрвить код Flomic Помощь студентам 0 04.06.2009 15:25
Растяжение одномерного массива Dimon.ru Паскаль, Turbo Pascal, PascalABC.NET 0 03.06.2009 19:58
начал учить только-только - нужна ваша помошь vanDJ Помощь студентам 20 18.12.2007 21:53