Задача по Turbo Pascal

Ответить
assis2007
Сообщения: 79
Зарегистрирован: 04 ноя 2007, 19:17

смысл задачи заключается в том что вводится текст потом выводится слово которое повторяется наибольшее число раз. Например: ва ма ка ма. Ответ ма
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Вроде так:
[syntax='Delphi']
const
N=100;

var
words:array[1..N]of string;
s:string;
wd:string;
i,j:integer;
index:integer;
count:integer;
cnt:integer;
max:integer;

function ParceText(txt:string):integer;
var l,c:integer;
begin
c:=0;
l:=length(txt);
for i:=1 to l+1 do
begin
if ((txt<>' ')and(i<>l+1)) then
wd:=wd+txt
else
begin
inc(c);
words[c]:=wd;
wd:='';
end;
end;
ParceText:=c;
end;

begin
writeln('Введите текст:');
readln(s);
count:=ParceText(s);
for i:=1 to count do
begin
cnt:=0;
for j:=1 to count do
if words[j]=words then inc(cnt);
if cnt>max then
begin
max:=cnt;
index:=i;

end;
end;

writeln('Чаще всего встречается слово "',words[index],'"');
readln;
end.
[/syntax]
Ни что так не ограничивает фантазию программиста, как компилятор...
assis2007
Сообщения: 79
Зарегистрирован: 04 ноя 2007, 19:17

Пасиб большое сейчас буду вводить всевозможные тесты
assis2007
Сообщения: 79
Зарегистрирован: 04 ноя 2007, 19:17

Нашёл ошибочку при вводе : v d e g j i программа выводит v т.е первый символ. И ещё что значит в выводе ответа вот это '"' если я убираю это то прога отказывается компилироваться
C_O_D_E
Сообщения: 296
Зарегистрирован: 13 фев 2008, 20:10
Откуда: Беларусь. Орша
Контактная информация:

assis2007 писал(а): И ещё что значит в выводе ответа вот это '"' если я убираю это то прога отказывается компилироваться
'"' можно заменить на ' '
Это вводиться для того, чтобы при выводе все слова не сливались в обно целое (т.е. используется, как разделитель.)
Если назначен специальный человек для контроля за чистотой исходной информации, то найдется изобратательный идиот, который придумает способ, чтобы неправильная информация прошла этот контроль.
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

2 assis2007
Это не ошибка.
Если задача формируется так как указали вы, то предполагается, что есть слово, которое встречается более одного раза, в противном случае, раз не оговорено иное, вполне допустимо вывести первое слово.

2 C_O_D_E
В данном случае '"' это кавычка, чтобы результат имел вид

Код: Выделить всё

Чаще всего встречается слово "слово"
Если это не подходит, можно просто заменить всю строку на
[syntax='Delphi']
Writeln(words[index]);
[/syntax]
Ни что так не ограничивает фантазию программиста, как компилятор...
C_O_D_E
Сообщения: 296
Зарегистрирован: 13 фев 2008, 20:10
Откуда: Беларусь. Орша
Контактная информация:

MOTOCoder. доброй ночи. Честно признаться, я даж внимания не обратила на кавычки, просто по коду посмотрела, что вроде можно вывести несколько слов, а потом прочитала условие!! так что прошу прощения за инкорректную информацию.
Если назначен специальный человек для контроля за чистотой исходной информации, то найдется изобратательный идиот, который придумает способ, чтобы неправильная информация прошла этот контроль.
assis2007
Сообщения: 79
Зарегистрирован: 04 ноя 2007, 19:17

Хорошо вопрос ставится по другому вводится текст потом выводятся слова которые повторяются наибольшее число раз
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Тогда так:
[syntax='Delphi']
const
N=100;

var
words:array[1..N]of string;
w:array[1..N]of string;
cn,k:integer;
s:string;
wd:string;
i,j:integer;
index:integer;
count:integer;
cnt:integer;
max:integer;
wc:integer;
b:boolean;

function ParceText(txt:string):integer;
var l,c:integer;
begin
c:=0;
l:=length(txt);
for i:=1 to l+1 do
begin
if ((txt<>' ')and(i<>l+1)) then
wd:=wd+txt
else
begin
inc(c);
words[c]:=wd;
wd:='';
end;
end;
ParceText:=c;
end;

begin
writeln('Введите текст:');
readln(s);
count:=ParceText(s);
for i:=1 to count do
begin
cnt:=0;
for j:=1 to count do
if words[j]=words then inc(cnt);
if cnt>max then
begin
max:=cnt;
index:=i;
end;
end;

writeln;
writeln('Чаще всего встречаются слова:');

for i:=1 to count do
begin
wc:=0;
for j:=1 to count do
if words=words[j] then
inc(wc);
if wc=max then
begin
b:=true;
for k:=1 to cn do
if w[k]=words then
b:=false;
if b then
begin
writeln(words);
inc(cn);
w[cn]:=words;
end;
end;
end;

readln;
end.
[/syntax]
Ни что так не ограничивает фантазию программиста, как компилятор...
assis2007
Сообщения: 79
Зарегистрирован: 04 ноя 2007, 19:17

О пасиб у меня вопрос ещё функцция ParceText что она считает? количество слов в тексте?
Ответить