Newsgroup: it.comp.lang.c
Titolo: Split in C

Premesso che sono un autodidatta  e quindi  senza nessuna base informatica
"colta" mi sono cimentato nell'uso del perl scrivendo (gratuitamente)uno
script perl la gestione di un fondo nella scuola dove insegno musica.
Questa è una piccola parte del codice:
#!/perl/bin/perl
print "inserisci un numero con i millesimi\n";
print "usando il punto e non la virgola\n";
$lordo2=<STDIN>;
chop($lordo2);
$o=0;
@tyr=split (/\./,$lordo2);
@dyr=split (//,$tyr[1]);
if ($dyr[2]<5)
{
$a="$tyr[0]\.$dyr[0]$dyr[1]";
}
else {
$gyr="$dyr[0]$dyr[1]";
$ryr="$tyr[0]\.$gyr";
$a=$ryr+0.01;
}
@tyro=split (/\./,$a);
@dyro=split (//,$tyro[1]);
if ($a=~ /\.\d\d/)
{
$lordo ="$tyro[0]\.$dyro[0]$dyro[1]";
}
elsif ($a=~ /\.\d/)
{
$ryro="$tyro[0]\.$dyro[0]";
$b=$ryro;
$lordo="$b$o";
}
else
{
$lordo="$a$o$o";
}
print $lordo;
print "\nPremi un'ultima volta Invio per chiudere il programma. ";
$ciao=<STDIN>;
chop ($ciao);
Mi piacerebbe trascrivere l'intero script in C
e come primo passo ho comprato "Programmare in C " di Aitken e Jones
ma non ho trovato niente a proposito degli split sia sui numeri che sulle
stringhe .
Chi sarebbe così gentile da scrivermi un piccolo esempio?
Ringrazio tutti e  da ora in avanti non mancherò di seguire il NG.
Alessandro

 Mi piacerebbe trascrivere l'intero script in C
Lo script lo devi pensare in maniera completamente diversa e non fare una
semplice operazione di traduzione. Ad esempio, pur non capendo un tubo di
perl, mi sembra di capire che l'istruzione:
    @tyr=split (/\./,$lordo2);
serve per ricavare la parte intera del numero. Questo in C si fa
semplicemente con:
    tyr = (int)lordo2;
In C, inoltre, non esistono le espressioni regolari e vi è una enorme
differenza fra numeri e stringhe, anche se quest'ultime contengono solo
caratteri numerici.
Maurizio.

"Maurizio." <mau...@libero.itA> ha scritto nel messaggio
news:qYjk9.9842$e31.2...@twister2.libero.it...

E' vero che vengo a conoscere la parte intera del numero ma lo script mi
serve per correggere i valori decimali in perl funziona benissimo ma volendo
imparare il C come risolvo il problema?
(es:.?52.9896 si trasforma in ?52.99 e ?40.2531 in ?40.25)
Ringrazio Maurizio per l'attenzione............
Alessandro

 (es:.?52.9896 si trasforma in ?52.99 e ?40.2531 in ?40.25)
Se devi arrotondare un numero decimale alla seconda cifra:
    x = floor(x * 100 + 0.5) / 100
oppure se, lasciando al numero tutte le cifre decimali che ha, devi solo
stampare il risultato con 2 cifre decimali:
    printf("%.2f", x);
oppure se vuoi convertire il numero in una stringa, con sole 2 cifre
decimali:
    sprintf(stringa, "%.2f", x);
Maurizio.

Tutto OK, funziona benissimo e mi sembra di avere tutti i dati per
riscrivere  lo script
 (450 righe in perl. Sicuramente potevo risparmiarne moltissime).
Grazie  alla prossima............
Alessandro

Premetto che è tanto (troppo) tempo che non lavoro più in C, ma se non
ricordo male per le stringhe c'è la liobreria apposita string.h.
I numeri, se usi valori privi di virgola, puoi usare le maschere e/o gli
operatori di shift per selezionare una parte del tuo dato.
Per i valori float o double, sicuramnete la libreria math.h (la mano sul
fuoco per il nome di questa libreria non ce la metto) ti dovrebbe dare tutta
quella serie di funzioni necessarie per prendere parte intera e parte
decimale di un numero.
Scusami se son un pochino vago, ma dopo 4 anni mi ricordo troppo poco del C
e sto ristudiandomelo da zero in questi giorni.

  (450 righe in perl. Sicuramente potevo risparmiarne moltissime).
Secondo me, in C ne verranno _molte_ piu`...
-- 
 Ciao, Bianco.                         Reply to luca.bianco (at) 
tiscali.it
|---------[Powered by Debian GNU/Linux 3.0 - 2.2.20 - AMD K6-200]---------|
|---------------------[Linux Registered User #287769]---------------------|