Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Число словами 
V
    Опции темы
Сый
Дата 26.3.2006, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



Нужен алгоритм, преобразующий число в его словесное представление (например: 123 - "сто двадцать три").
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
BSOD
Дата 26.3.2006, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 1.11.2004
Где: Гомель

Репутация: нет
Всего: 3



ну проще всего - записать 1 2 3 4 ... 10 20 30 40... 100 200 300 и.т.д.
ну а потом из этих записей числа формировать типа 100 + 20 +3


--------------------
как корабль назовешь - то на нем и напишешь
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 26.3.2006, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



Развеж это алгоритм? smile Это большой switch/case

Вообще на форуме уже для нескольких языков писали. Помотри ФАК.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
sergejzr
Дата 26.3.2006, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360





--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Сый
Дата 28.3.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



Ну не стал я переделывать готовые алгоритмы.
Вобщем, написал я это дело. Программа разбирает число на рязряды. Алгоритм такой:

Код

ПЕР
  Цифры: РЯД 4 ИЗ ЦЕЛ;

УКАЗ
  Цифры[0] := Число ДЕЛИТЬ 1000;
  Цифры[1] := (Число ОСТАТОК 1000) ДЕЛИТЬ 100;
  Цифры[2] := ((Число ОСТАТОК 1000) ОСТАТОК 100) ДЕЛИТЬ 10;
  Цифры[3] := (((Число ОСТАТОК 1000) ОСТАТОК 100) ОСТАТОК 10) ДЕЛИТЬ 1;


Как бы теперь этот код переделать с использованием ОТ-ДО, ПОВТОРЯТЬ и т. д., чтобы уменьшить его размер при разборке более крупных чисел?
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
sergejzr
Дата 28.3.2006, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



НАЧАЛО
Индекс := 0;
ПОКА Число БОЛЬШЕ 0
Цифры[Индекс]=(Число ОСТАТОК 1000) ДЕЛИТЬ 10;
Число := Число ДЕЛИТЬ 10;
КОНЕЦ;


Как на Глаголе писать не знаю smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Romikgy
Дата 28.3.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



Цитата(sergej.z @ 28.3.2006, 13:14 Найти цитируемый пост)
Индекс

еще приращивать надо smile



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Сый
Дата 28.3.2006, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



УКАЗ
Индекс := 0;
ПОКА Число > 0 ВЫП
Цифры[Индекс]:=(Число ОСТАТОК 1000) ДЕЛИТЬ 10;
Число := Число ДЕЛИТЬ 10;
КОН;

Так на Глаголе smile
Но вот насчёт правильности алгоритма есть сомнения. К примеру, если взять 4-х значное число и применить данные действия, получаем:
Число = 1234; (Число ОСТАТОК 1000) ДЕЛИТЬ 10 = 234 ДЕЛИТЬ 10 = 23 (а цифра никак не может быть больше 9).
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
Akina
Дата 28.3.2006, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Сый, может ты все-таки добредешь до ФАКа? или хотя бы в поиске наберешь "число прописью" (или "сумма прописью")? Если скромненько - то по конфе ищи, с размахом - можно сразу в Гугле.

Что до алгоритма - он прост. Число делится на группы по три цифры. Каждая группа транслируется в пропись, в зависимости от ее номера берется множитель (тыщ, мульенов - сколь заложишь) и от десятков-единиц этой группы - падеж. Все.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
doomik
Дата 28.3.2006, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Одинокий волк
**


Профиль
Группа: Участник
Сообщений: 360
Регистрация: 25.10.2005
Где: #vingrad

Репутация: нет
Всего: 15



сделал что-то smile, может поможет smile с ошибками правда сделал, то есть есть такие числа что если нбираеш 113 то он выдаёт сто-сто-три например smile
Код

Алгоритм
///Старт    

Ввести номер

Число1 = номер / 100
Число2 = номер % 100
Число2 = Число2 / 10
Число3 = номер % 10


//Старт [1]00 - [9]00 
Если ( Число1 == 1 ) 
    Вывести ( sto- ) 

Если ( Число1 == 2 ) 
    Вывести ( dvesti- )

Если ( Число1 == 3 ) 
    Вывести ( trista- )

Если ( Число1 == 4 ) 
    Вывести ( 4itirista- )

Если ( Число1 == 5 ) 
    Вывести ( pjatsot- )

Если ( Число1 == 6 ) 
    Вывести ( shesot- )

Если ( Число1 == 7 ) 
    Вывести ( semjsot- )

