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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2011, 20:48   #1
izoalex
Пользователь
 
Регистрация: 02.11.2011
Сообщений: 22
Вопрос Динамические структуры данных

у меня задание: Дана непустая последовательность слов, между словами - пробел, за последним словом - точка. Напечатать эти слова по алфавиту.

Я составил код программы, но ее надо было составить с динамическими структурами данных. А у меня она ограничена максимальным кол-ом слов в строке и максимальным кол-ом символов в строке. Помогите сделать динамику))

вот код

Код:
program Project1;
 
const
  //Разделители слов.
  D = ['.',' '];
  //Максимальное количество слов в тексте.
  M = 20;
var
  Arr : array[1..M] of String;
  S, sWord : String;
  i, j, Pos1, Len, LenA : Integer;
  IsExch : Boolean;
begin
  
    Writeln('Введите текст:');
    Readln(S);
 
    //Извлекаем слова и добавляем их в массив.
    Len := Length(S);
    Pos1 := 0;
    j := 0;
    for i := 1 to Len do begin
      //Пропускаем разделители.
      if S[i] in D then Continue;
      //Отслеживаем начало слова.
      if (i = 1) or (S[i - 1] in D) then Pos1 := i;
      //Отслеживаем конец слова.
      if (i = Len) or (S[i + 1] in D) then begin
        //Добавляем слово в массив.
        Inc(j);
        Arr[j] := Copy(S, Pos1, i - Pos1 + 1);
      end;
    end;
    LenA := j;
 
    //Метод сортировки - пузырьковая сортировка.
    for i := LenA - 1 downto 1 do begin
     repeat
       IsExch := False;
       for j := 1 to i do begin
         if Arr[j] > Arr[j + 1] then begin
           SWord := Arr[j];
           Arr[j] := Arr[j + 1];
           Arr[j + 1] := sWord;
         end;
       end;
     until not IsExch;
    end;
 
    Writeln('Перечень слов в алфавитном порядке:');
    for i := 1 to LenA do begin
      if i > 1 then Write(' ');
      Write(Arr[i]);
    end;
    Writeln;
end.

Последний раз редактировалось izoalex; 28.12.2011 в 22:21.
izoalex вне форума Ответить с цитированием
Старый 28.12.2011, 23:01   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

очень важный (я бы даже сказал - принципиальный) вопрос про target компилятор/ОС - Вам под какой именно Паскаль нужно решение с динамикой?

я уже неоднократно писал на форуме (если бы воспользовались поиском по форуму, то наверняка наткнулись бы) о том, что в FPC/Delphi есть абсолютно нормальные динамические массивы - выделяйте память через SetLength - хоть по одному элементу (решение "в лоб"), хоть порциями (если не помещается в массив, в цикле выделяете размер + 100 (это например) слов и дальше)

А вот если идёт про антикварный TurboPascal, то лучшее решение в данном случае - это использовать динамический связанный список (примеров полно на форуме). Недостаток - затруднён прямой доступ к любому элементу списка + бОльшая сложность в реализации (много возни)..

Но, дорогу осилит идущий. Начните - а мы Вам поможем..
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические структуры данных. inc Общие вопросы C/C++ 3 03.12.2012 19:39
динамические структуры данных ильшат9 Помощь студентам 1 12.09.2011 14:17
Динамические структуры данных Drob Общие вопросы C/C++ 0 03.03.2011 18:34
Динамические структуры данных на Си STIGGA Общие вопросы C/C++ 1 05.12.2009 00:50
Динамические структуры данных Yashanov Помощь студентам 1 29.04.2009 10:11