Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2011, 17:55   #1
bars.iwan
Пользователь
 
Регистрация: 04.12.2011
Сообщений: 10
По умолчанию Как можно доработать код?Не проходите мимо.

Здравствуйте, уважаемые программисты!

Подскажите,пожалуйста,как можно доработать программу,считающую количество слов в комментариях на Паскале(т.е. { и } или * и *) так,чтобы она не заваливалась на тестах:
1.Незакрытый комментарий(прим. {фыв вффв фвфв - ответом будет 3,а должно быть 0).
2.2 или более идущих подряд скобки "{" (прим. {{{ - выводит 1,а должно быть 0).
3.Комментарий,заключенный между { и *(прим. {фывва фвфв фвф вф* - ответом будет 4,а должно быть 0).

Код:

#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <ctype.h>

enum Status {
    NORMAL = 0, INBRACES, INSTARS,
};

int q184732(FILE *fs) {
    enum Status st = NORMAL;
    int inword = 0;
    int w_count = 0;
    int c;
    while ((c = getc(fs)) != EOF) {
        switch (st) {
        case NORMAL:
            switch (c) {
            case '{':
                st = INBRACES;
                break;
            case '*':
                st = INSTARS;
                break;
            }
            continue;	/* не считаю */
        case INBRACES:
            if (c == '}') {
                st = NORMAL;
                /* имитирую конец слова и отправляю в подсчёт */
                c = ' ';
            }
            break;
        case INSTARS:
            if (c == '*') {
                st = NORMAL;
                /* имитирую конец слова и отправляю в подсчёт */
                c = ' ';
            }
            break;
        }
        /* здесь подсчитываю слова
         * Словами считаю любые символы, окружённые пробелами,
         * новыми строками, табуляциями
         */
        int new_inword = !isspace (c);
        if (new_inword != inword) {
            inword = new_inword;
            if (inword) /* началось новое слово */
                ++w_count;
        }
    }
    return w_count;
}

int main (int c, char **av) {
    int n;
    n = q184732(stdin);
    printf ("count: %d\n", n);
    return 0;
}
Очень нужна ваша помощь!
С уважением,
Иван.

Последний раз редактировалось Serge_Bliznykov; 22.12.2011 в 23:39.
bars.iwan вне форума Ответить с цитированием
Старый 22.12.2011, 23:13   #2
bars.iwan
Пользователь
 
Регистрация: 04.12.2011
Сообщений: 10
По умолчанию

Или может быть эту программу можно записать по-другому
bars.iwan вне форума Ответить с цитированием
Старый 23.12.2011, 20:31   #3
bars.iwan
Пользователь
 
Регистрация: 04.12.2011
Сообщений: 10
По умолчанию

Народ,очень нужна помощь!Серьезно!
bars.iwan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не знаю как написать программу, не проходите мимо.. Angel_ Помощь студентам 17 10.12.2011 10:05
Есть код VBA для эксель, не знаю как доработать.... minimobi Microsoft Office Excel 1 06.10.2009 01:21
Нужны решения несложных задачек методом монте-карло!Умоляю ВАС не проходите мимо;(( Galinablankabulbul Помощь студентам 6 01.06.2009 10:11
Как доработать код ? zander Microsoft Office Excel 3 04.03.2009 20:22
ПОИСК ОДИНАКОВЫХ СЛОВ (не проходите мимо!) MAD Помощь студентам 12 24.12.2007 22:41