Liceo B. Russell VIA 4 NOVEMBRE 35, CLES

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Liceo B. Russell VIA 4 NOVEMBRE 35, CLES"

Transcript

1 Indirizzo: SCIENTIFICO SCIENZE APPLICATE CLASSE 2C/2D Data: 30 settembre 2014 Prof. Paolo Armani programmazione C++ NB: salvare tutti gli esercizi nella cartella Documenti con il nome composto da (nell'ordine corretto): numero esercizio, cognome, nome. (es: es1_rossi_mario.cpp ). Accedere con nome utente temi1xx e password kwhrt3po, dove al posto di XX andrà il numero della postazione (es: 02 oppure 19). Si ricorda che NON sono ammessi appunti, chiavette o quant'altro!!! Buon lavoro!! 1. (2.5 punti) Scrivi un programma che, letti i due cateti di un triangolo rettangolo ne calcoli l'ipotenusa, il perimetro e l'area. (salvare nel file es1_cognome_nome.cpp) 2. (2.5 punti) Spiega, riga per riga, a cosa servono le varie istruzioni riportate in questo programma e che funzione hanno. Determinare quali sono istruzioni di input, quali istruzioni di output. Individua eventuali cicli, la condizione che li controlla e le operazioni che vengono ripetute. Individua le condizioni if. Quindi fai un diagramma di flusso del programma seguente ed indica l'output generato quando in input viene inserito il numero 15. (Usa il retro del presente foglio per le risposte). #include <iostream> #include <cmath> using namespace std; int main(){ int n,i,conta; cout << "Inserire un numero: "; cin >> n; i=1; conta=0; while(i <= n){ if(n%i == 0) { cout << i << " e' divisore di " << n << endl; conta=conta+1; i=i+1; cout << n << " ha " << conta << " divisori "<< endl; if( conta == 2 ) { cout << n << " e' un numero primo " << endl; else { cout << n << " NON e' un numero primo " << endl; system("pause"); return 0; 3. (2.5 punti) Crea un programma che, letto il nome dello studente, chieda per nome allo studente il numero delle materie che compaiono in pagella. Il programma chiederà quindi allo studente il voto di ciascuna materia. Al termine il programma stamperà la media delle valutazioni. Se la media risulta inferiore al 6 il programma richiamerà lo studente ad un impegno maggiore, se è superiore all'otto verrà mostrato un elogio per l'impegno e la costanza. (salvare nel file es3_cognome_nome.cpp) 4. (2.5 punti) Per un'esperienza di laboratorio il prof. Gasperini necessità di un comodo programma per convertire le temperature da gradi Celsius a Kelvin e viceversa. Aiutalo scrivendo un programma che chieda innanzitutto se la conversione va fatta da gradi Celsius a Kelvin o viceversa (Gasperini dovrà digitare C nel primo caso e K nel secondo); quindi verrà letto il valore numerico e stampato usando entrambe le scale. Perfezionare quindi il programma facendo ripetere l'operazione fintanto che Gasperini non immette un carattere diverso da C o K. [ Si ricorda che T(in Kelvin)= T (in Celsius) + 273,16 ] (salvare nel file es4_cognome_nome.cpp)

2 Indirizzo: SCIENTIFICO SCIENZE APPLICATE CLASSE 2C Data: 21 ottobre 2014 Prof. Paolo Armani programmazione C++ (recupero) NB: creare tutti i documenti sul Desktop (scrivania). Usare l'ambiente di sviluppo Geany. Salvare tutti gli esercizi nella cartella con il nome composto da (nell'ordine corretto): numero esercizio, cognome, nome. (es: es1_rossi_mario.cpp ). Prima della fine dell'ora copiare TUTTI i file cpp nella propria cartella personale (disco SMB / SCI / Classe/ temixx/ ) Accedere con nome utente temi1xx e password kwhrt3po, dove al posto di XX andrà il numero della postazione (es: 02 oppure 19). Si ricorda che NON sono ammessi appunti, chiavette o quant'altro!!! Buon lavoro!! 1. (2.5 punti) Scrivi un programma che stampi tutti i divisori di un numero intero inserito dall'utente. (salvare nel file es1_cognome_nome.cpp) 2. (2.5 punti) Senza riscriverlo a computer spiega a cosa serve il seguente programma. Determina l'output nel caso l'utente inserisca in input n=5. Per questo caso fai la tabella di traccia dove mostri come variano le variabili n,i,fattoriale all'interno del ciclo. Quindi rappresenta anche con un diagramma di flusso il seguente programma. (Usa il retro del presente foglio per le risposte). #include <iostream> #include <cmath> using namespace std; int main(){ int n,i,fattoriale; cout << "Inserire un numero intero: "; cin >> n; i=1; fattoriale=1; while(i <= n){ fattoriale=fattoriale*i; i=i+1; cout "il fattoriale di "<< n << " vale " << fattoriale << endl; system("pause"); return 0; 3. (2.5 punti) Il centro meteorologico del Tonale rileva le precipitazione nevose di tutto l'inverno. Aiutalo scrivendo un programma che legga la i cm di neve di ogni perturbazione. Il programma terminerà non appena l'operatore inserisce un valore pari a 0. Verranno quindi calcolati e comunicati all'utente il quantitativo totale di neve (in metri) caduti al passo del Tonale, il numero di perturbazioni e la quantità di neve media per ogni perturbazione. (salvare nel file es3_cognome_nome.cpp) 4. (2.5 punti) La successione di Fibonacci è una sequenza di numeri come di seguito dove un numero della serie è dato dalla somma dei due precedenti. I primi due numeri della seri da cui partire sono entrambi 1. Scrivi un programma che, chiesto N all'utente, calcoli e stampi i primi N numeri della successione. [suggerimento: avrai due variabili a,b inizialmente impostate a 1. Una terza variabile c la imposterai a c=a+b. Quindi dovrai reimpostare i valori di a e b ]. Rappresenta su carta la tabella di traccia delle variabili usate per N=4! (salvare nel file es4_cognome_nome.cpp)

