Skillbook Logo
foto profilo

Skill Factory

Lista post > Laboratori di Logica di Programmazione in C- Lezione 1

Laboratori di Logica di Programmazione in C- Lezione 1

Gino Visciano | Skill Factory - 09/03/2018 01:04:24 | in Tutorials

Benvenuti, in questa lezione vedremo quali sono i principali tipi di Variabili in C, impareremo ad usare le condizioni per gestire le strutture di programmazione ed applicheremo queste conoscenze per creare un Contatore ed un Totalizzatore.

UN PO' DI STORIA
ll linguaggio C è stato  sviluppato da Dennis Ritchie presso i Bell Labs della AT&T tra il 1969 e il 1973, si differenzia dagli altri linguaggi di programmazione perché il paradigma di programmazione e di tipo procedurale, per questo motivo si definisce funzionale.
Erano i tempi in cui sui computer s'installava il sistema operativo UNIX, un sistema multiutente molto potente, con un'interfaccia di tipo testo.
Tra 1989 ed il 1990 l'ANSI (American National Standard Institute) defini le strutture, le funzioni e le keywords standard di C, successivamente le stesse specifiche furono definite come standard dall'ISO (International Organization for Standardization).
Pur non essendo  un linguaggio ad oggetti, ne è stato sicuramente il precursore, infatti le strutture di dati del linguaggio C, sono le antenate delle classi, i template usati per creare gli oggetti in  C++, C# e Java.
La versione ad oggetti del linguaggio C si chiama C++, fu creata da Bjarne Stroustrup nel 1983.
La conoscenza del Linguaggio C rende più semplice l'apprendimento di qualunque linguaggio ad oggetti, perché le strutture di programmazione usate per scrivere le applicazioni sono uguali.

COSA SERVE PER INIZIARE
Per iniziare vi serve un'applicazione IDE (ambiente di sviluppo integrat,o per scrivere programmi in C) ed un compilatore, per rendere i programmi scritti in C eseguibili.
Un IDE molto semplice da usare è: Code::Blocks.


Per scaricare questa applicazione collegatevi al sito seguente:
https://www.codeblocks.org/
Attenti a scegliere una versione di Code::Blocks compatibile con il sistema operativo installato sul vostro computer.

Ad esempio se state usando Windows seguite i passaggi seguenti:

1) ”Downloads”
2) ”Download the binary release”
3) Sono elencate tre versioni; la prima non include il compilatore, la seconda e la terza si, per sicurezza scegliete la seconda.

Come  per  ogni  applicazione  eseguite  il  file  appena  scaricato,  accettate la licenza e seguite il percorso guidato; ad installazione ultimata avrete nel menu Start un collegamento a Code::Blocks.


STRUTTURA DI UN PROGRAMMA IN C
Il linguaggio C è case sensitive, significa che è sensibile alla differenza tra maiuscolo e minuscolo.
La struttura di un programma in C è molto semplice, basta inserire le istruzioni all'interno della funzione main(), come mostra l'esempio seguente:

#include <stdio.h>
int main(){
... Istruzioni ...
return(0); /* fine programma 0 indica che è tutto ok, altrimenti si dovrebbe indicare un valore diverso da 0 */
}

Per creare un programma C con Code::Blocks, procedete nel modo seguente:

1) Lanciate Code::Blocks
2) Cliccate su File, New, File ...

3) Nella finestra New from template, selezionate C/C++ source e cliccate su Go

4) Premete sempre next fino a quando non arrivate alla finestra seguente

5) Cliccate sul pulsante con i tre puntini (...), scegliete la cartella dove salvare il programma e scrivete il nome del programma

6) Cliccate su Salva e poi su Finish.

Per lanciare il vostro programma C, dovete prima salvarlo, poi compilarlo (Build) e successivamente eseguirlo. L'immagine seguente vi mostra come fare tutto quello che serve semplicemente con due click.

 

