Esercizio 1
Dato un array di 30 elementi, far scegliere all’utente il numero di elementi che devono essere presenti nell’array e permettere all’utente di inserire i numeri all’interno dell’array. Alla fine dell’inserimento l’utente deve poter inserire un valore in modo da verificare se questo è presente o meno nell’array.
#include <stdio.h>
int main()
{
int prova[30];
int n, valore, i, trovato;
do
{
printf("Inserisci un numero compreso tra 1 e 30");
scanf("%d",&n);
if(n<1 || n>30)//Se ha messo un numero che non è compreso tra 1 e 30
printf("ATTENZIONE, hai immesso un numero errato!");
} while (n<1 || n>30);
for (i=0; i<n; i++)//se n = 5, noi dobbiamo inserire 5 elementi nell'array, quindi da 0 a 4.
{
printf("Immetti il numero in posizione, %d", i+1);// i+1 perchè non deve apparire da 0 a 4, ma da 1 a 5
scanf("%d", &prova[i]);//Inserisco il numero scelto dall'utente, nell'array
}
printf("Immetti il valore da cercare");
scanf("%d", &valore);
//Rimango nel for finchè i<n && il numero non è stato trovato !trovato equivale a trovato == 0
//scrivere (trovato) equivale a trovato == 1 (non 0), (!trovato) equivale a trovato == 0 (non 1)
for(i=0, trovato=0; i < n && !trovato; i++) //siccome il corpo del for è composto da 1 istruzione, non mettiamo le parentesi graffe
if(prova[i] == valore) //siccome il corpo dell'if è composto da 1 istruzione, non mettiamo le parentesi graffe
trovato = 1; //Una variabile che è usata da contatore, se rimane 0 il numero non è presente nell'array
if(trovato) //equivale a dire (trovato == 1) o trovato !=0
//L'if viene eseguito se l'espressione tra le parentesi è diversa da 0
printf("Il valore inserito è presente nell'array");
else
printf("Il valore inserito non è presente nell'array");
return 0;
}
Esercizio 2
Acquisire 5 numeri minori di 80 e maggiori di 1 in un array, calcolare la media e stampare per ogni numero nell’array, il corrispettivo numero di asterischi
#include <stdio.h>
#define DIM 5 //pseudoistruzione
int main()
{
int prova[DIM],i,j;
float media;
for (int i=0;i<DIM;i++)
do
{
printf("Immetti elemento %d >=1 e <= 80", i+1); //Uscirà scritto: immetti elemento 1
scanf("%d",&prova[i]);
if(prova[i] < 1 || prova[i]>80; i++)
printf("Errore");
}while(prova[i] < 1 || prova[i]>80); //controllo sugli elementi inseriti nell'array
for(i = 0, media = 0,0; i<DIM; i++)
media = media + prova[i]; //acquisiamo la somma di tutti i numeri nell'array per poi fare la media
media = media/DIM; //calcoliamo la media
printf("La media è %f",media);//stampiamo la media
for(i = 0; i<DIM; i++)
{
for(j=0; j<prova[i]; j++)
printf("*");
//stampa gli asterischi uno dopo l'altro in base al numero in prova[i] = ****
printf('\n'); //va a capo così gli asterischi per ogni numero, sono su righe diverse
}
return 0;
}
📎 Pseudo istruzione → istruzione sostituzione di testo, #define nome valore. Non occupa memoria, ogni volta che trova il nome del define (nel caso sopra = DIM), assegna il valore che noi abbiamo inserito nella define. (viene usato impropriamente anche per definire le costanti).
#define DIMENSIONE 5
//prima di compilare il programma, cerca tutte le DIM e sostituiscile con 5
int main()
{
int i = DIM;
printf("Il numero è %d",i);
}
L’output sarà “il numero è 5“
Ciclo infinito
while (1)
{
//ciclo infinito
}
for (;;) //ciclo infinito
//OPPURE
#define FOREVER while (1)
int main()
{
FOREVER //il compilatore sostituirà FOREVER con while(1) e quindi il ciclo sarà infinito
{
}
}
Casting
int somma;
float media;
media = (float)somma/5; //casting
⚠️Casting → si scrive una coppia di parentesi anteposta alla variabile che ci dice in che tipo deve essere trasformato quella variabile per quel momento. Il casting può essere fatto solo tra variabili compatibili tra di loro.