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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2010, 21:36   #1
immortal12388
Пользователь
 
Регистрация: 28.11.2010
Сообщений: 16
По умолчанию

Добрый день коллеги.
Прошу помочь с решением программы.
"Дана английская фраза слов, разделенная хотя бы одним пробелом. Расположить слова по одному в каждой строчке и упорядочить слова по алфавиту. Вывести исходную строку и результат обработки строки".
К исходной программе нехватает сортировки по алфавиту.

Код:
program Project3;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;

var input, collect: String;
    len, i: Integer;
    c: Char;
 
begin
  { TODO -oUser -cConsole Main : Insert code here }
  WriteLn('Input text:');
  ReadLn(input);
  if Length(input) = 0 then Exit;
 
  input := input + ' ';
  len := Length(input);
  collect := '';
  for i := 1 to len do begin
    c := input[i];
    if (c = ' ')       if collect <> '' then begin
        WriteLn(collect);
        collect := '';
      end;
    end else begin
      collect := collect + input[i];
    end;
  end;
  ReadLn;
end.
Помогите реализовать сортировку

Последний раз редактировалось Stilet; 29.11.2010 в 13:30.
immortal12388 вне форума Ответить с цитированием
Старый 28.11.2010, 23:06   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Сортировать нечего, у Вас слова не сохраняются. Выводятся на экран, но не сохраняются.
Вместо одной переменной используйте массив для хранения слов. Отсортировать уже его будет не сложно.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 29.11.2010, 12:07   #3
immortal12388
Пользователь
 
Регистрация: 28.11.2010
Сообщений: 16
По умолчанию

Сделал через массив, но не совсем понимаю как сделать сортировку. Т е сравнивать каждый элемент слова(массива) с каждым другим элементом слова.

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

Var a: array [1..50] of string;
      b: string;
      i: integer;
      c: string;
begin
  writeln ('Vvedite text:');
  readln(b);
  b:=b+' ';
  for i:=1 to length (b) do
  begin
   //writeln(b[i]);         //izmenit' na if (b[i])=;

  if b[i]= ' ' then writeln (c);
  if b[i]= ' ' then c:=''
  else  c:= c+b[i];
  end;
  readln;
end.

Последний раз редактировалось Stilet; 29.11.2010 в 13:32.
immortal12388 вне форума Ответить с цитированием
Старый 29.11.2010, 12:33   #4
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Псевдокод

Код:
Вход: массив A, состоящий из элементов A[1], A[2], ..., A[n]

t := истина
цикл пока t:
  t := ложь
  цикл для j = 1, 2, ..., n − 1:
    если A[j] > A[j+1], то:
      обменять местами элементы A[j] и A[j+1]
      t := истина
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 29.11.2010, 12:37   #5
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

В чем проблема? Строки отсортируйте например пузырьковой сортировкой. Или проблемы с реализацией? Тогда в поиск идите
P.S. И код оформляйте в специальных тегах - это правило все-таки
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 29.11.2010, 12:39   #6
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

(********************************** *********************************** ********
* A simple bubble sort program. Reads integers, one per line, and prints *
* them out in sorted order. Blows up if there are more than 49. *
*********************************** *********************************** *******)
Код:
PROGRAM Sort(input, output);
    CONST
        (* Max array size. *)
        MaxElts = 50;
    TYPE 
        (* Type of the element array. *)
        IntArrType = ARRAY [1..MaxElts] OF Integer;

    VAR
        (* Indexes, exchange temp, array size. *)
        i, j, tmp, size: integer;

        (* Array of ints *)
        arr: IntArrType;

    (* Read in the integers. *)
    PROCEDURE ReadArr(VAR size: Integer; VAR a: IntArrType);
        BEGIN
            size := 1;
            WHILE NOT eof DO BEGIN
                readln(a[size]);
                IF NOT eof THEN 
                    size := size + 1
            END
        END;

    BEGIN
        (* Read *)
        ReadArr(size, arr);

        (* Sort using bubble sort. *)
        FOR i := size - 1 DOWNTO 1 DO
            FOR j := 1 TO i DO 
                IF arr[j] > arr[j + 1] THEN BEGIN
                    tmp := arr[j];
                    arr[j] := arr[j + 1];
                    arr[j + 1] := tmp;
                END;

        (* Print. *)
        FOR i := 1 TO size DO
            writeln(arr[i])
    END.
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 29.11.2010, 12:41   #7
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Достаточно вот этого куска

