тип STring

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Олеся
Сообщения: 3
Зарегистрирован: 25 апр 2005, 17:16

Помогите, пожалйста! :cry: Нужно решить задачку.
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.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Этот алгоритм вычисляет отношение количества всех парных букв в текстве к количеству пробелов. Не совсем верно. Что нужно сделать, чтобы всё заработало?

Во-первых нужно проверять является ли пробел начальным или конечным символа текста и не инкрементировать щётчик пробелов, если это так. В конце выполнения цикла нужно увеличить счётчик пробелов на 1, чтобы получить количество слов.

Во-вторых нужно учитывать что некое слово может содержать несколько удвоенных букв, а считать ведь нам нужно слова, содержащие удвоенные буквы, а не сами пары удвоенных букв. Эту проблему можно решить с помощью введения флажка, хранящего информацию о том, было ли текущее слово уже посчитано или нет. Этот флажок будет сбрасываться, если текущий символ - пробел, и устанавливать, если мы инкрементируем счётчик слов. Причём перед увеличением счётчика слов нужно проверять не только равенство текущего и последующего символов, но и значение флажка. Это позволит не увеличивать лишний раз счётчик слов.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

возможно опечатка, но во втором if стоит присваивание вместо сравнения - убрать двоеточие.
Ошибки такого рода очень трудно потом найти :)
Изображение
Олеся
Сообщения: 3
Зарегистрирован: 25 апр 2005, 17:16

Вот задачка.
Найти кол-во слов начинающихся и заканчивающихся на обнуи туже букву.

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

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.
Что-то не идет.
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

тот, что написан - считает кол-во слов, начинающихся на ту же букву, что и первое, да и только в том случае, если в For, подправить 1 на 2 :)
С уважением, Lost Angel...
AndreykA
Сообщения: 48
Зарегистрирован: 15 ноя 2004, 12:55
Откуда: Москва
Контактная информация:

приблизительно так можно сделать:
по первой задаче:

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

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.
во второй не считаются слова из одной буквы (ведь получается что в принципе они начинаются и заканчиваются на одну и тоже, но это вроде не слово, поэтому наверно считать их не надо).
По идее все должно работать.
Что-то подобное помниться в институте на информатике делали на Паскале :)
Олеся
Сообщения: 3
Зарегистрирован: 25 апр 2005, 17:16

Задачка. В фразе содержаться цифрыи знаки арифметических операций.Вывести на экран результат операций. Помогите, пожалуйста!!! :cry:
AndreykA
Сообщения: 48
Зарегистрирован: 15 ноя 2004, 12:55
Откуда: Москва
Контактная информация:

По моему пора тему перекинуть в раздел "Решите мне задачку"
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Олеся, задачка не из простейших. Строчку придётся рекурсивно распарсить перед тем, как вычислить. Думаю, никто за это не возмётся. Лучше попробуй реализоваться сама, а мы поможем, если возникнут какие-то вопросы.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
YurikGL
Сообщения: 142
Зарегистрирован: 16 фев 2005, 21:54
Откуда: Уфа
Контактная информация:

В фразе содержаться цифрыи знаки арифметических операций.Вывести на экран результат операций. Помогите, пожалуйста!!!
Советую в поисковике поискать интерпретатор математичиских формул или выражений или что-нибудь в этом духе. Задача уже много раз решена и алгоритмы известны.
Ответить