Уважаемые посетители! Форум CQHAM.RU существует исключительно за счет показа рекламы. Мы будем благодарны, если Вы не будете блокировать рекламу на нашем Форуме. Просим внести cqham.ru в список исключений для Вашего блокировщика рекламы.
Страница 3 из 7 ПерваяПервая 123456 ... ПоследняяПоследняя
Показано с 21 по 30 из 70

Тема: Программа, которая считает ворон :)

  1. #21
    Цитата Сообщение от vadim_d Посмотреть сообщение
    Наберите в командной строке имя программы (скомпилированного екзешника/эльфа), пробел и требуемое число, это и и получит программа как argv[1]
    Работает!
    Код:
    work@usr1-P5K-E:~/Документы$ ./vorona
    Некорректный ввод
    work@usr1-P5K-E:~/Документы$ ./vorona 125
    сто двадцать пять ворон
    work@usr1-P5K-E:~/Документы$ ./vorona 1251256987
    один миллиард двести пятьдесят один миллион двести пятьдесят шесть тысяч девятьсот восемьдесят семь ворон
    work@usr1-P5K-E:~/Документы$
    Добавлено через 17 минут(ы):

    Если нужно, код в UTF8.
    Вложения Вложения
    Последний раз редактировалось SYN; 10.04.2023 в 18:36.

  2. Спасибо от vadim_d


  3. #22
    Цитата Сообщение от payalnik Посмотреть сообщение
    За такое казнить на месте преступления надо. Без суда и следствия.
    Надо программисту помнить, что существует такой прием и в каждом случае думать - целесообразно его использовать, или нет.
    Когда-то давно в АСУТП приходилось много извлекать корень квадратный из 10-разрядного кода АЦП, но тогда и 1024 16-разрядных слова было жалко... Мало памяти было - пришлось другой метод применить.

  4. #23
    Аватар для vadim_d
    Регистрация
    29.10.2006
    Адрес
    Санкт-Петербург
    Сообщений
    14,916
    Цитата Сообщение от Aleksandar Ilic Посмотреть сообщение
    с ужасно много "case"
    Иногда бывает полезно быстро получить первый результат, а уже потом думать о необходимости его оптимизации

    Цитата Сообщение от Amw Посмотреть сообщение
    и в каждом случае думать - целесообразно его использовать, или нет
    Часто оказывается, что полная табличная оптимизация не лезет ни в какие ворота, а вот уже кусочно-линейная (или более сложная) аппроксимация по табличным точкам оказывается вполне приемлемой. Еще вроде помню, что в этом тестовом задании оговаривалась возможность стиля Embedded C и полноценного C++, может кто-то из плюсовиков-затейников покажет класс в плюсах, с динамическим кастингом и ассоциативными контейнерами . Ну и было пожелание сделать версию с попугаями вместо ворон
    Вадим

  5. #24
    Аватар для payalnik
    Регистрация
    27.09.2015
    Адрес
    Красноярский край
    Сообщений
    909
    Цитата Сообщение от vadim_d Посмотреть сообщение
    Ну и было пожелание сделать версию с попугаями вместо ворон
    Вот, доделал свой вариант именно для попугаев:
    Код:
    /*
    Автор кода: payalnik, он же coderhuligan
    */
    //для выхода из программы нажмите ctrl + z
    #include    <stdio.h>
    #include    <string.h>
    #include    <locale.h>
    #define TS 1
    #define ML 2
    #define MR 3
    
    #define O1 0
    #define O2 1
    #define O3 2
    char buf[255];
    unsigned f=0, v;
    
    char * pop(unsigned n){
      static char *a[]={" попугай", " попугая", " попугаев"};
      return a[n];
    }
    
    char * od(void){
      static char a[]="одна";
      return a;
    }
    char * dv(void){
      static char a[]="две";
      return a;
    }
    
    char * d0_9(unsigned n){
      static char * a[]={"ноль", "один", "два", "три", "четыре",
        "пять", "шесть", "семь", "восемь", "девять"};
      if(n==1){v=O1;}else if(n>1 && n <5){v=O2;}else v=O3;
      if(f==TS){
        if(n==1){ return od();}
        else 
         if(n==2){return dv();}
      }
      return a[n];
    }
    char * d10_19(unsigned n){
      static char * a[]={"десять", "одиннадцать", "двенадцать", "тринадцать",
      "четырнадцать","пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", 
        "девятнадцать"};
      v=O3;
      return a[n%10];
    }
    char * d20_90(unsigned n){
      static char * a[]={"двадцать", "тридцать", "сорок",
        "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"
    };
      v=O3;
      return a[n/10-2];
    }
    char * d100_900(unsigned n){
      static char * a[]={"", "сто", "двести", "триста", "четыреста",
        "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот"
    };
      v=O3;
      return a[n/100];
    }
    char * dts(unsigned n){
      static char * a[]={" тысяча", " тысячи", " тысяч"};
      return a[n];
    }
    char * dmr(unsigned n)
    {
      static char * a[]={" миллиард", " миллиарда", " миллиардов"};
      return a[n];
    }
    char * dml(unsigned n)
    {
      static char * a[]={" миллион", " миллиона", " миллионов"};
      return a[n];
    }
    
    void dc(unsigned n){
       strcat(buf, d0_9(n));
    }
    void dw(unsigned n){
      strcat(buf, d10_19(n));
    }
    void ds(unsigned n){
      if(n<10){dc(n);return;}else {if(n<20){dw(n);return;}}
      strcat(buf, d20_90(n)); 
      n%=10;if(n!=0){strcat(buf, " "); dc(n);}
    }
    void st(unsigned n){
      strcat(buf, d100_900(n)); 
      n%=100;if(n!=0){if(buf[0]!='\0')strcat(buf, " "); ds(n);}
    }
    void ts(unsigned n){
      unsigned k=n; f=TS;
      n/=1000; st(n);strcat(buf, dts(v)); 
      k%=1000;f=0;if(n!=0){strcat(buf, " "); st(k);}
    }
    void ml(unsigned n){
      unsigned k=n; f=ML;
      n/=1000000; st(n);strcat(buf, dml(v));
      n=k; n%=1000000;f=0;if(n!=0){strcat(buf, " "); ts(n);}
    }
    void mr(unsigned n){
      unsigned k=n; f=MR;
      n/=1000000000; st(n);strcat(buf, dmr(v));
      n=k; n%=1000000000;f=0;if(n!=0){strcat(buf, " "); ml(n);}
    }
    
    int main(void)
    {
      setlocale(LC_ALL, "Ru");
      unsigned k=0;
      while(scanf("%d", &k)!=EOF){
        if(k<10){dc(k);}
        else if(k<20){dw(k);}
        else if(k<100){ds(k);}
        else if(k<1000){st(k);}
        else if(k<1000000){ts(k);}
        else if(k<1000000000){ml(k);}
        else if(k<=4294967295){mr(k);}
        printf("%s\n", strcat(buf, pop(v)));
        buf[0]='\0';
      }
      return 0;
    }
    main.7z
    Как смог. Локаль работает только в pellesC. На gcc нужно что-то другое придумывать.
    Всё будет хорошо

  6. #25
    Аватар для vadim_d
    Регистрация
    29.10.2006
    Адрес
    Санкт-Петербург
    Сообщений
    14,916
    Цитата Сообщение от payalnik Посмотреть сообщение
    доделал свой вариант именно для попугаев
    Спасибо, если после компиляции gcc в командном окошке сначала дать команду chcp 1251, то с кодировкой все нормально, функционал глубоко не тестировал, но вроде все на месте:

    Нажмите на изображение для увеличения. 

