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 coe cienti a e b di un'equazione di primo grado ax=b e ne scrive la soluzione (attenzione al dominio del coe ciente a) 26 Formalizzare un algoritmo che legge i coe cienti 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 € e ettua 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 e ettivo da pagare. 38 Su una linea ferroviaria, rispetto alla tari a 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 semidi erenza 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 coe cienti a e b di un'equazione di primo grado ax=b e ne scrive la soluzione (attenzione al dominio del coe ciente a) #include <iostream> using namespace std; /* Formalizzare un algoritmo che legge i coe cienti a e b di un'equazione di primo grado ax=b e ne scrive la soluzione (attenzione al dominio del coe ciente a) */ int main() { int a = 0; //1 coe ciente float b = 0; //2 coe ciente float x = 0; //soluzione x = b/a cout << "Inserisci il coe ciente a : "; cin>>a; cout << "\n Inserisci il coe ciente 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 coe ciente float b = 0; //2 coe ciente float c = 0; //3 coe ciente float P = 0; //sempiperimetro float A = 0; //Area do{ cout << "Inserisci il coe ciente a : "; cin>>a; }while (a <= 0); do{ cout << "\n Inserisci il coe ciente b :"; cin>>b; }while (b <= 0); do{ cout << "\n Inserisci il coe ciente 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 tari a 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 tari a 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 semidi erenza 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; //semidi erenza 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 e ettuate. 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;