Страница 1 из 2
тип STring
Добавлено: 25 апр 2005, 17:25
Олеся
Помогите, пожалйста!

Нужно решить задачку.
1. Подсчитать,какой процент слов в тексте содержит удвоенную букву.
Вот, что я сделала, но она не идет.
Код: Выделить всё
var s:string;
p:real;
n,k,i:byte;
begin
readln(s);
for i:=1 to length(s) do begin
if s[i]=' ' then n:=n+1;
if s[i]:=s[i+1] then k:=K+1;
end;
p:=(n/k)*0.1;
writeln('p=',p:3:3);
readln;
end.
Добавлено: 25 апр 2005, 19:00
Romeo
Этот алгоритм вычисляет отношение количества всех парных букв в текстве к количеству пробелов. Не совсем верно. Что нужно сделать, чтобы всё заработало?
Во-первых нужно проверять является ли пробел начальным или конечным символа текста и не инкрементировать щётчик пробелов, если это так. В конце выполнения цикла нужно увеличить счётчик пробелов на 1, чтобы получить количество слов.
Во-вторых нужно учитывать что некое слово может содержать несколько удвоенных букв, а считать ведь нам нужно слова, содержащие удвоенные буквы, а не сами пары удвоенных букв. Эту проблему можно решить с помощью введения флажка, хранящего информацию о том, было ли текущее слово уже посчитано или нет. Этот флажок будет сбрасываться, если текущий символ - пробел, и устанавливать, если мы инкрементируем счётчик слов. Причём перед увеличением счётчика слов нужно проверять не только равенство текущего и последующего символов, но и значение флажка. Это позволит не увеличивать лишний раз счётчик слов.
Добавлено: 26 апр 2005, 01:45
Игорь Акопян
возможно опечатка, но во втором if стоит присваивание вместо сравнения - убрать двоеточие.
Ошибки такого рода очень трудно потом найти

Добавлено: 06 май 2005, 15:40
Олеся
Вот задачка.
Найти кол-во слов начинающихся и заканчивающихся на обнуи туже букву.
Код: Выделить всё
var s:string;
k,i:byte;
begin
readln(s);
for i:=1 to length(s) do begin
if (s[i-1]=' ')and (s[1]=s[i]) then k:=K+1;
end;
writeln('k=',k);
readln;
end.
Что-то не идет.
Добавлено: 06 май 2005, 15:52
LAngel
тот, что написан - считает кол-во слов, начинающихся на ту же букву, что и первое, да и только в том случае, если в For, подправить 1 на 2

Добавлено: 06 май 2005, 16:55
AndreykA
приблизительно так можно сделать:
по первой задаче:
Код: Выделить всё
var
s: string;
p:real;
n,k,i:byte;
MyFlag : Boolean;
begin
MyFlag := False;
n := 0; k := 0;
readln(s);
for i:=1 to (length(s) - 1) do
begin
if (s[i] = s[i+1]) and (not MyFlag) and (s[i] <> ' ') then
begin
inc(k);
MyFlag := True;
end;
if (s[i] = ' ') and (s[i+1] <> ' ') then
begin
inc(n);
MyFlag := False;
end;
end;
if k = 0 then p := 0
else p:=((n + 1)/k)*0.1;
writeln('p=',p:3:3);
readln;
end.
по второй задаче:
Код: Выделить всё
var
s, d: string;
k,i:byte;
begin
k := 0;
d := ' ';
readln(s);
if s[1] <> ' ' then d := s[1];
for i := 2 to length(s) do
begin
if ((s[i] = ' ') or (i = length(s))) and (d <> ' ') then
begin
if s[i] <> ' ' then
begin if s[i] = d then inc(k) end
else if (s[i-1] = d) then inc(k);
d := ' ';
end;
if (s[i] <> ' ') and (s[i-1] = ' ')
then d := s[i];
end;
writeln('k=',k);
readln;
end.
во второй не считаются слова из одной буквы (ведь получается что в принципе они начинаются и заканчиваются на одну и тоже, но это вроде не слово, поэтому наверно считать их не надо).
По идее все должно работать.
Что-то подобное помниться в институте на информатике делали на Паскале

Добавлено: 16 май 2005, 15:26
Олеся
Задачка. В фразе содержаться цифрыи знаки арифметических операций.Вывести на экран результат операций. Помогите, пожалуйста!!!

Добавлено: 16 май 2005, 19:08
AndreykA
По моему пора тему перекинуть в раздел "Решите мне задачку"
Добавлено: 16 май 2005, 19:14
Romeo
Олеся, задачка не из простейших. Строчку придётся рекурсивно распарсить перед тем, как вычислить. Думаю, никто за это не возмётся. Лучше попробуй реализоваться сама, а мы поможем, если возникнут какие-то вопросы.
Добавлено: 16 май 2005, 20:52
YurikGL
В фразе содержаться цифрыи знаки арифметических операций.Вывести на экран результат операций. Помогите, пожалуйста!!!
Советую в поисковике поискать интерпретатор математичиских формул или выражений или что-нибудь в этом духе. Задача уже много раз решена и алгоритмы известны.