Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> строгая очередность из 0, 1 и 2 
:(
    Опции темы
Delian
Дата 20.11.2011, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 20.11.2011

Репутация: нет
Всего: нет



Привет! Такая задачка в паскале
Из чисел 0, 1, 2, находящихся в различной последовательности, сделать строгую очередность из 0, 1 и 2. При этом сортировку не применять. Вывести результаты. Затем удалить по одному граничащему значению.


Необходимо переписать числовые данные из текстового файла в:
1.     одномерный массив,
2.     типизированный файл,
3.     линейный динамический список.

выполнить в виде трех процедур, не связанных между собой.Так как исходные данные будут записаны в памяти тремя различными способами, то и подход к решению одной и той же задачи будет различен. 


Вот вроде очередность:

Код

uses crt;
const max=100;
var a:array[1..max] of byte;
    n,i,j,k,x:byte;
begin
clrscr;
randomize;
repeat
write('Размер массива до ',max,' n=');
readln(n);
until n in [1..max];
writeln('Исходный массив:');
for i:=1 to n do
 begin
  a[i]:=random(3);
  write(a[i],' ');
 end;
writeln;
writeln;
{0 вперед}
k:=0;
for i:=1 to n do
if a[i]=0 then
  begin
    k:=k+1;
    x:=a[i];
    for j:=i downto k+1 do
    a[j]:=a[j-1];
    a[k]:=x;
  end;
{2 в конец}
k:=0;
for i:=n downto 1 do
if a[i]=2 then
  begin
    k:=k+1;
    x:=a[i];
    for j:=i to n-k do
    a[j]:=a[j+1];
    a[n-k+1]:=x;
  end;
writeln('Перестановка:');
for i:=1 to n do
write(a[i],' ');
readln
end.


Как дальше написать программу по заданию?
PM MAIL   Вверх
ФедосеевПавел
Дата 20.11.2011, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 2
Всего: 10



Полагаю, что здесь для каждого типа структуры (массив, список, файл) алгоритм такой:
1. В первом проходе посчитать количество вхождений каждого числа в структуру. Получим n0, n1 и n2 - количество 0, 1 и 2 в структуре.
2. Вторым проходом, записать в эту структуру n0 - 0, n1 - 1 и n2 - 2.

Т.е. для массива это будет:
Код

var
  NN : array [0..2] of integer; {массив с количеством появлений значений 0..2}
.......................................
  {инициализация массива NN}
  for i:=0 to 2 do
    NN[i]:=0;
  {заполнение массива NN}
  for i:=1 to n do
    Inc(NN[ a[i] ]);
  {псевдосортировка исходного массива - сортировка подсчётом}
  i:=1;
  for k:=0 to 2 do
    for j:=1 to NN[k] do
    begin
      a[i]:=k;
      Inc(i);
    end;


В файл запись ещё проще - не учитываешь индекс i, просто записываешь.
Динамический список - среднее между файлом и массивом (к следующему элементу переходишь "вручную", но индекс не используешь).

Местный FAQ почему-то сегодня не открывается, поэтому "отправляю" подальше.
Справка по спискам и ещё. По файлам где-нибудь там же найдёшь. Чтение из файла в массив или динамический список многократно обсуждался на этом и на других форумах.

Это сообщение отредактировал(а) ФедосеевПавел - 20.11.2011, 18:18
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0830 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.