Вопрос № 181090: Здравствуйте уважаемые эксперты, помогите пожалуйста написать программу на языке паскаль: Задана произвольная строка, упорядочить слова в порядке убывания количества вхождений. ...
Вопрос № 181090:
Здравствуйте уважаемые эксперты, помогите пожалуйста написать программу на языке паскаль: Задана произвольная строка, упорядочить слова в порядке убывания количества вхождений.
Отвечает Andrew Kovalchuk (Профессионал) :
Здравствуйте, Посетитель - 349082! Ниже приведено решение с замечанием. Предлагаемое решение проверено в TP 7.0
Код:
{ Задана произвольная строка, упорядочить слова в порядке убывания количества вхождений.
Замечание:
предполагается, что слово - это любая последовательность символов разделенных пробелами либо ограниченная началом и/или концом строки. } uses crt; const test = 'ccc a bb a bb a'; max = 128; var st, w: string; words: array[1..max] of string; count: array[1..max] of byte; maxi, i, j, c: byte; isnew: boolean;
procedure checkWord(w: string); begin if w <> '' then begin isnew
:= true; for i:=1 to maxi do begin if words[i] = w then begin inc(count[i]); isnew := false; break; end; end; if isnew then begin inc(maxi); words[maxi] := w; count[maxi] := 1; end; end; end;
begin {init} clrscr; { write('type string:'); readln(st); } st := test;
write(st); maxi := 0; for i:=1 to max do begin words[i] := ''; count[i] := 0; end; {solve} While
pos(' ', st) > 0 do begin w := copy(st, 1, pos(' ', st)-1); delete(st, 1, pos(' ', st)); checkWord(w); w := ''; end; checkWord(st); {sort} for i:=1 to maxi-1 do for j:=i+1 to maxi do if count[i] < count[j] then begin w := words[i]; c := count[i]; words[i] := words[j]; count[i] := count[j]; words[j] := w; count[j] := c; end; {re
sult} writeln; for i:=1 to maxi do begin write(words[i], ':', count[i], ' '); end; {wait} writeln; write('Done. Press any key...'); readkey; end.
----- Временная неудача лучше временной удачи
Ответ отправил: Andrew Kovalchuk (Профессионал)
Ответ отправлен: 03.12.2010, 19:25
Номер ответа: 264511
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 264511
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.