3 Indirizzo: SCIENTIFICO SCIENZE APPLICATE CLASSE 2C Data: 4 Novembre 2014 Prof. Paolo Armani programmazione C++ (recupero) (in media dieci minuti per esercizio). NB: Usare la cartella personale temi1xx presente sul Desktop, ove è già presente un file vuoto c++ ed il testo della Accedere al computer con nome utente temi1xx e password 73g51ja4, dove al posto di XX andrà il numero Buon lavoro!! 1. (2.5 punti) Scrivi un programma che chieda all'utente di inserire un numero naturale N. Il programma dovrà determinare se il numero N è primo oppure, in caso contrario, comunicare quanti divisori ha N. (salvare nel file es1_cognome_nome.cpp) 2. (2.5 punti) Il fattoriale di un numero naturale N è dato dal prodotto di tutti gli interi minori uguali al numero N stesso e viene indicato col punto esclamativo. (es: 5!=5*4*3*2*1= 120 oppure 3! = 3*2*1=6 ). Scrivi un programma che, con un ciclo for oppure while (a tua scelta) calcoli il fattoriale fatt di un numero N immesso da tastiera ( attenzione al valore iniziale di fatt). (salvare nel file es2_cognome_nome.cpp) 3. (2.5 punti) Dati in input due numeri interi num e den, scrivi un programma che calcoli MCD e mcm di num e den. Stampare a video tali valori. Siano num e den rispettivamente il numeratore ed il denominatore di una frazione. Quindi calcola e stampa numeratore num1 e denominatore den1 della frazione semplificata. (salvare nel file es3_cognome_nome.cpp) 4. (2.5 punti) Senza riscrivere il programma a computer, del seguente programma determinare il valore finale delle variabili n, a, b, i. Per rispondere completa la tabella di traccia con il valore che le variabili assumono ad ogni iterazione del ciclo. 1 int n,a,b,i; 2 cin >> n ; 3 b=1; 4 for(i=1; i<=n; i++){ 5 a = i*i; 6 b = b*i; 7 8 cout "Il valore finale delle variabili e' : "; 9 cout << i <<" "<< a <<" "<< b <<" "<< n << endl; i n a b 5. (per il 10) Enuncia (sul retro del foglio) in modo sintetico ma CHIARO ed ordinato il teorema da cui segue la validità del metodo di Euclide per il calcolo del MCD fra due numeri a e b. Quindi danne una breve dimostrazione.

