Lezione 02 – corso di programmazione in C

In questa lezione:

  • soluzione ai problemi assegnati
  • operatori di uguaglianza e confronto
  • operatori logici
  • uso del costrutto condizionale if
  • uso del costrutto condizionale if…then
  • uso del costrutto condizionale switch
  • esercizi


Soluzione ai problemi assegnati nella lezione precedente

Per poter risolvere gli esercizi era necessario utilizzare le nozioni spiegate nella precedente lezione più alcune informazioni aggiuntive che avreste potuto ottenere consultando i manuali consigliati.

Esercizio 1

Esercizio 2

Nota di carattere geometrico: ma da dove si deriva la costante per il calcolo dell’area del triangolo equilatero?

supposta nota la lunghezza del lato del triangolo equilatero e applicando il teorema di Pitagora si ottiene:

Operatori di uguaglianza e confronto

Le istruzioni eseguite in C possono compiere delle azioni (ad esempio fare dei calcoli od effettuare la stampa di qualcosa a monitor) oppure prendere delle decisioni.

Detto in altro modo, i programmi che realizziamo hanno la necessità di  scegliere una strada invece che un’altra  in funzione di una condizione e quindi per prendere delle decisione abbiamo bisogno di utilizzare degli operatori di confronto.

Gli operatori di confronto sono operatori a due argomenti e si dice che hanno sempre posizione infissa, cioè sono inseriti tra due argomenti.

Simbolo di relazione Significato di condizione Esempio di condizione
== uguale a x == y
!= diverso da x != y
< minore x < y
> maggiore x > y
<= minore o uguale x <= y
>= maggiore o uguale x >= y

Gli operatori:

  • ==
  • !=

sono detti operatori di uguaglianza.

Gli operatori:

  • <
  • >
  • <=
  • >=

sono detti operatori di confronto.

Priorità e associazione degli operatori di uguaglianza e confronto

  • Gli operatori di relazione hanno tutti lo stesso livello di priorità e associano da sinistra a destra.
  • Gli operatori di uguaglianza hanno livello più basso degli operatori di relazione e associano da sinistra a destra.

Operatori logici

Anche gli operatori logici sono utilizzati con istruzioni condizionali ed iterative, consentono di effettuare l’AND e l’OR tra due operandi. Le operazioni logiche restituiscono 1 quando sono vere e 0 quando sono false:

Simbolo logico Significato logico Esempio relazione logica
&& AND logico x && y
|| OR logico x || y

Per quanto riguarda l’AND e l’OR le tavole di verità sono le seguenti:

AND logico:

X Y X AND Y
0 0 0
0 1 0
1 0 0
1 1 1

OR logico

X Y X OR Y
0 0 0
0 1 1
1 0 1
1 1 1

Strutture di controllo

if

Supponiamo di voler realizzare un semplicissimo programma che decide in base alla media dei voti di uno studente, se l’allievo risulta promosso, questo tipo di decisione può essere presa con un costrutto condizionale.

Utilizziamo uno pseudo-codice per descrivere questo tipo di operazione:

nello pseudo-codice abbiamo un controllo su “media” quindi possiamo pensare “media” come ad una variabile. andando avanti nella lettura troviamo “e’ maggiore o uguale a“, ma per quanto detto precedentemente  “e’ maggiore o uguale a” è tradotto in “>=” che come detto è un operatore di confronto. Traducendo abbiamo:

Inseriamo un po’ di parentesi per mettere in evidenza le parti del codice, useremo le parentesi graffe per racchiudere blocchi di codice, in qiuesto caso metteremo tra parentesi graffe la parola “promosso”. Utilizziamo le parentesi tonde per evidenziare la condizione di controllo:

Per avvicinarci al linguaggio C, sostituiamo alle parole in italiane le corrispondenti parole in inglesi:

Ma per essere aderenti all’ANSI C bisogna fare un passo successivo molto semplice: eliminare la parola then, ottenendo:

a questo punto se vogliamo stampare la parola “promosso” sappiamo che dobbiamo utilizzare la funzione printf():

e questo che avete ottenuto è il costrutto if

Breve trattazione teorica

Riprendo quanto già spiegato negli: Appunti di programmazione su Arduino: controllo di flusso (ripeto ricopiando in parte):

