Ciao a tutti sto convertendo un programma da C++ a C, ecco qual'è il codice del programma in C++:
#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
#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