4 Indirizzo: SCIENTIFICO SCIENZE APPLICATE CLASSE 2D Data: 4 Novembre 2014 Prof. Paolo Armani programmazione C++ (recupero) (in media dieci minuti per esercizio). NB: Usare la cartella personale temi2xx presente sul Desktop, ove è già presente un file vuoto c++ ed il testo della Accedere al computer con nome utente temi2xx e password 259s6p54, dove al posto di XX andrà il numero Buon lavoro!! 1. (2.5 punti) Scrivi un programma che chieda all'utente di inserire un numero naturale N. Il programma dovrà determinare se il numero N è primo oppure, in caso contrario, comunicare quanti divisori ha N. (salvare nel file es1_cognome_nome.cpp) 2. (2.5 punti) Il fattoriale di un numero naturale N è dato dal prodotto di tutti gli interi minori uguali al numero N stesso e viene indicato col punto esclamativo. (es: 5!=5*4*3*2*1= 120 oppure 3! = 3*2*1=6 ). Scrivi un programma che, con un ciclo for oppure while (a tua scelta) calcoli il fattoriale fatt di un numero N immesso da tastiera ( attenzione al valore iniziale di fatt). (salvare nel file es2_cognome_nome.cpp) 3. (2.5 punti) Dati in input due numeri interi num e den, scrivi un programma che calcoli MCD e mcm di num e den. Stampare a video tali valori. Siano num e den rispettivamente il numeratore ed il denominatore di una frazione. Quindi calcola e stampa numeratore num1 e denominatore den1 della frazione semplificata. (salvare nel file es3_cognome_nome.cpp) 4. (2.5 punti) Senza riscrivere il programma a computer, del seguente programma determinare il valore finale delle variabili n, a, b, i. Per rispondere completa la tabella di traccia con il valore che le variabili assumono ad ogni iterazione del ciclo. 1 int n,a,b,i; 2 cin >> n ; 3 b=1; 4 for(i=1; i<=n; i++){ 5 a = i*i; 6 b = b*i; 7 8 cout "Il valore finale delle variabili e' : "; 9 cout << i <<" "<< a <<" "<< b <<" "<< n << endl; i n a b 5. (per il 10) Enuncia (sul retro del foglio) in modo sintetico ma CHIARO ed ordinato il teorema da cui segue la validità del metodo di Euclide per il calcolo del MCD fra due numeri a e b. Quindi danne una breve dimostrazione.

