IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Строковый тип данных
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Вводится строка из слов, разделённых пробелами или запятыми.
Разбить строку на слова и вывести их на экран в алфовитном порядке.

Просмотрел в FAQ методы сортировок и не совсем понял какая нужна. Надо делать без функций и процедур. Программа должна быть без лишних наворотов.

Тому, кто поможет, скажу ОГРОМНОЕ спасибо и буду ставить + в репутацию до конца недели smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


ну, допустим, + ты ставить не сможешь при всем желании.
сортировка подойдет любая, выдернуть код из функций/процедур и запихнуть в основную программу - не проблема.
для начала - разбей на слова.
с этим ты разобрался?
как разбиваешь? в массив засовываешь или по-другому?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Цитата(мисс_граффити @ 18.12.2006 22:21) *

ну, допустим, + ты ставить не сможешь при всем желании.

Значит только спасибо smile.gif

Я выбрал этот способ
Код

const

   limits = [#0..#32,'.',',',':',';','!','?','"'];
type

   TWords = array[1..40] of string;

var
   text : string;
   words : TWords;

function GetWords(s : string; var w : TWords) : byte;
var
   i,back,n : byte;
begin
   i := 1;
   n := 0;
   while(i<=length(s)) do begin
      while(i<=length(s)) and (s[i] in limits) do
       inc(i);
      if i<=length(s) then begin
         back := i;
         while(i<=length(s)) and not(s[i] in limits) do
          inc(i);
         inc(n);
         w[n] := copy(s, back, i-back);
      end;
   end;

   GetWords := n;
end;


Вроде покороче будет.

Мы эту тему только начали изучать и мне досталась эта задача sad.gif
Код, который в функции надо вставить в основную программу как я понял?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


ну да.
вставляй.
и допиши ввод строки и вывод массива слов на экран (работаешь как с обычным массивом: в цикле выводишь каждый из элементов), тогда пойдем дальше.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Цитата(мисс_граффити @ 19.12.2006 0:43) *

ну да.
вставляй.
и допиши ввод строки и вывод массива слов на экран (работаешь как с обычным массивом: в цикле выводишь каждый из элементов), тогда пойдем дальше.



Код

program COK;
uses crt;
const

   limits = [#0..#32,'.',' '];
type

   TWords = array[1..40] of string;

var
   text : string;
   words : TWords;
   i,back,n : byte;
begin
For i:=1 to 40 do
begin
Readln(text);
twords[i]:=text;
end;
   i := 1;
   n := 0;
   while(i<=length(s)) do begin
      while(i<=length(s)) and (s[i] in limits) do
       inc(i);
      if i<=length(s) then begin
         back := i;
         while(i<=length(s)) and not(s[i] in limits) do
          inc(i);
         inc(n);
         w[n] := copy(s, back, i-back);
      end;
For i:=1 to 40 do
Writeln(twords[i]);


      end.

Получилось так.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


хорошо, следующее задание: сделать, чтобы это работало.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Цитата(мисс_граффити @ 19.12.2006 1:13) *

хорошо, следующее задание: сделать, чтобы это работало.


Код

program COK;
uses crt;
const

   limits = [#0..#32,'.',' '];
type

   TWords = array[1..40] of string;

var
   text : string;
   words : TWords;
   i,back,n : byte;
begin
For i:=1 to 40 do
begin
Read(text);
words[i]:=text;
end;
   i := 1;
   n := 0;
   while(i<=length(text)) do begin
      while(i<=length(text)) and (text[i] in limits) do
       inc(i);
      if i<=length(text) then begin
         back := i;
         while(i<=length(text)) and not(text[i] in limits) do
          inc(i);
         inc(n);
         words[n] := copy(text, back, i-back);
      end;
For i:=1 to 40 do
Writeln(words[i]);

end;
      end.

Запускается, но не выводит. Наверное, неправильно рассавил ввод и вывод.

Сообщение отредактировано: Lesnik -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Да нет, все должно работать. Может Alt-F5 надо или Readln; в конце программы. Осталось только сортировку, берешь вот отсюда Методы сортировок любую.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Цитата(Malice @ 19.12.2006 10:08) *

Да нет, все должно работать. Может Alt-F5 надо или Readln; в конце программы. Осталось только сортировку, берешь вот отсюда Методы сортировок любую.

Даже с ридлн выкидывает.
При альт+ф5 я вжу просто пустой экран
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Правильно... Ты печатаешь 40 строк (большинство из них - пустые), высота экрана = 25 строк... Что ты увидишь?

Вот это запусти:
program COK;
uses crt;
const

limits = [#0..#32,'.'];
type

TWords = array[1..40] of string;

var
text : string;
words : TWords;
i,back,n : byte;
begin
readln(text);
i := 1;
n := 0;
while(i<=length(text)) do begin
while(i<=length(text)) and (text[i] in limits) do inc(i);
if i<=length(text) then begin
back := i;
while(i<=length(text)) and not(text[i] in limits) do inc(i);
inc(n);
words[n] := copy(text, back, i-back);
end;
end;

For i:=1 to n do
Writeln(words[i]);

end.

Для того, чтобы отсортировать слова - просто ПЕРЕД выводом поставь еще любую сортировку, для 40 элементов - тот же "пузырек"...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 19.12.2006 11:40) *



Для того, чтобы отсортировать слова - просто ПЕРЕД выводом поставь еще любую сортировку, для 40 элементов - тот же "пузырек"...

Перед
Код

if i<=length(text) then begin
?



 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Нет... Перед
   For i:=1 to n do
Writeln(words[i]);
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Такс
если я выбрал этот метод сортировки
Код

Type
  arrType = Array[1 .. n] Of Integer;

Procedure Bubble(Var ar: arrType; n: integer);
Var i, j, T: Integer;
Begin
  For i := 1 To n Do
    For j := n DownTo i+1 Do
      If ar[Pred(j)] > ar[j] Then Begin { < }
        T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T
      End
End;

Он подойдёт?

Если его отделять от процедуры, то он будет выглядеть так?
Код

Type
  arrType = Array[1 .. n] Of Integer;
var
ar:arrtype;
n,t:integer;
Begin
  For i := 1 To n Do
    For j := n DownTo i+1 Do
      If ar[Pred(j)] > ar[j] Then Begin { < }
        T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T
      End
End;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Вот, что получилось



Код

program COK;
uses crt;
const

   limits = [#0..#32,' ',','];
type

   TWords = array[1..40] of string;

var
   text : string;
   words : TWords;
   t,i,j,back,n : byte;
begin
clrscr;
   readln(text);
   i := 1;
   n := 0;
   while(i<=length(text)) do begin
      while(i<=length(text)) and (text[i] in limits) do inc(i);
      if i<=length(text) then begin
         back := i;
         while(i<=length(text)) and not(text[i] in limits) do inc(i);
         inc(n);
         words[n] := copy(text, back, i-back);
      end;
   end;


Begin
  For i := 1 To n Do
    For j := n DownTo i+1 Do
      If words[Pred(j)] > words[j] Then Begin { < }
        T := words[Pred(j)];
        words[Pred(j)] := words[j];
        words[j] := T
      End;
End;

   For i:=1 to n do
     Writeln(words[i]);

end.

T := words[Pred(j)]; - тут выдаёт ошибку

Сообщение отредактировано: Lesnik -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


потому что t-byte, а words[i] - string. Сделай t тоже string.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Цитата(Malice @ 20.12.2006 0:15) *

потому что t-byte, а words[i] - string. Сделай t тоже string.

Я вместо Т продолжил использовать text.
Всё работает. Всем ОГРОМНОЕ спасибо (как и обещал ;)) и give_rose.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.04.2024 18:57
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name