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

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

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

 
 Ответить  Открыть новую тему 
> Задача на строки
сообщение
Сообщение #1


Гость






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


Пионер
**

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

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


давно ничего не писал, но может такая бредовая идея подойдет:

создать 2 массива, в одном из которых будут строковые знаечния (один,два...десять...) а в другом соответсвующие числа, с такими же индексами.
example:
array['один','два',итакдалее] of string
array[1,2,...] of integer
далее разбить входящую строку на слова и анализировать каждое слово, просматривая массив строк и на сопоставляя соответствующие элементы числового массива, складывая их в последствии...
p.s. что-нибудь из этого понял?  ;)


--------------------
Плавают разными стилями, тонут-одним (ц) Кирпичи
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

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

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


есть решение наоборот. из числа в текст. т.е. 124="сто двадцать четыре"

если нужно могу выложить.


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


Смотрю...
*****

Группа: Пользователи
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

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


Может поможет:

Код

Function GetNumFromSt(Sc : String) : LongInt;
Var Cs         : String;
   N1s,N2s,Ks : Byte;
   ddd,iii    : Integer;
Begin
 N1s:=0;
 Ks:=0;
   While (N1s=0) and (Ks<=Length(Sc)) do
     Begin
       Inc(Ks);
       If (Sc[Ks]>='0') and (Sc[Ks]<='9') then N1s:=Ks;
     End;
   If N1s=0 then
          Begin
            GetNumFromSt:=0;
            Exit;
          End;
   N2s:=N1s;
   While (Sc[N2s]>='0') and (Sc[N2s]<='9') do
                                             Inc(N2s);
   Cs:='';
   Dec(N2s);
   For Ks:=N1s to N2s do Cs:=Cs+Sc[Ks];
   Val(Cs,ddd,iii);
   GetNumFromSt:=ddd;
End;


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Sandman, а если там числа до 999999999?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Бывалый
***

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

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


ну не надо дак не надо..  ;D


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


Гость






FMS,выложи плиз может поможет ;D
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Бывалый
***

Группа: Пользователи
Сообщений: 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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Спасибо огромное. Щас вот переводить буду :o
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Бывалый
***

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

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


2UtaH
удачи.. она тебе пригодится..  ;D


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


Гость






Спасибо за помощь на олимпиаде хоть не позорнулась.
2fms: это ты из книжки выписала?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Бывалый
***

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

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


2UtaH

неа.. в инете как то нашла.. понравилось.. сохранила.. ну вот и пригодилось.. вроде.  ;D


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

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

 





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