Название:	parrot_cnt_00.png 
Просмотров:	47 
Размер:	16.1 Кб 
ID:	387695
    Вадим

  7. Спасибо от payalnik

  8. #26
    Цитата Сообщение от payalnik Посмотреть сообщение
    На gcc нужно что-то другое придумывать.
    В убунте все хорошо запустилось. Ничего не пришлось делать дополнительно. Только как и ранее открыл браузером, потом сохранил в utf8.
    Изучил немного вопрос, оказывается тут можно и в win1251 открывать, и вообще куча кодировок предусмотрена, но нужно дать настройку как открывать по умолчанию.

    Код:
    125
    сто двадцать пять попугаев
    125125698
    сто двадцать пять миллионов сто двадцать пять тысяч шестьсот девяносто восемь попугаев
    1251256987
    один миллиард двести пятьдесят один миллион двести пятьдесят шесть тысяч девятьсот восемьдесят семь попугаев
    Добавлено через 20 минут(ы):

    Но если ввести минус 2 попугая, результат неправильный, зацикливается также при вводе вещественного числа. Наверное можно просто запретить ввод ненатуральных чисел.
    Последний раз редактировалось SYN; 11.04.2023 в 15:46.

  9. #27
    Аватар для vadim_d
    Регистрация
    29.10.2006
    Адрес
    Санкт-Петербург
    Сообщений
    14,916
    Цитата Сообщение от SYN Посмотреть сообщение
    В убунте все хорошо запустилось
    Насколько помню, в вируальной машине с линуксом был приятно удивлен, что подпрыжки с кодировками не потребовались

    Цитата Сообщение от SYN Посмотреть сообщение
    просто запретить ввод ненатуральных чисел
    По условию задачи нужен весь диапазон 32-битных беззнаковых целых, я просто проверял все символы строки на цифирьность, удалял левые нули и сравнивал длину строки с пределом, реально рабочий диапазон получился шире требуемого
    Вадим

  10. #28
    Вадим, в Вашей проге попытки ввода таких чисел дают вывод "некорректный ввод".

  11. #29
    Аватар для payalnik
    Регистрация
    27.09.2015
    Адрес
    Красноярский край
    Сообщений
    909
    Цитата Сообщение от SYN Посмотреть сообщение
    В убунте все хорошо запустилось. Ничего не пришлось делать дополнительно. Только как и ранее открыл браузером, потом сохранил в utf8.
    Ок! А если бы исходник оказался в win кодировке такой номер бы не прошел. Пришлось бы прописывать в ключах компилятора исходную и конечную кодировки.

    Цитата Сообщение от SYN Посмотреть сообщение
    Но если ввести минус 2 попугая, результат неправильный, зацикливается также при вводе вещественного числа.
    Ну, ради простоты была выпущена проверка на валидность входных данных. Задачка чисто тренировочная, так, для разминки мозгов.
    Цитата Сообщение от vadim_d Посмотреть сообщение
    функционал глубоко не тестировал, но вроде все на месте
    Да я тоже не особо тестировал, может вылезти какая-нибудь бяка.
    ---
    Надо бы чё-нить полезное сделать. Вот недавно сделал на vb6 программку для расчета контуров генераторов, но что-то мне не сильно понравилось, что среда тянет с собой зависимости. А тут начал усиленно изучать библиотеку IUP, тестировать её, и мне очень понравилось. Она позволяет на чистом СИ писать ГУИ программы. Попробую на IUP портировать. Также охота сделать морзе проигрыватель. Я уже сделал проигрыватель без ГУИ но на TCL с подключением Snack библиотеки. Но Tcl тянет за собой зависимость в виде интерпретатора, хотя есть прога, которая загоняет все это в один эксешник, но все это топорно и нелегковесно.. На чистом си попробовать все делать значительно круче.
    Всё будет хорошо


  12. #30
    Аватар для vadim_d
    Регистрация
    29.10.2006
    Адрес
    Санкт-Петербург
    Сообщений
    14,916
    Цитата Сообщение от SYN Посмотреть сообщение
    дают вывод "некорректный ввод"
    Да, придерживаюсь великого инженерного принципа - вещи надо называть своими именами . В целом, всегда лучше выдать внятную ошибку, чем сделать что-то непредсказуемое (непредвиденное)

    Цитата Сообщение от payalnik Посмотреть сообщение
    но все это топорно и нелегковесно
    Тут чаще всего критерий в затратах пользователя на установку программы и требуемых ей компонент, если все легко и быстро, то ему не особо интересно, а что там внутри
    Вадим

Страница 3 из 7 ПерваяПервая 123456 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 8
    Последнее сообщение: 19.06.2010, 12:10
  2. Программа RCA
    от RK4FB в разделе Для любителей КВ
    Ответов: 5
    Последнее сообщение: 01.12.2009, 23:18
  3. Программа CS-F3G
    от pms12 в разделе Программное обеспечение
    Ответов: 1
    Последнее сообщение: 15.08.2007, 13:12
  4. Программа для HYT TC 500
    от Вадим Казах в разделе Софт для мобильных устройств
    Ответов: 4
    Последнее сообщение: 24.07.2007, 10:24
  5. Программа для st-852
    от Mun в разделе Программное обеспечение
    Ответов: 2
    Последнее сообщение: 24.03.2006, 09:36

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •