Risoluzione compito di Sistemi

Classe 3 ET sez. D - I.T.I. "Panetti" - BARI

(a cura del prof. Giuseppe Spalierno - 3 aprile 1999)

dip.gif (6607 byte)

anibar.gif (4416 byte)

Esercizio n.1

1) Le variabili di ingresso sono V e R2 poichè sono assegnati i possibili valori di R1. La variabile di uscita è la potenza P2 dissipata dalla resistenza R2 e calcolata in corrispondenza di ciascun valore di R1 da 0 a 200 Ohm con passo 0.5 Ohm.

2) Dati in lettura V ed R2, si attiva un ciclo per R1 che assume i valori compresi tra 0 e 200 Ohm con passo 0.5 Ohm. Per ciascun valore di R1 si calcola l'intensità di corrente I con la formula: I = V/(R1+R2) e successivamente si determina la potenza dissipata P2 con la formula: P2 = R2*I^2. Si disegna, quindi, un punto nel piano R1-P2.
In realtà conviene rappresentare la curva della potenza P2 in funzione di R1 attraverso una spezzata che congiunge i vari punti piuttosto che con i soli punti. Conviene preliminarmente, individuare il massimo valore di potenza P2 per poter tarare gli assi in modo opportuno. La massima potenza P2 si ottiene per il minimo valore di R1, cioè per R1 = 0, valore  che massimizza la corrente: Imax = V/R2 e quindi: P2max = V^2/R2.

3) Si fornisce il flow-chart del problema.

(in fase di realizzazione)

4) Si fornisce il programma risolutivo del problema, sviluppato in linguaggio Q-Basic:

' ***********************************

' POTENZA.BAS

' 30.03.99

' ***********************************
COLOR 7, 1: CLS

INPUT "INSERISCI IL VALORE DI V (Volt)"; V

INPUT "INSERISCI IL VALORE DI R2 (Ohm)"; R2

P2max = V ^ 2 / R2
' Disegna sistema di riferimento con linee tratteggiate

SCREEN 12

WINDOW (-40, -P2max * .2)-(200, P2max)

FOR x = 0 TO 200 STEP 20

LINE (x, 0)-(x, P2max), 8, , &H3030

NEXT x

FOR y = 0 TO P2max STEP .1 * P2max

LINE (0, y)-(200, y), 8, , &H3030

NEXT y

LINE (0, 0)-(200, P2max), 14, B

PSET (0, P2max)
' Determina la potenza P2 e disegna la spezzata

LOCATE 1, 1: PRINT "P2(W) "; USING "##.##"; P2max

FOR R1 = 0 TO 200 STEP .5

LOCATE 26, 14: PRINT "0"; SPC(30); "R1 (Ohm)"

LOCATE 26, 78: PRINT "200";

P2 = R2 * V ^ 2 / (R1 + R2) ^ 2

LINE -(R1, P2)

NEXT R1

DO: LOOP WHILE INKEY$ = ""

END

Si mostra di seguito il grafico ottenuto per V=10V e R2=100 Ohm.

sol.gif (4767 byte)

 

5) Per realizzare il trace per i valori di R1 99.5 Ohm , 100 Ohm  e 100.5 Ohm si compila la seguente tabella:

R1 (Ohm) P2=R2*V^2/(R1+R2)^2=10.000/(R1+100)^2 (Watt)
99.5 0.251
100 0.250
100.5 0.249

Esercizio n.2

Commentiamo brevemente ogni istruzione del listato fornito nella traccia.