5 Indirizzo: SCIENTIFICO SCIENZE APPLICATE CLASSE 2D Data: 2 Dicembre 2014 Prof. Paolo Armani programmazione C++ (recupero) (in media dieci minuti per esercizio). NB: Usare la cartella personale temi2xx presente sul Desktop, ove è già presente un file vuoto c++ ed il testo della Accedere al computer con nome utente temi2xx e password 259s6p54, dove al posto di XX andrà il numero 1. (1.5 punti) Nel seguente programma sono presenti 4 errori. Spiega e correggi. 1. int main(){ 2. int q[5]; 3. for(int i=1; i<=5; i=i+1){ 4. cin >> q; 5. if((q%2)==0){ 6. cout << e' pari\n ; 7. else{ 8. cout << e' dispari\n ; system( PAUSE ); 12. return 0; (1.5 punti) Senza riscriverlo a computer, del seguente programma determinare il valore finale delle variabili a, b,c, i. Per rispondere completa la tabella di traccia con il valore che le variabili assumono ad ogni iterazione del ciclo. 1. int a[4],b[4],c[4]; 2. for(int i=0;i<4; i=i+1){ 3. a[i]=-i; 4. b[i]=i-a[i]; 5. c[i]=a[i]*b[i]; for(int i=0;i<4; i++){ 8. cout << "numero << i+1 ; 9. cout << ) << c[i] << endl: 10. i a[i] b[i] c[i] i output 3. (2 punti) Scrivi un programma che inizializzi un vettore v random di 10 numeri interi compresi fra 0 e 18. Quindi letto un numero intero x da tastiera, dire se tale numero è contenuto nel vettore v. (salva nel file es3_cognome_nome.cpp) 4. (2 punti) Bergamasco vuole visionare la classifica della sua ultima gara di sci. Chiede quindi ad un membro della giuria la lista dei pettorali all'arrivo. Sono stati però scritti in ordine inverso rispetto all'ordine di arrivo. Davide quindi si scrive un programmino in c++ per inserire i pettorali come sul foglietto della giuria ed invertire l'ordine. a) Il programma chiederà innanzitutto il numero N di partecipanti; b) leggerà tutti i pettorali in ordine inverso a quello di arrivo e li memorizzerà in un vettore; c) stamperà la classifica in ordine di arrivo, ovvero invertendo l'ordine dei dati; d) chiederà il numero di pettorale di Davide, e dirà, se riesci, in quale posizione si è piazzato (salva nel file es4_cognome_nome.cpp) 5. (2 punti) L'insegnante di matematica vuole scrivere un programma in c++ per automatizzare la valutazione dei temi della classe 2D. Inserito da tastiera il numero N di alunni presenti, inserisce uno ad uno i voti di tutti gli studenti nel vettore float voti[]. Il programma calcola quindi la media (es: media=5.3). L'insegnante vuole però che la media della classe sia esattamente 6. Il programma incrementerà (o abbasserà) quindi tutti voti (es: nell'esempio i voti dovranno quindi essere tutti aumentati di 0.7 punti) in modo tale da ottenere media esatta pari a 6. Il programma stamperà quindi le valutazioni finali. (salva nel file es5_cognome_nome.cpp)

6 Indirizzo: SCIENTIFICO SCIENZE APPLICATE CLASSE 2C Data: 3 Dicembre 2014 Prof. Paolo Armani programmazione C++ (recupero) NB: Usare la cartella personale temi2xx presente sul Desktop, ove è già presente un file vuoto c++ ed il testo della Accedere al computer con nome utente temi1xx e password 73g51ja4, dove al posto di XX andrà il numero 1. (1.5 punti) Nel seguente programma sono presenti 5 errori. Spiega e correggi. 1. int main(){ 2. int q[n]; 3. int n=5; 4. for(int i=n; i>0; i--){ 5. cin >> q; 6. if((q[i]%2)==0){ cout << e' pari\n ; 7. else{ cout << e' dispari\n ; system( PAUSE ); 10. return 0; (1.5 punti) Senza riscriverlo a computer, del seguente programma determinare il valore finale delle variabili a, b,c, i. Per rispondere completa la tabella di traccia con il valore che le variabili assumono ad ogni iterazione del ciclo. 1. int a[4],b[4],c[4]; 2. for(int i=3;i>=0; i--){ 3. a[i]=i-3; 4. b[i]=i-a[i]; 5. c[i]=a[i]*b[i]; for(int i=0;i<4; i++){ 8. cout << "numero << i+1 ; 9. cout << ) << c[i] << endl: 10. i a[i] b[i] c[i] i output 3. (2 punti) Un noto carosello sciistico ti commissiona un software per gestire la rilevazione skipass ai tornelli di accesso agli impianti a fune. Il carosello è costitutito da 3 differenti società che emettono i loro skipass. Ad ogni tornello viene rilevato il codice (1, 2 o 3) della società emettitrice. Il tornello acquisisce un vettore contenente l'elenco dei codici società rilevati. Il tuo software deve acquisire tale vettore (genererai un vettore random di 100 numeri da 1 a 3), contare il numero totale di passaggi suddivisi per società e indicarne anche la percentuale dei passaggi per società. (salva nel file es3_cognome_nome.cpp) 4. (2 punti) Peroceschi vuole visionare la classifica della sua ultima gara di sci. Chiede quindi ad un membro della giuria la lista dei pettorali all'arrivo. Sono stati però scritti in ordine inverso rispetto all'ordine di arrivo. Stefano quindi si scrive un programmino in c++ per inserire i pettorali come sul foglietto della giuria ed invertire l'ordine. a) Il programma chiederà innanzitutto il numero N di partecipanti; b) leggerà tutti i pettorali in ordine inverso a quello di arrivo e li memorizzerà in un vettore; c) stamperà la classifica in ordine di arrivo, ovvero invertendo l'ordine dei dati; d) chiederà il numero di pettorale di Davide, e dirà, se riesci, in quale posizione si è piazzato (salva nel file es4_cognome_nome.cpp) 5. (2 punti) Un noto prof. di scienze sta svolgendo delle misure in laboratorio. Dopo aver acquisito N temperature in un vettore t[] si accorge che il termometro usato segna x gradi in meno rispetto alla temperatura esatta. Correggi le misure e stampa il vettore t2[] delle temperature corrette. (salva nel file es5_cognome_nome.cpp)

7 Indirizzo: SCIENTIFICO SCIENZE APPLICATE CLASSE 2C / 2D Data: 20 gennaio 2015 Prof. Paolo Armani programmazione C++ (recupero) NB: Usare la cartella personale temi?xx presente sul Desktop, ove è già presente un file vuoto c++ ed il testo della Accedere al computer con nome utente temi1xx e password s4856n4m, dove al posto di XX andrà il numero 1. (2.5 punti) Scrivi un programma che ricerchi il numero di ricorrenze di un carattere dato in una stringa letta da tastiera. a) Dichiara quindi una stringa parola ed una char carattere, leggili entrambi e comunica il numero di ricorrenze del carattere inserito nella stringa parola. b) Fai in modo che il programma non faccia differenze fra lettere maiuscole e minuscole; ad esempio a ricorrerà 2 volte nella parola Amilcare anche se una risulta maiuscola ed una minuscola (ricordo il codice ASCI delle lettere: A 65, Z 90, a 97, z 122) (salva nel file es1_cognome_nome.cpp) 2. (2.5 punti) Scrivi un programma per concatenare due stringhe (es: date le stringhe pluto e ne il programma stamperà plutone ). Procedi per gradi successivi come di seguito: a) innanzitutto dichiara le stringhe p1[100] e p2[100] e leggile da tastiera b) calcola la lunghezza l1 e l2 delle due stringhe e comunica all'utente tali valori c) dichiara una nuova stringa ptot[100] dove copierai la prima stringa. Quindi stampa ptot. (suggerimento: attenzione al carattere di fine stringa!) d) aggiungi all'ultima stringa dichiarata (ptot) la seconda parola letta p2 e stampa ptot. (come prima fai attenzione al carattere di fine stringa!) (salva nel file es2_cognome_nome.cpp) 3. (2.5 punti) La prof di inglese estrae due nomi per un'interrogazione. Dei due studenti estratti interroga il primo in ordine alfabetico. a) Aiutala scrivendo un programma che, letti i due nomi estratti, li ristampi in ordine alfabetico rispetto alla prima lettera (non riuscirai quindi a riordinare due nomi come Amilcare e Amalia ). b) Perfeziona il codice stampando i nomi in ordine alfabetico anche nel caso in cui e prime lettere risultano uguali (ora riuscirai a riordinare correttamente anche parole come quelle dell'esempio precedente). (salva nel file es3_cognome_nome.cpp) 4. (2.5 punti) Scrivi un programma che, letta una parola con una o più lettere ripetute, comunichi all'utente qual'è la lettera più frequente (es: per la parola pippo sarà la lettera p ; se le lettere con frequenza maggiore sono più di una come per la parola anna il programma restituirà una delle due o, se riesci, dirai che le lettere più frequenti sono due). [suggerimento: oltre alla stringa dichiara anche un vettore di interi, inizializzalo a zero e...] (salva nel file es4_cognome_nome.cpp)

8 Indirizzo: SCIENTIFICO SCIENZE APPLICATE CLASSE 2C / 2D Data: 20 gennaio 2015 Prof. Paolo Armani programmazione C++ (recupero) NB: Usare la cartella personale temi?xx presente sul Desktop, ove è già presente un file vuoto c++ ed il testo della Accedere al computer con nome utente temi2xx e password xca13o13, dove al posto di XX andrà il numero 1. (2.5 punti) Scrivi un programma che ricerchi il numero di ricorrenze di un carattere dato in una stringa letta da tastiera. a) Dichiara quindi una stringa parola ed una char carattere, leggili entrambi e comunica il numero di ricorrenze del carattere inserito nella stringa parola. b) Fai in modo che il programma non faccia differenze fra lettere maiuscole e minuscole; ad esempio a ricorrerà 2 volte nella parola Amilcare anche se una risulta maiuscola ed una minuscola (ricordo il codice ASCI delle lettere: A 65, Z 90, a 97, z 122) (salva nel file es1_cognome_nome.cpp) 2. (2.5 punti) Scrivi un programma per concatenare due stringhe (es: date le stringhe pluto e ne il programma stamperà plutone ). Procedi per gradi successivi come di seguito: a) innanzitutto dichiara le stringhe p1[100] e p2[100] e leggile da tastiera b) calcola la lunghezza l1 e l2 delle due stringhe e comunica all'utente tali valori c) dichiara una nuova stringa ptot[100] dove copierai la prima stringa. Quindi stampa ptot. (suggerimento: attenzione al carattere di fine stringa!) d) aggiungi all'ultima stringa dichiarata (ptot) la seconda parola letta p2 e stampa ptot. (come prima fai attenzione al carattere di fine stringa!) (salva nel file es2_cognome_nome.cpp) 3. (2.5 punti) La prof di inglese estrae due nomi per un'interrogazione. Dei due studenti estratti interroga il primo in ordine alfabetico. a) Aiutala scrivendo un programma che, letti i due nomi estratti, li ristampi in ordine alfabetico rispetto alla prima lettera (non riuscirai quindi a riordinare due nomi come Amilcare e Amalia ). b) Perfeziona il codice stampando i nomi in ordine alfabetico anche nel caso in cui e prime lettere risultano uguali (ora riuscirai a riordinare correttamente anche parole come quelle dell'esempio precedente). (salva nel file es3_cognome_nome.cpp) 4. (2.5 punti) Scrivi un programma che, letta una parola con una o più lettere ripetute, comunichi all'utente qual'è la lettera più frequente (es: per la parola pippo sarà la lettera p ; se le lettere con frequenza maggiore sono più di una come per la parola anna il programma restituirà una delle due o, se riesci, dirai che le lettere più frequenti sono due). [suggerimento: oltre alla stringa dichiara anche un vettore di interi, inizializzalo a zero e...] (salva nel file es4_cognome_nome.cpp)

