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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2014, 21:33   #1
maxim1592
Новичок
Джуниор
 
Регистрация: 27.05.2014
Сообщений: 60
По умолчанию Задан одномерный массив

Задан одномерный массив, в котором каждый элемент равен 0, 1 или 2. Не создавая дополнительного массива, переставить элементы исходного массива так, чтобы сначала располагались все 1, затем все 0 и, наконец все 2
maxim1592 вне форума Ответить с цитированием
Старый 27.05.2014, 22:23   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

http://www.pascal.helpov.net/index/o...al_programming
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 28.05.2014, 00:09   #3
maxim1592
Новичок
Джуниор
 
Регистрация: 27.05.2014
Сообщений: 60
По умолчанию

а пример можно, а то там информации много, а собрать ее в программу сложновато...
maxim1592 вне форума Ответить с цитированием
Старый 28.05.2014, 00:14   #4
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Заполнение массива под вашу задачу:
Код:


Var 
 A: array [1..10] of integer; 
 I : byte ; {переменная I вводится как индекс массива} 
Begin 
  For i :=1 to 10 do 
    A [ i ]:= random (2); { i -му элементу массива присваивается «случайное» целое число в диапазоне от 0 до 2}
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 28.05.2014, 14:37   #5
maxim1592
Новичок
Джуниор
 
Регистрация: 27.05.2014
Сообщений: 60
По умолчанию

а как сделать чтобы переставляла элементы по группам?
maxim1592 вне форума Ответить с цитированием
Старый 28.05.2014, 20:04   #6
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Код:
{Задан одномерный массив, в котором каждый элемент равен 0, 1 или 2.
Не создавая дополнительного массива, переставить элементы исходного массива
так, чтобы сначала располагались все 1, затем все 0 и, наконец все 2}

const
    m = 10;
 
var
    arr: array[1..m] of integer;
    i, j, k: integer;
 
begin
    randomize;
 
    write ('Исходный массив: ');
    for i := 1 to m do begin
        arr[i] := random(3);
        write (arr[i]:4);
    end;
    writeln; writeln;


    for i := 1 to m-1 do
        for j := 1 to m-i do
            if arr[j] > arr[j+1] then begin
                k := arr[j];
                arr[j] := arr[j+1];
                arr[j+1] := k
            end;

    write ('Отсортированный массив: ');
    for i := 1 to m do
        write (arr[i]:4);

    writeln;

readln
end.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 28.05.2014, 22:36   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

коллега, не пойдёт.
Вы не обратили внимание, но там обычная сортировка не катит!
Цитата:
чтобы сначала располагались все 1, затем все 0 и, наконец все 2
я бы перехитрил сортировку так:
Код:
    for i := 1 to m-1 do
        for j := 1 to m-i do
            if (((arr[j]=0) or (arr[j]=2)) and (arr[j+1] = 1))
                  or ((arr[j]<>1) and (arr[j]>arr[j+1])) then begin
                k := arr[j];
                arr[j] := arr[j+1];
                arr[j+1] := k
            end;
...
хотя, подозреваю, что задача решается намного эффективнее, буквально за один проход по массиву.

например, так:
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.05.2014, 22:42   #8
maxim1592
Новичок
Джуниор
 
Регистрация: 27.05.2014
Сообщений: 60
По умолчанию

спасибо большое, тоже сразу не заметил
maxim1592 вне форума Ответить с цитированием
Старый 28.05.2014, 22:55   #9
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
const nmax=10;
var 
  a:array[1..nmax] of byte;
  i,a1,a2,a0,n:byte;
begin
  Randomize;
  readln(n);
  a1:=0;a2:=0;a0:=0;
  for i:=1 to n do 
  begin
    a[i]:=random(3);
    if a[i]=0 then inc(a0)
    else if a[i]=1 then inc(a1)
      else inc(a2);
    write(a[i]:2);
  end;
  writeln;
  for i:=1 to n do 
  begin
    if i<=a1 then a[i]:=1
      else if i<=a1+a0 then a[i]:=0
        else a[i]:=2;
    write(a[i]:2);
  end;
end.
Цитата:
5
1 0 2 2 0
1 0 0 2 2
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 28.05.2014, 23:01   #10
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Да, каюсь, не увидел. В голове отчего-то тумкнуло 0,1,2
Спасибо.
ZX Spectrum-128 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# Задан одномерный массив из 300 элементов Dexet Помощь студентам 0 23.12.2013 22:27
Задан одномерный массив Delphi artimed Помощь студентам 4 18.12.2011 14:20
Задан целочисленный одномерный массив A из N элементов. Найти номер последне Vladimir Ryabov Фриланс 5 01.11.2011 13:21
С# задан массив 5х5. сформировать массивы А и В. в массив А поместить элементы с четными индексами, в массив В с нечетны Koksa Помощь студентам 0 10.10.2011 11:26
задан одномерный массив.. Avvakymova Паскаль, Turbo Pascal, PascalABC.NET 2 13.05.2011 08:03