Если ( Число1 == 8 ) 
    Вывести ( vosemjsot- )

Если ( Число1 == 9 ) 
    Вывести ( devitsot- )
//Конец 100 - 900 


//Старт 1[2]0 - 1[9]0
Если ( Число2 == 2 ) 
    Вывести ( Dvazat- ) 
    
Если ( Число2 == 3 ) 
    Вывести ( Trizat- ) 
    
Если ( Число2 == 4 ) 
    Вывести ( Sorok- ) 
    
Если ( Число2 == 5 ) 
    Вывести ( Pjadisat- )
    
Если ( Число2 == 6 ) 
    Вывести ( Shisdisjat- )
    
Если ( Число2 == 7 ) 
    Вывести ( Semjdisat- )
    
Если ( Число2 == 8 ) 
    Вывести ( Vosemjdisat- )
    
Если ( Число2 == 9 ) 
    Вывести ( Devinosto- )
//Конец 1[2]0 - 1[9]0
    
    
//Старт 12[0] - 19[0]    
Если ( Число3 == 2 ) 
    Вывести ( odin ) 
    
Если ( Число3 == 2 ) 
    Вывести ( Dva ) 
    
Если ( Число3 == 3 ) 
    Вывести ( Tri ) 
    
Если ( Число3 == 4 ) 
    Вывести ( 4itiri ) 
    
Если ( Число3 == 5 ) 
    Вывести ( Pjat )
    
Если ( Число3 == 6 ) 
    Вывести ( Shest )
    
Если ( Число3 == 7 ) 
    Вывести ( Semj )
    
Если ( Число3 == 8 ) 
    Вывести ( Vosemj )
    
Если ( Число3 == 9 ) 
    Вывести ( Devit )
//Конец 12[0] - 19[0]


    
    
// Старт 1[11] - 1[19]    
Если ( Число2 == 1 и Число3 == 1  ) 
    Вывести ( sto-odinazat ) 

Если ( Число2 == 1 и Число3 == 2  ) 
    Вывести ( sto-dvenazat )
    
Если ( Число2 == 1 и Число3 == 3  ) 
    Вывести ( sto-trinazat )
    
Если ( Число2 == 1 и Число3 == 4  ) 
    Вывести ( sto-4itirnazat )
    
Если ( Число2 == 1 и Число3 == 5  ) 
    Вывести ( sto-pjatnazat )
    
Если ( Число2 == 1 и Число3 == 6  ) 
    Вывести ( sto-shestnazat )
    
Если ( Число2 == 1 и Число3 == 7  ) 
    Вывести ( sto-semjnazat )    
    
Если ( Число2 == 1 и Число3 == 8  ) 
    Вывести ( sto-vosemjnazat )
    
Если ( Число2 == 1 и Число3 == 9  ) 
    Вывести ( sto-devitnazat )
//Конец 1[11] - 1[19]
// Конец


Код

Язык С 

//100 - 999 

#include <stdio.h>

main()
{
        int num1, num2, num3, number;

    printf("Enter number:\n");
        scanf("%d", &number);

        num1 = number / 100;
        num2 = number % 100;
        num2 = num2 / 10;
        num3 = number % 10;


//begin[1]00 - [9]00 

    if ( num1 == 1 ) 
        printf("sto-");

    if ( num1 == 2 ) 
        printf("dvesti-");

    if ( num1 == 3 ) 
        printf("trista-");

    if ( num1 == 4 ) 
        printf("4itirista-");

    if ( num1 == 5 ) 
        printf("pjatsot-");

    if ( num1 == 6 ) 
        printf("shesot-");

    if ( num1 == 7 ) 
        printf("semjsot-");

    if ( num1 == 8 ) 
        printf("vosemjsot-");

    if ( num1 == 9 ) 
        printf("Devjatsot-");
//end [1]00 - [9]00 



//begin 1[2]0 - 1[9]0


    if ( num2 == 2 ) 
        printf("Dvazat-");

    if ( num2 == 3 ) 
        printf("Trizat-");
    
    if ( num2 == 4 ) 
        printf("Sorok-");

    if ( num2 == 5 ) 
        printf("Pjadisat-");

    if ( num2 == 6 ) 
        printf("Shesdisat-");

    if ( num2 == 7 ) 
        printf("semjdisat-");

    if ( num2 == 8 ) 
        printf("vosejmdisat-");

    if ( num2 == 9 ) 
        printf("Devjanosta-");
//end 1[2]0 - 1[9]0



//begin 12[0] - 19[0]
    if ( num3 == 1 ) 
        printf("Odin");


    if ( num3 == 2 ) 
        printf("Dva");


    if ( num3 == 3 ) 
        printf("Tri");

    if ( num2 == 1 && num3 == 3 ) 
        printf("trinadzat");


    if ( num3 == 4 ) 
        printf("4itire");


    if ( num3 == 5 ) 
        printf("Pjat");


    if ( num3 == 6 ) 
        printf("Shest");


    if ( num3 == 7 ) 
        printf("Semj");

    
    if ( num3 == 8 ) 
        printf("Vosemj");


    if ( num3 == 9 ) 
        printf("Devjat");


//end 12[0] - 19[0]


// begin 1[11] - 1[19]
    if ( num2 == 1 && num3 == 1 ) 
        printf("sto-odinazat");

    if ( num2 == 1 && num3 == 2 ) 
        printf("sto-dvenazat");

    if ( num2 == 1 && num3 == 3 ) 
        printf("sto-trinazat");  

    if ( num2 == 1 && num3 == 4 ) 
        printf("sto-4itirnazat");

    if ( num2 == 1 && num3 == 5 ) 
        printf("sto-pjatnazat");

    if ( num2 == 1 && num3 == 6 ) 
        printf("sto-shesnatzat");

    if ( num2 == 1 && num3 == 7 ) 
        printf("sto-semnazat");

    if ( num2 == 1 && num3 == 8 ) 
        printf("sto-vosemjnazat");

    if ( num2 == 1 && num3 == 9 ) 
        printf("sto-devjatnazat");
//end 1[11] - 1[19]    
    
            printf("\n");

    return 0;
}





