1 / 40

Esercizi

Esercizi. Equazione di II grado. Legge i coefficienti a , b e c. a = 0?. si. no. b = 0?. delta = b*b – 4*a*c. si. no. c = 0?. delta = 0?. Equazione di I grado: x= -(c / b). si. no. no. si. w = 2*a w 1 = -(b / w) w 2 = / w delta < 0?. Radice doppia

yaholo
Download Presentation

Esercizi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Esercizi

  2. Equazione di II grado Legge i coefficienti a, b e c a = 0? si no b = 0? delta = b*b – 4*a*c si no c = 0? delta = 0? Equazione di I grado:x= -(c / b) si no no si w = 2*a w1= -(b / w) w2= / w delta < 0? Radice doppia x = -(b / (2 * a)) Equazione indeterminata Equazione impossibile no si Radice reali: x1= w1+ w2 x2= w1- w2 Radice complesse coniugate: x = w1± j w2

  3. Equazione di II grado #include <stdio.h> #include <math.h> float a, b, c, delta; float x1, x2, w, w1, w2, mdelta; main() { printf ("Coeff. a = "); /* legge i tre coefficienti a, b, c */ scanf ("%f",&a); printf ("\nCoeff. b = "); scanf ("%f",&b); printf ("\nCoeff. c = "); scanf ("%f",&c);

  4. Equazione di II grado if (a == 0) /* a = 0? */ { /* si, non è di II grado! */ if (b == 0) /* b = 0? */ if (c == 0) /* si, non è neppure di I grado! */ printf ("\nEquazione indeterminata\n"); else printf ("\nEquazione impossibile\n"); else { /* b diverso da 0; è di I grado! */ x1 = - (c / b); printf (“\nEquazione di I grado: x = %f\n", x1); } } else /* a è diverso da 0; è di II grado! */

  5. Equazione di II grado { /* a è diverso da 0 è di II grado! */ delta = b * b - 4 * a * c;w = 2 * a;w1 = - (b / w); mdelta = delta; if (mdelta < 0 ) mdelta = - mdelta; w2 = sqrt (mdelta) / w; / * radice quadrata del discriminante */ if (delta == 0) /* discriminante nullo? */ printf (“\nRadice doppia: x=%f\n", w1); /* si */ else { /* no, il discriminante è diverso da 0 */ if (delta < 0) /* discriminante < 0? */ { /* si */ printf ("\nRadici complesse e coniugate:\n"); printf ("parte reale= %f ", w1); printf (" parte immag.= %f\n", w2); }

  6. Equazione di II grado else { /* no, discriminante > 0 */ x1 = w1 + w2; /* calcola le due soluzioni */ x2 = w1 - w2; printf ("\n Radici reali: x1= %f\n x2= %f\n", x1, x2); } } /* chiusura dell’else di “if (delta == 0) “ */ } /* chiusura dell’else di “if (a == 0) “ */ } /* fine del main */

  7. Lire / Euro Programma per la conversione Lire/Euro e viceversa. L'input del programma sia la lettera L per Lire o E per Euro, seguita da uno spazio e dalla cifra da convertire: nel primo caso un'intero lungo, nel secondo caso un reale. Esempio di esecuzione:  > Introduci la richiesta: >L 15000000 >15000000 lire corrispondono a 7746.85 euro

  8. Lire / Euro • Analisi. A seconda che il primo parametro introdotto (che è un carattere) sia ‘L’ oppure ‘E’ occorre eseguire in modo differenziato la lettura successiva: di un intero lungo se era ‘L’; di un float se era ‘E’; La lettura va pertanto suddivisa in due fasi: dapprima si legge un carattere e poi, in base al valore di questo carattere, si esegue la lettura di un intero o di un float.

  9. Lire / Euro #include <conio.h> /* solo per Turbo C */ #include <stdio.h> #define rapp 1936.27 main() { long int lire; double euro; char carat; clrscr(); /* solo per Turbo C */ printf ("\nIntrodurre la richiesta: "); scanf ("%c", &carat); /* legge un carattere */

  10. Lire / Euro if (carat == 'L'){ /* è L? */ scanf ("%ld", &lire); /* si, legge le lire */ euro = (float)lire / rapp; /* converte in euro */ printf ("\n%ld lire equivalgono a %lf euro\n", lire, euro); } else if (carat == 'E'){ /* non è L, è E? */ scanf ("%lf ", &euro); /* si, legge gli euro */ lire = (int)(euro * rapp); /* converte in lire */ printf ("\n%lf euro equivalgono a %ld lire\n", euro, lire); } else /* non è né L né E, errore! */ printf ("\nCarattere non lecito\n"); }

  11. Anno bisestile Scrivere un programma che legga da tastiera un valore intero rappresentante un anno e stabilisca se è o meno un anno bisestile. Si ricordi che un anno per essere bisestile deve essere divisibile per 4 ma non per 100 a meno che sia divisibile per 400. Ad esempio il 2004 è un anno bisestile così come il 2000 mentre non lo è il 1900.

  12. Anno bisestile • Uso una variabile logica che chiamo bisestile, posta al valore vero se l’anno è bisestile, al valore falso altrimenti. • Pseudocodice • Ipotizzo che non sia bisestile (bisestile = falso); • divisibile per 4 ? • si, ipotizzo sia bisestile (bisestile = vero); • divisibile anche per 100 ? • si, divisibile per 400 ? • se no non è bisestile (bisestile = falso); • Visualizzo il risultato

  13. Anno bisestile #include <conio.h> /* solo per Turbo C */ #include <stdio.h> #define falso 0 #define vero 1 main() { int anno; int bisestile; clrscr(); /* solo per Turbo C */ printf ("\nIntrodurre l’anno: "); scanf ("%d", &anno); bisestile = falso;/* ipotizza che non sia bisestile */

  14. Anno bisestile if ((anno % 4) == 0) { bisestile = vero;/* divisibile per 4: potrebbe essere bisestile */ if ((anno % 100) == 0) /* divisibile per 100? */ { if ((anno % 400) != 0)/* si, divisibile per 400? */ bisestile = falso; /* no, non bisestile */ } } if (bisestile) printf ("\n Bisestile!"); else printf ("\n Non Bisestile!"); }

  15. Fattoriale Realizzare un programma per il calcolo del fattoriale. Si ricorda che il fattoriale è definito come: n! = n · (n-1) · (n-2)….. · 2 · 1 • con 0! = 1 • legge da tastiera il valore di n (compreso tra 0 e val_max); • Inizializza fattoriale (cioè il risultato) a 1; • finché n è maggiore di zero: • moltiplica fattoriale per n ed attribuisci il risultato a fattoriale; • decrementa n di un unità; • visualizza fattoriale.

  16. Fattoriale #include <stdio.h> #define val_max 12 main () { long int n, totale; printf (“\nFattoriale di: "); scanf ("%ld", &n); totale = 1;

  17. Fattoriale if ((n >= 0) && (n <= val_max)) { while (n > 0) { totale *= n; n--; } printf ("\nFattoriale di %ld = %ld\n", n, totale); else { printf ("\nFattoriale non calcolabile, "); printf ("introdurre valori compresi tra 0 e %d", val_max); } }

  18. MCD Scrivere un programma in linguaggio C che prenda in input da tastiera tre numeri interi e ne calcoli il massimo comune divisore. Il massimo comune divisore è il più grande tra i divisori comuni ai tre numeri. Le soluzioni possibili sono numerose, più o meno eleganti, ne proponiamo due: • con un indice che cresce da 1 a uno qualsiasi dei tre numeri si cerca i divisori comuni: l’ultimo trovato è il mcd; • si cerca il minimo tra i tre numeri e poi, a partire da quel minimo e decrementando a ogni ciclo si cerca il primo divisore comune che è proprio il mcd.

  19. MCD (1a soluzione) #include <stdio.h> main() { int x1, x2, x3, ind, mcd, min; printf ("\nIntroduci il primo numero: "); scanf ("%d", &x1); printf ("\nIntroduci il secondo numero: "); scanf ("%d", &x2); printf ("\nIntroduci il terzo numero: "); scanf ("%d", &x3); for (ind = 1; ind <= x1; ind++) if ((x1 % ind) == 0 && (x2 % ind) == 0 && (x3 % ind) == 0) mcd = ind; printf("\nMCD = %d", mcd); }

  20. MCD (2a soluzione) #include <stdio.h> #define falso 0 #define vero 1 main() { int x1, x2, x3, trovato, mcd, min; printf ("\nIntroduci il primo numero: "); scanf ("%d", &x1); min = x1; printf ("\nIntroduci il secondo numero: "); scanf ("%d", &x2); if (x2 < min) min = x2;

  21. MCD (2a soluzione) printf ("\nIntroduci il terzo numero: "); scanf ("%d", &x3); if (x3 < min) min = x3; trovato = falso; while (!trovato) if ((x1%min == 0) && (x2%min == 0) && (x3%min == 0)) { mcd = min; trovato = vero; } else min--; printf ("\nMCD = %d", mcd);

  22. Matrice • Realizzare un programma in C che richieda da tastiera due interi M e N e generi una matrice M x N. Gli elementi della matrice (ai,j), con i che varia da 1 a M e j che varia da 1 a N, devono essere calcolati mediante la relazione: • ai,j = i * j • Infine occorre visualizzare la matrice sottoforma di tabellina. • Esempio: se N = 2 e M = 3 si deve visualizzare: 1 2 3 2 4 6

  23. Matrice #include <stdio.h> #include <stdlib.h> #define NMAX 30 int main () { int matrice[NMAX][NMAX]; int righe, col, i, j; printf ("\nNumero di righe: "); scanf ("%d",&righe); printf ("\nNumero di colonne: "); scanf ("%d",&col);

  24. Matrice for (i=1; i <= righe; i++) for (j=1; j <= col; j++) { matrice[i][j] = i*j; printf (" %4d ", matrice[i][j]); } printf ("\n"); } /* fine programma */ Oppure (senza usare la struttura dati matrice): for (i=1; i <= righe; i++) for (j=1; j <= col; j++) printf (" %4d ", i * j); printf ("\n"); } /* fine programma */

  25. Matrice (2) • Leggere da tastiera la dimensione di una matrice quadrata di numeri interi. • Successivamente leggere ancora da tastiera i valori di tutti gli elementi della matrice. • Infine calcolare e visualizzare la somma degli elementi della diagonale principale e il valor medio degli elementi della diagonale secondaria

  26. Matrice (2) #include <stdio.h> #include <conio.h> #define MAX 10 /* dimensione massima */ void main() { int num_r, riga, col; int matrix[MAX][MAX]; long sommaprinc=0; long sommasec=0; clrscr(); printf (“\nDimensione della matrice: "); scanf ("%d", &num_r);

  27. Matrice (2) /* Riempimento della matrice */ for (riga=1; riga<=num_r; riga++) for (col=1; col<=num_r; col++) { printf ("\nelemento %d %d : ", riga, col); scanf ("%d", &matrix[riga][col]); } /* Somma gli elementi sulle due diagonali */ for (riga=1; riga<=num_r; riga++) { sommaprinc += matrix[riga][riga]; sommasec += matrix[riga][num_r+1-riga]; }

  28. Matrice (2) /* Visualizza risultati */ printf ("\nLa somma è %ld", sommaprinc); printf ("\nLa media è %lf",(double)sommasec/(double)num_r); }

  29. Coseno • Realizzare una funzione per il calcolo del coseno di un angolo espresso in radianti. Utilizzare allo scopo lo sviluppo in serie: • Realizzare inoltre il programma di prova che confronti il valore dalla funzione di libreria cos(x) col valore calcolato con lo sviluppo in serie.

  30. Coseno • Osservando la formula dello sviluppo in serie si vede come ogni termine può essere ricavato dal precedente come per il seno, con la relazione ricorrente: • La differenza sta nelle inizializzazioni: • il primo termine ora vale 1 • il denominatore n parte da 0

  31. Coseno #include <stdio.h> #include <math.h> /* prototipo della funzione */ double cosenox(double x); main() { double angolo; printf (“\nAngolo in radianti: "); scanf ("%lf", &angolo); printf ("\nCoseno di %lf = %lf", angolo, cosenox(angolo)); printf("\nLa funzione di libreria fornisce %lf ", cos(angolo)); }

  32. Coseno /* funzione per il coseno x */ double cosenox(double x) { const double soglia = 0.00005; double accosenx, termine, termass, n; /* Inizializzazione variabili */ termine = 1; /* primo termine */ n = 0; /* denominatore */ accosenx = 1; /* accumulatore di risultato */ termass = 1; /* valore assoluto del primo termine */

  33. Coseno while (termass > soglia) { /* contributo del nuovo termine */ termine *= -x * x /((n+1) * (n + 2)); /* accumula in accosenx */ accosenx += termine; /* aggiorna il denominatore */ n += 2; /* ricava valore assoluto del termine appena calcolato */ termass = fabs(termine); } return (accosenx); }

  34. MCD di un insieme di numeri • Leggere da tastiera la quantità di numeri sui quali ricercare successivamente il MCD. • Leggere poi quei numeri salvandoli in un vettore (di interi) e successivamente calcolare e visualizzare il MCD. • Analisi: Il problema è simile al precedente basta estendere la ricerca del divisore comune. Anziché tre numeri siamo ora in presenza di una serie di numeri la cui consistenza non è nota al momento della scrittura del programma. Risulta pertanto indispensabile memorizzare la sequenza in un vettore di dimensioni opportune il controllo sul resto ottenuto dalla divisione tra ogni numero e il divisore (presunto MCD) dovrà necessariamente essere gestito tramite un ciclo (for è il più adatto).

  35. MCD di un insieme di numeri #include <conio.h> #include <stdio.h> #define falso 0 #define vero 1 main() { int num, vett[100], mcd, min, i; int trovato, noresto; clrscr(); printf ("\nSu quanti numeri calcolo il MCD?: "); scanf ("%d", &num);

  36. MCD di un insieme di numeri /* Legge i num numeri previsti mediante un ciclo for */ /* contemporaneamente trova il minimo controllando */ /* il loro valore man mano che vengono introdotti */ min = 32767; /* massimo valore per un intero */ for (i = 0; i < num; i++) { printf ("\nIntroduci il numero di indice %d: ", i); scanf ("%d", &vett[i]); if (vett[i] < min) min = vett[i]; }

  37. MCD di un insieme di numeri trovato = falso; while (!trovato) { noresto = vero; for (i = 0; i < num; i++) if (vett[i] % min != 0) noresto = falso; if (noresto) { mcd = min; trovato = vero; } else min--; } printf ("\nMCD = %d", mcd); }

  38. Esempio: giorni nell’anno • Realizzare un programma che legga da tastiera l’anno di riferimento e la sigla del primo giorno di quell’anno (1 gennaio) composta dai primi tre caratteri del nome (ad esempio: 2003 mer) e visualizzi sul video una tabella in cui sono indicati, per ogni mese dell’anno, quante volte occorre ciacun giorno della settimana. Si rammenta che sono bisestili gli anni divisibili per 4 ma, tra quelli multipli di 100, solo quelli che sono divisibili per 400.

  39. Esempio: giorni nell’anno Esempio di tabella in uscita: 2003 gen feb mar apr mag giu lug ago set ott nov dic lun 4 4 mar 4 4 mer 5 ecc. gio 5 ven 5 sab 4 dom 4

  40. Esempio: codice 2 su 5 Generare tutti i codici 2 su 5 (5 bit, di cui due bit devono essere a 1 e tre bit a zero), li si memorizzi in un'opportuna base dati e li si visualizzi sul videoterminale. (Si  rammenti che i codici binari possono essere visti come numeri interi (senza segno), per cui è sufficiente generare tutti i codici di 5 bit e poi scartare quelli che non soddisfano la condizione di avere 2 bit ad uno e 3 a zero.) Successivamente confrontare i codici a due a due e, per ciascuna coppia, confrontare i bit  a parità di posizione, conteggiando il numero di bit diversi tra di loro (il numero di bit  diversi  viene detto distanza tra i codici). Il programma calcoli e stampi il massimo e il minimo  della  distanza tra i codici.

More Related