A recipe of: c basics ( Operazioni su una variabile )

Nel tutorial precedente abbiamo visto i vari tipi di variabili che esistono nel linguaggio c, ora andiamo a vedere come poter fare delle semplici operazioni su di esse.

 

Ingredienti:

 

Incremento di variabili

Per incrementare le nostre variabili di un’unita’, possiamo fare affidamento su 3 metodi distinti.

Possiamo avere un programma del genere in cui assegnamo alla i il suo valore incrementato di uno

#include <stdio.h>

int main()
{
int i;
i=0;
i = i + 1;

printf(“\n Il mio valore ora e’ %d \n\n”,i);

return 0;
}

Possiamo andare a sommare a i una unita’ in questo modo

#include <stdio.h>

int main()
{
int i;
i=0;
i += 1;

printf(“\n Il mio valore ora e’ %d \n\n”,i);

return 0;
}

O piu’ semplicemente possiamo andare a dire a i che deve incrementarsi di uno

#include <stdio.h>

int main()
{
int i;
i=0;
i++;

printf(“\n Il mio valore ora e’ %d \n\n”,i);

return 0;
}

Ora se andate a provare questi 3 programmi, compilandoli e eseguendoli, vedrete che porteranno tutti allo stesso output.

valore1

Quindi, quando andare a utilizzare un modo, quando un’altro?

La risposta risulta essere abbastanza scontata, se dobbiamo incrementare il valore della nostra variabile di una sola unita’, questa operazione, e’ preferibile eseguirla tramite la stringa variabile++, mentre nel caso si voglia incrementare il valore della variabile di un numero x di volte, questa operazione sara’ preferibile farla tramite la stringa i += x.

Tutto molto semplice per ora,  ma cosa succede se provo a incrementare di una, o x unita’ una variabile non numerica come una booleana o un carattere?

Beh, basta provare per scoprirlo.

 

Incrementare di una unita’ una booleana

Ecco cosa succede se andiamo a eseguire un’operazione di incremento su una variabile che puo’ avere solo due valori, vero o falso, prenderemo prima in considerazione il caso in cui la nostra variabile, abbia come valore il valore “false”.

#include <stdio.h>

typedef int bool;
enum { false, true };

int main()
{
bool i;
i = false;
i++;

printf(“\n Il mio valore ora e’ %d \n\n”,i);

return 0;
}

In c, non esistono effettivamente delle variabili booleane, di conseguenza, come riportato nel codice, prima di poterle utilizzare dobbiamo andare a definirle.

Ora avendo definito la nostra booleana come un enum { false, true } avremo che, nel caso la nostra booleana valga 0, allora questo numero, corrispondera’ al false, mentre, nel caso la nostra booleana valga 1, allora sara’ vera.

Andando a eseguire questo stralcio di codice, partendo con una booleana falsa, e andandola a incrementare di una unita’, come possiamo facilmente immaginare, visto che il falso vale 0, incrementandolo di una unita’ diventera’ 1, cioe’ vero.

valore1Difatti l’output del nostro programma, andandolo a compilare e eseguire, sara’ come riportato nella figura qui adiacente.

Ora, cosa succede invece se la nostra booleana, che abbiamo definito avere solo due valori, 0 o 1, false o true, dovesse partire dallo stato true, cioe’ 1, e andassimo a incrementare questo valore di una unita’, quando il valore due non e’ stato definito?

Andiamo a provare per scoprirlo.

#include <stdio.h>

typedef int bool;
enum { false, true };

int main()
{
bool i;
i = true;
i++;

printf(“\n Il mio valore ora e’ %d \n\n”,i);

return 0;
}

Nel caso andassimo a utilizzare il codice cosi da noi scritto, ci ritroveremo con, magari inaspettatamente per qualcuno, con il risultato piu’ ovvio, se la nostra variabile dovesse partire dallo stato true, ovvero dal valore 1, incrementando questo valore di una unita’ questa operazione andrebbe ad assegnare alla nostra variabile, il valore 2, il quale, non sarebbe ne true ne false, ma indefinito.

Questo sicuramente e’ da ritenersi un problema, non possiamo permettere alla nostra booleana di avere un valore diverso dallo 0 o dall 1, di conseguenza abbiamo due alternative, o andare a implementare noi una variabile che definisca la nostra booleana anche per altri valori come:

typedef enum {FALSE = 0, TRUE} boolean;

Cioe’ assegnare al valore 0, lo stato “false” della booleana, mentre a tutti gli altri numeri, lo stato true, oppure possiamo andare a utilizzare una libreria standard, stbool.h che non fara’ incrementare di un numero maggiore di 1 la nostra variabile, quindi se andremo a eseguire il programma:

#include <stdio.h>
#include <stdbool.h>

int main()
{
bool i;
i = true;
i++;

printf(“\n Il mio valore ora e’ %d \n\n”,i);

return 0;
}

Otteremo il seguente Output:

valore1

 

E la nostra variabile, continuera’ ad avere il valore definito true, “1”.

 

Incrementare di un’unita’ una variabile di tipo char

Ora che abbiamo visto cosa succede all’incrementare di numeri e booleane, c’e’ solo rimasta la domanda “ma cosa succede se vado a incrementare una variabile letterale?”

Bene, come al solito, basta provare per avere la risposta.

#include <stdio.h>

int main()
{
char i;
i = ‘a’;
i++;

printf(“\n Il mio valore ora e’ %c \n\n”,i);

return 0;
}

NOTA: in questo caso per andare a stampare la variabile di tipo char, non dobbiamo andare a utilizzare il “%d” ma invece, andremo a utilizzare il “%c”.

In questo programma, andiamo ad assegnare alla nostra variabile il valore “a”, e andiamo a scoprire cosa succede se andiamo a incrementare “a” di una unita’.

L’output:

outputchar

Ora, la nostra “a” e’ diventata una “b”, questo non perche’ il nostro programma conosce l’alfabeto e sa che dopo la a viene la b, ma perche’, possiamo considerare la variabile di tipo char, come una variabile definita sotto un’enum, al quale, a ogni lettera, a ogni simbolo, e a ogni numero, e’ associato un valore di tipo numerico.

Difatti, se andiamo a cambiare il nostro %c nella printf, in un %d, potremo andare a verificare, il valore numerico di quella “b”.

#include <stdio.h>

int main()
{
char i;
i = ‘a’;
i++;

printf(“\n Il mio valore ora e’ %d \n\n”,i);

return 0;
}

L’output:

outputcharnumerico

Questo output, ci mostra che la nostra “b” ha come valore numerico il numero 98, e di conseguenza, precedentemente, la nostra “a” avra’ avuto come valore il numero 97.

In questa tabella, anche denominata tabella Ascii, potrete trovare tutti i valori dei vostri char.

asciifull

 

In questo tutorial, abbiamo visto come comportarci con l’operazione di addizione nei vari tipi di variabili, questo ragionamento non cambia per gli altri tipi di operazioni quali moltiplicazione *, divisione / e sottrazione -.

Vado a precisare che se provate a immettere le stringhe i**; e i//; queste due stringhe risulteranno senza senso e riporteranno errore, in quanto ha poco senso dividere o moltiplicare per uno una variabile.

Questo tipo di stringa e’ riservata solo alle operazioni di addizione i++, e sottrazione i– che rispettivamente incrementeranno o decrementeranno il valore della nostra variabile di 1.

 

Nel prossimo tutorial vedremo le operazioni tra due o piu’ variabili.

 

 

 

Saluti dal vostro nabbo Developer

Marco Tamagno

Facebook

Google+

Rispondi