Код:
 FOR i := size - 1 DOWNTO 1 DO
            FOR j := 1 TO i DO 
                IF arr[j] > arr[j + 1] THEN BEGIN
                    tmp := arr[j];
                    arr[j] := arr[j + 1];
                    arr[j + 1] := tmp;
                END;
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 29.11.2010, 12:45   #8
immortal12388
Пользователь
 
Регистрация: 28.11.2010
Сообщений: 16
По умолчанию

Цитата:
Сообщение от andrewpalkin Посмотреть сообщение
Псевдокод

Код:
Вход: массив A, состоящий из элементов A[1], A[2], ..., A[n]

t := истина
цикл пока t:
  t := ложь
  цикл для j = 1, 2, ..., n − 1:
    если A[j] > A[j+1], то:
      обменять местами элементы A[j] и A[j+1]
      t := истина
Спасибо, но честно говоря не совсем понятно, хотя цикл пока нам объясняли, только хреново

Цитата:
Сообщение от alex_fcsm Посмотреть сообщение
Достаточно вот этого куска

Код:
 FOR i := size - 1 DOWNTO 1 DO
            FOR j := 1 TO i DO 
                IF arr[j] > arr[j + 1] THEN BEGIN
                    tmp := arr[j];
                    arr[j] := arr[j + 1];
                    arr[j + 1] := tmp;
                END;
Спасибо большое! Сейчас попробую

Последний раз редактировалось Stilet; 29.11.2010 в 13:33.
immortal12388 вне форума Ответить с цитированием
Старый 29.11.2010, 12:48   #9
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Цитата:
Сообщение от immortal12388 Посмотреть сообщение
Спасибо, но честно говоря не совсем понятно, хотя цикл пока нам объясняли, только хреново
Вам готовый код предложили, просто подставьте свои переменные
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 29.11.2010, 12:48   #10
immortal12388
Пользователь
 
Регистрация: 28.11.2010
Сообщений: 16
Радость

Цитата:
Сообщение от andrewpalkin Посмотреть сообщение
(********************************** *********************************** ********
* A simple bubble sort program. Reads integers, one per line, and prints *
* them out in sorted order. Blows up if there are more than 49. *
*********************************** *********************************** *******)
Код:
PROGRAM Sort(input, output);
    CONST
        (* Max array size. *)
        MaxElts = 50;
    TYPE 
        (* Type of the element array. *)
        IntArrType = ARRAY [1..MaxElts] OF Integer;

    VAR
        (* Indexes, exchange temp, array size. *)
        i, j, tmp, size: integer;

        (* Array of ints *)
        arr: IntArrType;

    (* Read in the integers. *)
    PROCEDURE ReadArr(VAR size: Integer; VAR a: IntArrType);
        BEGIN
            size := 1;
            WHILE NOT eof DO BEGIN
                readln(a[size]);
                IF NOT eof THEN 
                    size := size + 1
            END
        END;

    BEGIN
        (* Read *)
        ReadArr(size, arr);

        (* Sort using bubble sort. *)
        FOR i := size - 1 DOWNTO 1 DO
            FOR j := 1 TO i DO 
                IF arr[j] > arr[j + 1] THEN BEGIN
                    tmp := arr[j];
                    arr[j] := arr[j + 1];
                    arr[j + 1] := tmp;
                END;

        (* Print. *)
        FOR i := 1 TO size DO
            writeln(arr[i])
    END.
Спасибо коллеги
immortal12388 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
работа со строками mansp Помощь студентам 0 23.11.2010 21:02
Работа со строками(C++) DragoonSki Помощь студентам 1 18.05.2010 18:08
Работа со строками Nividimka Помощь студентам 11 03.03.2007 15:58