Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
Le novità ASUS per il 2026 nel settore dei PC desktop
Le novità ASUS per il 2026 nel settore dei PC desktop
Molte le novità anticipate da ASUS per il 2026 al CES di Las Vegas: da schede madri per processori AMD Ryzen top di gamma a chassis e ventole, passando per i kit di raffreddamento all in one integrati sino a una nuova scheda video GeForce RTX 5090. In sottofondo il tema dell'intelligenza artificiale con una workstation molto potente per installazioni non in datacenter
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-05-2011, 11:09   #1
c1rcu1tburn3r
Senior Member
 
L'Avatar di c1rcu1tburn3r
 
Iscritto dal: Jun 2007
Città: ITALY
Messaggi: 449
[C] Errore da niubbo su scanf, come lo risolvo?

Ciao, per curiosità sto leggendo il libro Kernighan e Ritchie che avevo comprato alle superiori (e mai aperto) e sto provando a scrivere un pò di codice a caso, programmini stupidi giusto per imparare ad utilizzare le varie istruzioni. Ho imparato un pò ad usare printf e scanf e a fare qualche calcolo ma sono arrivato all'ovvio errore che si ottiene quando alla richiesta di inserire un numero si inserisce invece un carattere o comunque qualcosa che non sia un numero. Capisco l'errore ma non so come gestire la cosa.
Vi metto il mio codice cosi giusto per farvi capire la demenzialità del mio livello
Codice:
#include <stdio.h>

int main (int argc, const char * argv[])
{

    float base, altezza, area;
    printf("Inserisci la base del rettangolo:\n");
    scanf(" %f", &base);
    while (base > 99)
    {
        printf("Mi dispiace ma accetto solo numeri inferiori a 100... \n");
        printf("Reinserire un valore da 0 a 99:\n");
        scanf(" %f", &base);
    }
    printf("Inserisci ora l'altezza del rettangolo:\n");
    scanf(" %f", &altezza);
    area = base * altezza;
    printf("Ho effettuato il calcolo e l'area del rettangolo risulta essere: %.2f\n", area);
    return 0;
}
Leggendo qua e la leggo che scanf non è sempre il più adatto per ricevere input, ma non saprei proprio quando è o non è il caso.
Non è che magari esiste un controllo magari all'interno di un ciclo while che mi dica tipo:

while (base != numero)
{
printf("Carattere non accettato, riprovare: \n")
scanf(" %f", base);
}

No eh?
Grazie per l'aiuto!
c1rcu1tburn3r è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2011, 11:54   #2
GByTe87
Senior Member
 
L'Avatar di GByTe87
 
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
Potresti usare isdigit() o atof().
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO
GByTe87 è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2011, 14:49   #3
c1rcu1tburn3r
Senior Member
 
L'Avatar di c1rcu1tburn3r
 
Iscritto dal: Jun 2007
Città: ITALY
Messaggi: 449
sto leggendo che con isdigit qualora non sia un valore numerico da valore diverso da 0...
quindi dovrei fare una cosa del tipo
if isdigit diverso da zero bla bla bla
else bla bla bla
però non capisco come scrivere il codice giusto... potresti mica farmi un esempio pratico sul mio codice?
c1rcu1tburn3r è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2011, 23:06   #4
Lazy Bit
Member
 
Iscritto dal: May 2011
Messaggi: 47
La risoluzione del problema è abbastanza semplice. Devi pensare che ogni funzione è caratterizzata dalla seguente sintassi: tipo_restituito nome_funzione(tipo_parametro nome_parametro, ...);. Ciò prende il nome di "prototipo di funzione", che studierai più avanti, quando saprai creare tu stesso alcune funzioni.

In questo caso tu hai la funzione scanf() che ha il prototipo:

Codice:
int scanf(const char *format, ...);
La funzione scanf() in caso di successo nella lettura del dato, la funzione restituisce il numero di elementi letti (infatti il tipo restituito del prototipo è un int).[/b]

Quindi, facendo un esempio:

Codice:
#include <stdio.h>