L’istruzione if è composta da un blocco “condizione” che verifica se una deterniata condizione logica si verifica. Se la “condizione” risulta “Vera“, viene eseguita un blocco “istruzioni“, se la “condizione” risulta “Falsa“, non viene eseguito il blocco “istruzioni” e l’esecuzione del programma prosegue oltre l’istruzione if.

In altro modo, se la condizione di controllo, costituita ad esempio dal confronto di due valori, risulta vera, verrà eseguito il codice incluso tra le parentesi graffe che seguono il controllo, altrimenti se la condizione di controllo risulta falsa, non vengono eseguite le istruzioni dell’if  e l’esecuzione del programma continua con la porzione di codice che segue.

(con ?? indichiamo l’operatore di uguaglianza o relazione usato dalla condizione di controllo)

L’esempio sopra confronta la variabile someVariable con il valore contenuto in value che può essere una variabile o una costante. Se il confronto o la condizione all’interno delle parentesi tonde risulta vera, verrà eseguita la porzione di codice inclusa tra le parentesi graffe, doSomething, altrimenti se la condizione risulta falsa viene saltata la porzione tra parentesi graffe e l’esecuzione prosegue dopo l’ultima parentesi graffa.

Nota: fate attenzione che se accidentalmente usate ‘=’, ad esempio if(x=10), tecnicamente è un’operazione valida, l’operazione assegna alla variabile x il valore 10 che è un’operazione sempre vera, quindi il programma si comporterà diversamente da come avevamo progettato. Invece se usiamo “==” (doppio uguale) in if(x==10) viene verificato se la variabile x è uguale al numero 10.

Pensate a “=” come ad un’operazione di assegnamento e “==” come ad una operazione di confronto (“è uguale a”).

Esempio pratico

Per comprendere l’uso degli operatori logici e del comando di selezione if realizziamo un programma che confronta due numeri interi:

Riprendiamo l’analisi del programma precedente:

l’if verifica se i due numeri sono uguali, se la condizione tra parentesi tonde risulta vera allora viene eseguita l’operazione tra parentesi graffe ovvero viene stampato (assumendo che i due numeri siano uguali a 7)

In caso contrario se la condizione non risulta vera non viene eseguita l’operazine tra parentesi graffe ed il controllo passa all’istruzione successiva.

In modo del tutto analogo vengono eseguiti i successivi if.

 Esempio pratico

Realizziamo un programma che stampa il maggiore dei due numeri inseriti.

Analizziamo il programma.
Se numero1 è >= a  numero2. Altrimenti se numero1 è > di numero2 scambia i valori di numero1 e numero2 (passando il valore attraverso la variabile “temporaneo“) e poi stampa numero2, ossia quello che prima era numero1.

if…else

Vogliamo realizzare un programma che stampa “promosso” se la media dei voti di uno studente è maggiore o uguale a  6 e  stampa “bocciato” se la media dei voti è minore di 6.

Anche in questo caso utilizziamo lo pseudo-codice:

Agiamo passo passo come fatto in precedenza per l’if.

sostituiamo la grase “e’ maggiore o uguale a” con “>=” ed evidenziamo con parentesi tonde le condizioni e con le graffe le porzioni di codice:

traduciamo in inglese:

Come detto in ANSI C la parola then si omette e quindi, sostituendo all’azione “visualizza” con la rispettiva funzione C printf(), otteniamo:

il diagramma che segue illustra il flusso di controllo per l’istruzione “if…else“:

Breve trattazione teorica

Come rappresentato dal diagramma di flusso che segue, la struttura if…else è composta da tre sezioni, la prima è costituita da un blocco “condizione” che controlla il verificarsi di una determinata condizione logica, se la condizione risulta “Vera” viene eseguito il blocco “istruzioni” altrimenti, se “Falso” viene eseguito il blocco “altre istruzioni

La condizione logica da verificare è inclusa tra parentesi tonde. Il ramo che viene eseguito nel caso di risultato “Vero” è racchiuso tra il primo gruppo di parentesi graffe, mentre il secondo gruppo di codice, incluso tra le parentesi graffe dopo l’istruzione “else“, viene eseguito se “condizione” risulta “Falso“:

Nota: una istruzione if verifica semplicemente se la condizione all’interno delle parentesi tonde è vera o falsa. Nell’esempio, se if (inputPin == HIGH) risulta vera, viene eseguita la porzione di codice doTingA, in caso contrario viene eseguita la porzione di codice che segue l’elsedoThingB

