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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2012, 18:10   #1
RussDragon
Форумчанин
 
Аватар для RussDragon
 
Регистрация: 07.04.2012
Сообщений: 216
По умолчанию Оцените

Код:
#include <stdio.h>
#define IN 1
#define OUT 0



int main() {

    int c, i, state, nb, nl;
    int count[10];
    nb = 0;
    
    for (i = 0; i<10; ++i)
    count[i] = 0;
    
    
    while((c = getchar()) && (c != EOF))
    {
            
            if (c == ' ' || c == '\n' || c == '\t')
            state = OUT;
        
                else if (state == OUT)
                {
                    state = IN;
                    ++nb;
                }
        
        if (c != ' ' && c != '\n' && c != '\t'){
            ++nl;
            count[nb] = nl;
        }
        
        if (state == OUT)
            nl = 0;
    }
    
    for(i = 1; i < 10; ++i)
    {
        printf("%d: %d\n", i, count[i]);
    }
    
    
        
        
    
    
}
Понимаю, здесь многое можно урезать, но скажите, насколько это плохой код для начинающего?

Последний раз редактировалось RussDragon; 05.10.2012 в 18:59.
RussDragon вне форума Ответить с цитированием
Старый 05.10.2012, 18:36   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это хороший код даже для проффи, если он дает правильный результат.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.10.2012, 18:51   #3
RussDragon
Форумчанин
 
Аватар для RussDragon
 
Регистрация: 07.04.2012
Сообщений: 216
По умолчанию

Его смысл в принципе в одном, принимать входной поток, смотреть является ли символ частью слова, если да то считать их количество, до тех пор пока не встретится символ по типу перехода на новую строку, табуляции или пробела, далее записывать данные в массив. Вывод от текста "test test" такой — 0 4 4 0 0 0 0 0 0 0 ( Да, как записывать в первую ячейку массива и придумал, но подумал что не критично )

UPD:
Поправил вывод, теперь он начинает вывод с 1 и записывает в таком формате:
1: 4
2: 4
3: 0
И т.д.

UPD2:
Нашел несколько ошибок при вводе русских слов. Например при написании "Привет" он записывает не 6, а 12 символов. Может я конечно чего-то пока не знаю, но надо бы поправить.

Последний раз редактировалось RussDragon; 05.10.2012 в 19:03.
RussDragon вне форума Ответить с цитированием
Старый 05.10.2012, 19:44   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
он записывает не 6, а 12 символов.
Потому что считает русское слово юникодом, а в нем один символ описывается двумя байтами.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.10.2012, 19:51   #5
RussDragon
Форумчанин
 
Аватар для RussDragon
 
Регистрация: 07.04.2012
Сообщений: 216
По умолчанию

Ну, как я и говорил, чего-то я не знал)
Ну тогда пожалуй, это полностью рабочая версия программы
RussDragon вне форума Ответить с цитированием
Старый 08.10.2012, 12:56   #6
three_cats
Форумчанин
 
Аватар для three_cats
 
Регистрация: 27.09.2012
Сообщений: 175
По умолчанию

Молодец! Так держать!
Никто

мой блог
three_cats вне форума Ответить с цитированием
Старый 19.10.2012, 23:45   #7
RussDragon
Форумчанин
 
Аватар для RussDragon
 
Регистрация: 07.04.2012
Сообщений: 216
По умолчанию

Код:
int Calc(int, int, int);

int main()
{
    Calc(12, 13, '+');
}


int Calc(int i, int c, int g) {
    int b;
    if (g == '+') {
        b = i +c;
    }
    else if (g == '*')
    {
        b = i * c;
}
    else if (g == '/') {
        b = i / c;
    }
    else if(g == '-') {
        b = i - c;
    }
    return printf("%d\n", b);
}
Тот же вопрос что и в первом, как все плохо?
Да, я специально не использовал switch так как не дошел до него в учебнике.
И да, код написал за 10 минут от нечего делать)
RussDragon вне форума Ответить с цитированием
Старый 20.10.2012, 01:18   #8
s1r0
Новичок
Джуниор
 
Регистрация: 02.05.2011
Сообщений: 2
По умолчанию

Слишком маленький код, чтобы по нему можно было что-то сказать. И да, тут лучше и нагляднее будет использовать switch.

P.S. Посмотри, что произойдет, если записать в main такой вызов: Calc(12, 0, '/');
s1r0 вне форума Ответить с цитированием
Старый 20.10.2012, 10:50   #9
RussDragon
Форумчанин
 
Аватар для RussDragon
 
Регистрация: 07.04.2012
Сообщений: 216
По умолчанию

У меня вызывается LLBD, надо поправить, но думать ради такого бесполезного кода не хочется)
RussDragon вне форума Ответить с цитированием
Старый 21.10.2012, 07:29   #10
three_cats
Форумчанин
 
Аватар для three_cats
 
Регистрация: 27.09.2012
Сообщений: 175
По умолчанию

Такой код не каждому дано написать...
Никто

мой блог
three_cats вне форума Ответить с цитированием
Ответ


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