int main()
{
	int flag;
	float number;

	printf("Digitare un numero: ");
	flag = scanf("%f", &number);

	printf("Valore restituito dalla funzione scanf(): %d\n", flag);

	return 0;
}
Se inserirai un numero, la funzione restituirà il valore 1, mentre se inserirai un carattere, la funzione restituirà 0, perché la lettura non andrà a buon fine e il contatore degli elementi letti rimarrà a zero.

Ultima modifica di Lazy Bit : 26-06-2011 alle 10:41.
Lazy Bit è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2011, 18:54   #5
c1rcu1tburn3r
Senior Member
 
L'Avatar di c1rcu1tburn3r
 
Iscritto dal: Jun 2007
Città: ITALY
Messaggi: 449
Eccomi, grazie mille dei consigli... ho capito più o meno come funziona e ho provato a mettere in pratica ma non riesco a risolvere una questione...

Codice:
#include <stdio.h>

int main()
{
    float base;
	int controllo;
    
	printf("Digitare la base del rettangolo:\n ");
	controllo = scanf(" %f", &base);
    while (controllo != 1)
    {
        printf("Mi dispiace ma accetto solo numeri! Inserisci un numero:\n ");
        scanf(" %f", &base);
    }
        printf("Il numero che hai inserito è: %.2f", base);
	return 0;
}
Perchè se sbaglio mi dice che ho sbagliato, ma non mi legge lo scanf per reinserire il numero? Mi manda in loop la scritta "Mi dispiace ecc..."
Eppure nel primo codice che ho postato mi funzionava...
c1rcu1tburn3r è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2011, 19:25   #6
BlackShark92
Member
 
Iscritto dal: May 2011
Messaggi: 39
Quote:
Originariamente inviato da c1rcu1tburn3r Guarda i messaggi
Eccomi, grazie mille dei consigli... ho capito più o meno come funziona e ho provato a mettere in pratica ma non riesco a risolvere una questione...

Codice:
#include <stdio.h>