Это сообщение отредактировал(а) d00mik - 28.3.2006, 18:36


--------------------
"Единственный способ изучать новый язык программирования - писать на нем 
программы." 
- Brian Kernighan

Remember, st1ng3r 
/server irc.ircline.ru /j #vingrad
PM   Вверх
Сый
Дата 28.3.2006, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



Всем спасибо, вот кое-что собрал:
Код

ОТДЕЛ ЧслТекст+;

ИСПОЛЬЗУЕТ 
  Вывод    ИЗ "...\Отделы\Обмен\"; 

ЗАДАЧА ВывестиТри(Число: ЦЕЛ);
ПЕР
  Цифры: РЯД 3 ИЗ ЦЕЛ;
УКАЗ
  ЕСЛИ Число > 999 ТО Вывод.Цепь("Число слишком велико."); ВОЗВРАТ КОН;
  Цифры[0] := Число ДЕЛИТЬ 100;
  Цифры[1] := (Число ОСТАТОК 100) ДЕЛИТЬ 10;
  Цифры[2] := (Число ОСТАТОК 100) ОСТАТОК 10;
  ВЫБРАТЬ Цифры[0] ИЗ
    0: Вывод.Цепь("")
  | 1: Вывод.Цепь("сто ")
  | 2: Вывод.Цепь("двести ")
  | 3: Вывод.Цепь("триста ")
  | 4: Вывод.Цепь("четыреста ")
  | 5: Вывод.Цепь("пятьсот ")
  | 6: Вывод.Цепь("шестьсот ")
  | 7: Вывод.Цепь("семьсот ")
  | 8: Вывод.Цепь("восемьсот ")
  | 9: Вывод.Цепь("девятьсот ")
  ИНАЧЕ КОН;
  ВЫБРАТЬ Цифры[1] ИЗ
    0: Вывод.Цепь("")
  | 1: Вывод.Цепь("")
  | 2: Вывод.Цепь("двадцать ")
  | 3: Вывод.Цепь("тридцать ")
  | 4: Вывод.Цепь("сорок ")
  | 5: Вывод.Цепь("пятьдесят ")
  | 6: Вывод.Цепь("шестьдесят ")
  | 7: Вывод.Цепь("семьдесят ")
  | 8: Вывод.Цепь("восемьдесят ")
  | 9: Вывод.Цепь("девяносто ")
  ИНАЧЕ КОН;
  ВЫБРАТЬ Цифры[2] ИЗ
    0: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("десять ") ИНАЧЕ Вывод.Цепь("") КОН;
  | 1: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("одиннадцать ") ИНАЧЕ Вывод.Цепь("один ") КОН;
  | 2: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("двенадцать ") ИНАЧЕ Вывод.Цепь("два ") КОН;
  | 3: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("тринадцать ") ИНАЧЕ Вывод.Цепь("три ") КОН;
  | 4: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("четырнадцать ") ИНАЧЕ Вывод.Цепь("четыре ") КОН;
  | 5: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("пятнадцать ") ИНАЧЕ Вывод.Цепь("пять ") КОН;
  | 6: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("шестнадцать ") ИНАЧЕ Вывод.Цепь("шесть ") КОН;
  | 7: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("семнадцать ") ИНАЧЕ Вывод.Цепь("семь ") КОН;
  | 8: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("восемнадцать ") ИНАЧЕ Вывод.Цепь("восемь ") КОН;
  | 9: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("девятнадцать ") ИНАЧЕ Вывод.Цепь("девять ") КОН;
  ИНАЧЕ КОН;
