Newsgroup: it.comp.lang.c
Titolo: NON ne vengo fuori

Hey chi mi aiuta:
Come ben capirete sono alle primissime armi con il C.
Anche se  esiste già la funzione atoi(), il mio insegnante mi ha dato il
seguente compito.
Devo implementare un ciclo che legge una stringa di caratteri nel
seguente modo:
Leggo un carattere
Converto il carattere in un intero e poi lo metto in una stringa di
interi
Calcolo il mio intero a partire dalla stinga di interi.
Il mio Prof ci ha detto di usare lo switch case per fare la conversione
e di allocare i numeri così ottenuti in un vettore con un ciclo for.
Chi mi aiuta? NON ne vengo fuori :((((
Grazie in anticipo
-- 
Posted from 
mail-1.tiscalinet.it
 [195.130.225.147] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
/* Converte un carattere nella corrispettiva cifra usando switch-case */
int Converti (char carattere)
{
     int numero;
 
     switch (carattere)
     {
        case '0':numero=0;break;
        case '1':numero=1;break;
        case '2':numero=2;break;
        case '3':numero=3;break;
        case '4':numero=4;break;
        case '5':numero=5;break;
        case '6':numero=6;break;
        case '7':numero=7;break;
        case '8':numero=8;break;
        case '9':numero=9;break;
     }
 
     return numero;
}
/* Converte un vettore di interi nel numero corrispondente */
int VetToNum (int *numero,int dim)
{
        int i;
        int risultato;
 
        risultato=0;
 
        for(i=0;i<dim;i++)
        {
           risultato+=numero[i]*pow(10,dim-1-i);
        }
 
        return risultato;
}
/* Converte una stringa di caratteri in un vettore di interi */
int *StringToVet (char *stringa)
{
        int i,len,*buffer;
 
        len=strlen(stringa);
        buffer=malloc(sizeof(int)*len);
        for(i=0;i<len;i++)
           buffer[i]=Converti(stringa[i]);
 
        return buffer;
}
int main()
{
       char prova[81]; /* Fisso la lunghezza della stringa in 81 caratteri 
*/    
       int *appoggio;
 
       scanf("%s",prova);
       appoggio=StringToVet(prova);
       printf("%d",VetToNum(appoggio,strlen(prova)));
 
       return 0;
}       
 
 
Credo che possa andare....é minimale ma dovrebbe funzionare


é l'arte di spaccare il capello in quattro

Ciao amici. Vi ringrazio per i preziosi consigli e ringrazio Abacuc per avermi
dato il codice completo.
Prometto che cerchrň di non rompervi piů di tanto le scatole piů che tanto nel
corso del mio studio del linguaggio C :)....ma preparatevi ad altre domande
:)))
Grazie
Caio
-- 
Posted from 
mail-6.tiscalinet.it
 [195.130.225.152] 


Ciao Abacuc,
questa e“piu“ sintetica invece di fare quello switchone:
int Converti (char carattere)
{
    return carattere - '0';
}
Comunque bisognerebbe fare attenzione nel controllare che il carattere
passato equivalga a una cifra fra 0 e 9.
Mauro

Hai ragione!
Non avevo letto della traccia del suo prof, scusami
Mauro

}
Non e' portabile.
Non e' assicurato che i caratteri siano memorizzati nel set base della
macchina in ordine progressivo.
--
Andrea Laforgia (ICQ 87230455)
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

 }
E' ovvio, ma lui DOVEVA usare lo switch, era un compito di informatica ^_^
e come sempre ti insegnano solo cose inutili, a scuola ^_^
--
Peruch Emiliano
SoftWay S.r.l.


Certo che si....tuttavia  ho fatto già troppo per il nostro amico....non
credi?

 se le cifre da 0 a 9 non sono consecutive, cio' non funziona.
Su quale sistema non sono consecutivi?


 }
della serie tetrapiloctomia in C:



Figurati....e poi Laforgia ha ragione!

e come sempre ti insegnano solo cose inutili, a scuola ^_^
Non tanto inutili, in questo caso, visto che la sottrazione precedente
non e' un metodo igienico per determinare il valore della cifra.


Su quale sistema non sono consecutivi?
Non e' detto che siano consecutivi in tutti i codici : e' questo il
problema.  EBCDIC e' uno di questi.