9 Indirizzo: SCIENTIFICO SCIENZE APPLICATE CLASSE 2C Data: 9 aprile 2015 Prof. Paolo Armani programmazione C++ ) NB: Usare la cartella personale temi1xx presente sul Desktop, ove è già presente un file vuoto c++ ed il testo della Accedere al computer con nome utente temi1xx e password s4856n4m, dove al posto di XX andrà il numero 1. Devi ordinare in ordine crescente la sequenza di numeri 4, 8, 5, 1, 9, 3. Spiega e illustra (su carta) i passaggi che ti permettono di ordinare tale vettore utilizzando gli algoritmi a) bubble sort b) selection sort c) merge sort 2. L'amministratore di un'importante azienda ha un computer con una CPU che lavora ad una frequenza di 1GHz. Per lavoro ha la necessità di ordinare l'elenco dei prodotti disponibili nei suoi magazzini in base al loro valore. Stima il numero di operazioni ed il tempo impiegato (in secondi) per eseguire la suddetta operazione considerando che il numero di prodotti sia pari a N1=1 000, N2= , N3= utilizzando (sia per N1 che per N2 e N3) gli algoritmi a) bubble sort b) selection sort c) merge sort [si ricorda che log 2(1000)= 10, log 2( )= 20, log 2( )= 30 ] 3. Commenta la precedente risposta spiegando perché uno dei tre algoritmi risulta drasticamente più efficiente degli altri due. Spiega da dove derivano le formule usate e prova a motivarle. 4. Utilizzando l'algoritmo bubble-sort oppure selection-sort scrivi un programma che a) generi e stampi un vettore di N numeri casuali fra 1 e 100 (con N inserito dall'utente) b) riordini tale vettore e lo ristampi c) chieda all'utente un numero intero x fra 1 e 100 d) cerchi (se presente) la posizione tale elemento x all'interno del vettore ordinato utilizzando il metodo di ricerca dicotomica/binaria e) (se presente) stampi l'elemento che lo precede e che lo segue (salva nel file es4_cognome_nome.cpp) 5. Utilizzando l'algoritmo merge-sort oppure selection-sort scrivi un programma che a) generi e stampi un vettore di N numeri casuali fra 1 e 100 (con N inserito dall'utente) b) riordini tale vettore e lo ristampi (salva nel file es5_cognome_nome.cpp) 6. Martino ha ricevuto 7 uova di Pasqua di peso differente e le ha etichettate con una sola lettera char. Scrivi un programma che legga la lettera ed il peso di ogni uovo e che ristampi l'elenco delle uova (etichetta e peso) in ordine crescente. (salva nel file es6_cognome_nome.cpp)

