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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2015, 11:53   #1
VladKB1
Форумчанин
 
Регистрация: 21.05.2014
Сообщений: 121
Радость Меньшее из частейших (TurboPascal)

Всем привет!

Мне нужно решить задачу, у меня есть частичное решение. Прошу помочь мне решить задачу (условие и решение ниже).

Меньшее из частейших


Прочитайте строку, состоящую из слов, разделённых пробелами. Максимальная длина строки равна 253 символам.

Выведите в файл слово, которое встречается в тексте наибольшее количество раз. Если таких слов несколько, выведите меньшее по алфавиту.

input.txt
aba ac aba de a de

output.txt
aba


сначала я напишу идею решения:

1.В начале задачи мы читаем строку s и все найденные слова поместим в массив c.

2.Далее мы сортируем подсчётом, и считаем сколь раз повторялось слово (если такое есть).
Если смотреть по примеру, то у нас будет массив (например a) состоящий из 4 символов 2,2,1,1.


3.И вместе с этим мы будем добавлять все разные слова в string-овый массив (например массив st). И у нас должно будет
быть 2 массива: 1 массив a:=2,2,1,1 и 2 массив st:=aba,de,ac,a .

4.Потом мы сделаем цикл от 1 до количества цифр в массиве а , и в нём будем подсчитывать сколько одинаковых цифр
есть в начале( если таких нет, переменная подсчёта равна в самом начале 1). Как только следующая цифра не ровна предыдущей,
то прекращаем работу цикла и идём дальше по коду...

5.И в конце делаем цикл от 1 до переменной подсчёта (допустим k) и сравниваем переменную (допустим minS) которая равна
пустой строке с st[i]. И если minS > st[i] то minS:=''; minS:=minS+st[i]; и всё.


6.Потом выводим minS.

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

1.
Код:
readln(s);
 s:=' '+s+' ';

 for i:=2 to length(s)-1 do
 if s[i] <> ' ' then
 begin
  if s[i-1] = ' ' then l:=i;
  if s[i+1] = ' ' then
  begin
   inc(t);
   c[t]:=copy(s,l,i-l+1);
  end;
 end;
4.
Я не знаю как узнать количество цифр в массиве а
Код:
for i:=1 to {количество цифр} do
 if a[i] = a[i] then inc(k) else break;
5.
Код:
for i:=1 to k do
 if minS <= st[i] then
 begin
  minS:='';
  minS:=minS+st[i];
 end;
6.
Код:
writeln(minS);
end.

Всем заранее спасибо!

Последний раз редактировалось VladKB1; 09.03.2015 в 12:11.
VladKB1 вне форума Ответить с цитированием
Старый 09.03.2015, 12:20   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Я за малясь другой подход..
Не нужно сортировать.. Ограничения позволяют каждый раз пробегать массив слов (на самом деле это будет структура из двух полей : string, integer)
Вот и всё..
Код:
ReadLn(s);
s := s + ' ';
i := 1;
wrd := '';
while i <= Length(s) do begin
      if s[i] = ' ' then begin
         <что-то делаем>   
         wrd := ''
      end
      else
           wrd := wrd + s[i]
end
Вот..
Теперь разговор про <что-то делаем>..
Нам нужно пробежаться уже по существующим словам и найти нужное(если его нет, то создать новую запись)..
Код:
for j := 1 to k do 
     if a[i].s = wrd then begin Inc(a[i].cnt); Exit end; // давай занесем это все в процедурку

Inc(k);
a[k].s := wrd; a[k].cnt := 1;
k изначально равно 0..
все
Poma][a вне форума Ответить с цитированием
Старый 09.03.2015, 12:54   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

как всегда, намешано всё в одну кучу.
прежде чем чото делать, план нарисуй и порежь задачу на независимые части.
хотя... кому я это говорю, ёмаё!..
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 09.03.2015, 13:06   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
прежде чем чото делать, план нарисуй и порежь задачу на независимые части.
Там как бэ ужо
Poma][a вне форума Ответить с цитированием
Старый 09.03.2015, 13:15   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Там как бэ ужо
я не это имел в виду. подзадача в моём понимании – это независимая фүнкция.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 09.03.2015, 13:32   #6
VladKB1
Форумчанин
 
Регистрация: 21.05.2014
Сообщений: 121
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Я за малясь другой подход..
Не нужно сортировать.. Ограничения позволяют каждый раз пробегать массив слов (на самом деле это будет структура из двух полей : string, integer)
Вот и всё..
Код:
ReadLn(s);
s := s + ' ';
i := 1;
wrd := '';
while i <= Length(s) do begin
      if s[i] = ' ' then begin
         <что-то делаем>   
         wrd := ''
      end
      else
           wrd := wrd + s[i]
end
Вот..
Теперь разговор про <что-то делаем>..
Нам нужно пробежаться уже по существующим словам и найти нужное(если его нет, то создать новую запись)..
Код:
for j := 1 to k do 
     if a[i].s = wrd then begin Inc(a[i].cnt); Exit end; // давай занесем это все в процедурку

Inc(k);
a[k].s := wrd; a[k].cnt := 1;
k изначально равно 0..
все
Спасибо .Но можно написать код без процедурки? Я уже в одной теме говорил почему нельзя использовать...
И wrd это слово которое выводится в output.txt ?
VladKB1 вне форума Ответить с цитированием
Старый 09.03.2015, 13:55   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Но можно написать код без процедурки?
вам запрещают пользоваться самописными функциями/процедурами?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 09.03.2015, 15:21   #8
VladKB1
Форумчанин
 
Регистрация: 21.05.2014
Сообщений: 121
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
вам запрещают пользоваться самописными функциями/процедурами?
Нет не запрещено. Сейчас объясню. В моём городе есть "Кружок быстрого программирования". В нём я программирую по "программе обучения" (электронный учебник). И в данный момент я на параграфе "Алгоритм поиска слов в текcте. Лексикографический порядок. Процедура continue" А самописные процедуры дальше этого параграфа. Когда дойду до него, то тогда и будет можно использовать (в каждом параграфе есть задачи, вот одна из них).
VladKB1 вне форума Ответить с цитированием
Старый 09.03.2015, 15:29   #9
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Ну тогда используйте while и потом проверяйте по i или оставьте for, но заведите булевскую переменную
Poma][a вне форума Ответить с цитированием
Старый 09.03.2015, 15:31   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Нет не запрещено.
значит можно?
Цитата:
Когда дойду до него, то тогда и будет можно
значит нельзя?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Большее из частейших (TurboPascal) VladKB1 Помощь студентам 8 13.06.2014 23:16
Даны два числа вывести большее, а затем меньшее. (Delphi) nadyaH Помощь студентам 13 28.10.2013 09:19
Определить, сколько членов последовательности с номерами 1,2,4,8,16,.. имеют значение меньшее, чем 0,25 Kat9 Паскаль, Turbo Pascal, PascalABC.NET 0 23.05.2013 11:09
,Даны целые числа K и L. Если числа не равны, то заменить меньшее из них остатком от деления большего на меньшее, а если рав Proskurina Помощь студентам 3 25.03.2013 20:51
Работа со строками.даны три слова.Одно из них имеет меньшее количество символов,чем другое.Определить и в Ashley Помощь студентам 6 01.06.2010 22:08