Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Задача про смайлики (http://www.tehnari.ru/f41/t73218/)

Nataliaa 16.05.2012 10:49

Задача про смайлики
 
Помогите решить задачу, пожалуйста!


Смайлики
Имя входного файла: d.in
Имя выходного файла: d.out
Максимальное время работы на одном тесте: 1 секунда
Максимальный объем используемой памяти: 64 мегабайта

Напишите программу, которая посчитает количество смайликов в заданном тексте.
Смайликом будем считать последовательность символов, удовлетворяющую условиям:
• первым символом является либо ; (точка с запятой) либо : (двоеточие) ровно один раз
• далее может идти символ – (минус) сколько угодно раз (в том числе символ минус может идти ноль раз)
• в конце обязательно идет некоторое количество (не меньше одной) одинаковых скобок из следующего набора: (, ), [, ].
• внутри смайлика не может встречаться никаких других символов.
Например, нижеприведенные последовательности являются смайликами:
:)
;---------[[[[[[[[
в то время как эти последовательности смайликами не являются (хотя некоторые из них содержат смайлики):
:-)]
;--
-)
::-(
:-()
В этой задаче надо будет посчитать количество смайликов, содержащихся в данном тексте.

Vladimir_S 16.05.2012 11:41

Вложений: 1
Вложение 79168
Знаете, всё чаще задумываюсь - а не начать ли всерьёз удалять подобные запросы с изложением задания, но БЕЗ УКАЗАНИЯ ЯЗЫКА ПРОГРАММИРОВАНИЯ. Ведь каждого третьего приходится в это дело носом тыкать.

Nataliaa 16.05.2012 12:08

так паскаль)

Vladimir_S 16.05.2012 15:48

Цитата:

Сообщение от Nataliaa (Сообщение 733073)
так паскаль)

Так пожалуйста:
Код:

Var
 f:Text;
 C,C1:Char;
 Nsm:Word;
 b:Boolean;
Begin
 Assign(f,'d.in');
 Reset(f);
 Nsm:=0;
 Repeat
  b:=false;
  Read(f,C);
  If (C=':') or (C=';') then
  begin
    b:=true;
    Read(f,C);
    If C='-'then
    repeat
      Read(f,C);
    until (C<>'-') or EoF(f);
    If (C='(') or (C=')') or (C='[') or (C=']') then
    begin
      C1:=C;
      repeat
      Read(f,C);
      until (C<>C1) or EoF(f);
    end
    else b:=false;
    If b then Inc(Nsm);
  end;
 Until EoF(f);
 Close(f);
 Assign(f,'d.out');
 Rewrite(f);
 Writeln(f,Nsm,' smiles');
 Close(f);
End.


Nataliaa 16.05.2012 17:58

Спасиииииибо)))) как вы мне помогли))))))) огромное огромное)

Nataliaa 16.05.2012 18:25

а почему то когда смайлики пишутся подряд, то он не считает их правильно...

Vladimir_S 16.05.2012 20:27

Цитата:

Сообщение от Nataliaa (Сообщение 733269)
а почему то когда смайлики пишутся подряд, то он не считает их правильно...

Поправил:
Код:

Var
 f:Text;
 C,C1:Char;
 Nsm:Word;
 b:Boolean;
Begin
 Assign(f,'d.in');
 Reset(f);
 Nsm:=0;
 Read(f,C);
 Repeat
  b:=false;
  If (C=':') or (C=';') then
  begin
    b:=true;
    Read(f,C);
    If C='-'then
    repeat
      Read(f,C);
    until (C<>'-') or EoF(f);
    If (C='(') or (C=')') or (C='[') or (C=']') then
    begin
      C1:=C;
      repeat
      Read(f,C);
      until (C<>C1) or EoF(f);
    end
    else b:=false;
    If b then Inc(Nsm);
  end
  else
  If Not(EoF(f)) then Read(f,C);
 Until EoF(f);
 Close(f);
 Assign(f,'d.out');
 Rewrite(f);
 Writeln(f,Nsm,' smiles');
 Close(f);
End.



Часовой пояс GMT +4, время: 09:28.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.