На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Представить чисто в сроковом виде
    Есть скажем число. Нужно его представить в строковом виде, т-е

    1 -> адын
    2 -> два
    156 -> ...

    Как бы это оформить покрасивее, потому что я в принципе сделал, но с помощью switch, if-else. Геморно
      гыг \%)
      ed[0] = ""
      ed[1] = "один"
      ed[2] = "два"
      ..
      ed[9] = "девять"

      des[0] = ""
      des[1] = "десять"
      des[2] = "двадцать"
      ..
      des[9] = "девяносто"

      sot[0] = ""
      sot[1] = "сто"
      sot[2] = "двести"
      ..
      sot[9] = "девятьсот"

      и т.д.

      далее:
      str = sot[кол_во_сот] + des[кол_во_десятков] + des[кол_во_единиц]
      ;DGrAnd: Забыл скобочку ;D
      для числа 156 получаем : стопятьдесятшесть -))

      только вот надо немного по-другому обработать одиннадцать-девятнадцать :)

      ну как? =)
      Сообщение отредактировано: GrAnd -
        ага, а если есть _примерно_ так (пишу по памяти);

        switch(i)
        {
        case 1 : a[i] = "адын";
                    break;
        //... etc
        }

        if (i ==19) a[i] = "Девятнадцать";

        //....

        if (i == 156) a[i] = a[100]+a[50]+a[6];

        Хотя, наверное твой примерчик поинтереснее будет...
        thanks & beer for Matrix Club  ;)
          :)
            Не забудьте про числа от11 до 19  ;D ;D ;D
              И не забудьте про числа > 1000, т.е. чтоб было не
              "два тысяча триста двадцать пять" ;D
              Сообщение отредактировано: 7in -
                Да, для больших чисел придеться еще учесть и падежи. ;)
                  желающим могу прислать несколько вариантов на паскале........и не только для русского языка :)
                    Кстати с английскихм языком проблем особых не возникает. К счастью все намного проще. ;D ;D ;D
                      Вот еще один сорец на пасе:

                      ---cut here

                      type

                       str3 = string[3];
                       ind9 = '0'..'9';

                       tsex = ( _, female, male );

                       irec = record s:string[12]; sex:tsex end;

                      const

                          k_o : array[tsex,ind9] of string[2] = (
                            ('','','','','','','','','',''),
                            ('','а','и','и','и','','','','',''),
                            ('ов','','а','а','а','ов','ов','ов','ов','ов')
                          );

                          k_table : array[1..4] of irec = (
                            (s:'';sex:_),
                            (s:'тысяч';sex:female),
                            (s:'миллион';sex:male),
                            (s:'миллиард';sex:male)
                          );


                          _tab : array [0..3,ind9] of string[12] = (
                            ('десять','одиннадцать','двеннадцать','тринадцать','четырнадцать','пятнадцать',
                            'шестнадцать','семнадцать','восемнадцать','девятнадцать'),
                            ('','од','дв','три','четыре','пять','шесть','семь','восемь','девять'),
                            ('','десять','двадцать','тридцать','сорок','пятьдесят','шестьдесят','семьдесят','восемьдесят','девяносто'),
                            ('','сто','двести','триста','четыреста','пятьсот','шестьсот','семьсот','восемьсот','девятьсот')
                          );


                      procedure irecw(b:boolean;k:byte;i:ind9);
                      begin
                       write(' ',k_table[k].s);
                       if b then
                         write(k_o[k_table[k].sex,i])
                       else if k_table[k].sex=male then
                         write('ов')
                      end;

                      function ireco(b:boolean;k:byte;i:ind9):boolean;
                      begin
                       if b then
                         case i of
                           '1': if k=2 then write('на') else write('ин');
                           '2': if k=2 then write('е') else write('а');
                         end;
                       ireco:=b
                      end;


                      procedure tetr(k,o:byte;s:str3);

                       function _tetr(o,i:byte):boolean;
                       begin
                         if boolean(o) then
                           if (o=2) and (s[i]='1') then begin
                             write(' ',_tab[0,s[i+1]]);
                             _tetr:=false
                           end else begin
                             write(' ',_tab[o,s[i]]);
                             _tetr:=_tetr(o-1,i+1);
                           end
                         else
                           _tetr:=true
                       end;

                      begin
                       if s='000' then exit;
                       irecw(ireco(_tetr(o,1),k,s[o]),k,s[o]);
                      end;

                      var
                       i,j,k,o:byte;
                       s:string;
                       s3:str3;

                      begin

                       s:=paramstr(1);

                       if length(s)>12 then begin
                         writeln('число слишком велико');
                         halt
                       end;

                       for i:=1 to length(s) do if s[i] in [#0..pred('0'),succ('9')..#255] then begin
                         writeln('недопустимый нечисловой символ');
                         halt;
                       end;

                       while (s[1]='0')and(length(s)>1) do s:=copy(s,2,length(s)-1);

                       if s='0' then write('ноль') else begin


                       k:=length(s) div 3;
                       o:=length(s)-3*k;
                       if o=0 then o:=3 else inc(k);

                       i:=0;
                       j:=1;
                       s3:='';
                       while j<=length(s) do begin
                         s3:=s3+s[j];
                         inc(i);
                         inc(j);
                         if i=o then begin
                           i:=0;
                           tetr(k,o,s3);
                           s3:='';
                           dec(k);
                           o:=3
                         end;
                       end;

                       end;
                       writeln;
                      end.

                      ---cut here :D
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0326 ]   [ 15 queries used ]   [ Generated: 27.04.24, 05:39 GMT ]