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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2012, 19:43   #1
Олеся Хусаинова
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 11
По умолчанию Массивы

В массиве целых чисел а1,...,аn переставить элементы так ,чтобы вначале шли элементы массива, большие а1,затем сам элемент а1,и далее-элементы, меньшие а1.
Олеся Хусаинова вне форума Ответить с цитированием
Старый 01.04.2012, 20:03   #2
zzzzza
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 16
По умолчанию

это?

Var a: array[1..100] of integer;
i,j,c,n: Integer;
Begin
writeln('Scolko chisel budet: ');
read(n);
for i:=1 to n do begin
a[i]:=round(random(11));
write(a[i],' ');
end;
writeln;
For i:=1 to n-1 do begin
for j:=i+1 to n do begin
If a[i]<a[j] then begin
c:=a[i];
a[i]:=a[j];
a[j]:=c;
end;
end;
end;
for i:=1 to 10 do begin
write(a[i],' ');
end;
end.
zzzzza вне форума Ответить с цитированием
Старый 01.04.2012, 22:52   #3
Олеся Хусаинова
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 11
По умолчанию

не совсем...тут числа выстраиваются по убыванию,а надо,чтобы сначала элементы большие а1.ПОТОМ А1,ЗАТЕМ ЭЛЕМЕНТЫ МЕНЬШИЕ А1
Олеся Хусаинова вне форума Ответить с цитированием
Старый 01.04.2012, 23:43   #4
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от Олеся Хусаинова Посмотреть сообщение
...а надо,чтобы сначала элементы большие а1.ПОТОМ А1,ЗАТЕМ ЭЛЕМЕНТЫ МЕНЬШИЕ А1
А разве это ни есть сортировка по убыванию?
Честно, три раза перечитал, прежде чем спросить.

Мой вариант:
Код:
Var
  a:array[1..100] of integer;
  i,j,n,a1,tmp:Integer;
Begin
  write('Размерность массива: ');
  readln(n);
  for i:=1 to n do
    begin;
      write('Вводи a[',i,']',': ');
      readln(a[i]);
    end;
  writeln;
  a1:=a[1];
  for i:=1 to n do
    for j:=i to n do
      if a[i]<a[j]then
        begin
          tmp:=a[i];
          a[i]:=a[j];
          a[j]:=tmp;
        end;
  i:=1;
  write('числа большие a1: ');
  while a[i]>a1 do
    begin
      write(a[i],' ');
      i:=i+1;
    end;
  writeln;
  writeln('a1: ',a[i]);
  i:=i+1;
  while a[i]=a1 do
    i:=i+1;
  write('числа, которые меньше a1: ');
  while i<=n do
    begin
      write(a[i],' ');
      i:=i+1;
    end;
  readln;
end.
И еще, непонятно, что нужно делать, если a1=a2=a16 и тд. Я их просто не выводил.
Все тривиальное просто

Последний раз редактировалось whatever; 01.04.2012 в 23:59.
whatever вне форума Ответить с цитированием
Старый 02.04.2012, 05:52   #5
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от whatever Посмотреть сообщение
А разве это ни есть сортировка по убыванию?
Не совсем..
Череп, я думаю, тут подразумевается, что нужно сохранить порядок следования чисел обеих категорий между собой. Согласен, это не сказано в задании явно, но намек на это явный (именно в том, что это не названо сортировкой).
Цитата:
И еще, непонятно, что нужно делать, если a1=a2=a16 и тд. Я их просто не выводил.
А все свалить в середину )).

Тут проблема скорее в том, можно ли использовать дополнительные массивы.. Если да, то решение простоеЮ примерно такое:
Код:
const
  m= 20;
  r= 9;

var
  a,L,G: array[1..m] of integer;
  i,nL,nG,a1: integer;

begin
  //Randomize;    // uncomment after debugging is over
  for i:=1 to m do a[i]:= Random(2*r+1)-r;
  for i:=1 to m do write(a[i]:3);
  a1:= 0;
  writeln;
  nL:= 0;
  nG:= 0;
  for i:=1 to m do
    if a[i]<a1 then begin
      inc(nL);
      L[nL]:= a[i]
    end
    else if a1<a[i] then begin
      inc(nG);
      G[nG]:= a[i]
    end;
  for i:=1 to nG do a[i]:= G[i];
  for i:=1 to nL do a[m-nL+i]:= L[i];
  for i:=nG+1 to m-nL do a[i]:= a1;
  for i:=1 to m do write(a[i]:3);
  readln