SCREEN 12:' Modalità grafica VGA
WINDOW (0, 0)-(639, 479): 'finestra sul monitor di coordinate estreme
LINE (0, 0)-(639, 479), 1, B:' disegna il rettangolo massimo di colore blu
DO: LOOP WHILE INKEY$ = "" :' attendi la pressione di un tasto
LINE (50, 50)-(600, 450), , B, &HFF00 :' rettangolo tratteggiato grigio
DO: LOOP WHILE INKEY$ = ""
LINE (100, 100)-(200, 200):'disegna un segmento
LINE -(250, 150):' disegna un segmento dalla line della linea precedente
LINE -(600, 300)
DO: LOOP WHILE INKEY$ = ""
CIRCLE (200, 300), 50:' disegna una circonferenza di raggio 50
DO: LOOP WHILE INKEY$ = ""
PSET (175, 325):' disegna un punto
PSET (225, 325): ' disegna un altro punto
CIRCLE (200, 300), 10, 1: ' disegna naso (circonferenza di raggio 1)
CIRCLE (200, 270), 20, , , , .3: ' disegna bocca (raggio 20, ellisse)
DO: LOOP WHILE INKEY$ = ""
LOCATE 5, 15:' posiziona il cursore alla riga 5 colonna 15
PRINT "Alunno della 3 ET D": 'stampa il messaggio
DO: LOOP WHILE INKEY$ = ""
FOR x = 0 TO 639 STEP 5: ' attiva un ciclo con passo 5
y = 240 + 240 * SIN(x * 6.28 / 640):' funzione sinusoidale positiva
PSET (x, y):' disegna un punto
NEXT x: ' fine ciclo
DO: LOOP WHILE INKEY$ = ""
END: ' fine programma

Si mostra, di seguito, il risultato grafico di questo programma:

sol2.gif (3982 byte)

 


Esercizio n.3

1) La struttura IF...THEN...ELSE consente la selezione composta.
Se la condizione proposta è vera vengono eseguite le istruzioni che troviamo dopo la parola chiave THEN (allora).
Se la condizione è falsa vengono eseguite le istruzioni che si trovano dopo la parola chiave ELSE (altrimenti).
Se le varie istruzioni sono scritte una di seguito all'altra, allora la fine della struttura IF...THEN....ELSE è individuata dal comando END IF.

Esempio: Stampa del valore assoluto della variabile A.

....
IF A<0 THEN print -A ELSE print A
.....

2) La struttura DO....LOOP WHILE consente la realizzazione di un ciclo, cioè la ripetizione di un gruppo di istruzioni. In particolare la parola chiave DO individua l'inizio delle istruzioni da ripetere; dopo l'ultima istruzione del blocco da ripetere si inseriscono le parole: LOOP WHILE seguite dalla condizione.
Se la condizione è vera si ripete l'esecuzione del blocco di istruzioni altrimenti il programma continua con l'esecuzione dell'istruzione seguente.
Questa struttura esegue un blocco di istruzioni almeno una volta  e ne ripete l'esecuzione se la condizione, posta in coda, è vera.

Esempio: stampa i numeri interi compresi tra 1 e 50.

N=0
DO
   N=N+1
   PRINT N
LOOP WHILE N<50
.......

3) La struttura FOR ... NEXT consente la ripetizione di un blocco di istruzioni aggiornando una variabile numerica contatore che parte da un valore iniziale ad un valore finale con un incremento assegnato. L'ultima istruzione del ciclo è la NEXT.

Ripetiamo l'esempio precedente.

FOR N=1 TO 50 STEP 1
  PRINT N
NEXT N

In questo caso la parola chiave STEP può essere omessa poiché l'incremento è unitario.

4) La struttura DO WHILE....LOOP è una variante alla struttura esaminata nel caso 2.
Un blocco di istruzioni viene eseguito se la condizione imposta dopo le parole DO WHILE è vera. Se, invece, è falsa il programma salta all'istruzione successiva alla parola chiave LOOP. La differenza con la struttura DO...LOOP WHILE sta nel fatto che se la condizione è subito falsa, il blocco di istruzioni da ripetere non è eseguito neanche una volta.

Ripetiamo lo stesso esempio.

N=0
DO WHILE N<50
   N=N+1
   PRINT N
LOOP
......

Le strutture dei punti 2) e 4) sembrano, apparentemente, identiche. Per l'esempio proposto è così.
Se, invece, dicessi: stampare gli interi compresi tra un valore assegnato e 50, la struttura 2) potrebbe andare in crisi; infatti se il valore assegnato fosse maggiore di 50, diciamo 62, verrebbe stampato solo il valore 62, indesiderato, evidentemente.
Anche l'istruzione FOR...NEXT stamperebbe 62.
La struttura 4) non esegue alcuna stampa perchè rileva subito la condizione  falsa.


Ritorna alla traccia