Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 29
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    13

    [C]Programma non funziona come dovrebbe

    Ciao a tutti sto convertendo un programma da C++ a C, ecco qual'è il codice del programma in C++:
    codice:
    #include <iostream>
    #include <stdlib.h>
    #include <string.h>
    
    
    using namespace std;
    
    
    const int numGruppi = 3;
    const char *gruppoName[] = { "mila", "milioni" };
    const char *irregular[] = { "mille", "unmilione" };
    
    
    const char *cifre19[] = {
                            "zero",
                            "uno",
                            "due",
                            "tre",
                            "quattro",
                            "cinque",
                            "sei",
                            "sette",
                            "otto",
                            "nove",
                            "dieci",
                            "undici",
                            "dodici",
                            "tredici",
                            "quattordici",
                            "quindici",
                            "sedici",
                            "diciassette",
                            "diciotto",
                            "diciannove"
                            };
    
    
    const char *decine[] = {
                            "venti",
                            "trenta",
                            "quaranta",
                            "cinquanta",
                            "sessanta",
                            "settanta",
                            "ottanta",
                            "novanta"
                           };
    
    
    
    
    
    
    bool Cifra ( const char *ch );
    int moveEfondo ( char array[], int size );
    void ConvLetter ( const char cifreIn[], int size );
    
    
    bool Cifra ( const char *str )
    {
    
    
        for( ; *str != '\0'; str++)
        {
            if ((*str < 48) || (*str > 57))
                return false;
        }
    
    
        return true;
    
    
    
    
    }
    
    
    int moveEfondo ( char array[], int size )
    {
        int lungChars = strlen ( array ),
            sposta = (size-1);
    
    
        if (lungChars < size)
        {
            for (int i=0; i < lungChars; i++)
            {
                array[sposta] = array[((lungChars-1)-i)];
                sposta--;
            }
    
    
            for (int j=0; j < (size-lungChars); j++)
                array[j] = 48;
        }
    
    
        if (size < 1)
            return -1;
    
    
        else return 0;
    }
    
    
    
    
    void ConvLetter ( const char cifreIn[], int size )
    {
    
    
    
    
        void Centinaia ( int cifre[], int group );
        void Decine ( int cifre[], int group );
        void Gruppi ( int cifre[], int group );
    
    
    
    
        int gCifre [numGruppi] = { 0 };
    
    
    
    
    
    
    
    
        for (int gruppo=(numGruppi-1), copia=0; gruppo >= 0; gruppo--, copia += 3)
        {
    
    
    
    
            gCifre[gruppo] = ( (cifreIn[copia]-48)*100 +
                               (cifreIn[copia+1]-48)*10 +
                               (cifreIn[copia+2]-48) );
        }
    
    
    
    
        int zero = 0;
    
    
    
    
        for (int chkGroup=(numGruppi-1); chkGroup >= 0; chkGroup--)
        {
    
    
            if (gCifre[chkGroup] == 0)
                zero++;
    
    
            else
            {
                Centinaia ( gCifre, chkGroup );
    
    
    
    
                Decine ( gCifre, chkGroup );
    
    
    
    
                Gruppi ( gCifre, chkGroup );
    
    
    
    
            }
    
    
        }
    
    
    
    
        if (zero == numGruppi)
            cout << cifre19[0];
    
    
    
    
        cout << endl;
    
    
    }
    
    
    void Centinaia ( int cifre[], int group )
    {
    
    
    
    
        if ((cifre[group]/100) > 1)
            cout << cifre19[ (cifre[group]/100) ];   // "due"..."nove"
    
    
    
    
        if ((cifre[group]/100) > 0)
        {
            if (((cifre[group]%100)/10) == 8 )
                cout << "cent";
            else cout << "cento";
        }
    
    
    }
    
    
    
    
    
    
    void Decine ( int cifre[], int group )
    {
    
    
    
    
        if (((cifre[group]%100) < 20) && ((cifre[group]%100) > 0))
        {
    
    
            if ( (group == 0)
                    || ((group > 0) && (cifre[group] != 1)) )
                cout << cifre19[ (cifre[group]%100) ];
    
    
        }
        else
        {
    
    
            if ( ((cifre[group]%100) > 20) &&
                    (((cifre[group]%10) == 1) || ((cifre[group]%10) == 8)) )
            {
                char temp[9] = "";
    
    
                cout << strncpy ( temp,
                                  decine[ (((cifre[group]%100)/10) - 2) ],
                                  (strlen (decine[ (((cifre[group]%100)/10) - 2) ]) -1));
            }
    
    
            else if ((cifre[group]%100) >= 20)
                cout << decine[ (((cifre[group]%100)/10) - 2) ];
    
    
            if (((cifre[group]%100)%10) > 0)
                cout << cifre19 [ ((cifre[group]%100)%10) ];
    
    
        }
    
    
    }
    
    
    
    
    
    
    
    
    void Gruppi ( int cifre[], int group )
    {
        if (group > 0)
        {
            if (cifre[group] > 1)
                cout << gruppoName[ group-1 ];
    
    
            else cout << irregular[ group-1 ];
        }
    
    
    }
    
    
    
    
    
    
    
    
    
    
    int main()
    {
    
    
        char input[numGruppi*3];
    
    
        cout << "Digita un intero (max " << (numGruppi*3) << " cifre): ";
        cin >> input;
    
    
        if (Cifra ( input ) == true)
        {
    
    
            moveEfondo ( input, numGruppi*3 );
    
    
            cout << endl;
    
    
    
    
            ConvLetter ( input, numGruppi*3 );
    
    
        }
    
    
        else
        {
            cout << endl
                 << "ERRORE: Input non valido!" << endl
                 << "Riavviare il programma e digitare soltanto numeri."
                 << endl << endl;
        }
        system("PAUSE");
        return 0;
    }

    E questo è quello che io ho fatto in C
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    
    
    const int numGruppi = 3;
    const char *gruppoName[] = { "mila", "milioni" };
    const char *irregular[] = { "mille", "unmilione" };
    
    
    const char *cifre19[] = {
                            "zero",
                            "uno",
                            "due",
                            "tre",
                            "quattro",
                            "cinque",
                            "sei",
                            "sette",
                            "otto",
                            "nove",
                            "dieci",
                            "undici",
                            "dodici",
                            "tredici",
                            "quattordici",
                            "quindici",
                            "sedici",
                            "diciassette",
                            "diciotto",
                            "diciannove"
                            };
    
    
    const char *decine[] = {
                            "venti",
                            "trenta",
                            "quaranta",
                            "cinquanta",
                            "sessanta",
                            "settanta",
                            "ottanta",
                            "novanta"
                           };
    
    
    
    
    
    
    int Cifra ( const char *ch );
    int moveEfondo ( char array[], int size );
    void ConvLetter ( const char cifreIn[], int size );
    
    
    int Cifra ( const char *str )
    {
    
    
        for( ; *str != '\0'; str++)
        {
            if ((*str < 48) || (*str > 57))
                return 0;
        }
    
    
        return 1;
    
    
    
    
    }
    
    
    int moveEfondo ( char array[], int size )
    {
        int i,j;
        int lungChars = strlen ( array ),
            sposta = (size-1);
    
    
        if (lungChars < size)
        {
            for (i=0; i < lungChars; i++)
            {
                array[sposta] = array[((lungChars-1)-i)];
                sposta--;
            }
    
    
            for (j=0; j < (size-lungChars); j++)
                array[j] = 48;
        }
    
    
        if (size < 1)
            return -1;
    
    
        else return 0;
    }
    
    
    
    
    void ConvLetter ( const char cifreIn[], int size )
    {
    
    
    
    
        void Centinaia ( int cifre[], int group );
        void Decine ( int cifre[], int group );
        void Gruppi ( int cifre[], int group );
    
    
    
    
        int gCifre [numGruppi];
    
    
    
    
    
    
        int gruppo,copia;
        for (gruppo=(numGruppi-1), copia=0; gruppo >= 0; gruppo--, copia += 3)
        {
    
    
    
    
            gCifre[gruppo] = ( (cifreIn[copia]-48)*100 +
                               (cifreIn[copia+1]-48)*10 +
                               (cifreIn[copia+2]-48) );
        }
    
    
    
    
        int zero = 0;
    
    
        int chkGroup;
        for (chkGroup=(numGruppi-1); chkGroup >= 0; chkGroup--)
        {
    
    
            if (gCifre[chkGroup] == 0)
                zero++;
    
    
            else
            {
                Centinaia ( gCifre, chkGroup );
    
    
    
    
                Decine ( gCifre, chkGroup );
    
    
    
    
                Gruppi ( gCifre, chkGroup );
    
    
    
    
            }
    
    
        }
    
    
    
    
        if (zero == numGruppi)
            printf("%c",cifre19[0]);
    
    
    
    
       // cout << endl;
    
    
    }
    
    
    void Centinaia ( int cifre[], int group )
    {
    
    
    
    
        if ((cifre[group]/100) > 1)
            printf("%c",cifre19[ (cifre[group]/100) ]);   // "due"..."nove"
    
    
    
    
        if ((cifre[group]/100) > 0)
        {
            if (((cifre[group]%100)/10) == 8 )
                printf("cent");
            else printf("cento");
        }
    
    
    }
    
    
    
    
    
    
    void Decine ( int cifre[], int group )
    {
    
    
    
    
        if (((cifre[group]%100) < 20) && ((cifre[group]%100) > 0))
        {
    
    
            if ( (group == 0)
                    || ((group > 0) && (cifre[group] != 1)) )
                printf("%c",cifre19[ (cifre[group]/100) ]);
    
    
        }
        else
        {
    
    
            if ( ((cifre[group]%100) > 20) &&
                    (((cifre[group]%10) == 1) || ((cifre[group]%10) == 8)) )
            {
                char temp[9] = "";
    
    
                printf("%c",temp,decine[ (((cifre[group]%100)/10) - 2) ],(strlen (decine[ (((cifre[group]%100)/10) - 2) ]) -1));
                //cout << strncpy ( temp,
                //                  decine[ (((cifre[group]%100)/10) - 2) ],
                //                  (strlen (decine[ (((cifre[group]%100)/10) - 2) ]) -1));
            }
    
    
            else if ((cifre[group]%100) >= 20)
                printf("%c",decine[ (((cifre[group]%100)/10) - 2) ]);
                //cout << decine[ (((cifre[group]%100)/10) - 2) ];
    
    
            if (((cifre[group]%100)%10) > 0)
                printf("%c",cifre19 [ ((cifre[group]%100)%10) ]);
                //cout << cifre19 [ ((cifre[group]%100)%10) ];
    
    
        }
    
    
    }
    
    
    
    
    
    
    
    
    void Gruppi ( int cifre[], int group )
    {
        if (group > 0)
        {
            if (cifre[group] > 1)
                printf("%c",gruppoName[ group-1 ]);
    
    
            else printf("%c",irregular[ group-1 ]);
        }
    }
    
    
    
    
    
    
    
    
    
    
    int main()
    {
    
    
        char input[numGruppi*3];
        int a = numGruppi*3;
        printf("Digita un intero max %d cifre: ",a);
    
    
        scanf("%c",&input);
        if (Cifra ( input ) == 1)
        {
    
    
            moveEfondo ( input, numGruppi*3 );
    
    
            printf("\n");
    
    
            ConvLetter ( input, numGruppi*3 );
    
    
        }
    
    
        else
        {
            printf("ERRORE: Input non valido! \nRiavviare il programma e digitare soltanto numeri.");
        }
        system("PAUSE");
        return 0;
    }

    Solo che il codice in C parte ma non converte i numeri in lettere come dovrebbe, potreste dirmi dove ho sbagliato ? Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Che vuol dire "non funziona" ?

    Il problema ha a che fare con questo

    http://www.hwupgrade.it/forum/showthread.php?t=2700321

    e questo

    http://www.iprogrammatori.it/forum-p...mo-t23432.html

    ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    13
    E' la stessa cosa, vuol dire che in C++ funziona, ma io l'ho convertito in C ma non funziona, ho scritto in altri forum perché ho un urgenza di finirlo e non capisco perché in C non funziona mentre in C++ si, ho provato a convertirlo da solo ma c'è qualcosa che non va....

  4. #4
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    Che vuol dire non funziona????? Ti da errore????? Compila????? Cosa dovrebbe fare il programma se dovesse funzionare?????

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Sicuramente la scanf con %c è sbagliata ... devi inserire una stringa %s ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    13
    Quote Originariamente inviata da bstefano79 Visualizza il messaggio
    Che vuol dire non funziona????? Ti da errore????? Compila????? Cosa dovrebbe fare il programma se dovesse funzionare?????
    Non mi da nessun errore, compila senza problemi, ma non converte il numero in lettere come fa l'altro programma in C++
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Sicuramente la scanf con %c è sbagliata ... devi inserire una stringa %s ...
    Fatto ma non va nemmeno così

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Fatto cosa? Come hai corretto?

    Non è solo quello l'errore ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    13
    Quali sono gli errori allora? Ho provato a modificare lo scanf che ha detto lui...

  9. #9
    Potresti chiedere a chi ha creato il codice originale, se è stato così gentile da lasciartelo usare, magari te lo converte pure
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    13
    Quote Originariamente inviata da Samuele_70 Visualizza il messaggio
    Potresti chiedere a chi ha creato il codice originale, se è stato così gentile da lasciartelo usare, magari te lo converte pure
    Ma non hai capito? L'ho già convertito da solo, ma c'è qualcosa che non va, ditemi nel programma in C cosa ho sbagliato nel convertire, hai capito adesso ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.