10 Indirizzo: SCIENTIFICO SCIENZE APPLICATE CLASSE 2D Data: 25 febbraio 2015 Prof. Paolo Armani programmazione C++ (funzioni) NB: Usare la cartella personale temi2xx presente sul Desktop, ove è già presente un file vuoto c++ ed il testo della Accedere al computer con nome utente temi2xx e password xca13o13, dove al posto di XX andrà il numero 1. (2 punti) Nel seguente programma sono presenti almeno 4 errori. Senza riscrivere il programma a computer individuali e correggili spiegando (sul retro del foglio) la natura di tali errori. void fmax(int a, int b){ int max; if(a>b){ max=a; else{ max =b;; return max; void leggi(int a, int b){ cout <<"Inserisci un numero intero: "; cin >> a; cout << "Inserisci un numero intero: "; cin >> b; void scrivi(int a){ cout << "il massimo e' " << a <<endl; int main(){ float x,y,vmax; leggi(x,y); vmax=fmax(x,y); scrivi(vmax); return 0; 2. (2 punti) a) Illustra la differenza fra passaggio di variabili per riferimento e per valore e mostra un esempio per i due casi (puoi far riferimento all'esercizio precedente). b) Come viene passato invece un vettore ad una funzione? Spiega e fai un esempio. 3. (2 punti) Nella cartella lettura trovi il file es3_cognome_nome.cpp. Rinominalo e salvalo nella tua cartella, quindi dichiara e implementa le funzioni usate nel programma principale. (salva nel file es3_cognome_nome.cpp) 4. (2 punti) Scrivi una funzione ricorsiva int quadrati(int n) ed il relativo programma principale che calcoli e ritorni la somma dei primi n quadrati perfetti. Il programma principale chiederà all'utente il numero di partenza e stamperà la sola somma totale. quadrati(n) = n*n + quadrati(n-1) quadrati(0) = 0 (salva nel file es4_cognome_nome.cpp) 5. (2 punti) Scrivi la funzione void ordina(char parola1[], char parola2[]) che confronta le due stringhe parola1 e parola2 e le scambia in modo tale che siano in ordine alfabetico. Il programma principale leggerà le due stringhe, richiamerà la funzione, quindi stamperà le stringhe parola1 e parola2 eventualmente scambiate dalla funzione. (salva nel file es5_cognome_nome.cpp)

11 #include <cstdlib> #include <iostream> #include <cmath> #include <iomanip> using namespace std; int main(){ float m; int n; cout << "Quanti voti devi inserire? "; cin >> n; float voti[n]; leggi(voti,n); m=media(voti,n); cout << "La media dei voti e' "<< m << endl; cout << "I voti inseriti erano: "<<endl; stampa(voti,n); system("pause"); return 0;

12 Indirizzo: SCIENTIFICO SCIENZE APPLICATE CLASSE 2C Data: 9 aprile 2015 Prof. Paolo Armani Liceo B. Russell programmazione C++ NB: Usare la cartella personale temi2xx presente sul Desktop, ove è già presente un file vuoto c++ ed il testo della prova. Salvare tutti gli esercizi nella cartella con il nome composto da (nell'ordine corretto): numero esercizio, cognome, nome. (es: es1_rossi_mario.cpp ). Negli ultimi 5 minuti verificare di aver salvato TUTTI gli esercizi nel Accedere al computer con nome utente temi2xx e password xca13o13, dove al posto di XX andrà il numero della postazione (es: 02 oppure 19). Il numero della postazione si legge, a computer acceso, sulla schermata di login. 1. Devi ordinare in ordine crescente la sequenza di numeri 4, 8, 5, 1, 9, 3. Spiega e illustra (su carta) i passaggi che ti permettono di ordinare tale vettore utilizzando gli algoritmi a) bubble sort b) selection sort c) merge sort 2. L'amministratore di un'importante azienda ha un computer con una CPU che lavora ad una frequenza di 1GHz. Per lavoro ha la necessità di ordinare l'elenco dei prodotti disponibili nei suoi magazzini in base al loro valore. Stima il numero di operazioni ed il tempo impiegato (in secondi) per eseguire la suddetta operazione considerando che il numero di prodotti sia pari a N1=1 000, N2= , N3= utilizzando (sia per N1 che per N2 e N3) gli algoritmi a) bubble sort b) selection sort c) merge sort [si ricorda che log 2 (1000)= 10, log 2 ( )= 20, log 2 ( )= 30 ] 3. Commenta la precedente risposta spiegando perché uno dei tre algoritmi risulta drasticamente più efficiente degli altri due. Spiega da dove derivano le formule usate e prova a motivarle. 4. Utilizzando l'algoritmo bubble-sort oppure selection-sort scrivi un programma che a) generi e stampi un vettore di N numeri casuali fra 1 e 100 (con N inserito dall'utente) b) riordini tale vettore e lo ristampi c) chieda all'utente un numero intero x fra 1 e 100 d) cerchi (se presente) la posizione tale elemento x all'interno del vettore ordinato utilizzando il metodo di ricerca dicotomica/binaria e) (se presente) stampi l'elemento che lo precede e che lo segue (salva nel file es4_cognome_nome.cpp) 5. Utilizzando l'algoritmo merge-sort oppure selection-sort scrivi un programma che a) generi e stampi un vettore di N numeri casuali fra 1 e 100 (con N inserito dall'utente) b) riordini tale vettore e lo ristampi (salva nel file es5_cognome_nome.cpp) 6. Martino ha ricevuto 7 uova di Pasqua di peso differente e le ha etichettate con una sola lettera char. Scrivi un programma che legga la lettera ed il peso di ogni uovo e che ristampi l'elenco delle uova (etichetta e peso) in ordine crescente. (salva nel file es6_cognome_nome.cpp)

13 Indirizzo: SCIENTIFICO SCIENZE APPLICATE CLASSE 2C Data: 28 maggio 2015 Prof. Paolo Armani Liceo B. Russell informatica NB: Usare la cartella personale temi2xx presente sul Desktop, ove è già presente un file vuoto c++ ed il testo della Accedere al computer con nome utente temi2xx e password 5gdz7904, dove al posto di XX andrà il numero 1. Una nota software house ti ha commissionato la realizzazione di un gioco di tris online. Devi quindi implementare la funzione di controllo haivinto() che, letta una matrice 3x3 di char dal file tris.txt, ritorna true solo se lungo una riga, una colonna o una diagonale vi sono 3 lettere x oppure 3 lettere y allineate. Qualsiasi carattere diverso dalle lettere x e y verrà considerato come una casella vuota. In caso contrario ritornerà false. I prototipi delle funzioni per leggere la matrice e per verificare correttezza della matrice in input saranno i seguenti: void leggi(char M[3][3]) bool haivinto(char M[3][3]) es:( x : x : x y x y y) Nel programma principale, dopo aver richiamato la funzione leggi() e la funzione di controllo haivinto(), si dirà se la matrice letta soddisfa le regole del gioco o meno in base al valore ritornato da quest'ultima funzione. la 2. a) Dal file matricein.txt leggi una matrice A di numeri reali 2x2. Scrivi una funzione per leggerla e per calcolarne il determinate e stampare il determinante nel file matriceout.txt. void leggi(float A[2][2]) float det(float A[2][2]) L'inversa della matrice 2x2 è definita come da esempio di seguito riportato. Scrivere una funzione inversa che calcoli l'inversa AI della matrice A void inversa(float A[2][2], float AI[2][2]) Oltre al determinante stampare anche tale matrice nel file matriceout.txt b) scrivendo una funzione prodotto verificare che la moltiplicazione fra una matrice e la sua inversa (o fra la sua inversa e la matrice stessa) dà come risultato la matrice identità I qualunque sia la matrice A di partenza A= ( 11 4 A 5 2) 1 = ( ) det (A) = ( ) A A 1 =A 1 A=I = ( ) 3. La prof di italiano ti commissiona il compito di stimare la frequenza d'uso delle 26 lettere dell'alfabeto nella lingua italiana. Predisporrai quindi un programma che, letto da un file testo.txt un testo di lunghezza arbitraria, conti il numero di ricorrenze di ognuna delle 26 lettere dell'alfabeto. In un primo tempo ipotizza che il testo sia tutto minuscolo e, usando un vettore da 26 celle, conta le ricorrenze delle sole lettere minuscole dalla a (codice ASCI 97)alla z (codice ASCI 122) (suggerimento: ignora i caratteri minori al codice 97 e maggiori al codice 122). Stampa quindi il numero delle ricorrenze assolute e percentuali di ciascuna lettera, Ordina in ordine decrescente tale elenco ed infine miglioralo conteggiando anche le lettere maiuscole ( A codice ASCI 65, Z codice ASCI 90)

14 Indirizzo: SCIENTIFICO SCIENZE APPLICATE CLASSE 2D Data: 26 maggio 2015 Prof. Paolo Armani Liceo B. Russell informatica NB: Usare la cartella personale temi1xx presente sul Desktop, ove è già presente un file vuoto c++ ed il testo della Accedere al computer con nome utente temi1xx e password 48ffd669, dove al posto di XX andrà il numero 1. Una nota software house ti ha commissionato la realizzazione di un gioco online stile Sudoku. Devi quindi implementare la funzione di controllo sudoku() che, letta una matrice 3x3 di numeri interi dal file sudoku.txt, ritorna true solo se la somma di ogni colonna e di ogni riga dà come risultato 9. In caso contrario ritornerà false. I prototipi delle funzioni per leggere la matrice e per verificare la correttezza della matrice in input saranno i seguenti: void leggi(int M[3][3]) bool sudoku(int M[3][3]) es:( ) Nel programma principale, dopo aver richiamato la funzione leggi() e la funzione di controllo sudoku(), si dirà se la matrice letta soddisfa le regole del gioco o meno in base al valore ritornato da quest'ultima funzione. 2. Scrivere un programma che letta la matrice A dei coefficienti di un sistema lineare di 2 equazioni in due incognite e letto il vettore V dei termini noti di tale sistema da un file in input di nome sistemalineare.txt, trovare le soluzioni del sistema con il metodo di Cramer. det ( 5 4 Es: 3 x+4 y=5 x 5 y=8 A= ( 3 4 V = 1 5) ( 5 x= 8) 8 5) det A det y= ( ) det A input : Si faccia attenzione a considerare anche i casi in cui il sistema risulta indeterminato (0/0) oppure impossibile (0/n). 3. Crea un programma che legga una matrice M1 5x4 di numeri reali dal file assoluto_in.txt. Nel programma principale dichiarerai una seconda matrice M2 delle medesime dimensioni di M1. Definirai quindi una funzione void copiavalassoluto(float M1[5][4], float M2[5][4]) che copierà in M2 il valore assoluto degli elementi di M1. Predisporrai quindi anche due funzioni per leggere dal file assoluto_in.txt e stampare sul file assoluto_out.txt le matrici: void leggi(int M[5][4]) void stampa(int M[5][4]) Nel programma principale innanzitutto leggerai M1, quindi calcolerai M2 con l'apposita funzione, quindi stamperai le due matrici M1 e M2 usando la funzione stampa. 4. La prof di italiano ti commissiona il compito di stimare la frequenza d'uso delle 26 lettere dell'alfabeto nella lingua italiana. Predisporrai quindi un programma che, letto da un file testo.txt un testo di lunghezza arbitraria, conti il numero di ricorrenze di ognuna delle 26 lettere dell'alfabeto. In un primo tempo ipotizza che il testo sia tutto minuscolo e, usando un vettore da 26 celle, conta le ricorrenze delle sole lettere minuscole dalla a (codice ASCI 97)alla z (codice ASCI 122) (suggerimento: ignora i caratteri minori al codice 97 e maggiori al codice 122). Stampa quindi il numero delle ricorrenze assolute e percentuali di ciascuna lettera, Ordina in ordine decrescente tale elenco ed infine miglioralo conteggiando anche le lettere maiuscole ( A codice ASCI 65, Z codice ASCI 90)