Corso di Fondamenti di Informatica Macroarea di Ingegneria 2018/19 Tutor: prof. Francesco De Vincenzi
MATLAB: Gli script
MATLAB: Esempio di script – Area di un triangolo dati base e altezza base=input('Inserisci la base'); altezza=input('Inserisci l''altezza'); prod=base*altezza; area=prod/2; disp('L''area è '); disp(area);
MATLAB: Esempio di script – Calcolo di un prezzo scontato disp('Questo script calcola il prezzo scontato dal prezzo e dallo sconto'); prezzo=input('Inserisci il prezzo intero: '); percentuale_sconto=input('inserisci la percentuale di sconto: '); sconto=(prezzo*percentuale_sconto)/100; prezzo_scontato=prezzo-sconto; disp('Il prezzo scontato è: '); disp(prezzo_scontato);
MATLAB: Esercizi Calcolare l’ipotenusa di un triangolo rettangolo dati i due cateti (per la radice quadrata, usare la funzione predefinita sqrt) disp("Questo script calcola l’ipotenusa di un triangolo"); disp(" rettangolo a partire dai due cateti in input"); cateto1 = input("Inserisci il valore del primo cateto"); cateto2 = input("Inserisci il valore del secondo cateto"); quadrato1=cateto1^2; quadrato2=cateto2^2; somma=quadrato1+quadrato2; ipotenusa=sqrt(somma); disp("L'ipotenusa vale "); disp (ipotenusa);
MATLAB: Esercizi 2) Dati base e lato di un triangolo isoscele, calcolare perimetro e area disp("Questo script calcola perimetro e area di un triangolo"); disp("a partire da base e lato, forniti in input"); base = input("Inserisci la base del triangolo"); lato = input("Inserisci il lato del triangolo"); semibase= base/2; altezza=sqrt(lato^2-semibase^2); perimetro=2*lato+base; area=(base*altezza)/2; disp("Il perimetro è "); disp(perimetro); disp("L'area è "); disp(area);
MATLAB: Esercizi 3) Dato un numero, mostrare la lettera alfabetica associata (es 1->a, 2->b, etc) disp("Questo script mostra un carattere"); disp("a partire dalla posizione fornita in input"); posizione = input("Inserisci la posizione del carattere"); carattere = char(96+posizione); disp("Il carattere e' "); disp(carattere);
MATLAB: Esercizi disp("Script per il calcolo del costi di viaggio"); Un gruppo di persone deve fare un viaggio e può spostarsi in macchina o in treno. Ciascuna macchina ha 5 posti. Il prezzo di un biglietto del treno per una persona è 4.50 euro, il costo della benzina per un’auto è 20 euro. Realizza uno script che chiede in input il numero di persone e di automobili e calcola il costo totale e il costo medio a persona del viaggio. Memorizza in una variabile “logical” la risposta alla domanda: il costo medio a persona è maggiore del costo di un biglietto del treno? disp("Script per il calcolo del costi di viaggio"); persone = input("Inserisci il numero di persone"); numero_auto=ceil(persone/5); prezzo_totale_auto=numero_auto*20; prezzo_medio_auto=prezzo_totale_auto / persone; risposta = prezzo_medio_auto>4.50; disp("Prezzo medio a persona "); disp(prezzo_medio_auto); disp("La risposta e' "); disp(risposta);
MATLAB: Controllo del flusso Gli script che abbiamo realizzata finora contengono istruzioni che vengono svolte in modo sequenziale: a partire dalla prima fino all’ultima. inizio Istruzione 1 Istruzione 2 Flusso: percorso immaginario che viene attraversato dall’esecutore di una sequenza di istruzioni. Istruzione 3 Diagramma di flusso o flowchart . Istruzione n fine
MATLAB: Controllo del flusso E’ possibile inserire all’interno del codice dei costrutti di controllo che permettano all’esecutore di scegliere, al momento dell’esecuzione, in che direzione far proseguire l’esecuzione stessa. La scelta verrà effettuata in base al valore di verità di una condizione. La condizione è una qualsiasi espressione che, valutata, produca una valore true(1) o false(0). condizione Se true… Se false… In un flow chart il rombo simboleggia la scelta.
MATLAB: Costrutti di controllo Utilizzando una espressione di controllo è possibile realizzare questi costrutti: Istruzione 1 Istruzione 2 Istruzione n . Istruzione 1 Istruzione 2 Istruzione n . Istruzione 1 Istruzione 2 Istruzione n Istruzione a Istruzione b Istruzione z . Istruzione 1 Istruzione 2 . Istruzione n Ciclo “FOR” (con contatore) Ciclo “WHILE” (con condizione) “IF” ad una via “IF” a più vie
If espressione Istruzione 1 Istruzione 2 … Istruzione n end MATLAB: “IF” ad una via Permette di eseguire una sequenza di istruzioni se una condizione è vera (true) e di non eseguirla in caso contrario : Istruzione 1 Istruzione 2 Istruzione n . If espressione Istruzione 1 Istruzione 2 … Istruzione n end
MATLAB: “IF” ad una via Esempi x=input('Inserisci un valore'); if(x<0) x=-x; end disp(x); x=input('Inserisci x'); y=input('Inserisci y'); if(x>y) appoggio=x; x=y; y=appoggio; end disp('Il maggiore è'); disp(y); x=input('Inserisci x'); y=input('Inserisci y'); if(x==y) disp('Sono uguali!'); end eta=input('Inserisci eta'); if(eta<0 | eta >130) disp('Età non valida'); end
MATLAB: “IF” a più vie If espressione Istruzione 1 Istruzione 2 … Permette di eseguire una sequenza di istruzioni se una condizione è vera (true) e di eseguire un’altra sequenza se la condizione è falsa(false). E’ possibile anche collegare in cascata più controlli, aumentando le vie. If espressione Istruzione 1 Istruzione 2 … Istruzione n else Istruzione a Istruzione b Istruzione z end Istruzione 1 Istruzione 2 Istruzione n Istruzione a Istruzione b Istruzione z . If espressione1 Istruzione 1 … Istruzione n elseif espressione2 Istruzione a Istruzione z else Istruzione x Istruzione k end
MATLAB: “IF” a più vie b=input('Inserisci base'); eta=input('Inserisci età'); if(eta>=18) disp('Maggiorenne'); else disp('Minorenne'); end b=input('Inserisci base'); a=input('inserisci altezza'); if(b>0 & a>0) area=b*a; disp('L''area è'); disp(area); else disp('Input errato!'); end eta=input('Inserisci età'); if(eta>=18) disp('Maggiorenne'); elseif (eta>=0) disp('Minorenne'); else disp('Età non valida'); end u=input('inserisci il numero uova'); c=input('quante uova contiene un imballo?'); if(mod(u,c)~=0) disp('Un imballo non si riempie'); else disp('Tutti gli imballi sono pieni!'); end
MATLAB: Esercizi – IF ad una via Scrivi uno script che prende in input tre numeri a,b,c e comunica in output se b è compreso tra a e c. (Attenzione, non è detto che a sia più piccolo di c!) Scrivi uno script che prende in input due caratteri alfabetici minuscoli e comunica se il primo carattere precede il secondo nell’alfabeto. (Consulta la tabella Ascii) Scrivi uno script che prende in input due caratteri alfabetici e comunica se uno è il minuscolo e l’altro il corrispondente maiuscolo, ad es. “f” ed “F” (Consulta la tabella Ascii)
MATLAB: Esercizi – IF a più vie Scrivi uno script che prende in input due numeri a e b e verifica se a è multiplo di b. Se si, calcola e mostra il rapporto tra a e b. Altrimenti, comunica che a non è divisibile per b. Scrivi uno script che prende in input due numeri e comunica se sono entrambi pari, entrambi dispari o uno pari e uno dispari. Scrivi uno script che prende in input due numeri e comunica se il maggiore dei due è pari o dispari Scrivi uno script che verifica se un numero è un quadrato. In tal caso, calcola e mostra la sua radice altrimenti comunica che non è un quadrato.
MATLAB: “IF” a più vie - Esempio g=input('Inserisci il giorno: '); m=input('inserisci il mese: '); a=input('Inserisci l''anno: '); if((g>=0 & g<=31 & (m == 1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12)) || ... (g>=0 & g<=30 & (m ==4 || m==6 || m==9 || m== 11)) || ... (g>=0 & g<=28 & m==2) || ... (g==29 & m==2 & mod(a,4)==0)) disp('Data valida'); else disp('Data non valida!'); end gennaio, di 31 giorni febbraio, di 28 giorni (29 se bisestile) marzo, di 31 giorni aprile, di 30 giorni maggio, di 31 giorni giugno, di 30 giorni luglio, di 31 giorni agosto, di 31 giorni settembre, di 30 giorni ottobre, di 31 giorni novembre, di 30 giorni dicembre, di 31 giorni Calcolo della correttezza di una data: Dati in input giorno, mese e anno verificare che la data è corretta.
for indice = valori Istruzione 1 Istruzione 2 … Istruzione n end MATLAB: Ciclo “FOR” o (con contatore) Permette di ripetere più volte una sequenza di istruzioni. Il numero di ripetizioni è controllato da un contatore che assume un valore iniziale e cambia valore ad ogni ripetizione. Istruzione 1 Istruzione 2 Istruzione n . for indice = valori Istruzione 1 Istruzione 2 … Istruzione n end
Esempi di indice = valori MATLAB: Ciclo “FOR” o (con contatore) Permette di ripetere più volte una sequenza di istruzioni. Il numero di ripetizioni è controllato da un contatore che assume un valore iniziale e cambia valore ad ogni ripetizione. Esempi di indice = valori i = 0:10 num = 3:100 pari = 0:2:100 decr = 10:-1:0 dec = 0:0.1:1 for indice = valori Istruzione 1 Istruzione 2 … Istruzione n end
MATLAB: Esempi - Ciclo “FOR” o (con contatore) %calcola i quadrati dei primi 10 numeri for i=1:10 q=i^2; disp(q); end %somma tutti i pari da 0 a 100 totale=0; for i=0:2:100 totale=totale+i; end disp (totale); %calcola i resti di 100 diviso i for i=1:10 resto=mod(100,i); disp (resto); end %somma tutti i pari da 0 a 100 totale=0; for i=0:2:100 totale=totale+i; end disp (totale);
MATLAB: Esempi - Ciclo “FOR” annidati %genera tutte le coppie i,j %con i e j compresi tra 1 e 10 for i=1:10 for j=1:10 disp(i); disp(j); end %genera tutte le coppie i,j %con i e j pari e compresi tra 1 e 10 for i=2:2:10 for j=2:2:10 disp(i); disp(j); end %genera tutte le coppie i,j %con i e j compresi tra 1 e 10 %e i<j for i=1:10 for j=i+1:10 disp(i); disp(j); end %genera tutte le coppie i,j %con i e j compresi tra 1 e 10 %e i<j e j in ordine decrescente for i=1:10 for j=10:-1:i+1 disp(i); disp(j); end
MATLAB: Esempi – “IF” interno ad un ciclo “FOR” %genera tutti i valori tra 1 e 10 %aggiungendo ‘pari’ o ‘dispari’ for i=1:10 disp(i); if (mod(i,2)==0) disp('pari'); else disp('dispari'); end %verifica se un numero è primo n=input('Inserisci un numero'); m=n/2; primo=true; for i=2:m if mod(n,i)==0 primo=false; end if (primo) disp('Il numero è primo'); else disp('Il numero non è primo'); %genera tutti i valori tra 1 e 100 %divisibili per 7 o 13 for i=1:100 if (mod(i,7)==0 || mod(i,13)==0) disp(i); end
MATLAB: Esercizi Scrivi uno script che chiede in input due numeri A e B e calcola la somma di tutti i numeri pari compresi tra A e B. Provare lo script sui valori A=2, B=10 totale=30 A=3, B=10 totale=28 A=10, B=2 totale=30 A=10, B=3 totale=28 A=2, B=11 totale=30 A=11,B=2 totale=30
MATLAB: Esercizio A= input('A= '); B= input('B= '); if A>B app=A; end if mod(A,2)~=0 A=A+1; if mod(B,2)~=0 B=B-1 totale=0; for i=A:2:B disp(i); totale=totale+i; disp (totale);