int main()
{
    float base;
	int controllo;
    
	printf("Digitare la base del rettangolo:\n ");
	controllo = scanf(" %f", &base);
    while (controllo != 1)
    {
        printf("Mi dispiace ma accetto solo numeri! Inserisci un numero:\n ");
        scanf(" %f", &base);
    }
        printf("Il numero che hai inserito è: %.2f", base);
	return 0;
}
Perchè se sbaglio mi dice che ho sbagliato, ma non mi legge lo scanf per reinserire il numero? Mi manda in loop la scritta "Mi dispiace ecc..."
Eppure nel primo codice che ho postato mi funzionava...
vai con un if...ovvero if (controllo!=1) ........
ecco, fai così
Codice:
if (controllo != 1)
    {
        printf("Mi dispiace ma accetto solo numeri! Inserisci un numero:\n ");
        getchar();
        scanf(" %f", &base);

Ultima modifica di BlackShark92 : 27-05-2011 alle 19:31.
BlackShark92 è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2011, 20:14   #7
c1rcu1tburn3r
Senior Member
 
L'Avatar di c1rcu1tburn3r
 
Iscritto dal: Jun 2007
Città: ITALY
Messaggi: 449
Ho provato anche con if ma...

Codice:
#include <stdio.h>

int main()
{
    float base;
	int controllo;
    
	printf("Digitare la base del rettangolo:\n ");
	controllo = scanf(" %f", &base);
    if (controllo != 1)
    {
        printf("Mi dispiace ma accetto solo numeri! Inserisci un numero:\n ");
        getchar();
        scanf(" %f", &base);
    }
    else
        printf("Il numero che hai inserito è: %.2f", base);
	return 0;
}
Cosi non mi va in loop e mi richiede l'input per un attimo ma poi il programma termina da solo, anche se non tocco nulla riportando:

Digitare la base del rettangolo:
e
Mi dispiace ma accetto solo numeri! Inserisci un numero:
Program ended with exit code
: 0
c1rcu1tburn3r è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2011, 21:15   #8
BlackShark92
Member
 
Iscritto dal: May 2011
Messaggi: 39
Quote:
Originariamente inviato da c1rcu1tburn3r Guarda i messaggi
Ho provato anche con if ma...

Codice:
#include <stdio.h>

int main()
{
    float base;
	int controllo;
    
	printf("Digitare la base del rettangolo:\n ");
	controllo = scanf(" %f", &base);
    if (controllo != 1)
    {
        printf("Mi dispiace ma accetto solo numeri! Inserisci un numero:\n ");
        getchar();
        scanf(" %f", &base);
    }
    else
        printf("Il numero che hai inserito è: %.2f", base);
	return 0;
}
Cosi non mi va in loop e mi richiede l'input per un attimo ma poi il programma termina da solo, anche se non tocco nulla riportando:

Digitare la base del rettangolo:
e
Mi dispiace ma accetto solo numeri! Inserisci un numero:
Program ended with exit code
: 0
A me funziona! Comunque quello che volevi fare tu all'inizio era questo
Codice:
#include <stdio.h>

int main()
{
    float base;
	int controllo;
    
	printf("Digitare la base del rettangolo:\n ");
	controllo = scanf(" %f", &base);
    while (controllo != 1)
    {
        printf("Mi dispiace ma accetto solo numeri! Inserisci un numero:\n ");
        getchar();
        controllo=scanf(" %f", &base);
    }
        printf("Il numero che hai inserito è: %.2f", base);
	return 0;
}
e adesso funziona benissimo. Sbagliavi a non riassegnare controllo dentro il while, cosicchè era sempre diversa da 1 ed entrava in un loop continuo
BlackShark92 è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2011, 00:36   #9
c1rcu1tburn3r
Senior Member
 
L'Avatar di c1rcu1tburn3r
 
Iscritto dal: Jun 2007
Città: ITALY
Messaggi: 449
Ahhhh ecco perchè allora
Grazie mille... ora sperimento meglio e vi faccio sapere!
c1rcu1tburn3r è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2011, 18:46   #10
c1rcu1tburn3r
Senior Member
 
L'Avatar di c1rcu1tburn3r
 
Iscritto dal: Jun 2007
Città: ITALY
Messaggi: 449
ihihihi che bello, inizio a trovare utilità nel programmare... proprio oggi avevo bisogno di questi calcoli e mi son fatto il programmino stupido ma pur sempre utile!

Codice:
#include <stdio.h>

int main()
    
{   
    float peso, volume, diametro, raggio, altezza, area;
    int controllo, controllo1;
    
    printf("------------------------------------------------------\n");
    printf("Calcolo del Volume d'acqua necessario per riempire una\n");
    printf("piscina di forma tonda e del relativo peso complessivo\n");
    printf("a riempimento completato.\n");
    printf("------------------------------------------------------\n");
    
    printf("Inserire il diametro interno della piscina in cm:\n");
    controllo = scanf(" %f", &diametro);
    while (controllo != 1)
    {
        printf("Mi dispiace ma quello che hai inserito non è un numero! Inserisci un numero:\n ");
        getchar();
        controllo=scanf(" %f", &diametro);

    }
    printf("Inserire ora l'altezza dell'acqua in cm rispetto alla base della piscina:\n");
    controllo1 = scanf(" %f", &altezza);
    while (controllo1 != 1)
    {
        printf("Mi dispiace ma quello che hai inserito non è un numero! Inserisci un numero:\n ");
        getchar();
        controllo1=scanf(" %f", &altezza);
 
    }
    raggio = diametro / 2;
    area = (raggio * raggio) * 3.14;
    volume = (area * altezza) / 1000000;
    peso = volume * 1000;
    
    printf("Il volume di acqua necessario per riempire la piscina è di: %.2f Metri cubi\n", volume);
    printf("Il peso della piscina risulterà quindi essere: %.2f Kg\n", peso);
    
    
    return 0;
}
Ecco, se ora io volessi per esempio far diventare questa una funziona da richiamare all'interno di un progetto più esteso, ad esempio in un programma che proponga una scelta tra diverse forme di piscina, quindi richiamando le varie funzioni a seconda della scelta fatta, in che direzione mi conviene procedere?
So che potrei farlo direttamente con dei cicli, ma preferirei farlo con le funzioni almeno le imparo

Ultima modifica di c1rcu1tburn3r : 28-05-2011 alle 18:49.
c1rcu1tburn3r è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2011, 19:17   #11
c1rcu1tburn3r
Senior Member
 
L'Avatar di c1rcu1tburn3r
 
Iscritto dal: Jun 2007
Città: ITALY
Messaggi: 449
Mmm, ho provato a fare cosi per ora ma non va, dove sbaglio?
Edit: Ok risolto... ci voleva un %d al posto di un %f sullo scanf dell'int scelta!!!

Codice:
#include <stdio.h>

int main()
    
{   
    float peso, volume, diametro, raggio, altezza, area;
    float latolungo, latocorto;
    int controllo, controllo1, scelta;
    
    printf("------------------------------------------------------\n");
    printf("Calcolo del Volume d'acqua necessario per riempire una\n");
    printf("piscina di forma tonda e del relativo peso complessivo\n");
    printf("a riempimento completato.\n");
    printf("------------------------------------------------------\n");
    
    printf("Scegli la forma della piscina su cui fare i calcoli tra le seguenti opzioni:\n");
ricomincia:
    printf("Inserire 1 se la piscina è tonda oppure \n");
    printf("inserire 2 se la piscina è rettangolare: \n");
    scanf(" %d", &scelta);
    
    if (scelta == 1) //Calcolo per la piscina tonda
    {
        printf("Hai scelto la piscina di forma tonda\n");
        printf("------------------------------------\n");
        printf("Inserire il diametro interno della tua piscina in cm:\n");
        controllo = scanf(" %f", &diametro);
        while (controllo != 1)
        {
            printf("Mi dispiace ma quello che hai inserito non è un numero! Inserisci un numero:\n ");
            getchar();
            controllo=scanf(" %f", &diametro);

        }
        printf("Inserire ora l'altezza dell'acqua in cm rispetto alla base della piscina:\n");
        controllo1 = scanf(" %f", &altezza);
        while (controllo1 != 1)
        {
            printf("Mi dispiace ma quello che hai inserito non è un numero! Inserisci un numero:\n ");
            getchar();
            controllo1=scanf(" %f", &altezza);
 
        }
        raggio = diametro / 2;
        area = (raggio * raggio) * 3.14;
        volume = (area * altezza) / 1000000;
        peso = volume * 1000;
        
        printf("\n\n");
        printf("Il volume di acqua necessario per riempire la piscina è di: %.2f Metri cubi\n", volume);
        printf("Il peso della piscina risulterà quindi essere: %.2f Kg\n", peso);
    }
    else if (scelta == 2) //Calcolo per la piscina rettaqngolare
    {
        printf("Hai scelto la piscina di forma rettangolare\n");
        printf("-------------------------------------------\n");
        printf("Inserire il lato più lungo della piscina in cm:\n");
        controllo = scanf(" %f", &latolungo);
        while (controllo != 1)
        {
            printf("Mi dispiace ma quello che hai inserito non è un numero! Inserisci un numero:\n ");
            getchar();
            controllo=scanf(" %f", &latolungo);
            
        }
        printf("Inserire ora il lato corto della piscina:\n");
        controllo1 = scanf(" %f", &latocorto);
        while (controllo1 != 1)
        {
            printf("Mi dispiace ma quello che hai inserito non è un numero! Inserisci un numero:\n ");
            getchar();
            controllo1=scanf(" %f", &latocorto);
            
        }
        printf("Inserire ora l'altezza dell'acqua in cm rispetto alla base della piscina:\n");
        controllo1 = scanf(" %f", &altezza);
        while (controllo1 != 1)
        {
            printf("Mi dispiace ma quello che hai inserito non è un numero! Inserisci un numero:\n ");
            getchar();
            controllo1=scanf(" %f", &altezza);
            
        }

        area = latocorto * latolungo;
        volume = (area * altezza) / 1000000;
        peso = volume * 1000;
        
        printf("\n\n");
        printf("Il volume di acqua necessario per riempire la piscina è di: %.2f Metri cubi\n", volume);
        printf("Il peso della piscina risulterà quindi essere: %.2f Kg\n", peso); 
    }
    else 
    {
        printf("La scelta effettuata non rientra tra quelle possibili, riprovare:\n");
        goto ricomincia;
    }
    
        return 0;
}
Ora il problema è che ho dovuto usare un GOTO per tornare alla scelta nell'ultima parte... ho letto che è sconsigliato farlo, come mai? E soprattutto, come potrei evitarlo?

Ultima modifica di c1rcu1tburn3r : 28-05-2011 alle 19:53.
c1rcu1tburn3r è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2011, 21:39   #12
BlackShark92
Member
 
Iscritto dal: May 2011
Messaggi: 39
Quote:
Originariamente inviato da c1rcu1tburn3r Guarda i messaggi
ihihihi che bello, inizio a trovare utilità nel programmare... proprio oggi avevo bisogno di questi calcoli e mi son fatto il programmino stupido ma pur sempre utile!

Codice:
#include <stdio.h>

int main()
    
{   
    float peso, volume, diametro, raggio, altezza, area;
    int controllo, controllo1;
    
    printf("------------------------------------------------------\n");
    printf("Calcolo del Volume d'acqua necessario per riempire una\n");
    printf("piscina di forma tonda e del relativo peso complessivo\n");
    printf("a riempimento completato.\n");
    printf("------------------------------------------------------\n");
    
    printf("Inserire il diametro interno della piscina in cm:\n");
    controllo = scanf(" %f", &diametro);
    while (controllo != 1)
    {
        printf("Mi dispiace ma quello che hai inserito non è un numero! Inserisci un numero:\n ");
        getchar();
        controllo=scanf(" %f", &diametro);

    }
    printf("Inserire ora l'altezza dell'acqua in cm rispetto alla base della piscina:\n");
    controllo1 = scanf(" %f", &altezza);
    while (controllo1 != 1)
    {
        printf("Mi dispiace ma quello che hai inserito non è un numero! Inserisci un numero:\n ");
        getchar();
        controllo1=scanf(" %f", &altezza);
 
    }
    raggio = diametro / 2;
    area = (raggio * raggio) * 3.14;
    volume = (area * altezza) / 1000000;
    peso = volume * 1000;
    
    printf("Il volume di acqua necessario per riempire la piscina è di: %.2f Metri cubi\n", volume);
    printf("Il peso della piscina risulterà quindi essere: %.2f Kg\n", peso);
    
    
    return 0;
}
Ecco, se ora io volessi per esempio far diventare questa una funziona da richiamare all'interno di un progetto più esteso, ad esempio in un programma che proponga una scelta tra diverse forme di piscina, quindi richiamando le varie funzioni a seconda della scelta fatta, in che direzione mi conviene procedere?
So che potrei farlo direttamente con dei cicli, ma preferirei farlo con le funzioni almeno le imparo
se vuoi usare la funzione in un altro programma, ti basta mettere il prototipo della funzione all'inizio del file, poi nel programma la chiami come una qualunque funzione con i relativi parametri, e fuori dal main metti il corpo della funzione
BlackShark92 è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2011, 00:49   #13
Lazy Bit
Member
 
Iscritto dal: May 2011
Messaggi: 47
Quote:
Originariamente inviato da c1rcu1tburn3r Guarda i messaggi
Ecco, se ora io volessi per esempio far diventare questa una funziona da richiamare all'interno di un progetto più esteso, ad esempio in un programma che proponga una scelta tra diverse forme di piscina, quindi richiamando le varie funzioni a seconda della scelta fatta, in che direzione mi conviene procedere?
Dovresti creare il prototipo della tua funzione, che potresti chiamare volumePiscina(), come nell'esempio che avevo fatto precedentemente per la funzione scanf(), indicando il tipo di valore restituito e i parametri da passare. Successivamente dovrai definirla inserendo l'algoritmo, infine la chiami all'interno della main() come fai in genere con le altre funzioni. Il prototipo della tua funzione potrebbe essere:

Codice:
float volumePiscina(int t, float d, float h);

Ultima modifica di Lazy Bit : 26-06-2011 alle 10:42.
Lazy Bit è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2011, 09:34   #14
c1rcu1tburn3r
Senior Member
 
L'Avatar di c1rcu1tburn3r
 
Iscritto dal: Jun 2007
Città: ITALY
Messaggi: 449
Che dire... Ti vorrei come vicino di casa...
Il problema è che per quanto un libro sia valido non tratterà mai le cose in questo modo... I testi, anche quelli per newbie, danno per scontate cose che non lo sono e spesso e volentieri demoralizzano! E soprattutto a un libro non puoi fare domande. Secondo voi, visto il punto in cui sono, quale sarebbe il passo successivo? E delle nozioni che ho, su quali dovrei approfondire prima di passare al prossimo argomento?
c1rcu1tburn3r è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2011, 11:23   #15
Lazy Bit
Member
 
Iscritto dal: May 2011
Messaggi: 47
Il C è un linguaggio molto potente ma è stato ideato soprattutto per fornire un efficiente e libero controllo sulla memoria. Al contrario di altri linguaggi di programmazione come il Pascal, che tendono a far concentrare il programmatore sulla risoluzione di problemi (e sono quei linguaggi utilizzati per scopi didattici), il C è orientato verso l'implementazione a diretto contatto con l'architettura del calcolatore. Se preferisci imparare prima a scrivere algoritmi, allora potresti orientarti verso un altro linguaggio, se invece vuoi imparare a programmare tenendo conto dell'architettura di un processore e della memoria, allora il C fa al caso tuo. Per quest'ultimo caso, io darei prima di tutto importanza al sistema numerico binario ed esadecimale, alla conversione tra un numero decimale e uno binario e tra un numero esadecimale e uno binario (infatti il sistema esadecimale ha la particolarità di essere un modo molto comodo di rapprentare i numeri binari). Infine studierei la rappresentazione dei numeri in un calcolatore. Poi passi alle operazioni di I/O da tastiera e ai vettori.

Ultima modifica di Lazy Bit : 26-06-2011 alle 10:43.
Lazy Bit è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2011, 12:18   #16
BlackShark92
Member
 
Iscritto dal: May 2011
Messaggi: 39
Non posso che quotare. Insisti soprattutto con gli operatori bitwise (bit a bit, ovvero & | ecc..) così comprendi meglio le cose che ti ha detto di imparare lui. Studia bene i meccanismi di chiamata per valore e per indirizzo che è fontamentale (per quanto riguarda le funzioni), e soprattutto lavora molto con i puntatori
BlackShark92 è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2011, 21:02   #17
c1rcu1tburn3r
Senior Member
 
L'Avatar di c1rcu1tburn3r
 
Iscritto dal: Jun 2007
Città: ITALY
Messaggi: 449
Fortunatamente mi ricordo abbastanza bene il sistema di numerazione binario e esadecimale e mi ricordo anche come si fanno le operazioni e le conversioni...
ricordo anche il discorso del complemento a uno e complemento a due per rappresentare i numeri negativi(anche se al momento non mi è più ben chiara la cosa, devo riguardarmela ). La tabella ascii non me la ricordo a memoria chiaramente ma so che i comandi, caratteri e simboli sono riconducibili a un determinato valore binario, decimale, ottale o esadecimale. Quindi so per esempio che quando premo il tasto A in realtà sto usando 01000001 in binario, giusto?
c1rcu1tburn3r è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2011, 21:35   #18
Lazy Bit
Member
 
Iscritto dal: May 2011
Messaggi: 47
Esattamente! A = 65 decimale = 01000001 binario. Comunque non intendevo dire che devi imparare a memoria l'intera tabella ASCII (ci mancherebbe! ), l'importante che tu sappia a grandi linee come vengono rappresentati i caratteri. All'occorrenza la cerchi su Internet. Per quanto riguarda la rappresentazione dei numeri in virgola mobile, potresti darci un'occhiata. Il sistema ottale non è più utilizzato perché ogni cifra rappresenta esattamente un gruppo di tre bit e ciò serve a poco, considerando che solitamente si considerano gruppi di quattro bit, rappresentati da una cifra esadecimale.

Comunque per ogni argomento che tocchi, fai esercizi. Ad esempio, sai come sono rappresentati i caratteri, il sistema di numerazione binario, conosci le istruzioni di selezione if-else e quelle di ripetizione for e while. Prova a creare una funzione uppercase() che trasformi i caratteri minuscoli in maiuscoli e una funzione lowercase() che trasformi i caratteri in minuscoli, infine una funzione decimaltobinary() che trasformi un numero decimale in binario. Quando imparerai ti potrai sbizzarrire con programmi di tua invenzione, addirittura creando una bella interfaccia grafica (GUI).

Ultima modifica di Lazy Bit : 29-05-2011 alle 21:42.
Lazy Bit è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2011, 21:55   #19
BlackShark92
Member
 
Iscritto dal: May 2011
Messaggi: 39
Quote:
Originariamente inviato da Lazy Bit Guarda i messaggi
Esattamente! A = 65 decimale = 01000001 binario. Comunque non intendevo dire che devi imparare a memoria l'intera tabella ASCII (ci mancherebbe! ), l'importante che tu sappia a grandi linee come vengono rappresentati i caratteri. All'occorrenza la cerchi su Internet. Per quanto riguarda la rappresentazione dei numeri in virgola mobile, potresti darci un'occhiata. Il sistema ottale non è più utilizzato perché ogni cifra rappresenta esattamente un gruppo di tre bit e ciò serve a poco, considerando che solitamente si considerano gruppi di quattro bit, rappresentati da una cifra esadecimale.

Comunque per ogni argomento che tocchi, fai esercizi. Ad esempio, sai come sono rappresentati i caratteri, il sistema di numerazione binario, conosci le istruzioni di selezione if-else e quelle di ripetizione for e while. Prova a creare una funzione uppercase() che trasformi i caratteri minuscoli in maiuscoli e una funzione lowercase() che trasformi i caratteri in minuscoli, infine una funzione decimaltobinary() che trasformi un numero decimale in binario. Quando imparerai ti potrai sbizzarrire con programmi di tua invenzione, addirittura creando una bella interfaccia grafica (GUI).
questo della conversione è abbastanza complesso...occorre usare l'operazione modulo (fin qui nulla di strano), ma ciò che ritorna bisogna metterlo in un vettore e leggere al contrario il vettore!!tu come lo faresti?
BlackShark92 è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2011, 21:58   #20
c1rcu1tburn3r
Senior Member
 
L'Avatar di c1rcu1tburn3r
 
Iscritto dal: Jun 2007
Città: ITALY
Messaggi: 449
Quote:
Originariamente inviato da BlackShark92 Guarda i messaggi
questo della conversione è abbastanza complesso...occorre usare l'operazione modulo (fin qui nulla di strano), ma ciò che ritorna bisogna metterlo in un vettore e leggere al contrario il vettore!!tu come lo faresti?
Mmm credo che sia un pò troppo "oltre" questo problema per me
Meglio che comincio con dell'altro mi sa eheheh

P.S. Non so se cambia qualcosa in generale ma mi sono scordato di dirvi che cmq lavoro su mac con xcode... ma credo che si dovrebbe tenerne conto solo qualora volessi sviluppare gui, giusto?

Ultima modifica di c1rcu1tburn3r : 29-05-2011 alle 22:06.
c1rcu1tburn3r è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
Stipendio Tim Cook 2025: perché l...
Intel attacca AMD, che risponde: volano ...
Nutanix potenzia la Cloud Platform: pi&u...
TIM e Fastweb + Vodafone uniranno le for...
Marketing e Media: le startup italiane c...
AGCOM multa Cloudflare: 14 milioni di eu...
Iran isolato dal mondo: internet azzerat...
iPhone: iOS 18 domina ancora su iOS 26. ...
Cooler Master porta la personalizzazione...
La fabbrica Tesla di Berlino è a ...
Nuova bufera su X: diversi Paesi minacci...
Apple Watch SE 3 in offerta: lo smartwat...
Toyota diventa il marchio con più...
TikTok diventa la piattaforma ufficiale ...
Rimossa l'attivazione telefonica su Wind...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:20.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v