L’else può anche precedere altre istruzioni if e test mutualmente esclusivi possono essere eseguiti nello stesso momento. Quindi potrete avere molte istruzioni if annidate.
Potete avere un numero illimitato di rami else. Ricordate che in funzione del valore logico del blocco di controllo, solo un insieme di istruzioni verrà eseguito.

Esempio pratico

Realizzare nuovamente il programma che stampa il maggiore dei due numeri inseriti uisando il costrutto if…else:

Esempio pratico

Realizzare un programma che acquisisce un numero da tastiera e stampa un messaggio che indica se il numero è positivo o negativo:

Esercizio 1

Realizzare un programma che legga un numero inserito da tastiera e ne stampi il valore assoluto.

Esercizio 2

Realizzare un programma che legga due numeri inseriti da tastiera, detti X e Y, restituisca a monitor le seguenti informazioni:

  • determinare se Y è un numero positivo o negativo
  • determinare se X è un numero pari o dispari
  • calcoli il valore di X + Y
  • determinare quale scelta dei segni (±X) + (±Y) porta al risultato massimo e quale è il valore massimo.

Esercizio 3

Scrivere un programma che legga da tastiera i valori delle lunghezze dei tre lati di un triangolo (detti X, Y, Z) e determini:

  • se il triangolo è equilatero
  • se il triangolo è isoscele
  • se il triangolo è scaleno
  • se il triangolo è rettangolo

switch

Abbiamo visto che in C possiamo utilizzare il comando di selezione singola if e quello di selezione multipla if…else.
Potrebbe però esserci la necessità che una variabile o una espressione debba essere confrontata con una serie di valori che la variabile o l’espressione potrebbe assumere e che, a seconda del risultato del confronto, vengano intraprese delle azioni diverse. Questo tipo di selezione è chiamato switch (interruttore) e serve per gestire una serie di decisioni.

La prima operazione che viene eseguita è quella di verificare il valore della variabile, in funzione del valore assunto da “variabile” si entra nel ramo “case” corretto, se per esempio il valore di “variabile” è 2, viene eseguita “istruzione2“, che può anche essere una lista di istruzioni, al termine viene eseguito il “break”, cioè termina l’esecuzione dello switch e l’esecuzione del programma prosegue dopo la graffa di chiusura dello switch.

Se il valore non è nessuno di quelli elencati viene eseguito il ramo “default”.

Esempio pratico

Dato un numero intero tra 1 e 12, che rappresenta il mese, stampare il nome per esteso del mese (“gennaio”, “febbraio”… “dicembre”).

Esercizio 4

Utilizzando l’istruzione switch, scrivere un programma che realizza una semplice calcolatrice in grado di compiere le 4 operazioni tra numeri interi. Realizzare un menù di scelta dove l’utente indica con un numero (da 1 a 4) l’operazione da eseguire, successivamente il programma dovrà leggere i due operandi e restituire il risultato.dell’operazione scelta dall’utente.

Articoli simili:

Questa voce è stata pubblicata in i miei allievi, programmazione e contrassegnata con , , , , , , , , , , . Contrassegna il permalink.

5 risposte a Lezione 02 – corso di programmazione in C

  1. Umberto scrive:

    Ciao , sto seguendo con molto interesse le tue lezioni di programmazione in c, sono molto utili e mi stanno facendo imparare in fretta 😀 .Sei un grande!!!

    Volevo sapere quando sara’ disponibile la Lezione 03.
    Aspetto fiducioso la soluzione degli esercizi e non vedo l’ora di imparare qualcosa di nuovo .

  2. Silvio scrive:

    Salve, stò seguendo anche io con molto interesse le sue lezioni, però dove posso consultare le altre lezioni, perchè nel sito arriva fino al “lezione 02”? O almeno un consiglio dove poter imparare in fretta il C?

    • admin scrive:

      Ciao Silvio. Si hai ragione non ho messo online le altre lezioni perché attualmente sono solo in modalità slide per le mie classi. Cerco di metterle online, in ogni caso se non riesco nel breve ti lascio un commento con tutti i link che possono esserti di aiuto. Nel mentre vai sul sito di mia sorella che insegna informatica ha un sito che utilizza esclusivamente per i suoi studenti, il link è http://www.maffucci.cc spero possa esserti di aiuto.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.