TIPI DI VARIABILI

In C le variabili principalmente possono essere dei seguenti tipi:

- intere
- decimali
- carattere
- stringa

Le variabili di tipo stringa, che corrispondono ad insiemi di caratteri, come ad esempio i nomi ed i cognomi, in C non esistono, quindi dovete usare vettori di char. Un vettore è una struttura composta da più variabili dello stesso tipo, ne parleremo più approfonditamente nella prossima lezione, per ora basta sapere che per memorizzare un insieme di caratteri in un programma, dovete usare un vettore di tipo char, indicando tra parentesi quadre il numero di caratteri da inserire, come mostra l'esempio seguente:

char nominativo[20]="Pippo";

Attenzione, nel vettore nominativo si possono memorizzare al massimo 19 caratteri, perché l'ultimo carattere è quello di fine stringa (tappo) che viene aggiunto automaticamente e corrisponde al carattere '\0'.
ricordate che per assegnare un valore ad un vettore dovete usare la funzione strcpy(vettore,"stringa"), per usare questa funzione dovete includere la libreria <string.h>.

In C non esistono nemmeno i valori booleni (true/false), se necessario potete usare variabili intere a cui assegnate 0 per falso, 1 o un valore diverso da 0 per vero.

Per usare le variabili in C le dovete sia dichiarare, sia inizializzare, come mostrano gli esempi seguenti:

int a=0;
double b=0.0;
char c='A';
char d[6]="Mario";

Notate che i char vengono scritti tra singoli apici, le stringhe tra doppi apici.


COME VISUALIZZARE I VALORI MEMORIZZATI NELLE VARIABILI

Per visualizzare il contenuto delle variabili dovete usare la funzione printf(stringa_formato,elenco_variabili).
La stringa di formato vi permette d'impostare l'output dei valori da visualizzare.
Per stabilire in che posizione della stringa di formato visualizzare i valori delle variabili in elenco, potete usare i simboli seguenti:

%d->se la variabile è un numero intero;
%f->se la variabile è un numero decimale;
%c->se la variabile è un carattere;
%s->se la variabile è una stringa.


Esempio 1

#include <stdio.h>
#include <string.h>
int main(){
char nome[20]; /* stringa vuota di 20 caratteri */
char cognome[20];
int eta=0;
char sesso; /* m=maschio, f=femmina */
strcpy(nome,"Mario");
strcpy(cognome,"Rossi");
eta=30;
sesso='m';
printf("Nome:%s\n",nome);
printf("Cognome:%s\n",cognome);
printf("Eta':%d\n",eta);
if(sesso=='m') {
   printf("Sesso:maschio\n");
  }
else {
   printf("Sesso:femmina\n");
}
printf("---------------------\n");
strcpy(nome,"Carla");
strcpy(cognome,"Verdi");
eta=20;
sesso='f';
printf("Nome:%s\n",nome);
printf("Cognome:%s\n",cognome);
printf("Eta':%d\n",eta);
if(sesso=='m') {
   printf("Sesso:maschio\n");
  }
else {
   printf("Sesso:Femmina\n");
}
return(0); /* fine programma 0 indica che è tutto ok, altrimenti si dovrebbe indicare un valore diverso da 0 */
}

Nell'esempio appena fatto abbiamo usato una struttura condizionale if per scegliere se la persona è maschio o femmina, più avanti approfondiremo questo argomento.
 

Esempio 2

#include <stdio.h>
#include <string.h>
int main(){
char nome[20]; /* stringa vuota di 20 caratteri */
char cognome[20];
int eta=0;
char sesso; /* m=maschio, f=femmina */
strcpy(nome,"Mario");
strcpy(cognome,"Rossi");
eta=30;
sesso='m';
printf("Nome:%s, Cognome:%s Eta':%d, Sesso:%c\n",nome,cognome,eta,sesso);
printf("----------------------------------------------------------\n");
strcpy(nome,"Carla");
strcpy(cognome,"Verdi");
eta=20;
sesso='m';
printf("Nome:%s, Cognome:%s Eta':%d, Sesso:%c\n",nome,cognome,eta,sesso);
return(0); /* fine programma 0 indica che è tutto ok, altrimenti si dovrebbe indicare un valore diverso da 0 */
}

 