end.
А если нет - то алгоритм усложнится и выполнение замедлится. Олеся, что ты скажешь?
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 02.04.2012, 13:01   #6
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от TinMan Посмотреть сообщение
Череп, я думаю, тут подразумевается, что нужно сохранить порядок следования чисел обеих категорий между собой.
Вот уж действительно, даже в голову не пришло бы. Похоже, что это и имелось ввиду. Но такие условия нужно указывать в явном виде.
Кстати, в этом случае все еще проще, сортировать ничего не надо:
Код:
  write('числа большие a1: ');
  for i:=2 to n do
    if a[1]<a[i] then
      write(a[i],' ');
  writeln;
  writeln('a1: ',a[1]);
  write('числа, которые меньше a1: ');
  for i:=2 to n do
    if a[1]>a[i] then
      write(a[i],' ');
Все тривиальное просто

Последний раз редактировалось whatever; 02.04.2012 в 13:05.
whatever вне форума Ответить с цитированием
Старый 02.04.2012, 13:10   #7
Олеся Хусаинова
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 11
По умолчанию

В принципе, получается,что подходят оба варианта....Сегодня, когда я сдавала лабу(я её по - своему сделала) препод потребовал от меня ,чтобы массив задавался автоматически (т.е. прогой) и,чтобы выводился сразу второй массив уже такой какой задается в задаче(сначала элементы большие а1,потом сам элемент а1 и т.д)Короче вот этот вариант он у меня принял...


Код:
program pr;
  var i,x,n,k,m:integer;
      a,b,c:array[0..100] of integer;
begin
  randomize;
  writeln('vvedite n chislo elementov v masive');
  write('n=');
  readln(n);
  for i:=1 to n do a[i]:=random(100);
  writeln('massbv A');
  for i:=1 to n do write(a[i],' ');
  writeln;
  k:=0;
  m:=0;
  x:=a[1];
  for i:=1 to n do  begin
      if x<a[i] then begin
                       k:=k+1;
                       b[k]:=a[i];
                     end else
                     begin
                       m:=m+1;
                       c[m]:=a[i]
                     end; end;
  for i:=1 to k do a[i]:=b[i];
  for i:=1 to m do a[i+k]:=c[i];
  writeln('massiv B');
  for i:=1 to n do begin
      write(' ', ' ');
      write(a[i]);
    end; read (b[i]);end.
написано, правда, соблюдая не все законы и правила Паскаля,но главное работает)
Ребят,Спасибо большое)Думаю,оба варианты могут подойти)

Кстати,согласно по поводу задания...что далеко не всё понятно(Но именно в таком виде его дает нам препод..

Последний раз редактировалось Serge_Bliznykov; 02.04.2012 в 13:20.
Олеся Хусаинова вне форума Ответить с цитированием
Старый 02.04.2012, 13:19   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от whatever
Кстати, в этом случае все еще проще, сортировать ничего не надо:
Э нет. Так не пойдёт.

В условии чётко сказано:
Цитата:
В массиве целых чисел а1,...,аn переставить элементы так
Вы же никаких перестановок не делаете. А то, что Вы элементы выводите в нужном порядке - задачу формирования правильного массива НЕ РЕШАЕТ!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.04.2012, 14:37   #9
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Э нет. Так не пойдёт.
Да уж... Всегда недолюбливал абстрактные задачи, так как непонятно, зачем мы это все делаем. Думаю если бы задача имела некоторую интерпритацию, так сказать "отражение" на реальный мир, я бы этой ошибки не сделал.

Опять же, постановка задачи некорректна. Если заострить внимание на слове "переставить", то мой первый вариант вполне подходит.

А вообще, по большему счету, сдали задачу и ладно Не первая она, такая нехорошая, и точно не последняя.
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 02.04.2012, 14:52   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

whatever, согласен с Вами.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерные массивы(матрица) 2)Строковые массивы(строки): 3)Структуры nuriyat Помощь студентам 1 21.01.2012 16:16
Двумерные массивы(массивы указателей на массивы) krytishka99 Помощь студентам 1 29.12.2011 19:51
указатели на массивы и массивы указателей blacktener Общие вопросы C/C++ 16 13.06.2011 20:45
Динамические массивы и массивы варианты N@stya Помощь студентам 0 11.06.2010 21:09
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12