КОН ВывестиТри;

ЗАДАЧА СклонениеЧ(Число: ЦЕЛ; сл1, сл2, сл3: РЯД ИЗ ЗНАК); 
УКАЗ 
  ВывестиТри(Число); 
  ЕСЛИ (Число ОСТАТОК 100 >= 5) И (Число ОСТАТОК 100 <= 20) ТО Вывод.Цепь(сл3) 
  ИНАЧЕ 
    ЕСЛИ Число ОСТАТОК 10 = 1 ТО Вывод.Цепь(сл1) 
    АЕСЛИ (Число ОСТАТОК 10 >= 2) И (Число ОСТАТОК 10 <= 4) ТО Вывод.Цепь(сл2) 
    ИНАЧЕ Вывод.Цепь(сл3) 
    КОН; 
  КОН; 
  Вывод.Цепь(" ") 
КОН СклонениеЧ;

ЗАДАЧА ВТекст(Число: ЦЕЛ);
ПЕР
  ч: ЦЕЛ;
УКАЗ
  ЕСЛИ Число > 999999999 ТО Вывод.Цепь("Число слишком велико.") ИНАЧЕ
    ч := (Число ОСТАТОК 1000000000) ДЕЛИТЬ 1000000;
    ЕСЛИ ч # 0 ТО
      СклонениеЧ(ч, "миллион", "миллиона", "миллионов");
    ИНАЧЕ КОН;
    ч := (Число ОСТАТОК 1000000) ДЕЛИТЬ 1000;
    ЕСЛИ ч # 0 ТО
      СклонениеЧ(ч, "тысяча", "тысячи", "тысяч");
    ИНАЧЕ КОН;
    ВывестиТри(Число ОСТАТОК 1000);
  КОН
КОН ВТекст;

УКАЗ
  ВТекст(23543651)
КОН ЧслТекст.

Вызов задачи ВТекст с параметром 23543651 выведет на экран следующее:
двадцать три миллиона пятьсот сорок три тысячи шестьсот пятьдесят один
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
Сый
Дата 29.3.2006, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



Небольшая недоработка:
Например, число 2143 будет выведено так:
два тысячи сто сорок три
Вот код с исправлением (добавлен параметр рода следующего числительного в задачу ВывестиТри и СклонениеЧ):
Код

ОТДЕЛ ЧслТекст+; 

ИСПОЛЬЗУЕТ 
  Параметр ИЗ "...\Отделы\Обмен\", 
  Текст    ИЗ "...\Отделы\Числа\", 
  Вывод    ИЗ "...\Отделы\Обмен\"; 

ПЕР 
  Параметры: РЯД 10 ИЗ ЗНАК; 

ЗАДАЧА ВывестиТри(Число: ЦЕЛ; Род: ЦЕЛ); 
(* Число - переводимое число, Род - род следующего 
   числительного (тысяча - жен., миллион - муж.): 
   1 - женский, иначе мужской. *) 
ПЕР 
  Цифры: РЯД 3 ИЗ ЦЕЛ; 