COME ASSEGNARE DATI AD UNA VARIABILE USANDO LA TASTIRA

Per assegnare dati ad una variabile utilizzando la tastirea, dovete usare la funzione scanf(stringa_formato, &variabile).
La stringa di formato dello scanf si usa solo per indicare il tipo di dato che si sta assegnando alla variabile, i valori possibili sono i seguenti:

%d->numero intero;
%f->numero decimale;
%c->carattere;
%s->stringa.

In C, se usate il nome di una variabile significa che volte far riferimento al suo contenuto detto valore, se invece il nome della variabile è preceduto dal simbolo &, significa che fate riferimento al suo indirizzo.
Quindi la funzione scanf non si aspetta come secondo argomento il valore della variabile indicata, ma l'indirizzo di dove si trova il valore.

Esempio 3

#include <stdio.h>
int main(){
char nome[20]; /* stringa vuota di 20 caratteri */
char cognome[20];
int eta=0;
char sesso[2]; /* m=maschio, f=femmina */
printf("Nome: ");
scanf("%s",&nome);
printf("Cognome: ");
scanf("%s",&cognome);
printf("Eta': ");
scanf("%d",&eta);
printf("Sesso (m/f):");
scanf("%s",&sesso);
printf("Nome:%s, Cognome:%s Eta':%d, Sesso:%s\n",nome,cognome,eta,sesso);
return(0); /* fine programma 0 indica che è tutto ok, altrimenti si dovrebbe indicare un valore diverso da 0 */
}

Attenzione in questo esempio il sesso è di tipo stringa, questo è necessario per evitare un problema che spesso si crea con la funzione scanf.
Quando inserite un numero oppure un carattere da tastiera, la funzione scanf legge il valore e lascia l'invio digitato nel buffer di input.
Se successivamente è presente un altro scanf, legge automaticamente l'invio dal buffer, senza attendere il nuovo input.
Questo problema si può risolvere in due modi:

1) lo scanf successivo deve leggere una stringa, in questo caso il problema non si presenta;
2)  dovete pulire il buffer con uno scanf("%c", &invio), in questo modo lo scanf successivo leggerà normalmente l'input da tastiera.

 

A COSA SERVONO LE CONDIZIONI
Le condizioni servono per confrontare il contenuto di una variabile con un valore oppure con il contenuto di un'altra variabile. L'esito di questo confronto può essere vero (true) oppure falso (false).
Il tipo di confronto fatto dipende dall'operatore relazionale applicato. Di seguito sono indicati i principali operatori relazionali:

= =   uguale a  

>  maggiore di  

<   minore di  

<=  minore o uguale a  

>=  maggiore o uguale a     

!=   diverso da

Nella tabella seguente potete vedere alcuni esempi:

Nella logica di programmazione si possono verificare anche casi in cui per fare una scelta, si devono controllare più condizioni allo stesso tempo.
Ad esempio se cerchiamo Mario Rossi di Napoli, in questo caso servono tre condizioni e devono essere tutte vere.
Invece se vogliamo visualizzare i clienti di Milano oppure quelli di Npoli, in questo caso servono due condizioni, ma basta che almeno una sia vera.

Per gestire scelte con più condizioni, dovete utilizzare gli operatori logici and, or e not. Naturalmente la scelta del tipo di operatore logico da usare depende principalmente da due casi:

1) se le condizioni devono essere tutte vere;
2) se basta che almeno una delle condizioni sia vera.

