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

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

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

 
 Ответить  Открыть новую тему 
> PASCAL: текстовые задачи и файлы
сообщение
Сообщение #1


Новичок
*

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

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


№1.
Расставить слова в каждом предложении в алфавитном порядке и одновременно рассортировать предложения по возрастанию количества слов в каждом.

ПРИМЕР:
дано: Жили, жили не тужили дед да бабка.(7 слова) Долго они жили и счастливо.(5 слов)
требуемый результат: Долго жили и они счастливо. Бабка да дед жили жили не тужили.(все слова в обоих предложениях в алфавитном порядке)

Общие указания при составлении программы:
1. Текст стандартного типа String ввести с клавиатуры.
2. Между словами могут быть различные разделители (пробел, запятая, точка и т.д.), которые необходимо задать во множестве.
3. Вывести исходный текст и текст после преобразования его по условию задачи.

№2.
Создать файл f1 из целых чисел. Создать новый файл f2, содержащий неубывающую последовательность файла f1 и включающий в себя минимальный элемент файла f1.

Общие указания при составлении программы:
В данной лабораторной работе необходимо сделать типизированный файл, где каждой компонентой будет число, массив или матрица. Количество компонент заранее не определено, поэтому, при обработке файла необходимо использовать либо булевское значение функции EOF (конец файла), либо значение функции FILESIZE (размер файла).
Сами значения каждой компоненты можно задавать генератором случайных чисел.
Вывод исходного файла и файла с результатами сделать процедурой (и, если файлы одного типа, то одной процедурой).

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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Посмотри прикрепленную тему про разбиения на слова в разделе Задачи.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Теперь у меня проблема. Я смог расставить слова по алфавиту во всем тексте, а мне надо расставить слова по алфавиту отдельно в каждом предложении.
Помогите мне осуществить данную цель, пожалуйста)))
P.S. А рассортировать рассортировать предложения по возрастанию количества слов в каждом я попытаюсь сам)))


var t1, t2:string;
mn:set of char;
a:array[1..50] of string[25];
c:string[25];
kb, ksl, i, k, kp, e:byte;
p:boolean;
begin
readln(t1); t1:=t1+'';
mn:=['.', ' ', ','];
kb:=0; ksl:=0;
for i:=1 to length(t1) do
if not (t1[i] in mn) then inc (kb)
else if kb>0 then
begin
inc(ksl);
a[ksl]:=copy(t1, i-kb, kb);
kb:=0;
end;
k:=ksl;
inc(k);
repeat
p:=true; dec(k);
for i:=1 to k do
if length (a[i])>length (a[i+1]) then
begin
c:=a[i];
a[i]:=a[i+1];
a[i+1]:=c;
p:=false;
end;
until p or (t1[i] in mn);
t2:='';
for i:=1 to ksl do
t2:=t2+a[i]+' ';
writeln('text v alfavitnom poradke', t2);
end.

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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


Чувствуя себя тупым.))НО не могли бы вы мне по-подробней объяснить что именно надо сделать. ПО-больше бы комментариев чтоб я понял.....если вас конечно не затруднит. Подправил чуть код, т.к. он изобиловал кучей ошибок, хотя изменился он от этого не сильно.....)))

[/i]
Код

var t1, t2:string;
mn, mn1:set of char;
a:array[1..50] of string[25];
c:string[25];
kb, kp, ksl, i, k:byte;
p:boolean;
begin
  readln(t1); t1:=t1+'';
  mn1:=['.', '!', '?'];
  mn:=[' ', ',', '-', ':', ';'];
  kp:=0;
  kb:=0; ksl:=0;
  for i:=1 to length(t1)  do
  if  (t1[i] in mn1) then inc (kp);  writeln('kol-vo pred =', kp);{считаю кол-во предложений}

  for i:=1 to length(t1)  do
  if not (t1[i] in mn) then inc (kb)
  else if kb>0 then{пустые слова не берем}
    begin
      inc(ksl);{счетчик слов}
      a[ksl]:=copy(t1, i-kb, kb);
      kb:=0;
    end;
  k:=ksl;
  repeat{сортируем в алфавитном порядке}
    p:=true; dec(k);
    for i:=1 to k do
      if (a[i])>(a[i+1]) then {сравниваем сами слова}
        begin
          c:=a[i];
          a[i]:=a[i+1];
          a[i+1]:=c;
          p:=false;
        end;
      until p;
  t2:='';
  for i:=1 to ksl do
  t2:=t2+a[i]+' ';
  writeln('text v alfavitnom poradke   ', t2);
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


?
***

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

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


может лудже всего будет следовать такому алгоритму

1 ищем позицию (pos) входа разделительного знака(пробела запятой)ж
2 копируем от начала до pos-1 в какуюту переменную (так мы виделим вхождение слова)ж
3 переносим переменную в массив
4 удаляем от начала до pos
5 удаляем пробел (вдруг у нас после слова стояла запятя) (в делфи есть процедура тримлефл если в паскале нету то могу написать)

етот цикл делаем до тех пор пока pos cтанет равно 0 (тоесть строка закончилась).

Теперь сортируем массив

и выводим его

PS если нужно отдель2 предложения то вставляем такой анализ если символ равен точке то начинаем новый массив и тогда сортируем 2 массива
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата
xxBOBAHxx
, ты сначала с заданием все вопросы реши, а потом будешь реализовывать, договорились? Тебе понятно задание от начала и до конца? Мне вот - не совсем... Смотри:
Цитата
2. Между словами могут быть различные разделители (пробел, запятая, точка и т.д.), которые необходимо задать во множестве.
Почему не указано что именно должно происходить с НЕпробельными разделителями в предложении после сортировки слов по алфавиту? Если как минимум 2 варианта:
1) удалить все лишние разделители и оставить по одному пробелу;
2) оставить все разделители на местах, поменять местами только сами слова (довольно часто именно этот вариант встречается на форумах, я специально для таких случаев добавил выделение слов в массив записей - пост №6 в прикрепленной теме)...
 К началу страницы 
+ Ответить 

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

 





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