IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задача на строки
сообщение
Сообщение #1


Гость






Народ, помогите плз решить задачу. Даётся текстовая строка представляющая собой правильную запись целого числа, напр "одиннадцать" .на ввод строки должно выводиться её числовое значение т.е. если вводится "сто двадцать четыре" должно вывестись
124. Загонять case на каждое числительное мне как-то не особо :-[
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Женский

Репутация: -  0  +


знаете.. только там на С. хотя какая разница? переделать можно.. ;D


#include <stdio.h>
#include <string.h>

#define DG_POWER 6 // Энто допустимая степень числа 1000 для __int64:
// При необходимости его легко увеличить,
struct s_POWER { // дополнив массив 'a_power' и заменив
int sex; // тип __int64 на более серьезный
char *one;
char *four;
char *many;
} a_power[]= {
{0,NULL ,NULL ,NULL }, // 1
{1,"тысяча " ,"тысячи " ,"тысяч " }, // 2
{0,"миллион " ,"миллиона " ,"миллионов " }, // 3
{0,"миллиард " ,"миллиарда " ,"миллиардов " }, // 4
{0,"триллион " ,"триллиона " ,"триллионов " }, // 5
{0,"квадриллион ","квадриллиона ","квадриллионов "}, // 6
{0,"квинтиллион ","квинтиллиона ","квинтиллионов "} // 7
};

struct s_UNIT {
char *one[2];
char *two;
char *dec;
char *hun;
} digit[10]= {
{{"" ,"" },"десять " ,"" ,"" },
{{"один " ,"одна " },"одиннадцать " ,"десять " ,"сто " },
{{"два " ,"две " },"двенадцать " ,"двадцать " ,"двести " },
{{"три " ,"три " },"тринадцать " ,"тридцать " ,"триста " },
{{"четыре ","четыре "},"четырнадцать ","сорок " ,"четыреста "},
{{"пять " ,"пять " },"пятнадцать " ,"пятьдесят " ,"пятьсот " },
{{"шесть " ,"шесть " },"шестнадцать " ,"шестьдесят " ,"шестьсот " },
{{"семь " ,"семь " },"семнадцать " ,"семьдесят " ,"семьсот " },
{{"восемь ","восемь "},"восемнадцать ","восемьдесят ","восемьсот "},
{{"девять ","девять "},"девятнадцать ","девяносто " ,"девятьсот "}
};

string dig2str (__int64 p_summa, int p_sex, char *p_one, char *p_four, char *p_many)
{
int i,mny;
string str,result="";
__int64 divisor; //делитель

a_power[0].sex = p_sex;
a_power[0].one = p_one;
a_power[0].four = p_four;
a_power[0].many = p_many;

if(p_summa == (__int64)0) return string("ноль ")+p_many;
if(p_summa < (__int64)0) {result="минус "; p_summa = -p_summa;}

for(i=0,divisor=(__int64)1; i<DG_POWER; i++)
divisor *= (__int64)1000;
for(i=DG_POWER-1; i>=0; i--){
divisor /= 1000;
mny = (int)(p_summa / divisor);
p_summa %= divisor;
str="";
if(mny==0){
if(i>0) continue;
str += a_power[i].one;
}else{
if(mny>=100){str += digit[mny/100].hun; mny%=100;}
if(mny>=20 ){str += digit[mny/10 ].dec; mny%=10; }
if(mny>=10 ) str += digit[mny-10 ].two; else
if(mny>=1 ) str += digit[mny].one[a_power[i].sex];
switch(mny){
case 1: str += a_power[i].one; break;
case 2: case 3:
case 4: str += a_power[i].four; break;
default: str += a_power[i].many; break;
};
}
result += str;
}
return result;
}


--------------------
непонимающая..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
UtaH   Задача на строки   1.12.2003 10:45
sandman   Re: Задача на строки   1.12.2003 12:05
fms   Re: Задача на строки   1.12.2003 14:15
APAL   Re: Задача на строки   1.12.2003 14:45
UtaH   Re: Задача на строки   1.12.2003 16:59
fms   Re: Задача на строки   1.12.2003 21:38
UtaH   Re: Задача на строки   2.12.2003 8:35
fms   Re: Задача на строки   2.12.2003 22:46
UtaH   Re: Задача на строки   4.12.2003 8:40
fms   Re: Задача на строки   4.12.2003 21:14
UtaH   Re: Задача на строки   6.12.2003 18:06
fms   Re: Задача на строки   6.12.2003 23:58


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 5.11.2025 16:11
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name