Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2 3  Все   Вниз
  Печать  
Автор Тема: Флуд из Помогите с подсчётом строк и символов (C/C++)  (Прочитано 57849 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« : 02-02-2009 08:48 » 

Начало здесь

https://forum.shelek.ru/index.php/topic,17902.0.html

*************


LogRus, а это будет работать? Улыбаюсь
Вроде я С++ немного знаю, но при взгляде на Твой код начинаю понимать, что С++ то оказывается не знаю и самое главное, Я слабо понимаю то что на нем написано. Улыбаюсь
« Последнее редактирование: 03-02-2009 15:26 от Джон » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 02-02-2009 08:53 » 

Serg79, та у Логруса инстинкт - всё переделывать на STL Улыбаюсь И я даже думаю, что это работает Улыбаюсь)
Записан

Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #2 : 03-02-2009 05:15 » 

даже работает Улыбаюсь
Serg79, я тоже не знаю Улыбаюсь а выпендриваться люблю.
А написано на нём следующее:
1. создан функтор, конструктор которого принимает ссылку на счётчик
2. в функтор добавлен оператор () с одним аргументом (этот аргумент ему подсунет алгоритм)
3. использован алгоритм for_each который для каждого из элементов на интервале от str до str + sizeof(str) - 1 вызовет у переданного функтора оператор () и передаст туда элемент, в нашем случае char

Код полностью эквивалентен коду Алексей1153++ кстати кусок switch я от туда стащил Улыбаюсь
« Последнее редактирование: 03-02-2009 15:26 от Джон » Записан

Странно всё это....
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 03-02-2009 07:37 » 

Код полностью эквивалентен коду Алексей1153++ кстати кусок switch я от туда стащил Улыбаюсь
Да, кстати 'switch' Алексей1153++ понравился, неординарный подход Улыбаюсь . Кстати, генерируемый компилятором код при этом получается самым оптимальным.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 03-02-2009 07:46 » 

оптимальный, но не наглядный - это я специально для Аполлона так сделал, пусть ещё и опечатку найдёт )
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 03-02-2009 09:36 » 

Лёш, не только опечатку, но и ошибку. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 03-02-2009 09:43 » 

Джон, нет, тока очепятка, алгоритм работает
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 03-02-2009 09:49 » 

Ну он и с ошибкой работает. Ага Ошибка не влияет на результат, но это ошибка поскольку ты выбрал такой подход. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 03-02-2009 09:50 » 

ну даже интересно стало, что за ошибка ?
Записан

Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 03-02-2009 09:52 » 

Блин, Вы меня заинтриговали, собрал исходник:
Код:
#include <stdio.h>

int main(void)
{
        int count = 0;
        int c;

        while ((c = getchar()) != EOF) {
                switch(c) {
                        case 'a': c = 'A';
                        case 'A': count++;
                }
                putchar(c);
        }

        fprintf(stderr,"\n%d\n",count);
        return 0;
}
все работает. Подмена выполняется, считает правильно.
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 03-02-2009 09:53 » 

Алексей1153++, sizeof, надо полагать Ага
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 03-02-2009 09:54 » 

Алексей1153++, sizeof, надо полагать Ага
Не, sizeof здесь отработает правильно.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 03-02-2009 09:54 » 

Вад, что не так ? ) Статический массив, вернёт количество байт, как и положено
Записан

Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 03-02-2009 09:56 » 

Serg79, здесь - да Улыбаюсь
Алексей1153++, вот именно, что он статический. Можешь представить себе задачу, где такое решение понадобится?
« Последнее редактирование: 03-02-2009 09:57 от Вад » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 03-02-2009 09:57 » 

Вад, ну так если был не статический массив, я бы sizeof не применил Улыбаюсь
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #15 : 03-02-2009 10:03 » 

Serg79, так ты исправил ошибку. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #16 : 03-02-2009 10:07 » 

Да не не заморачивайтесь. Тут проблема в break - 1. после него не стоит ; и 2. он там не нужен. Что из этих двух ошибка, а что опечатка выбирайте сами. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #17 : 03-02-2009 10:08 » 

Джон, break ? ) Это не ошибка

а ; - это опечатка )))
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #18 : 03-02-2009 10:11 » 

зы Ну и ещё один момент, но тут спорный вопрос - проблема с условием. В условии не стоит, что надо подсчитывать количество 'А', а только 'а'. В этом случае решение не верно.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #19 : 03-02-2009 10:13 » 

Джон, break ? ) Это не ошибка

Тогда всё правильно - именно ошибка. Иначе объясни зачем он там нужен? Ты ведь выбрал непонятный стиль решнеия. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 03-02-2009 10:14 » 

Походу Джон не вкурил как это работает. Улыбаюсь
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #21 : 03-02-2009 10:33 » 

