Newsgroup: it.comp.programmare
Titolo: C e array

Salve a tutti,
ho un problema con gli array.
Nel mio programmino vorrei fare che quando un utente mette un numero io
possa lavorare sulle singolo cifre di quel numero.
Ad esempio: mettiamo che un tenue inserisca "123". Io vorrei moltiplicare il
numero "1" per 2, dividere il "2" per 3, e lasciare il "3" com'č.
Poi vorrei sommare quaeti nuovi numeri e farli apparire sullo schermo!
Come fare?
Anticipatamente ringrazio!
Vanni galli

Poi vorrei sommare quaeti nuovi numeri e farli apparire sullo schermo!
#include <stdio.h>
#include <string.h>
int numero_corretto( const char *s )
{
    return ( strlen( s ) == 4 ) ;
}
void elimina_ultimo_carattere( char *s )
{ 
     s[strlen( s ) - 1] = '\0' ;
}
int valore_cifra( char c )
{ 
    switch ( c )
    {
           case '0' : return 0 ;
           case '1' : return 1 ;
           case '2' : return 2 ;
           case '3' : return 3 ;
           case '4' : return 4 ;
           case '5' : return 5 ;
           case '6' : return 6 ;
           case '7' : return 7 ;
           case '8' : return 8 ;
           case '9' : return 9 ;
           default  : return -1 ;
    }    
}
int main()
{
    char numero[1024] ;
    float cifra[3], x ;
    do
    {
      printf( "introduci un numero di 3 cifre: " ) ;
      fgets( numero, sizeof numero, stdin ) ; 
    } while ( !numero_corretto( numero ) ) ;
    elimina_ultimo_carattere( numero ) ;
 
    cifra[0] = valore_cifra( numero[0] ) ;
    cifra[1] = valore_cifra( numero[1] ) ;
    cifra[2] = valore_cifra( numero[2] ) ;
    x = ( cifra[0] / cifra[1] ) + 
        ( cifra[1] / cifra[2] ) + 
        cifra[2] ;
    printf( "%5.5f\n", x ) ;
    return 0 ;
}
--
Andrea Laforgia - walkietalkie(at)
libero.it
http://www.geocities.com/AndreaLaforgia

 }
oppure
int valore_cifra( char c )
 { 
    return (c-'0');
 }
-- 
         .: NickLess :.

 }
Non e' portabile.


 il numero "1" per 2, dividere il "2" per 3, e lasciare il "3" com'e`.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main () {
	char buff[100];
	int ints[100];
	int c = 0;
	char *p;
	fgets(buff, 100, stdin);
	p = buff;
	while (*p) {
		if (isdigit(*p)) {
			switch (*p) {
				case '0':
					ints[c] = 0;
					break;
				case '1':
					ints[c] = 1;
					break;
				case '2':
					ints[c] = 2;
					break;
				case '3':
					ints[c] = 3;
					break;
				case '4':
					ints[c] = 4;
					break;
				case '5':
					ints[c] = 5;
					break;
				case '6':
					ints[c] = 6;
					break;
				case '7':
					ints[c] = 7;
					break;
				case '8':
					ints[c] = 8;
					break;
				case '9':
					ints[c] = 9;
					break;
			}
			c++;
		}
		p++;
	}
	return EXIT_SUCCESS;
}
Il programma legge una stringa dallo  stdin, estrae i numeri e li piazza
nell'array  ints,  che puoi  poi  manipolare  come credi. Il  numero  di
elementi memorizzati e` contenuto nella variabile c.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Runtime error 6D at f000:a12f : user incompetente

 Non e' portabile.
credo di si. Se non sbaglio lo standard afferma esplicitamente che i 
caratteri da '0' a '9' devono essere adiacenti e consecutivi.
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

 
Perchè non è portabile? I codici dei numeri non sono in ordine crescente 
su ogni sistema?
-- 
         .: NickLess :.

su ogni sistema?
Si', ma prova a immaginare un sistema dove lo zero venga "dopo" la Z, e
magari anche default char unsigned...
Leonardo
-- 
".signature": bad command or file name

su ogni sistema?
Hai ragione, ho confuso con le lettere.


 
E beh? L'importante è che lo 0 sia seguito dall'1,2,3,4,5,6,7,8,9 ..
se poi esiste un sistema in cui i codici dei numeri non sono in ordine 
non lo sò, ma sarebbe stupido.
-- 
         .: NickLess  :.

non lo sò, ma sarebbe stupido.
Stupido perche' ? perche' non ti piace ?
Esistono sistemi in cui, per esempio, le lettere non sono
tutte in ordine.


tutte in ordine.
Qual'č il motivo per cui si č scelto in alcuni sistemi di non mettere
le lettere in ordine alfabetico?
-- 
Marco Barisione (ICQ 84277092)

le lettere in ordine alfabetico?
Non so quale sia il motivo.
Nel caso di EBCDIC e' facile guardare ai simboli contenuti
nel codice, usando una struttura tabellare (16x16).
Le lettere minuscole, per esempio, vanno da 0x81 (a) a 0x89
(i), riprendono da 0x91 (j) fino a 0x99 (r), riprendono da
0xA2 (s) fino a 0xA9 (z).


le lettere in ordine alfabetico?
Attento, pero', non ho detto che non sono "in ordine
alfabetico", ho detto che non sono in sequenza, l'uno dopo
l'altro.


E beh? L'importante č che lo 0 sia seguito dall'1,2,3,4,5,6,7,8,9 ..
Verissimo. Stavo pensando all'esadecimale 8-(
Leonardo distratto cronico
