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

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

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

> Строковый тип данных
Lesnik
сообщение 18.12.2006 20:25
Сообщение #1


Новичок
*

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

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


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

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

Тому, кто поможет, скажу ОГРОМНОЕ спасибо и буду ставить + в репутацию до конца недели smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 15)
мисс_граффити
сообщение 18.12.2006 22:21
Сообщение #2


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

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

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


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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lesnik
сообщение 18.12.2006 22:32
Сообщение #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 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 19.12.2006 0:43
Сообщение #4


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

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

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


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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lesnik
сообщение 19.12.2006 0:57
Сообщение #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 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 19.12.2006 1:13
Сообщение #6


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

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

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


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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lesnik
сообщение 19.12.2006 9:33
Сообщение #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 - 19.12.2006 9:36
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 19.12.2006 10:08
Сообщение #8


Профи
****

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

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


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


Новичок
*

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

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


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

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

Даже с ридлн выкидывает.
При альт+ф5 я вжу просто пустой экран
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.12.2006 11:40
Сообщение #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 элементов - тот же "пузырек"...
 К началу страницы 
+ Ответить 
Lesnik
сообщение 19.12.2006 12:12
Сообщение #11


Новичок
*

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

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


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



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

Перед
Код

if i<=length(text) then begin
?



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


Гость






Нет... Перед
   For i:=1 to n do
Writeln(words[i]);
 К началу страницы 
+ Ответить 
Lesnik
сообщение 19.12.2006 23:10
Сообщение #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 
 К началу страницы 
+ Ответить 
Lesnik
сообщение 20.12.2006 0:13
Сообщение #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 - 20.12.2006 0:13
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 20.12.2006 0:15
Сообщение #15


Профи
****

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

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


потому что t-byte, а words[i] - string. Сделай t тоже string.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lesnik
сообщение 20.12.2006 0:21
Сообщение #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.06.2025 7:02
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"