Le tabelle seguenti, dette tabelle della verità (logica boole), vi permettono di capire il risultato che si ottine, quando si confrontano più condizioni contemporaneamente, in base al tipo di operatore logico scelto.

 

LE STRUTTURE DI PROGRAMMAZIONE

 

 

 

CONTATORE

In programmazione si definisce Contatore una variabile che s'incrementa oppure si decrementa di un valore predefinito.
In genere il valore predefinito è uguale ad 1, ma può anche essere un valore maggiore.

L'espressione che permette di incrementare una variabile di un valore predefinito è la seguente:

a = a + valore

se valore = 1, l'espressione diventa:

a = a + 1

L'espressione a = a + 1 è composta dalla somma a + 1 e dall'assegnazione a = risultato della somma, come mostra lo schema seguente:

 

L'espressione che permette di decrementare una variabile di un valore predefinito è la seguente:

a = a - valore

se valore = 1, l'espressione diventa:

a = a - 1

L'espressione a = a - 1 è composta dalla sottrazione a - 1 e dall'assegnazione a = risultato della sottrazione, come mostra lo schema seguente:

 

L'esempio seguente mostra come s'incrementa una variabile in C:

Esempio 4

#include <stdio.h>
int main(void)  {
  int a=0;
  int valore=1;
  a = a + valore;
  printf ("valore a = %i\n",a);
  a = a + 1;
  printf ("valore a = %i\n",a);
  /* a++ in C corrisponde all'espressione a = a - 1 */
  a++;
  printf ("valore a = %i\n",a);
  return 0;
}

L'esempio seguente mostra come si decrementa  una variabile in C:

Esempio 5

#include <stdio.h>
int main(void)  {
  int a=5;
  int valore=1;
  a = a - valore;
  printf ("valore a = %i\n",a);
  a = a - 1;
  printf ("valore a = %i\n",a);
  /* a-- in C corrisponde all'espressione a = a - 1 */
  a--;
  printf ("valore a = %i\n",a);
  return 0;
}

COME CONTARE FINO A 10

Per creare un programma che conta da 1 ad 10 dovete usare un contatore ed un ciclo.
Un ciclo è una struttura di programmazione che vi permette di ripetere più volte le stesse azioni.

In questo laboratorio userete un ciclo while per contare fino a 10, questo tipo di ciclo si può rappresentare con il diagramma seguente:

Il while ripete le azioni mentre la condizione è vera, s'interrompe quando la condizione è falsa.

La condizione che serve è: c<=10 (c minore o uguale a 10).

Quindi per contare fino a 10 dovete usare il programma seguente:

Esempio 6

#include <stdio.h>
int main(){
int c=1;
while(c<=10){ /* leggi mentre c è minore< o uguale= a 10 */
   printf("%d\n",c); /* visualizza c nella posizione dove si trova il simbolo %d e va a capo utilizzando \n */
   c=c+1; /* contatore */
   }
return 0;
}

 

COME CONTARE FINO AD UN VALORE N E RIPETERE IL PROGRAMMA SE RICHIESTO

Per creare un programma che conta da 1 ad n dovete procedere come segue:

1) Inserire il valore n
2) Usare un contatore ed un ciclo while per contare fino ad n impostando la condizione c<=n
3) Usare un ciclo do while per ripetere il programma, posizionando il do nel punto dove il programma deve riprendere

Un ciclo do while  è una struttura di programmazione che vi permette di ripetere più volte le stesse azioni, è identico ad un ciclo while, con la differenza che la condizione di permanenza nel ciclo viene controllata alla fine, quindi l'azione viene eseguita almeno una volta, come mostra il diagramma seguente

Il ciclo do while  viene usato spesso per ripetere un programma o un suo task, come nel laboratorio seguente:

Esempio 7

