|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: May 2013
Messaggi: 18
|
AIUTATEMI E' URGENTISSIMO VI PREGO
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;
}
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;
}
Ultima modifica di Squiddi : 12-02-2015 alle 15:25. |
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12966
|
In questo forum non si risolvono esercizi, ne si fanno esercizi per conto di altri.
Dopodiché dando un'occhiata veloce, di C++ vedo ben poco, ti suggerisco di rimuovere la direttiva namespace e di usare la funzione printf al posto dei cout, e scanf al posto di cin. |
|
|
|
|
#3 |
|
Bannato
Iscritto dal: May 2013
Messaggi: 18
|
MA c'è anche un boolean, con quello come faccio ?
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Quote:
|
|
|
|
|
|
#5 |
|
Bannato
Iscritto dal: May 2013
Messaggi: 18
|
Se non consegno entro domani becco 2
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12966
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
|
|
|
|
|
#8 |
|
Bannato
Iscritto dal: May 2013
Messaggi: 18
|
-CUT-
Ultima modifica di Squiddi : 12-02-2015 alle 15:25. |
|
|
|
|
#9 |
|
Bannato
Iscritto dal: May 2013
Messaggi: 18
|
Adesso ho fatto tutto da solo, ma non funziona come dovrebbe il programma, adesso rispetto le regole, potreste aiutarmi
|
|
|
|
|
#10 |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16214
|
Già col titolo parti male: questo forum non è un help desk, e non puoi pensare che la gente ti dia retta solo perché scrivi nel titolo che è una cosa urgente. Il titolo della discussione deve spiegare di cosa si parla: e il tuo non lo fa.
Non essendo questo forum un help desk, meno che mai si fanno i compiti altrui. Oltretutto, scanf (la funzione standard di input da riga di comando in C) è un disastro, e certo non ti possiamo spiegare in dodici ore tutte le sue sottigliezze e tutti i suoi problemi.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu Ultima modifica di Ziosilvio : 12-02-2015 alle 15:52. |
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:52.



