УКАЗ 
  ЕСЛИ Число > 999 ТО Вывод.Цепь("Число слишком велико."); ВОЗВРАТ КОН; 
  Цифры[0] := Число ДЕЛИТЬ 100; 
  Цифры[1] := (Число ОСТАТОК 100) ДЕЛИТЬ 10; 
  Цифры[2] := (Число ОСТАТОК 100) ОСТАТОК 10; 
  ВЫБРАТЬ Цифры[0] ИЗ 
    0: Вывод.Цепь("") 
  | 1: Вывод.Цепь("сто ") 
  | 2: Вывод.Цепь("двести ") 
  | 3: Вывод.Цепь("триста ") 
  | 4: Вывод.Цепь("четыреста ") 
  | 5: Вывод.Цепь("пятьсот ") 
  | 6: Вывод.Цепь("шестьсот ") 
  | 7: Вывод.Цепь("семьсот ") 
  | 8: Вывод.Цепь("восемьсот ") 
  | 9: Вывод.Цепь("девятьсот ") 
  ИНАЧЕ КОН; 
  ВЫБРАТЬ Цифры[1] ИЗ 
    0: Вывод.Цепь("") 
  | 1: Вывод.Цепь("") 
  | 2: Вывод.Цепь("двадцать ") 
  | 3: Вывод.Цепь("тридцать ") 
  | 4: Вывод.Цепь("сорок ") 
  | 5: Вывод.Цепь("пятьдесят ") 
  | 6: Вывод.Цепь("шестьдесят ") 
  | 7: Вывод.Цепь("семьдесят ") 
  | 8: Вывод.Цепь("восемьдесят ") 
  | 9: Вывод.Цепь("девяносто ") 
  ИНАЧЕ КОН; 
  ВЫБРАТЬ Цифры[2] ИЗ 
    0: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("десять ") ИНАЧЕ Вывод.Цепь("") КОН; 
  | 1: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("одиннадцать ") ИНАЧЕ 
         ЕСЛИ Род = 1 ТО Вывод.Цепь("одна ") ИНАЧЕ Вывод.Цепь("один ") КОН КОН; 
  | 2: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("двенадцать ") ИНАЧЕ 
         ЕСЛИ Род = 1 ТО Вывод.Цепь("две ") ИНАЧЕ Вывод.Цепь("два ") КОН КОН; 
  | 3: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("тринадцать ") ИНАЧЕ Вывод.Цепь("три ") КОН; 
  | 4: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("четырнадцать ") ИНАЧЕ Вывод.Цепь("четыре ") КОН; 
  | 5: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("пятнадцать ") ИНАЧЕ Вывод.Цепь("пять ") КОН; 
  | 6: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("шестнадцать ") ИНАЧЕ Вывод.Цепь("шесть ") КОН; 
  | 7: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("семнадцать ") ИНАЧЕ Вывод.Цепь("семь ") КОН; 
  | 8: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("восемнадцать ") ИНАЧЕ Вывод.Цепь("восемь ") КОН; 
  | 9: ЕСЛИ Цифры[1] = 1 ТО Вывод.Цепь("девятнадцать ") ИНАЧЕ Вывод.Цепь("девять ") КОН; 
  ИНАЧЕ КОН; 
КОН ВывестиТри; 

ЗАДАЧА СклонениеЧ(Число: ЦЕЛ; сл1, сл2, сл3: РЯД ИЗ ЗНАК; ЖенскийРод: КЛЮЧ); 
УКАЗ 
  ЕСЛИ ЖенскийРод ТО ВывестиТри(Число, 1) ИНАЧЕ ВывестиТри(Число, 0) КОН; 
  ЕСЛИ (Число ОСТАТОК 100 >= 5) И (Число ОСТАТОК 100 <= 20) ТО Вывод.Цепь(сл3) 
  ИНАЧЕ 
    ЕСЛИ Число ОСТАТОК 10 = 1 ТО Вывод.Цепь(сл1) 
    АЕСЛИ (Число ОСТАТОК 10 >= 2) И (Число ОСТАТОК 10 <= 4) ТО Вывод.Цепь(сл2) 
    ИНАЧЕ Вывод.Цепь(сл3) 
    КОН; 
  КОН; 
  Вывод.Цепь(" ") 
КОН СклонениеЧ; 

ЗАДАЧА ВТекст(Число: ЦЕЛ); 
ПЕР 
  ч: ЦЕЛ; 
УКАЗ 
  ЕСЛИ Число > 999999999 ТО Вывод.Цепь("Число слишком велико.") ИНАЧЕ 
    ч := (Число ОСТАТОК 1000000000) ДЕЛИТЬ 1000000; 
    ЕСЛИ ч # 0 ТО 
      СклонениеЧ(ч, "миллион", "миллиона", "миллионов", ОТКЛ); 
    ИНАЧЕ КОН; 
    ч := (Число ОСТАТОК 1000000) ДЕЛИТЬ 1000; 
    ЕСЛИ ч # 0 ТО 
      СклонениеЧ(ч, "тысяча", "тысячи", "тысяч", ВКЛ); 
    ИНАЧЕ КОН; 
    ВывестиТри(Число ОСТАТОК 1000, 0); 
  КОН 
КОН ВТекст; 

УКАЗ 
  Параметр.Текст(1, Параметры); 
  ВТекст(УЗК(Текст.ВЦел(Параметры))) 

КОН ЧслТекст.

--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0929 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.