#include <stdio.h>
#include <string.h> /* Questa libreria permette di usare la funzione strcmp che serve per confrontare 2 stringhe */
int main(){
int c=0;
int n=0;
char risposta[2]=""; /* Le stringhe in c sono vettori di char */
do{
     c=1;
     printf("Fino a quanto vuoi contare? ");
     scanf("%d",&n); /* simbolo %d -> tipo di dato inserito da tastirea, in questo caso numero, &n indirizzo della variabile n dove allocare il valore inserito */
     while(c<=n){ /* leggi mentre c è minore< o uguale= a n */
             printf("%d\n",c); /* visualizza c nella posizione dove si trova il simbolo %d e va a capo utilizzando \n */
             c=c+1; /* contatore */
             }
     printf("Vuoi continuare(s/n)? ");
     scanf("%s",&risposta); /* simbolo %c -> tipo di dato inserito da tastirea, in questo caso carattere, &risposta indirizzo della variabile risposta dove allocare il valore inserito */
     } while(strcmp(risposta,"s")==0);  /* strcmp(risposta,"s") -> ritorna 0 se la risposta è uguale ad s altrimenti ritorna un valore diverso da 0 */
return 0; /* chiude */
}

 

TOTALIZZATORE

In programmazione un Totalizzatore una variabile che permette di sommare uno o più valori.
In pratica un  Totalizzatore è una specializzazione di un Contatore, dove il valore predefinito può cambiare ogni volta, quindi l'espressione che permette di Totalizzare valori è uguale a quella che abbiamo usato  per il Contatore:

s = s + valore

L'espressione s = s + valore è composta dalla somma s + valore e dall'assegnazione s = risultato della somma, come mostra lo schema seguente:

L'esempio seguente mostra come si totalizzano i valori in C:

Esempio 8

#include <stdio.h>
int main(void)  {
  int s=5;
  int valore=7;
  s = s + valore;
  printf ("Totale s = %i\n",s);
  valore=10;
  s = s + valore;
  printf ("Totale s = %i\n",s);
  valore=-6;
  s = s + valore;
  printf ("Totale s = %i\n",s);
  /* s+=valore in C corrisponde all'espressione s = s + valore */
  valore=2;
  s+=valore;
  printf ("valore s = %i\n",s);
  return 0;
}

COME TOTALIZZARE PIU' VALORI INSERITI DALLA TASTIERA

 

Per eseguire questo laboratorio avete bisogno di un totalizzatore ed un ciclo do while.
Inoltre stabiliamo che se inserite come operazione il segno + viene richiesto un nuovo valore, altrimenti se inserite il segno = viene visualizzato il totale dei valori inseriti.

 

Esempio 9

#include <stdio.h>
#include <string.h>
int main(){
int tot=0;
int valore=0;
char operazione[2]="";
do{
     printf("Inserisci il valore: ");
     scanf("%d",&valore); /* simbolo %d -> tipo di dato inserito da tastirea, in questo caso numero, &valore indirizzo della variabile valore dove allocare il valore inserito */
     tot=tot+valore; /* totalizzatore */
     printf("Scegli l'operazione(+/=): ");
     scanf("%s",&operazione); /* simbolo %s -> tipo di dato inserito da tastirea, in questo caso stringa, &operazione indirizzo della variabile operazione dove allocare il valore inserito */
     } while(strcmp(operazione,"+")==0);
printf("Totale:%d\n",tot); /* visualizza tot nella posizione dove si trova il simbolo %d e va a capo utilizzando \n */
return 0;
}

Arrivederci alla prossima lezione!!!


L A B O R A T O R I   D I   L O G I C A   D I   P R O G R A M M A Z I O N E   I N   C
L E Z I O N E  1
L E Z I O N E  2
L E Z I O N E  3
L E Z I O N E  4
L E Z I O N E  5


Introduzione alla logica degli Oggetti (Per imparare a programmare ad oggetti)


logica di programmazione programmazione linguaggio c code blocks tipi di dati compilatore vettore operatori relazionali operatori logici while do while for if-else switch istruzioni condizionali cicli

Share Button
TOP