SRC: Цифры - буквы :)
От: OISV  
Дата: 27.09.02 17:44
Оценка: 3 (1)
Вот такая прога. Водишь число, а комп тебе пишет его словами.

#include "iostream.h"
#include "string.h"
class Number
{
public:
    int p1,p2,p3,p4,p5,p6,p7;
    int Power (int PARAM);    
    char String[200];
    char P1[20], P2[20], P3[20], P4[20], P5[20], P6[20], P7[20];
    void SetParts (int POWER, int NUMBER);
    void SetTitleOfNumbers (int PART, int OPTION, int FirstSecond);
    void CreateResult ();
    void LastNumber (int LAST_NUMBER, int OPTOINS);
    Number()
    {
        p1=p2=p3=p4=p5=p6=p7=0;
        strcpy(P1,"");strcpy(P5,"");
        strcpy(P2,"");strcpy(P6,"");
        strcpy(P3,"");strcpy(P7,"");
        strcpy(P4,"");strcpy(String,"");
    }
};
void main()
{
    int number;
    cout<<"Please, enter the number (0 - 9999999):\n";
    cin>>number;
    Number zx;
    int power = zx.Power(number);
    zx.SetParts(power,number);
    zx.SetTitleOfNumbers(zx.p7,1,1);
    zx.SetTitleOfNumbers(zx.p6,10,1);
    zx.SetTitleOfNumbers(zx.p5,100,1);
    zx.SetTitleOfNumbers(zx.p4,1,2);
    zx.SetTitleOfNumbers(zx.p3,10,2);
    zx.SetTitleOfNumbers(zx.p2,100,2);
    zx.SetTitleOfNumbers(zx.p1,1,3);
    zx.CreateResult();
    cout<<"\n"<<zx.String<<"\n"<<endl;
}
void Number::LastNumber(int LAST_NUMBER, int OPTIONS)
{
    char PP[20];
    strcpy(PP,"");
    switch (LAST_NUMBER)
    {
    case 1:
        {    strcpy(PP,"odinadtsat' ");    break;    }
    case 2:
        {    strcpy(PP,"dvenadtsat' ");    break;    }
    case 3:
        {    strcpy(PP,"trinadtsat' ");    break;    }
    case 4:
        {    strcpy(PP,"4etirnadtsat' ");    break;    }
    case 5:
        {    strcpy(PP,"pyatnadtsat' ");    break;    }
    case 6:
        {    strcpy(PP,"shestnadtsat' ");    break;    }
    case 7:
        {    strcpy(PP,"semnadtsat' ");    break;    }
    case 8:
        {    strcpy(PP,"vosemnadtsat' ");    break;    }
    case 9:
        {    strcpy(PP,"devyatnadtsat' ");    break;    }
    }
    switch (OPTIONS)
    {
    case 1:
        {    strcpy(P3,PP);    break;    }
    case 2:
        {    strcpy(P6,PP);    break;    }
    }
}
void Number::CreateResult()
{
    if (p1!=0)
    {
        strcpy(String,P1);
        if (p1==1)
        {    strcat(String,"million ");    }
        if (p1==2 || p1==3 || p1==4)
        {    strcat(String,"milliona ");    }
        if (p1==5 || p1==6 || p1==7 || p1==8 || p1==9)
        {    strcat(String,"millionov ");}
    }
    if (p2!=0)
    {    strcat(String,P2);    }
    if (p3!=0)
    {
        if (p3==1)
        if (p4!=0)
        {
            LastNumber(p4,1);
            p4=0;
        }
        strcat(String,P3);
    }
    if (p4!=0)
    {    strcat(String,P4);    }
    if (p4==0&&((p3==0&&p2!=0)||(p3!=0&&p2==0)||(p3!=0&&p2!=0&&p1!=0)))
    {    strcat(String,"tisya4' ");    }
    if (p4==5 || p4==6 || p4==7 || p4==8 || p4==9)
    {    strcat(String,"tisya4' ");    }
    if (p4==1)
    {    strcat(String,"tisya4a ");    }
    if (p4==2 || p4==3 || p4==4)
    {    strcat(String,"tisya4i ");    }
    if (p5!=0)
    {    strcat(String,P5);    }
    if (p6!=0)
    {
        if (p6==1)
        if (p7!=0)
        {
            LastNumber(p7,2);    
            p7=0;
        }
        strcat(String,P6);    
    }
    if (p7!=0)
    {    strcat(String,P7);    }
}
void Number::SetTitleOfNumbers(int PART, int OPTION, int FirstSecond)
{
    char PP[20];
    strcpy (PP,"");
    switch (OPTION)
    {
    case 1:
        {
            switch (PART)
            {
            case 1:
                {    strcat (PP,"odin ");    break;    }
            case 2:
                {    strcat (PP,"dva ");    break;    }
            case 3:
                {    strcat (PP,"tri ");    break;    }
            case 4:
                {    strcat (PP,"4etire ");    break;    }
            case 5:
                {    strcat (PP,"pyat' ");    break;    }
            case 6:
                {    strcat (PP,"shest' ");    break;    }
            case 7:
                {    strcat (PP,"sem' ");    break;    }
            case 8:
                {    strcat (PP,"vosem' ");    break;    }
            case 9:
                {    strcat (PP,"devyat' ");    break;    }
            }
            switch (FirstSecond)
            {
            case 1:
                {    strcpy(P7,PP); break;    }
            case 2:
                {    
                    strcpy(P4,PP);
                    if (PART==2)
                    {    strcpy(P4,"dve ");    }
                    if (PART==1)
                    {    strcpy(P4,"odna ");    }
                    break;    
                }
            case 3:
                {    strcpy(P1,PP); break;    }
            }
            break;
        }
    case 10:
        {
            switch (PART)
            {
            case 1:
                {    strcat (PP,"desyat' ");    break;    }
            case 2:
                {    strcat (PP,"dvadtsat' ");    break;    }
            case 3:
                {    strcat (PP,"tridtsat' ");    break;    }
            case 4:
                {    strcat (PP,"sorok ");    break;    }
            case 5:
                {    strcat (PP,"pyat'desyat ");    break;    }
            case 6:
                {    strcat (PP,"shest'desyat ");    break;    }
            case 7:
                {    strcat (PP,"semdesyat ");    break;    }
            case 8:
                {    strcat (PP,"vosemdesyat");    break;    }
            case 9:
                {    strcat (PP,"devyanosto' ");    break;    }
            }
            switch (FirstSecond)
            {
            case 1:
                {    strcpy(P6,PP); break;    }
            case 2:
                {    strcpy(P3,PP); break;    }
            }
            break;
        }
    case 100:
        {
            switch (PART)
            {
            case 1:
                {    strcat (PP,"sto ");    break;    }
            case 2:
                {    strcat (PP,"dvesti ");    break;    }
            case 3:
                {    strcat (PP,"trista ");    break;    }
            case 4:
                {    strcat (PP,"4etiresta ");    break;    }
            case 5:
                {    strcat (PP,"pyat'sot ");    break;    }
            case 6:
                {    strcat (PP,"shest'sot ");    break;    }
            case 7:
                {    strcat (PP,"sem'sot ");    break;    }
            case 8:
                {    strcat (PP,"vosem'sot ");    break;    }
            case 9:
                {    strcat (PP,"devyat'sot ");    break;    }
            }
            switch (FirstSecond)
            {
            case 1:
                {    strcpy(P5,PP); break;    }
            case 2:
                {    strcpy(P2,PP); break;    }
            }
            break;
        }
    }
}
int Number::Power(int PARAM)
{
    int raz=1;
    bool temp=1;
    while (temp)
    {
        int e=PARAM%10;
        if (PARAM/10==0)
        {
            temp=false;
        }
        else
        {
            PARAM=(PARAM-e)/10;
            raz++;
        }
    }
    return raz;
}
void Number::SetParts(int POWER, int NUMBER)
{
    switch (POWER)
    {
    case 1:
        {
            p7=NUMBER;
            break;
        }
    case 2:
        {
            p7=NUMBER%10;
            p6=(NUMBER-p7)/10;
            break;
        }
    case 3:
        {
            p7=NUMBER%10;
            p6=((NUMBER-p7)/10)%10;
            p5=(((NUMBER-p7)/10)-p6)/10;
            break;
        }
    case 4:
        {
            p7=NUMBER%10;
            p6=((NUMBER-p7)/10)%10;
            p5=((((NUMBER-p7)/10)-p6)/10)%10;
            p4=(((NUMBER-p7)/10-p6)/10-p5)/10;
            break;
        }
    case 5:
        {
            p7=NUMBER%10;
            p6=((NUMBER-p7)/10)%10;
            p5=((((NUMBER-p7)/10)-p6)/10)%10;
            p4=((((NUMBER-p7)/10-p6)/10-p5)/10)%10;
            p3=((((NUMBER-p7)/10-p6)/10-p5)/10-p4)/10;
            break;
        }
    case 6:
        {
            p7=NUMBER%10;
            p6=((NUMBER-p7)/10)%10;
            p5=((((NUMBER-p7)/10)-p6)/10)%10;
            p4=((((NUMBER-p7)/10-p6)/10-p5)/10)%10;
            p3=(((((NUMBER-p7)/10-p6)/10-p5)/10-p4)/10)%10;
            p2=(((((NUMBER-p7)/10-p6)/10-p5)/10-p4)/10-p3)/10;
            break;
        }
    case 7:
        {
            p7=NUMBER%10;
            p6=((NUMBER-p7)/10)%10;
            p5=((((NUMBER-p7)/10)-p6)/10)%10;
            p4=((((NUMBER-p7)/10-p6)/10-p5)/10)%10;
            p3=(((((NUMBER-p7)/10-p6)/10-p5)/10-p4)/10)%10;
            p2=((((((NUMBER-p7)/10-p6)/10-p5)/10-p4)/10-p3)/10)%10;
            p1=((((((NUMBER-p7)/10-p6)/10-p5)/10-p4)/10-p3)/10-p2)/10;
            break;
        }
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.