Джон, break там не мешает абсолютно, я просто по привычке ставлю, чтобы в будущий блок не залесть потом Улыбаюсь Бывало такое.

ну а насчёт подсчёта ты прав, тогда надо так:
Код:
  if(str[i]=='a')
  {
     str[i]='A';
     dwdCountA++
  }
Записан

Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 03-02-2009 10:40 » 

Ну не знаю, в задании не говориться подсчитать количество маленьких 'a', а большие 'A' не считать, там говориться Дана строка символов найти в ней   количество символов  (а)  И если они  маленькие, то перевести их в большие буквы  (А), т.е. подсчитывать все 'a' но если они маленькие то сделать их большими 'A'.

По моему так, если я все правильно понял.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #23 : 03-02-2009 10:52 » 

Serg79, эммм даю справочку - Джон вкурил, ещё с первого раза и без проверки на компиляторе. Впрочем как и LogRus, корый в совём коде тоже break не поставил. Смотрите внимательней. Ага А наличие в программе лишнего ничего не делающего кода в моём понимании есть ошибка. Если вы так не считаете, тады ой. Ага Вобще-то программер несёт ответственность за каждую строчку, за каждую буковку и должен обосновать её наличие в программе.  Ладно ещё когда код в несколько тысяч строк и там сам чёрт ногу сломит, но в данном случае код не такой уж и большой. ИМХО разумеется.

По моему так, если я все правильно понял.

Абсолютно правильно понял - СЧИТАТЬ нужно только 'a'. А теперь добавь в строку примера A и они тоже посчитаются по приведённому выше решению, что явно не оговорено в условии. Ага Вобще-то задание должно выполнятся буквально и не додумываться доп. условиями. Анекдот про прогрммера и яйца знаешь? Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #24 : 03-02-2009 11:03 » new

Джон, я обосновал - это привычка, выработанная граблями))

например

switch(...)
{
   case 1:
   case 2://break - не поставил
}


а через год добавляем "3" с другой логикой

switch(...)
{
   case 1:
   case 2:
   case 3:
}

и глюк закопошился, если ты забыл после "2" приписать break Ага
Записан

Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #25 : 03-02-2009 11:03 » 

Ну незнаю Джон, там говориться найти в ней   количество символов  (а)  И если они  маленькие, то перевести их в большие буквы  (А), это подразумевает что a могут попадать как маленькие так и большие, но если a маленькая, то ее надо сделать большой. Улыбаюсь

Ну а break в операторе switch ни коим боком не влияет на что либо находясь в конце оператора switch. Т.е. эти записи идентичны:
Код:
switch (c) {
    case 'a':
    case 'A':
}
и
Код:
switch (c) {
    case 'a':
    case 'A':
        break;
}
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #26 : 03-02-2009 11:26 » 

По поводу условий я поэтому сразу оговорился:

тут спорный вопрос - проблема с условием.

Поэтому дальнейший спор не имеет смысла и хорошо, что теперь есть решение для обоих случаев.

Ну а break в операторе switch ни коим боком не влияет на что либо

Да нууу? Серьёзно? Ага А где я сказал что он на что-то влияет? С таким же успехом можно впендюрить куда-нить в код int nX = 345; и это тоже ни на что не повлияет. А ещё можно так записать:

Код:
switch (c) {
    case 'a':
    case 'A':
        break;
    deafult:
        break;
}
И это тоже тобе будет ИДЕНТИЧНАЯ запись. Но зачем это делать? Записи идентичны только с точки зрения копмилятора, но как препод я бы обязательно на зачёте спросил зачем там нужен break? Обоснование см. выше.

Лёш, в данном случае это не обоснование, а отмазка. Ага
« Последнее редактирование: 03-02-2009 11:31 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #27 : 03-02-2009 11:44 » 

Джон, думай, как хочешь Улыбаюсь Но лично меня такие привычки только от лишней головной боли в будущем спасают. Я на автомате это пишу, а не для того, чтоб препода аффтара запутать Улыбаюсь)
Записан

Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #28 : 03-02-2009 11:47 » 

На счет писать break или не писать то это зависит от того кого читаешь, одни пишут по этому поводу, что писать break в конце является хорошей идеей, другие по этому поводу вообще ничего не говорят. Улыбаюсь Но то, что break в конце может кого то вводить в заблуждение, я об этом первый раз слышу. Улыбаюсь
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #29 : 03-02-2009 12:00 » 

Лёш, да я-то понял, что на афтамате.

Serg79, где я сказал про заблуждение? Я говорю, что он НЕ НУЖЕН в данном коде. Вот так, уже проще некуда.
Я это сразу автоматически отметил "про себя" как только увидел лёшкин код. Кстати ты его тоже в своём примере не поставил, а ведь ещё не знал, что я имею ввиду. А почему? Ага Ну и кому спорим? Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1] 2 3  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines