Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli

Fondamenti di informatica / fondamenti di programmazione, linguaggio c++, Dispense di Fondamenti di informatica

flowchart, condizione if, ciclo while, ciclo do-while, for, stringhe, funzioni, menu, enum, moduli, aiuti per la codifica

Tipologia: Dispense

2022/2023

In vendita dal 05/09/2023

carla-boscolo
carla-boscolo 🇮🇹

4.6

(7)

516 documenti

Anteprima parziale del testo

Scarica Fondamenti di informatica / fondamenti di programmazione, linguaggio c++ e più Dispense in PDF di Fondamenti di informatica solo su Docsity! FONDAMENTI DI PROGRAMMAZIONE Architettura di un calcolatore 3 Linguaggi di programmazione 3 Diagrammi di flusso 5 Programmazione strutturata 5 IF… ELSE 6 DOWHILE 6 FOR 7 ESERCIZI 7 Dichiarazione dei dati in C++ 16 Switch case 17 ESERCIZIO ESEMPIO CODIFICA 18 USO DI DEVC++ 21 PRIMO PROGRAMMA : somma 22 Dato un numero calcola il cubo se è maggiore di 0, il quadrato se è minore. 23 Si scriva un programma che scriva in successione i primi 10 numeri interi. 24 IMPLEMENTIAMO GLI ESERCIZI FATTI NEI FLOWCHART 25 Formalizzare un algoritmo che legge i coecienti a e b di un'equazione di primo grado ax=b e ne scrive la soluzione (attenzione al dominio del coeciente a) 26 Formalizzare un algoritmo che legge i coecienti a, b e c di un'equazione di secondo grado ax2+bx+c=0 e ne scrive le soluzioni 28 Formalizzare un algoritmo che legge il raggio r di una circonferenza e ne calcola l'area e la lunghezza 31 Formalizzare un algoritmo che legge tre variabili intere a, b e c e “ruota” i valori, in modo che b assuma il valore di a, c quello di b e a quello di c. 33 Formalizzare un algoritmo che legge le lunghezze dei tre lati di un triangolo a,b,c e ne calcola il perimetro e l'area S, quest'ultima tramite la formula di Erone S=√p(p-a)(p-b)(p-c), in cui p è il semiperimetro. 36 Nuovi esercizi 38 Un negoziante per ogni spesa di importo superiore a 100 € eettua uno sconto del 5%, del 10% per ogni spesa superiore a 300 €. Scrivere un programma che richieda all'utente l'ammontare della spesa e visualizzi quindi l'importo eettivo da pagare. 38 Su una linea ferroviaria, rispetto alla taria piena, gli utenti pensionati usufruiscono di uno sconto del 10%, gli studenti del 15% e i disoccupati del 25%. Codificando i pensionati con un 1, gli studenti con un 2 e i disoccupati con una 3, scrivere un programma che, richiesto il costo di un biglietto e l'eventuale condizione particolare dell'utente, visualizzi l'importo da pagare. 40 Durante un esperimento di fisica, si ripete la misura del tempo di oscillazione di un pendolo per tre volte, ottenendo valori di volta in volta diversi. Per questo motivo, si decide di esprimere la misura attraverso il valor medio e di indicare l’incertezza mediante la semidispersione massima, cioè la semidierenza tra i valori massimo e minimo: (t max – t min ) / 2. Scrivere un programma che, richiesti in input i tre tempi in secondi, visualizzi la misura completa nel formato: t medio ± incertezza Per esempio, inserendo i tempi: 4.5, 4.7, 4.6, l’output del programma deve essere: (4.6 ± 0.1) s. 43 DATO N FARE LA SOMMA DEI VALORI 49 I CICLI 52 NEGOZIO 52 GIOCO SOMMA 54 TAVOLA PITAGORICA 55 Calcolo della media 57 ● individua input ● output in uscita in determinate condizioni ● relazione tra input e output (formule) Dati : vengono gestiti da istruzioni Istruzione : operazione operatori relazionali ==, >, <, != operatori aritmetici + - * : Diagrammi di flusso ● ordine esecuzione istruzioni Programmazione strutturata ● Sequenza (blocco) ● Selezione (rombo) ● Iterazione Top-down = scrivo tutto il problema nell’algoritmo dall’inizio alla fine Un tempo si usava il goto (andava ad un certo punto del codice saltando molti pezzi), questo rendeva il codice molto confuso. IF… ELSE DO WHILE FOR ESERCIZI ● Dati 2 n in input, stampi il maggiore tra i 2 ● Formalizzare un algoritmo che legge il raggio r di una circonferenza e ne calcola l'area e la lunghezza AREA LUNGHEZZA IL RAGGIO NON PUO’ ESSERE MINORE O UGUALE A 0 ● Formalizzare un algoritmo che legge tre variabili intere a, b e c e “ruota” i valori, in modo che b assuma il valore di a, c quello di b e a quello di c. A = 3 B = 2 C = 5 ● B VALE 2, A VALE 3 B = A B = 3 (SI PERDEREBBE 2 QUINDI SI METTE IN N = B = 2) ● C VALE 5, N VALE 2 C = B C = N C = 2 (SI PERDEREBBE 5 QUINDI SI METTE IN D = C = 5) ● A VALE 3 E D VALE 5 A = C A = D A = 5 Controllo ulteriore → controlla se si può formare un triangolo 22/11/2021 Dichiarazione dei dati in C++ Stringhe e booleani non esistono in C (solo c++) Simbolo Operatore — (tilde) complemento a 1 Î T = ; && AND y=3 > shift a destra x<10 && y>1 Return True << shift a sinistra x=6 Il oR y=3 & AND (congiunzione logica) x==5 || y==5 Return False I OR {disgiunzione logica) 50 ! NOT a A XOR (OR esclusivo) !(x==y) Return True MATEMATICI MQL4 ADDIZIONE + SOTTRAZIONE MOLTIPLICAZIONE È DIVISIONE f RESTO % AUMENTA DI UNO ++ DIMINUISCI DI UNO] — Switch case case 0: printf("il numero e' zero"); Statementi Break break; //causa L'uscita immediata dallo switct case l: printf("il numero e' uno"); break; case 2: Statement2 Break printf("il numero e' due"); break; case 3: printf("il numero e' tre"); break; Statementn Break Statements Break > /*output*/ if(prodotto >0) cout<<"Risultato:" <<prodotto <<endl; else cout<<"Il risultato e' minore di zero"<<endl; return 0; } USO DI DEVC++ Nuovo Progetto Ge a # UL sadindov Static Library DLL Empty Project Application A console application (MS-DOS window) Lell @ C++ ri _ [Al Salva con nome Salvain: | | | CProjeat lesa 4 Nome Ultima modifica _ | | PrimoProgramma 22/11/2021 17:04 Tipo Carte Nome file: [Fnmo Programma dev =l[_#i_ ] Salva come: DevC++ project (‘ dev) =] Annula Cancello ciò che è presente nelle parentesi tonde. PRIMO PROGRAMMA : somma #include <iostream> using namespace std; /* somma */ int main(int argc, char** argv) { /*dichiarazione variabili*/ float addendo1; //primo addendo float addendo2; //secondo addendo float somma; //risultato operazione /*input*/ cout <<"Inserisci addendo1:"; cin >> addendo1; cout <<"Inserisci addendo2:"; cin >> addendo2; /*elaborazione*/ somma=addendo1+addendo2; /*output*/ if(somma>0) cout<<"Risultato:" <<somma<<endl; else cout<<"Il risultato e' minore di zero"<<endl; return 0; } FOR #include <iostream> using namespace std; /* Si scriva un programma che scriva in successione i primi 10 numeri interi.(for) */ int main(){ int num; for(num-1; num<=10; num++) cout<<num<<endl; return 0; } IMPLEMENTIAMO GLI ESERCIZI FATTI NEI FLOWCHART ES1 ● Formalizzare un algoritmo che legge i coecienti a e b di un'equazione di primo grado ax=b e ne scrive la soluzione (attenzione al dominio del coeciente a) #include <iostream> using namespace std; /* Formalizzare un algoritmo che legge i coecienti a e b di un'equazione di primo grado ax=b e ne scrive la soluzione (attenzione al dominio del coeciente a) */ int main() { int a = 0; //1 coeciente float b = 0; //2 coeciente float x = 0; //soluzione x = b/a cout << "Inserisci il coeciente a : "; cin>>a; cout << "\n Inserisci il coeciente b :"; cin>>b; //se a è diverso da 0, allora scrivo la soluzione if(a != 0){ x = b / a; cout <<" Soluzione : "<<x; } else if(b != 0){ //se b è diverso da 0 allora è IMPOSSIBILE cout << "Impossibile "; }else{ //se a e b sono uguali a 0 allora è INDETERMINATO cout << "Indeterminato "; } return 0; } Soluzioni Uso float b perché nel calcolo si sovrascrive b/a ES2 ES3 ● Formalizzare un algoritmo che legge il raggio r di una circonferenza e ne calcola l'area e la lunghezza #define _USE_MATH_DEFINES #include <cmath> #include <iostream> using namespace std; /* Formalizzare un algoritmo che legge il raggio r di una circonferenza e ne calcola l'area e la lunghezza */ int main() { float r = 0; //raggio float A = 0; //area float P = 0; //lunghezza cout << "Inserisci il raggio :"; cin>>r; if(r > 0){ A = (r* r) * M_PI; //M_PI sarebbe la costante pigreco P = 2 * M_PI * r; cout <<" Area : "<< A; cout <<"\n Lunghezza : "<< P; }else{ cout << "\n Non ci sono soluzioni "; } return 0; } ES4 ES5 ● Formalizzare un algoritmo che legge le lunghezze dei tre lati di un triangolo a,b,c e ne calcola il perimetro e l'area S, quest'ultima tramite la formula di Erone S=√p(p-a)(p-b)(p-c), in cui p è il semiperimetro. #include <iostream> #include <math.h> using namespace std; /*Formalizzare un algoritmo che legge le lunghezze dei tre lati di un triangolo a,b,c e ne calcola il perimetro e l'area S, quest'ultima tramite la formula di Erone S=vp(p-a)(p-b)(p-c), in cui p è il semiperimetro. */ int main() { float a = 0; //1 coeciente float b = 0; //2 coeciente float c = 0; //3 coeciente float P = 0; //sempiperimetro float A = 0; //Area do{ cout << "Inserisci il coeciente a : "; cin>>a; }while (a <= 0); do{ cout << "\n Inserisci il coeciente b :"; cin>>b; }while (b <= 0); do{ cout << "\n Inserisci il coeciente c :"; cin>>c; }while (c <= 0); P = (a*b) + (b*c) + (a*c) /2; A = sqrt(P * (P-(a*b)) * (P-(b*c)) * (P-(a*c)) ); cout <<" Semiperimetro : "<<P; cout <<"\n Area : "<<A; return 0; } ● Su una linea ferroviaria, rispetto alla taria piena, gli utenti pensionati usufruiscono di uno sconto del 10%, gli studenti del 15% e i disoccupati del 25%. Codificando i pensionati con un 1, gli studenti con un 2 e i disoccupati con una 3, scrivere un programma che, richiesto il costo di un biglietto e l'eventuale condizione particolare dell'utente, visualizzi l'importo da pagare. #include <iostream> using namespace std; /* Su una linea ferroviaria, rispetto alla taria piena, gli utenti pensionati usufruiscono di uno sconto del 10%, gli studenti del 15% e i disoccupati del 25%. Codificando i pensionati con un 1, gli studenti con un 2 e i disoccupati con una 3, scrivere un programma che, richiesto il costo di un biglietto e l'eventuale condizione particolare dell'utente, visualizzi l'importo da pagare. */ int main() { int persona = 0; float costo = 0; //input cout<< "Inserisci il costo del biglietto \n"; cin>>costo; cout<< "Inserisci \n 1 se sei un pensionato, \n 2 se sei uno studente, \n 3 se sei un disoccupato \n 0 se non sei nessuno di questi : \n"; cin>>persona; //pensionati if(persona==1){ costo = costo - (costo/100) * 10; }else{ //studenti if(persona==2){ costo = costo - (costo/100) * 15; }else{ //disoccupati if(persona==3){ costo = costo - (costo/100) * 25; } } } cout<< "Costo scontato : "<<costo; return 0; } ottenendo valori di volta in volta diversi. Per questo motivo, si decide di esprimere la misura attraverso il valor medio e di indicare l’incertezza mediante la semidispersione massima, cioè la semidierenza tra i valori massimo e minimo: (t max – t min ) / 2. Scrivere un programma che, richiesti in input i tre tempi in secondi, visualizzi la misura completa nel formato: t medio ± incertezza Per esempio, inserendo i tempi: 4.5, 4.7, 4.6, l’output del programma deve essere: (4.6 ± 0.1) s. */ int main() { float a = 0; //valore 1 float b = 0; //valore 2 float c = 0; //valore 3 float tmax = 0; //tempo massimo float tmin = 0; //tempo minimo float tmedio = 0; //valore medio float incertezza = 0; //semidierenza tra valore massimo e valore minimo do { cout << "Inserisci il primo valore \n"; cin >> a; } while (a <= 0); do { cout << "Inserisci il secondo valore \n"; cin >> b; } while (b <= 0); do{ cout << "Inserisci il terzo valore \n"; cin >> c; } while (c <= 0); if (a > b) { tmax = a; tmin = b; if (c > tmax) { tmax = c; } else { if (c < tmin) { tmin = c; } } } else { tmax = b; tmin = a; if (c > tmax) { tmax = c; } else { if (c < tmin) { tmin = c; } } } cout << "\n maggiore " << tmax; cout << "\n minore " << tmin; tmedio = (a + b + c) / 3; incertezza = (tmax - tmin) / 2; /* prova di stampa cout << "\n tmedio " << tmedio; cout << "\n incertezza " << incertezza; */ cout << "\n Il valore risulta : " << tmedio << " +/- " << incertezza << " s"; return 0; STESSO ESERCIZIO FATTO CON DO -WHILE #include <iostream> using namespace std; /* Dato n fare la somma dei valori */ int main() { int n; //numero elementi float somma = 0; //sommatoria di tutti i valori float media; //media aritmetica int i ; float val; //valore della successione do { cout << "Inserisci numero di valori : " << endl; cin >> n; }while(n<=0); i = n; do{ cout << "Inserisci valore : " << endl; cin >> val; somma += val; i--; }while(i>0); media = somma/n; cout << "Somma : " << somma << "\n Media : " << media; return 0; } STESSO ESERCIZIO FATTO CONWHILE #include <iostream> using namespace std; /* Dato n fare la somma dei valori */ int main() { int n; //numero elementi float somma = 0; //sommatoria di tutti i valori float media; //media aritmetica int i ; float val; //valore della successione do { cout << "Inserisci numero di valori : " << endl; cin >> n; }while(n<=0); i = n; while(i>0){ cout << "Inserisci valore : " << endl; cin >> val; somma += val; i--; } media = somma/n; cout << "Somma : " << somma << "\n Media : " << media; return 0; } 2/12/2021 I CICLI Accumulatore → variabile che somma una nuova quantità Contatore → conta quante interazioni vengono eettuate. NEGOZIO /* Calcolare quanto si spende in un negozio, acquistando un certo numero di prodotti. Si conosce il numero dei prodotti acquistati e, per ogni prodotto, deve inserire il costo. */ #include <iostream> using namespace std; //inserimento numero cout<<"Inserisci Num: "; cin>>num; somma += num; tent++; } if (somma < 100) cout<<"hai esaurito i tentativi"; else cout<<"La somma e': "<<somma<<" in "<< tent<< " tentativi"; return 0; } TAVOLA PITAGORICA #include <iostream> using namespace std; /* costruzione della tavola pitagorica input : NTab output : Elemento della tavola pitagorica */ int main() { int tabellina; int Ntab; int i; int numero; //inserimento Ntab do{ cout<<"Inserisci Ntab" << endl; cin>>Ntab; }while(!(Ntab > 0 && Ntab < 11)); //inizializzazione contatore tabellina = 1; //loop esterno while(tabellina <= Ntab){ //inizializzazione loop interna i=1; numero = tabellina; //loop interno while(i <= Ntab){ cout << numero << " "; numero += tabellina; i++; } tabellina++; cout << endl; } return 0; } Vengono azzerate la somma e il contatore Ciclo peril calcolo della somma dei vori presi in input. Si esce dal ciclo quando l'utente inserisce ‘N'oppure n°. MEDIA = SOMMA/CONT *#include <iostream> using namespace std; ALGORITMI NOTEVOLI 04/03/22 ALGORTIMI NOTEVOLI e Affronteremo in questa sezione lo studio di alcuni algoritmi notevoli sugli array e Algoritmi di: o Ricerca elemento o Ricerca Massimo (o Minimo) o Ordinamento o Inserimento in array ordinato o Cancellazione elemento RICERCA SEQUENZIALE Dovrebbe partire da -1 Ricerca binaria (o dicotomica) devono essere in ordine = Si applica su vettori ordinati e Si confronta la chiave K con l'elemento che si trova a metà vettore. Se l'elemento individuato non è uguale a quello cercato si prosegue la ricerca nel semivettore inferiore o superiore a seconda che la chiave sia più piccola o più grande dell'elemento che si trova a metà. # La ricerca termina con successo quando si trova la chiave = La ricerca termina con insuccesso quando la parte del vettore considerato è costituita da un solo elemento. Se N=2%-1 allora numero di passaggi per l'insuccesso: h = log, (N+1) [e Esempio: Se N=1023 h=10 Ricerca del massimo (o minimo) 3 * Abbiamo già incontrato questo algoritmo pa applicandolo a una successione di [ax = vi] numeri letti dallo standard input. La variabile Max può essere inizializzata [=] al valore più piccolo (nel caso della ricerca del massimo) che il tipo di dati che si sta utilizzando riesce a gestire. v e In questo l'iterazione può partire dal primo elemento dell'array. Il primo test sarà sicuramente positivo (o al limite =) portando ad avere Max inizializzata al primo valore contenuto nell’array. * L'algoritmo viene impolementato con un ciclo while, ma puo’ essere implementato anche attraverso un ciclo for oppure do-while. e >> Sui << valori min e max dei tipi di dato. } int ricercaMax(int v[], int d) { int max; int i; //inizializza max = v[0]; for (i = 0; i < d; i++) { if (v[i] > max) { max = v[i]; } } return max; } void ricercaSequenziale(int v[], int d) { int i; int K; //inizializza K = 44; for(i=0; i<d; i++){ if(v[i] == K){ cout << "Elemento trovato"; }else{ cout << "Elemento non trovato"; } } } /* void ricercaBinaria(int v[], int d) { int t; int u; //inizializza t = 1; u = d; } */ void ordinamentoSelezione(int v[], int d) { int i, j; int tmp; //inizializza tmp = 0; for (i = 0; i < d-1; i++) { for (j = i+1; i < d; j++) { if (v[i] > v[j]) { tmp = v[i]; v[i] = v[j]; v[j] = tmp; } } } } Cicli annidati PERCHE’ CI SONO 9 VALORI, SE SI CICLA PER 10? 2 USO DI \t ALL’INTERNO DEL 2 FOR 2 USO DI /n NEL PRIMO FOR 3 CICLO ESTERNO FOR 3 CICLO INTERNO FOR 4 #include <iostream> using namespace std; int main(int argc, char** argv) { int i, j; for(i=0;i<10;i++) { for (j=0;j<10;j++){ cout << "\t" << i*10+j ; } cout <<"\n"; //stampa la prima riga } return 0; } e CICLO INTERNO FOR // for(i=@;i<N;it+) { for (j=@;j<N; j++){ somma = i+j; cout << "\t" << somma ; } cout <<"\n"; LE FUNZIONI FUNZIONI MATEMATICHE 1 Calcola una tassa (ESEMPIO MODIFICA CODICE) 2 UTILIZZO VARIABILI GLOBALI 4 PROBLEMATICHE DELLE VARIABILI GLOBALI 5 UTILIZZO VARIABILI LOCALI 6 SITO PER PROVARE I CODICI IN SEQUENZA 8 COSA SUCCEDE SE APRO UNA PARENTESI DOVE INIZIALIZZO UN’ALTRA X 8 COSA SUCCEDE SE NON LA INIZIALIZZO 9 ERRORE DI LOGICA 10 13/01/22 phyton tutor -> spiega passaggi codice FUNZIONI MATEMATICHE MATEMATICA <math.h> Calcola una tassa (ESEMPIO MODIFICA CODICE) Ristruttura il codice per avere un unico return. Ritorno taxes, inizializzo taxes a 0.0. Se è maggiore o uguale a 5000 modifico taxes, se è minore allora lascio così come inizializzato. ECCO LA MODIFICA GIUSTA valore iniziale con f1 diventa 1 con f2 diventa 4 richiamando f1 il 4 si incrementa di 1 e diventa 5 risultato finale PROBLEMATICHE DELLE VARIABILI GLOBALI Si devono usare con molta cautela, perché richiamando le funzioni possono far vedere altre informazioni non necessarie. UTILIZZO VARIABILI LOCALI INT X E’ GLOBALE X= 10 E’ LOCALE NEL MAIN UTILIZZANDO LA FUNZIONE FUN() STAMPA IL VALORE 4 E IL VALORE DELLA FUNZIONE. ERRORE DI LOGICA 31/01/2022 Passaggio per valore -> i valori all’interno della funzione non modifica quelli fuori ( non condividono la stessa memoria) Passaggio per riferimento -> stessa porzione di memoria, quindi cambiano i valori Passaggio per riferimento costante -> passare valori che non si possono cambiare VALORE int max(int x, int y); funzione che incrementa x di 5 x vale 4 richiama funzione 4/2 + 1 = 3 STAMPA 3 X= 3+ 5 = 8 RITORNO NEL MAIN X = 4 PARAMETRI PER RIFERIMENTO double aggiornamento(double &x); se io voglio far restituire più di un valore x vale 4 richiamo la funzione( stampa 4 y= 4+5 = 9 ) stampo 9 PARAMETRI PER RIFERIMENTO COSTANTE ● Risparmia tempo e memoria ● i dati passati non verranno modificati ● PARAMETRI DEFAULT void fun(int a, float=2.5) chiamata fun(5); //non da errore fun(5, 6.4) cout << "Inserisci x^2 : "; cin >> a; cout << "\n Inserisci c :"; cin >> b; cout << "\n Inserisci termine noto :"; cin >> c; // calcolaEquazione(a, b, c); codiceRitorno = parabola(a, b, c, X1, X2); if (codiceRitorno == -1) { cout << endl << "Equazione impossibile "; }else if (codiceRitorno == 0) { cout << endl << "Esiste un unica soluzione: X = " << X1; } else{ //if (codiceRitorno == 1) cout << endl << "Soluzioni : " << endl << "X1 : " << X1 << endl << "X2 : " << endl << X2; } return 0; } FUNZIONI CON LE LIBRERIE ● Crea file estensione (.h) ● crea file implementazione codice delle funzioni ● includere file intestazione nel programma per utilizzarli #ifndef -> non definita #define -> definisce #endif -> serve non richiamare un header più volte File di intestazione C++ e | file di intestazione C++ devono avere l'estensione .h e dovrebbero avere la seguente struttura * #ifndef direttiva del compilatore + #define direttiva del compilatore + Può includere altri file di intestazione + Tutte le funzioni sono firmate con alcuni commenti su cosa fanno, | parametri formali e il valore di ritorno + #endif direttiva del compilatore ifndef avrà sempre un endif #ifndef _TAXES_RULES_ #define _TAXES RULES #include <iostream> #include <string> usilag namespace std; /* scopo -- ottenere il reddito dei dipendenti input -- un prompt di stringa da mostrare all'utente output -- un valore double che rappresenta il reddito #7 double getIncome (string); /* scopo -- calcolare le tasse per un dato reddito input -- un valore double che rappresenta il reddito output -- un valore double che rappresenta le tasse */ double computeTaxes (double); /* scopo -- mostrare le tasse all'utente input -- un valore double che rappresenta le tasse output -- Nessuno */ void printTaxes (double); #endif LE FUNZIONI Le funzioni sono parti di codice (sottoprogrammi) che realizzano operazioni semplici o complesse (programmi autonomi di servizio). Vantaggi : ● Non scrivere 2 volte lo stesso codice ● Non scrivere un codice già scritto da qualcun’altro ● Non scrivere codice già scritto e funzionante riusabilità (cioè utilizzare lo stesso codice come “mattone” per la soluzione di problemi diversi); astrazione (esprimere operazioni complesse in modo sintetico); risparmio (scrivere una sola volta codice usato più volte) FUNZIONE MAGGIORE TRA 2 NUMERI #include <iostream> using namespace std; /* programma che stampa il maggiore tra 2 numeri */ //funzione maggiore int maggiore (int num1, int num2) { //dichiaro variabile max int max; //se num2 è maggiore di num2 allora assegno num1 come max if (num1 > num2) { max = num1; } else { //se num2 è maggiore di num1 allora assegno num2 come max max = num2; } //ritorno il valore di max return max; } //main -> corpo del programma int main() { //dichiaro variabili double num1; double num2; double max; //inserisci num1 cout << "Inserire il primo numero: " << endl; cin >> num1; //inserisci num2 cout << "Inserire il secondo numero: " << endl; cin >> num2; //richiama la funzione maggiore(parametro 1, parametro 2) e assegnala a max max = maggiore(num1, num2); //stampa del valore maggiore dei numeri in input cout << "\n Maggiore (il maggiore tra i due numeri inseriti ): " << max << endl; //stampa del valore maggiore dato nel codice cout << "\n Maggiore (il maggiore tra 5 e 6 ): " << maggiore(5, 6) << endl; return 0; } FUNZIONE CIRCONFERENZA AREA E PERIMETRO #include <iostream> //#include <math.h> using namespace std; const double PIGRECO = 3.1415; //costante comune - globale /* Leggi il raggio di una circonferenza e calcola il perimetro e l’area del cerchio che essa delimita. perimetro = 2 x raggio x PIGRECO area = raggio x raggio x PIGRECO */ //funzioni //lettura dati input int leggiDati(){ //nessun parametro in ingresso int dato = 0; //variabile locale while(dato <= 0){ cout << "\n Inserisci il raggio : "; cin >> dato; } //parametro di ritorno return dato; } //calcola perimetro FUNZIONI MATEMATICHE #include <math.h> FUNZIONE MATEMATICA FUNZIONE C x radice quadrata di x (restituisce un valore 20) double sqrt (double x); senx ‘seno di x (con x reale) double sin (double x); cosx coseno di x (con x reale) double cos (double x); tgx tangente di x (con x reale) double tan (double x); arcsenx | arcoseno di x (con x nell'intervallo [-1 ;+1]) duuble asiu (dvuble x); arccos x_| arcoseno di x (con x nell'intervallo [-1 ;+1]) double acos (double x); arctgx__ | arcotangente di x (con x reale) double atan (double x); e e elevato ad x (con x reale) double exp (double x); fox 10 elevato a x (con x reale) double powl0 (double x); Inx logaritmo in base e di x (con x reale 20) double log (double x); logx logaritmo di base 10 di x (x reale positivo) double logl0 (double x); xl valore assoluto di x double fabs (double x); calcolo ipotenusa di un triangolo rettangolo i di cateti | double hypot (double x, double y); x ed y (con x,y numeri reali) aretg x/y | arcotangente di y/x. ll valore restituito è compreso |double atan2 (double y, double x); fra n @ +x estremi compresi v x elevato ad y (con x,y numeri reali) double pow (double x, double y); calcola mantissa ed esponente di x double frexp (double x, int* esp); LE STRUCT 1 Strutture come parametri di funzioni 4 struct inizializzare LE STRUCT ●Abbiamo visto che l’array è un insieme di elementi omogenei tra di loro. ●Se dobbiamo gestire insieme di elementi non omogeni possiamo utilizzare gli array paralleli, ma non è molto agevole il loro utilizzo. ●Le STRUCT risolvono questo problema ●Infatti servono a contenere dati di tipo diverso come numeri, stringhe e anche array ESEMPIO STRUCT PERSONA ● Generalmente il dato aggregato che la STRUCT descrive si chiama RECORD ● Il singolo elemento del RECORD si chiama CAMPO ● Esempio il record Persona può essere composto da ○ matricola (numero intero) ○ nome (stringa) ● La dichiarazione di un RECORD avviene tramite la keyword struct ○ indirizzo (stringa) ○ dataNascita (stringa o record data) ○ codiceFiscale (stringa) ○ isConiugato (booleano) struct nomeStruttura { tipo1 campo1; tipo2 campo2; - - - - - - - tipon campon; }; Esempio struct Persona { int matricola; string nome; string indirizzo; string dataNascita; string codiceFiscale; bool isConiugato; }; ● Una volta definita la struttura e come se avessimo definito un nuovo tipo di dato. ● Utilizziamo la nuova struttura per definire le nostre variabili: struct Persona dipendente; struct Persona operaio; ● O anche: Persona dipendente; Persona operaio; ● I campi vengono referenziati con l’identificatore della variabile e con l’identificatore del campo stesso. ● Assegnazione: dipendente.isConiugato = true; ● Lettura: cout << dipendente.matricola; ● Riprendiamo l’esempio del campo dataNascita ● Possiamo definire la struct Data come segue: struct Data { int gg; int mm; int aa; ● Allora possiamo definire Persona come: struct Persona { int matricola; string nome; string indirizzo; data dataNascita; string codiceFiscale;