Proseguendo con le prove nel tentativo di comprendere le funzionalità e di prendere manualità con la programmazione in C , ho effettuato i tentativi di eseguire altri tipi di operazione.
Nel Post precedente http://lezioniinformatica3ai.blogspot.it/2014/09/primi-passi-con-la-programmazione-in-c.html , ho scritto un semplice programmino che eseguiva la somma di due valori inseriti da tastiera dall'utente.
Proverò ora con la sottrazione. Sostanzialmente il programma rimane lo stesso e andrò solamente a sostiture il comando c=a-b; per eseguire la sottrazione.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
int b; // con queste righe si dichiarano le variabili
int c;
printf("inserisci a:");
scanf("%d", &a);
printf("inserisci b:"); // questi comandi acquisisco dei valori dalla tastiera
scanf("%d", &b); // con print chiedo all'utente cosa inserire e lo scan lo acquisisce
c=a-b;
printf("risultato c= %d",c);
return 0;
}
Stessa cosa nel caso volessi eseguire una moltiplicazione, basterà indicare c=a*b; .
I primi problemi sono nati con l'operazione di divisione. Sostituendo il mio c=a/b; mi sono subito reso conto che il programmino funzionava ma restituiva solo numeri interi.
Ho quindi effettuato una piccola ricerca su internet e girando su alcuni forum cercando semplicemene divisione in C ho visto che altri utenti utilizzavano FLOAT al posto di INT e quindi invece di indicare int a; int b; int c; utlizzavano float a; , float b; e float c; Non mi sono però limitato a copiare e riscrivere, volevo capire il motivo e volevo capire a cosa sevisse questo float. A questo link http://www.html.it/pag/15397/le-variabili-in-c/ ho trovato la risposta. Praticamente in base a quello che dovrò acquisire e in base a quello che il mio programma dovrà fare, esiste la possibilità di dichiarare in modo differente il tipo delle mie variabili.
Tipi di dichiarazione | Rappresentazione | N. di byte |
---|---|---|
char | Carattere | 1 (8 bit) |
int | Numero intero | 2 (16 bit) |
short | Numero intero “corto” | 2 (16 bit) |
long | Numero intero “lungo” | 4 (32 bit) |
float | Numero reale | 4 (32 bit) |
double | Numero reale “lungo” | 8 (64 bit) |
A questo punto ho provato a sostituire solo la dichiarazione della variabile c inserendo float c; ma non basta. Il risultato è sempre un numero intero. Ho dovuto allora fare un passo indietro e andare a rivedere anche le altre righe del mio programma. Ed ecco il problema. Quando vado a stampare a video il risultato printf("risultato c= %d, c); sto indicando con la stringa %d di stampare un numero intero. Ho trovato a questo link http://www.html.it/pag/15402/prime-operazioni-di-inputoutput/ le informazioni riguardanti i comandi printf e scanf e quindi un elenco delle stringhe di controllo:
Stringa di controllo | Cosa viene stampato |
---|---|
%d, %i | Intero decimale |
%f | Valore in virgola mobile |
%c | Un carattere |
%s | Una stringa di caratteri |
%o | Numero ottale |
%x, %X | Numero esadecimale |
%u | Intero senza segno |
%f | Numero reale (float o double) |
%e, %E | Formato scientifico |
%% | Stampa il carattere % |
Nel mio caso quindi ho provato a utlizzare la stringa %f e la posso a questo punto utlizzare anche per l'acquisizione delle mie variabili in modo da poter inserire da tastiera in imput, anche dei numeri con la virgola per eseguire le mie operazioni. Ma ancora non basta. Ora il risultato è si un numero con i decimali ma tutti a zero nonostante i dati inseriti, 5 e 3 dovevano portare a un risultato con numeri decimali. Anche qui per intuizione ho provato a modificare anche la dichiarazione delle variabili a e b indicando il tipo di variabile float anche per queste due. Ora funziona:
#include <stdio.h>
#include <stdlib.h>
int main()
{
float a;
float b;
float c;
printf("inserisci a:");
scanf("%f", &a);
printf("inserisci b:");
scanf("%f", &b);
c=a/b;
printf("risultato c= %f",c);
return 0;
}
Ora il programmino restituisce un bel risultato con 6 decimali. Volendo usare meno decimali basterà indicarlo nella stringa che si vuole acquisire o stampare in questo modo: %.2f per esempio per due decimali oppure %.3f per decimali e così via.
Sono ancora all'abc ma vediamo con i prossimi post di approfondire e realizzare programmi sempre più complessi. Piano Piano però inizio ad acquisire manualità. Mi sono reso anche conto che per adesso mi riesce abbastanza semplice capire dove possa esserci un errore e su cosa andare ad intervenire.