ALGORITMI IN LINGUAGGIO DI PROGETTO PROBLEMA 1. Date le età di tre persone, scrivere l’algoritmo in linguaggio di progetto per calcolare l’età media delle persone. DATI: età di tre persone OBIETTIVO: comunicare età media delle tre persone VARIABILI: eta1, eta2, eta3, media programma ETAMEDIA var eta1, eta2, eta3: intero media: reale inizio {acquisizione delle età delle tre persone} scrivi(‘Inserisci l’età della prima persona’) leggi(eta1) scrivi(‘Inserisci l’età della seconda persona’) leggi(eta2) scrivi(‘Inserisci l’età della terza persona’) leggi(eta3) {calcolo età media} media = (eta1+eta2+eta3)/3 {comunicazione del risultato} scrivi(‘L’età media delle tre persone è ‘+media) fine PROBLEMA 2. Scrivere l’algoritmo in linguaggio di progetto che richieda in input la descrizione, la quantità, il prezzo unitario di un articolo venduto e l’aliquota IVA, comunicando in output la descrizione e il prezzo aumentato dell’IVA. DATI: descrizione, quantità, prezzo unitario, IVA OBIETTIVO: comunicare la descrizione e il prezzo aumentato dell’IVA VARIABILI: descr, quant, prezzoU, IVA, prezzoFinale programma PrezzoPiuIva var descr: stringa quant: intero prezzoU, IVA, prezzoFinale: reale inizio {acquisizione dei dati di input} scrivi(‘Descrizione articolo:‘) leggi(descr) scrivi(‘Quantità venduta:’) leggi(quant) scrivi(‘Prezzo unitario in € dell’articolo venduto:’) leggi(prezzoU) scrivi(‘Aliquota IVA in %:’) leggi(IVA) {calcolo del prezzo aumentato dell’IVA} prezzoFinale = (prezzoU * quant) + (prezzoU * quant * IVA)/100 {comunicazione della descrizione dell’articolo e del prezzo aumentato dell’IVA} scrivi(‘Il prezzo aumentato dell’IVA dell’articolo ‘+descr+’ è ‘+prezzoFinale+’ €’) fine PROBLEMA 3. Scrivere l’algoritmo in linguaggio di progetto che determini il numero di scatti effettuati da un utente telefonico e l’ammontare della sua bolletta. Vengono forniti in input i seguenti dati: • Il numero di scatti emersi dalla lettura della bolletta precedente • Il numero di scatti emersi dalla lettura della bolletta attuale • Il costo dello scatto Bisogna inoltre ricordare che per determinare il valore della bolletta occorre aggiungere un canone fisso, il cui importo viene anch’esso fornito in input. DATI: numero di scatti bolletta precedente, numero di scatti bolletta attuale, costo dello scatto, canone fisso OBIETTIVO: comunicare il numero di scatti effettuati dall’utente e l’ammontare della sua bolletta VARIABILI: scattibolprec, scattibolatt, costoscatto, canone, scattieff, costobol programma CostoBolletta var scattibolprec, scattibolatt, scattieff: intero costoscatto, canone, costobol: reale inizio {acquisizione dei dati di input} scrivi(‘Inserisci il numero degli scatti della bolletta precedente’) leggi(scattibolprec) scrivi(‘Inserisci il numero degli scatti della bolletta attuale’) leggi(scattibolatt) scrivi(‘Inserisci il costo dello scatto in €’) leggi(costoscatto) scrivi(‘Inserisci il valore del canone fisso in €’) leggi(canone) {calcolo del numero degli scatti effettuati dall’utente} scattieff=scattibolatt-scattibolprec {calcolo ammontare bolletta} costobol=(scattieff * costoscatto)+canone {comunicazione dei risultati} scrivi(‘Il numero degli scatti effettuati è ‘+scattieff) scrivi(‘L’ammontare della bolletta è ‘+costobol+’ €’) fine PROBLEMA 4. Scrivere in linguaggio di progetto un algoritmo che permette di determinare il volume e l’area della superficie del solido generato dalla rotazione di un giro completo di un triangolo rettangolo intorno all’ipotenusa. Ricordiamo che: indicando con h l’altezza relativa all’ipotenusa, con IPO l’ipotenusa, con c1 il cateto minore e con c2 il cateto maggiore del triangolo rettangolo, si ha: area superficie solido = h × (c1+c2) × 3.14 volume solido = (h × h × IPO × 3.14) / 3 DATI: altezza relativa all’ipotenusa, ipotenusa, cateto minore, cateto maggiore OBIETTIVO: comunicare volume e area della superficie del solido di rotazione VARIABILI: h, IPO, c1, c2, area, volume programma AreaVolume var h, IPO, c1, c2, area, volume: reale inizio {acquisizione dei dati di input} scrivi(‘Inserisci la misura dell’altezza relativa all’ipotenusa’) leggi(h) scrivi(‘Inserisci la misura dell’ipotenusa’) leggi(IPO) scrivi(‘Inserisci la misura del cateto minore’) leggi(c1) scrivi(‘Inserisci la misura del cateto maggiore’) leggi(c2) {calcolo del volume e dell’area della superficie del solido} area=h*(c1+c2)*3.14 volume=(h*h*IPO*3.14)/3 {comunicazione dei risultati} scrivi(‘Volume= ‘+volume+’ , Area= ‘+area) fine PROBLEMA 5. Vengono dati in input i risultati di un referendum: Numero iscritti a votare Numero votanti Numero dei si Numero dei no Realizzare l’algoritmo che permette di determinare e comunicare: • La percentuale dei votanti sul numero degli iscritti • La percentuale dei si rispetto al numero dei votanti • La percentuale dei no rispetto al numero dei votanti. Esempio calcolo percentuale relativa alla prima richiesta del problema: percentuale votanti = (numero votanti × 100) / numero iscritti DATI: numero iscritti a votare, numero votanti, numero dei si, numero dei no OBIETTIVO: comunicare la percentuale dei votanti sul numero degli iscritti, la percentuale dei si rispetto al numero dei votanti, la percentuale dei no rispetto al numero dei votanti VARIABILI: NumIscritti, NumVotanti, NumSi, NumNo, percVotanti, percSi, percNo programma Referendum var NumIscritti, NumVotanti, NumSi, NumNo: intero percVotanti, percSi, percNo: reale inizio {acquisizione dei dati di input} scrivi(‘Inserisci il numero degli iscritti a votare ‘) leggi(NumIscritti) scrivi(‘Inserisci il numero dei votanti’) leggi(NumVotanti) scrivi(‘Inserisci il numero dei si’) leggi(NumSi) scrivi(‘Inserisci il numero dei no’) leggi(NumNo) {calcolo percentuali} percVotanti=(NumVotanti*100)/NumIscritti percSi=(NumSi*100)/NumVotanti percNo=(NumNo*100)/NumVotanti {comunicazione percentuali} scrivi(‘La percentuale dei votanti sul numero degli iscritti è ‘+percVotanti+’ %’) scrivi(‘La percentuale dei si rispetto al numero dei votanti è ‘+percSi+’ %’) scrivi(‘La percentuale dei no rispetto al numero dei votanti è ‘+percNo+’ %’) fine PROBLEMA 6. Realizzare in linguaggio di progetto l’algoritmo che permette di calcolare e comunicare l’area totale di tre rettangoli, conoscendo le misure b1, b2, b3 delle tre basi e le misure h1, h2, h3 delle tre altezze. DATI: le misure delle basi e delle altezze dei tre rettangoli OBIETTIVO: comunicare l’area totale dei tre rettangoli VARIABILI: b1, b2, b3, h1, h2, h3, areatotale programma AreaTotale3Rettangoli var b1, b2, b3, h1, h2, h3, areatotale: reale inizio {acquisizione dei dati di input} scrivi(‘Base 1° rettangolo: ‘) leggi(b1) scrivi(‘Base 2° rettangolo: ‘) leggi(b2) scrivi(‘Base 3° rettangolo: ‘) leggi(b3) scrivi(‘Altezza 1° rettangolo: ‘) leggi(h1) scrivi(‘Altezza 2° rettangolo: ‘) leggi(h2) scrivi(‘Altezza 3° rettangolo: ‘) leggi(h3) {calcolo area totale dei tre rettangoli} areatotale=(b1*h1)+(b2*h2)+(b3*h3) {comunicazione del risultato} scrivi(‘L’area totale dei tre rettangoli è ‘+areatotale) fine PROBLEMA 7. Realizzare in linguaggio di progetto l’algoritmo che risolve il seguente problema: Dati in input la base BC ed il lato obliquo AC di un triangolo isoscele ABC, calcolare e comunicare l’area del triangolo e la misura dell’altezza BK relativa al lato obliquo AC. DATI: la base ed il lato obliquo del triangolo isoscele OBIETTIVO: calcolare e comunicare l’area del triangolo e la misura dell’altezza relativa al lato obliquo VARIABILI: baseABC, latoObliquo, MetaBase, altezzaABC, area, AltRelLatObl programma TriangoloIsoscele var baseABC, altezzaABC, latoObliquo, MetaBase, area, AltRelLatObl: reale inizio {acquisizione dei dati di input} scrivi(‘Inserisci la misura in cm della base del triangolo isoscele ‘) leggi(baseABC) scrivi(‘Inserisci la misura in cm del lato obliquo del triangolo isoscele ‘) leggi(latoObliquo) {calcolo della misura della metà della base del triangolo} MetaBase = baseABC / 2 {calcolo dell’altezza del triangolo, applicando il Teorema di Pitagora} altezzaABC = radice quadrata((latoObliquo*latoObliquo)-(MetaBase*MetaBase)) {calcolo dell’area del triangolo} area= MetaBase * altezzaABC {calcolo dell’altezza relativa al lato obliquo} AltRelLatObl = (2*area) / latoObliquo {comunicazione dei dati di output} scrivi(‘L’area del triangolo misura ‘+area+’ cm²’) scrivi(‘L’altezza relativa al lato obliquo misura ‘+AltRelLatObl+’ cm’) fine PROBLEMA 8. Dati in input due numeri, realizzare in linguaggio di progetto l’algoritmo che permette di visualizzare in ordine crescente tali numeri. DATI: due numeri OBIETTIVO: visualizzare i due numeri in ordine crescente VARIABILI: numero1, numero2 programma OrdineCrescente var numero1, numero2: reale inizio {acquisizione dati di input} scrivi(‘Inserisci il primo numero ‘) leggi(numero1) scrivi(‘Inserisci il secondo numero ‘) leggi(numero2) {ordinamento crescente dei due numeri e relativa visualizzazione} SE (numero1<numero2) ALLORA scrivi(numero1+’ ; ‘+numero2) ALTRIMENTI scrivi(numero2+’ ; ‘+numero1) FINE SE fine PROBLEMA 9. Scrivere un algoritmo in linguaggio di progetto che permette di calcolare il prezzo effettivo relativo all’acquisto di una certa merce, noti la quantità acquistata, il prezzo unitario e la percentuale di sconto, tenendo presente che lo sconto viene applicato soltanto per quantità superiori a un valore dato in input. DATI: quantità di merce acquistata, prezzo unitario, percentuale di sconto, quantità di merce prefissata OBIETTIVO: comunicare il prezzo effettivo relativo all’acquisto della merce VARIABILI: quantita, prezzoU, percsconto, quantitaPref, prezzoEff programma AcquistoMerce var quantita, quantitaPref: intero prezzoU, percsconto, prezzoEff:reale inizio {acquisizione dati di input} scrivi(‘Inserisci la quantità di merce acquistata ‘) leggi(quantita) scrivi(‘Inserisci la quantità di merce prefissata ‘) leggi(quantitaPref) scrivi(‘Inserisci il prezzo unitario in € ‘) leggi(prezzoU) scrivi(‘Inserisci la percentuale di sconto in % ‘) leggi(percsconto) {calcolo del prezzo effettivo in relazione alla quantità acquistata} SE (quantita > quantitaPref) ALLORA prezzoEff = (prezzoU*quantita) - ( prezzoU*quantita*percsconto)/100 ALTRIMENTI prezzoEff = prezzoU*quantita FINE SE {comunicazione del prezzo effettivo} scrivi(‘Il prezzo effettivo relativo all’acquisto della merce è ‘+prezzoEff+’ €’) fine PROBLEMA 10. Realizzare l’algoritmo in linguaggio di progetto che permette di verificare se un dato numero è positivo, negativo o nullo DATI: un numero OBIETTIVO: comunicare se il numero è positivo, negativo o nullo VARIABILI: numero programma PosNegNul var numero: reale inizio {acquisizione dei dati di input} scrivi(‘Inserisci il numero’) leggi(numero) {verifica se il numero è positivo, negativo o nullo e relativa comunicazione} SE (numero>0) ALLORA scrivi(‘Il numero è positivo’) ALTRIMENTI SE (numero<0) ALLORA scrivi(‘Il numero è negativo’) ALTRIMENTI scrivi(‘Il numero è nullo’) FINE SE FINE SE fine PROBLEMA 11. Realizzare l’algoritmo in linguaggio di progetto che permette di risolvere il seguente problema: Su alcuni voli aerei il bagaglio fino a 20 Kg non paga. Oltre questo limite si deve pagare per ogni Kg in più, il 2% della tariffa del biglietto aereo. Visualizzare il prezzo totale del biglietto. DATI: la tariffa del biglietto aereo e il peso del bagaglio OBIETTIVO: calcolare e visualizzare il prezzo totale del biglietto VARIABILI: pesobagaglio, tariffa, prezzototale, pesoInPiu, percTariffa, supplemento programma BigliettoAereo var pesobagaglio, tariffa, pesoInPiu, percTariffa, supplemento, prezzototale: reale inizio {acquisizione dei dati di input} scrivi(‘Inserisci il peso in Kg del bagaglio’) leggi(pesobagaglio) scrivi(‘Inserisci la tariffa in € del biglietto’) leggi(tariffa) {controllo del peso del bagaglio e calcolo del prezzo totale del biglietto} SE (pesobagaglio<=20) ALLORA prezzototale=tariffa ALTRIMENTI inizio pesoInPiu=pesobagaglio-20 percTariffa=(tariffa*2)/100 supplemento=pesoInPiu*percTariffa prezzototale=tariffa+supplemento fine FINE SE {comunicazione del prezzo totale del biglietto} scrivi(‘Il prezzo totale del biglietto è ‘+prezzototale+’ €’) fine PROBLEMA 12. Realizzare l’algoritmo in linguaggio di progetto che permette di verificare se un carattere digitato da tastiera corrisponde a: o ‘S’ oppure ‘s’: visualizzare il messaggio ‘SI’; o ‘N’ oppure ‘n’: visualizzare il messaggio ‘NO’; o altro carattere: visualizzare il messaggio ‘ERRATO’ DATI: un carattere digitato da tastiera OBIETTIVO: visualizzare il messaggio corrispondente VARIABILI: car programma VerificaCarattere var car: carattere inizio {acquisizione dati di input} scrivi(‘Digita un carattere sulla tastiera’) leggi(car) {controllo del carattere digitato e relativa comunicazione} SE ((car == ‘S’) OR (car == ‘s’)) ALLORA scrivi(‘SI’) ALTRIMENTI SE ((car == ‘N’) OR (car == ‘n’)) ALLORA scrivi(‘NO’) ALTRIMENTI scrivi(‘ERRATO’) FINE SE FINE SE Fine PROBLEMA 13. Scrivere in linguaggio di progetto un algoritmo che chieda un numero all’utente e verifichi se questo è esterno all’intervallo [-5, +10] (ricordiamo che un numero è esterno ad un intervallo se è minore di -5 ed è maggiore di +10): in questo caso visualizzi il messaggio “Il dato è fuori dell’intervallo”, altrimenti visualizzi il messaggio “OK”. DATI: un numero OBIETTIVO: verificare se un numero è esterno o interno ad un intervallo e visualizzare il relativo messaggio VARIABILI: numero programma AppartenenzaIntervallo var numero:reale inizio {acquisizione dati di input} scrivi(‘Inserisci un numero per controllare se appartiene o no a [-5, +10]’) leggi(numero) {controllo appartenenza all’intervallo e visualizzazione messaggio relativo} SE ((numero<-5) OR (numero>10)) ALLORA scrivi(‘Il dato è fuori dell’intervallo’) ALTRIMENTI scrivi(‘OK’) FINE SE fine PROBLEMA 14. Scrivere in linguaggio di progetto un algoritmo che permette di risolvere il seguente problema. Un insegnante decide di valutare un test attribuendo un punteggio ad ogni risposta esatta data, assegnando poi un giudizio in base al totale ottenuto, secondo il seguente prospetto: PUNTEGGIO VALUTAZIONE da 0 a 30 da 31 a 60 da 61 a 90 Insufficiente Sufficiente Buono Acquisito quindi in input il punteggio del test, visualizzare la relativa valutazione. DATI: il punteggio del test. OBIETTIVO: Visualizzare la valutazione relativa al punteggio del test. VARIABILI: punteggio programma ValutazioneTest var punteggio:reale inizio {acquisizione dati di input} scrivi(‘Inserisci il punteggio attribuito al test’) leggi(punteggio) {assegnazione della valutazione al punteggio del test e relativa visualizzazione} SE (punteggio<=30) ALLORA scrivi(‘Il giudizio assegnato al test è Insufficiente’) ALTRIMENTI SE (punteggio<=60) ALLORA scrivi(‘Il giudizio assegnato al test è Sufficiente’) ALTRIMENTI scrivi(‘Il giudizio assegnato al test è Buono’) FINE SE FINE SE fine PROBLEMA 15. Scrivere un algoritmo in linguaggio di progetto che permette di risolvere il seguente problema. Per aumentare il numero di visitatori di una mostra, si decide di far pagare il biglietto d’ingresso differenziato in base all’età. Precisamente: Età Prezzo del biglietto Inferiore a 5 anni Da 5 a 17 anni Da 18 anni in poi Gratuito €3 €5 Data in input l’età, visualizzare l’importo del biglietto da pagare. DATI: età del visitatore OBIETTIVO: visualizzare l’importo del biglietto da pagare in base all’età VARIABILI: eta programma PrezzoBigliettoMostra var eta: intero inizio {acquisizione dei dati di input} scrivi(‘Inserisci l’età del visitatore’) leggi(eta) {assegnazione del prezzo del biglietto in base all’età e relativa visualizzazione} SE (eta<5) ALLORA scrivi(‘Il biglietto è gratuito’) ALTRIMENTI SE (eta<=17) ALLORA scrivi(‘Il prezzo del biglietto è 3 € ’) ALTRIMENTI scrivi(‘Il prezzo del biglietto è 5 € ‘) FINE SE FINE SE fine PROBLEMA 16. Scrivere un algoritmo in linguaggio di progetto che permette di risolvere il seguente problema. Una società immobiliare vende appartamenti al mare ai seguenti prezzi: distanza fino 200 m 900 € al metro quadro distanza da 201 m a 500 m 750 € al metro quadro distanza oltre 500 m 500 € al metro quadro Data la dimensione in metri quadri dell’appartamento e la distanza dal mare, calcolare il prezzo dell’appartamento DATI: dimensione in metri quadri dell’appartamento e distanza dell’appartamento dal mare OBIETTIVO: determinare e comunicare il prezzo dell’appartamento VARIABILI: dimensione, distanza, prezzo programma PrezzoAppartamento var dimensione: intero distanza, prezzo: reale inizio {acquisizione dei dati di input} scrivi(‘Inserisci la dimensione in metri quadri dell’appartamento’) leggi(dimensione) scrivi(‘Inserisci la distanza in metri dell’appartamento dal mare’) leggi(distanza) {calcolo del prezzo dell’appartamento} SE (distanza<=200) ALLORA prezzo=dimensione*900 ALTRIMENTI SE (distanza<=500) ALLORA prezzo=dimensione*750 ALTRIMENTI prezzo=dimensione*500 FINE SE FINE SE {comunicazione del prezzo dell’appartamento} scrivi(‘Il prezzo dell’appartamento è di ‘+prezzo+’ €’) fine PROBLEMA 17. Sul prezzo di un prodotto viene praticato lo sconto del 3% se costa meno di 500 €, del 5% per prezzo uguale a 500 € e del 10% per prezzo superiore a 500 €. Scrivere in linguaggio di progetto l’algoritmo che permette di calcolare il prezzo effettivo che l’acquirente dovrà pagare. DATI: prezzo del prodotto OBIETTIVO: comunicare il prezzo effettivo (scontato) del prodotto VARIABILI: prezzo, prezzoeff programma PrezzoEffettivo var prezzo, prezzoeff: reale inizio {acquisizione dei dati di input} scrivi(‘Inserisci il prezzo in € del prodotto’) leggi(prezzo) {calcolo del prezzo effettivo del prodotto} SE (prezzo<500) ALLORA prezzoeff=prezzo-((prezzo*3)/100) ALTRIMENTI SE (prezzo==500) ALLORA prezzoeff=prezzo-((prezzo*5)/100) ALTRIMENTI prezzoeff=prezzo-((prezzo*10)/100) FINE SE FINE SE {comunicazione del prezzo effettivo del prodotto} scrivi(‘Il prezzo effettivo del prodotto è ‘+prezzoeff+’ €’) fine PROBLEMA 18. Dati in input tre numeri, realizzare in linguaggio di progetto l’algoritmo che permette di visualizzare in ordine crescente tali numeri. DATI: tre numeri OBIETTIVO: visualizzare i tre numeri in ordine crescente VARIABILI: numero1, numero2, numero3, appoggio (utilizzata per effettuare lo scambio del contenuto di due variabili) programma OrdineCrescenteTreNumeri var numero1, numero2, numero3, appoggio: reale inizio {acquisizione dati di input} scrivi(‘Inserisci il primo numero ‘) leggi(numero1) scrivi(‘Inserisci il secondo numero ‘) leggi(numero2) scrivi(‘Inserisci il terzo numero ’) leggi(numero3) {controllo del contenuto delle due variabili numero1 e numero2 ed eventuale scambio} SE (numero1>numero2) ALLORA inizio appoggio=numero1 numero1=numero2 numero2=appoggio fine FINE SE {controllo del contenuto delle due variabili numero1 e numero3 ed eventuale scambio} SE (numero1>numero3) ALLORA inizio appoggio=numero1 numero1=numero3 numero3=appoggio fine FINE SE {controllo del contenuto delle due variabili numero2 e numero3 ed eventuale scambio} SE (numero2>numero3) ALLORA inizio appoggio=numero2 numero2=numero3 numero3=appoggio fine FINE SE {visualizzazione dei tre numeri in ordine crescente} scrivi(‘Ordinamento crescente dei tre numeri: ‘+numero1+’ ; ‘+numero2+’ ; ‘+numero3) fine PROBLEMA 19. Realizzare l’algoritmo in linguaggio di progetto che permette di risolvere il seguente problema: Leggere da input 2 numeri. Far eseguire mentalmente la somma all’utente e comunicarla al computer. Far eseguire la somma al computer e confrontarla con quella eseguita dall’utente. Se i risultati coincidono emettere il messaggio ‘Bravo, hai indovinato al primo tentativo’; altrimenti emettere il messaggio ‘Hai sbagliato, prova ancora’. Leggere il nuovo risultato: se è corretto visualizzare ‘Bravino, hai indovinato al secondo tentativo’ altrimenti ‘Ripassa la matematica’. DATI: due numeri e la loro somma OBIETTIVO: verificare la bravura dell’utente e visualizzare un messaggio VARIABILI: num1, num2, somUtente, somComputer programma VerificaBravuraUtente var num1, num2, somUtente, somComputer: reale inizio {acquisizione dei 2 numeri e della loro somma calcolata dall’utente} scrivi(‘Inserisci il primo numero’) leggi(num1) scrivi(‘Inserisci il secondo numero’) leggi(num2) scrivi(‘Inserisci la somma dei due numeri’) leggi(somUtente) {calcolo della somma dei due numeri: esecutore il computer} somComputer=num1+num2 {confronto dei due risultati e verifica della bravura dell’utente con messaggio} SE (somUtente==somComputer) ALLORA scrivi(‘Bravo, hai indovinato al primo tentativo’) ALTRIMENTI inizio scrivi(‘Hai sbagliato, prova ancora’) scrivi(‘Inserisci nuovamente la somma dei due numeri’) leggi(somUtente) SE (somUtente==somComputer) ALLORA scrivi(‘Bravino, hai indovinato al secondo tentativo’) ALTRIMENTI scrivi(‘Ripassa la matematica’) FINE SE fine FINE SE fine PROBLEMA 20. Realizzare l’algoritmo in linguaggio di progetto che permette di risolvere il seguente problema: Un parcheggio ha la tariffa di 1 € per la prima ora di sosta e di 0.50 € per ogni ora successiva. Conoscendo l’orario di entrata e di uscita di un’autovettura (espresso in ore e minuti), emettere uno scontrino con l’ora di entrata, l’ora di uscita, il tempo di durata della sosta e la relativa spesa. DATI: l’orario di entrata (ore e minuti) e l’orario di uscita (ore e minuti) OBIETTIVO: visualizzare l’orario di entrata (ore e minuti), l’orario di uscita (ore e minuti), il tempo di durata della sosta (ore e minuti) e la spesa relativa al parcheggio VARIABILI: OraEntrata, OraUscita, MinutiEntrata, MinutiUscita, OrarioEntrataMinuti, OrarioUscitaMinuti, DurataSostaMinuti, OraDurataSosta, MinutiDurataSosta, spesatariffa programma SpesaParcheggio var OraEntrata, OraUscita, MinutiEntrata, MinutiUscita, OrarioEntrataMinuti: intero OrarioUscitaMinuti, DurataSostaMinuti, MinutiDurataSosta, OraDurataSosta: intero spesatariffa: reale inizio {acquisizione dei dati di input} scrivi(‘Inserisci l’ora di entrata dell’autovettura nel parcheggio’) leggi(OraEntrata) scrivi(‘Inserisci i minuti di entrata dell’autovettura nel parcheggio’) leggi(MinutiEntrata) scrivi(‘Inserisci l’ora di uscita dell’autovettura dal parcheggio’) leggi(OraUscita) scrivi(‘Inserisci i minuti di uscita dell’autovettura dal parcheggio’) leggi(MinutiUscita) {trasformazione dell’ora e dei minuti di entrata in minuti} OrarioEntrataMinuti = OraEntrata * 60 + MinutiEntrata {trasformazione dell’ora e dei minuti di uscita in minuti} OrarioUscitaMinuti = OraUscita * 60 + MinutiUscita {calcolo in minuti del tempo di durata della sosta} DurataSostaMinuti = OrarioUscitaMinuti - OrarioEntrataMinuti {trasformazione del tempo di durata della sosta (espresso in minuti) in ore e minuti} OraDurataSosta = DurataSostaMinuti DIV 60 MinutiDurataSosta = DurataSostaMinuti MOD 60 {valutazione durata sosta e calcolo tariffa parcheggio} SE (DurataSostaMinuti<=60) ALLORA spesatariffa = DurataSostaMinuti / 60 ALTRIMENTI inizio DurataSostaMinuti = DurataSostaMinuti – 60 spesatariffa = 1 + ((DurataSostaMinuti * 0.50) / 60) fine FINE SE {emissione scontrino} scrivi(‘Orario entrata: ‘+OraEntrata+’ h ‘+MinutiEntrata+’ m’) scrivi(‘Orario uscita: ‘+OraUscita+’ h ‘+MinutiUscita+’ m’) scrivi(‘Durata sosta: ‘+OraDurataSosta+’ h ‘+MinutiDurataSosta+’ m’) scrivi(‘Spesa parcheggio: ‘+spesatariffa+’ €’) fine PROBLEMA 21. Scrivere in linguaggio di progetto l’algoritmo che permette di risolvere l’equazione di 1° grado ax+b=0 DATI: i coefficienti a e b dell’equazione OBIETTIVO: risolvere l’equazione, fornendo le relative comunicazioni VARIABILI: a, b, x programma EQUAZIONEax+b=0 var a, b, x: reale inizio {acquisizione dei dati di input} scrivi(‘Inserisci il valore del coefficiente a dell’equazione’) leggi(a) scrivi(‘Inserisci il valore del coefficiente b dell’equazione’) leggi(b) {risoluzione dell’equazione e relative comunicazioni} SE (a<>0) ALLORA inizio x=-b/a scrivi(‘L’equazione è determinata e la sua soluzione è x= ‘+x) fine ALTRIMENTI SE (b==0) ALLORA scrivi(‘L’equazione è indeterminata, cioè ha infinite soluzioni’) ALTRIMENTI scrivi(‘L’equazione è impossibile, cioè non ha soluzioni’) FINE SE FINE SE fine PROBLEMA 22. Realizzare in linguaggio di progetto l’algoritmo che permette di risolvere il seguente problema: Determinare se un anno fornito in input da tastiera è bisestile ed in caso affermativo se è secolare. DATI: l’anno che bisogna esaminare OBIETTIVO: stabilire se l’anno è bisestile e in caso affermativo se è secolare VARIABILI: anno, RestoBisestile, RestoSecolare programma AnnoBisestile var anno, RestoBisestile, RestoSecolare: intero inizio {acquisizione dei dati di input} scrivi(‘Inserisci l’anno di cui si chiede se è bisestile’) leggi(anno) {calcolo del resto della divisione dell’anno per 4} RestoBisestile = anno MOD 4 {calcolo del resto della divisione dell’anno per 100} RestoSecolare = anno MOD 100 {controllo se l’anno è bisestile e relative comunicazioni} SE (RestoBisestile==0) ALLORA inizio scrivi(‘L’anno ‘+anno+’ è bisestile’) {controllo se è anche secolare} SE (RestoSecolare==0) ALLORA scrivi(‘ed è secolare’) ALTRIMENTI scrivi(‘e non è secolare’) FINE SE fine ALTRIMENTI scrivi(‘L’anno ‘+anno+’ non è bisestile’) FINE SE fine PROBLEMA 23. Realizzare l’algoritmo che permette di calcolare il quoziente della divisione di due numeri inseriti da tastiera. DATI: due numeri OBIETTIVO: calcolare e comunicare il quoziente dei due numeri VARIABILI: numero1, numero2, quoziente programma QuozienteDivisione var numero1, numero2, quoziente: reale inizio {acquisizione dei dati di input} scrivi(‘Inserisci il dividendo della divisione’) leggi(numero1) scrivi(‘Inserisci il divisore della divisione’) leggi(numero2) {calcolo del quoziente e relative comunicazioni} SE (numero2<>0) ALLORA inizio quoziente=numero1/numero2 scrivi(‘Il quoziente tra ‘+numero1+’ e ‘+numero2+’ è ‘+quoziente) fine ALTRIMENTI SE (numero1<>0) ALLORA scrivi(‘ERRORE! Non esiste un numero che moltiplicato per 0 da ‘+numero1) ALTRIMENTI scrivi(‘ERRORE! Ogni numero moltiplicato per 0 da come risultato 0’) FINE SE FINE SE fine PROBLEMA 24. Un’impresa di trasporti calcola il costo di un trasporto aggiungendo, al costo fisso di € 52, l’importo massimo tra il costo chilometrico (€ 0.62 al chilometro) e il costo per il peso (€ 0.08 al quintale). Scrivere l’algoritmo in linguaggio di progetto che, dati la lunghezza del viaggio e il peso della merce trasportata, calcoli il costo finale. DATI: lunghezza del viaggio in chilometri e peso della merce trasportata in quintali. OBIETTIVO: calcolo e comunicazione del costo finale VARIABILI: LunghezzaViaggio, PesoMerce, ImportoAggiunto, CostoFinale CostoChilometrico, CostoPeso programma CostoTotale var LunghezzaViaggio, PesoMerce, ImportoAggiunto, CostoFinale: reale CostoChilometrico, CostoPeso: reale inizio {acquisizione dei dati di input} scrivi(‘Inserisci la lunghezza del viaggio in chilometri’) leggi(LunghezzaViaggio) scrivi(‘Inserisci il peso della merce trasportata in quintali’) leggi(PesoMerce) {calcolo del costo chilometrico e del costo per il peso} CostoChilometrico = LunghezzaViaggio * 0.62 CostoPeso = PesoMerce * 0.08 {calcolo dell’importo aggiuntivo al costo fisso} SE (CostoChilometrico>=CostoPeso) ALLORA ImportoAggiunto = CostoChilometrico ALTRIMENTI ImportoAggiunto = CostoPeso FINE SE {calcolo del costo finale e relativa comunicazione} CostoFinale = 52 + ImportoAggiunto scrivi(‘Il costo finale del trasporto è ‘+CostoFinale+’ €’) fine PROBLEMA 25. Siano dati in input i dati relativi all’acquisto di una certa merce con: ⋅ codice merce; ⋅ descrizione; ⋅ quantità; ⋅ prezzo unitario; ⋅ tipo di pagamento (contanti o rateale). Realizzare in linguaggio di progetto l’algoritmo che permette di calcolare e visualizzare l’importo totale della merce sapendo che se il pagamento è in contanti il prezzo va diminuito del 10%, se è rateale va aumentato del 15%. DATI: codice della merce, descrizione merce, quantità acquistata, prezzo unitario, tipo di pagamento OBIETTIVO: calcolare e visualizzare l’importo totale della merce in base al tipo di pagamento VARIABILI: CodiceMerce, descrizione, TipoPagamento, quantita, PrezzoUnitario, ImportoTotale programma ImportoMerce var CodiceMerce, descrizione, TipoPagamento: stringa quantita, PrezzoUnitario, ImportoTotale: reale inizio {acquisizione dei dati di input} scrivi(‘Qual è il codice della merce? ’) leggi(CodiceMerce) scrivi(‘Qual è la sua descrizione? ’) leggi(descrizione) scrivi(‘Inserisci la quantità acquistata ’) leggi(quantita) scrivi(‘Inserisci il prezzo unitario in € ’) leggi(PrezzoUnitario) scrivi(‘Quale tipo di pagamento è stato utilizzato? contanti/rateale ‘) leggi(TipoPagamento) {calcolo dell’importo totale della merce} SE (TipoPagamento==’contanti’) ALLORA ImportoTotale=PrezzoUnitario*quantita-((PrezzoUnitario*quantita*10)/100) ALTRIMENTI ImportoTotale=PrezzoUnitario*quantita+((PrezzoUnitario*quantita*15)/100) FINE SE {visualizzazione del dato di output del problema} scrivi(‘L’importo totale della merce è di ‘+ImportoTotale+’ €’) fine PROBLEMA 26. Realizzare un algoritmo in linguaggio di progetto che porga le domande di un questionario all’utente e produca un prospetto con le risposte. Richiedere: • nome • attività (possibili risposte: studente, lavoratore, disoccupato) Se la risposta precedente non è “disoccupato”, richiedere: • la distanza in Km da percorrere ogni giorno per raggiungere la sede di studio o di lavoro • il mezzo utilizzato (possibili risposte: pubblico, privato) Se la risposta precedente è “privato”, richiedere se viene utilizzata l’automobile (possibili risposte: SI, NO). DATI: il nome dell’utente, la sua attività, la distanza per raggiungere la sede di studio o di lavoro, il mezzo di trasporto utilizzato, la risposta sull’utilizzo dell’automobile OBIETTIVO: Realizzare il questionario per l’utente e visualizzare le risposte VARIABILI: NomeUtente, AttivitaUtente, DistanzaSede, MezzoTrasporto, RispostaAuto programma QUESTIONARIO var NomeUtente, AttivitaUtente, MezzoTrasporto, RispostaAuto: stringa DistanzaSede: reale inizio {acquisizione del nome e dell’attività dell’utente} scrivi(‘Qual è il tuo nome? ‘) leggi(NomeUtente) scrivi(‘Qual è la tua attività? studente/lavoratore/disoccupato ‘) leggi(AttivitaUtente) {valutazione attività ed eventuale acquisizione della distanza e del mezzo} SE (AttivitaUtente<>’disoccupato’) ALLORA inizio scrivi(‘Quale distanza in Km percorri ogni giorno per raggiungere la sede di studio o di lavoro? ‘) leggi(DistanzaSede) scrivi(‘Quale mezzo di trasporto utilizzi? pubblico/privato ‘) leggi(MezzoTrasporto) {valutazione mezzo ed eventuale acquisizione dell’utilizzo dell’automobile} SE (MezzoTrasporto==’privato’) ALLORA inizio scrivi(‘Utilizzi l’automobile? SI/NO ‘) leggi(RispostaAuto) fine ALTRIMENTI scrivi(‘Il questionario è terminato. ‘) FINE SE fine ALTRIMENTI scrivi(‘Il questionario è terminato. ‘) FINE SE {conclusa la realizzazione del questionario} {visualizzazione prospetto} scrivi(NomeUtente+’ ‘+AttivitaUtente) SE (AttivitaUtente<>’disoccupato’) ALLORA inizio scrivi(‘Distanza dal luogo di lavoro o di studio: ‘+DistanzaSede+’ Km’) SE (MezzoTrasporto==’pubblico’) ALLORA scrivi(‘Il mezzo di trasporto è ‘+MezzoTrasporto) ALTRIMENTI SE (RispostaAuto==’SI’) ALLORA scrivi(‘Mezzo di trasporto: ‘+MezzoTrasporto+’ (automobile)’) ALTRIMENTI scrivi(‘Mezzo di trasporto: ‘+MezzoTrasporto+’ (non automobile)’) FINE SE FINE SE fine FINE SE fine PROBLEMA 27. Sapendo che una persona ha bisogno di un numero di calorie che dipende dall’attività svolta, secondo la seguente tabella, dove i numeri si riferiscono al fabbisogno orario: ATTIVITA’ UOMO DONNA LEGGERA 42 36 MEDIA 46 40 PESANTE 54 46 MOLTO PESANTE 62 55 e, sapendo che a colazione bisognerebbe introdurre circa il 20% del fabbisogno calorico giornaliero, realizzare un algoritmo in linguaggio di progetto che chieda all’utente il sesso e il tipo di attività e, in base a questi dati, determini il fabbisogno calorico giornaliero e quindi quello relativo alla colazione. DATI: il sesso della persona e il tipo di attività svolta OBIETTIVO: calcolare e comunicare il fabbisogno calorico giornaliero e quello relativo alla colazione VARIABILI: sesso, attivita, CalorieGiorno, CalorieColazione COSTANTI: attivita1=’leggera’, attivita2=’media’, attivita3=’pesante’, attivita4=’molto pesante’, cal1uomo=42, cal2uomo=46, cal3uomo=54, cal4uomo=62, cal1donna=36, cal2donna=40, cal3donna=46, cal4donna=55, perc=20 programma CorrettaAlimentazione var sesso, attivita:stringa CalorieGiorno, CalorieColazione: intero attivita1=’leggera’; attivita2=’media’; attivita3=’pesante’; attivita4=’molto pesante’; cal1uomo=42; cal2uomo=46; cal3uomo=54; cal4uomo=62; cal1donna=36; perc=20 cal2donna=4; cal3donna=46; cal4donna=55 inizio {acquisizione dei dati di input} scrivi(‘Inserisci il sesso. Uomo/Donna’) leggi(sesso) scrivi(‘Inserisci il tipo di attività. Leggera/Media/Pesante/Molto pesante’) leggi(attivita) {valutazione sesso ed attività e calcolo fabbisogno calorico giornaliero} SE (sesso==’Uomo’) ALLORA inizio {calcolo relativo all’uomo} SE (attivita==attivita1) ALLORA CalorieGiorno=cal1uomo*24 ALTRIMENTI SE (attivita==attivita2) ALLORA CalorieGiorno=cal2uomo*24 ALTRIMENTI SE (attivita==attivita3) ALLORA CalorieGiorno=cal3uomo*24 ALTRIMENTI CalorieGiorno=cal4uomo*24 FINE SE FINE SE FINE SE fine ALTRIMENTI inizio {calcolo relativo alla donna} SE (attivita==attivita1) ALLORA CalorieGiorno=cal1donna*24 ALTRIMENTI SE (attivita==attivita2) ALLORA CalorieGiorno=cal2donna*24 ALTRIMENTI SE (attivita==attivita3) ALLORA CalorieGiorno=cal3donna*24 ALTRIMENTI CalorieGiorno=cal4donna*24 FINE SE FINE SE FINE SE fine FINE SE {comunicazione fabbisogno calorico giornaliero} scrivi(‘Il fabbisogno calorico giornaliero è di ‘+CalorieGiorno+’ calorie’) {calcolo fabbisogno calorico a colazione e relativa comunicazione} CalorieColazione = (CalorieGiorno * perc)/100 scrivi(‘Il numero di calorie necessarie per la colazione è ‘+CalorieColazione+’ calorie’) fine PROBLEMA 28. Scrivere in linguaggio di progetto l’algoritmo che permette di risolvere il problema di determinare la “normalità” del peso corporeo di un individuo, conoscendo il suo peso e la sua altezza. Dall’attività della FONDAZIONE UMBERTO VERONESI si ha: si deve calcolare il BMI – BODY MASS INDEX, che si ottiene dividendo il peso, espresso in chilogrammi, per l’altezza, espressa in metri, al quadrato, e quindi esaminare la seguente tabella BMI < 18.5 18.5 – 24.9 25.0 – 29.9 >= 30.0 30.0 – 34.9 35.0 – 39.9 >= 40.0 STATO sottopeso normopeso sovrappeso obeso obeso classe I obeso classe II obeso classe III DATI: il peso dell’individuo espresso in chilogrammi e la sua altezza in metri OBIETTIVO: stabilire lo stato corporeo dell’individuo, fornendo le relative comunicazioni VARIABILI: peso, altezza, bmi programma CalcoloBmi var peso, altezza, bmi: reale inizio {acquisizione dei dati di input} scrivi(‘Inserisci il peso espresso in Kg dell’individuo ‘) leggi(peso) scrivi(‘Inserisci l’altezza espressa in m dell’individuo ‘) leggi(altezza) {calcolo del BMI e relative valutazioni e comunicazioni} bmi = peso / (altezza * altezza) scrivi(‘Il BMI dell’individuo ha valore ‘+bmi+’ Kg / m² ‘) SE (bmi<18.5) ALLORA scrivi(‘L’individuo è in sottopeso ‘) ALTRIMENTI SE (bmi<=24.9) ALLORA scrivi(‘L’individuo è in normopeso ‘) ALTRIMENTI SE (bmi<=29.9) ALLORA scrivi(‘L’individuo è in sovrappeso ‘) ALTRIMENTI SE (bmi<=34.9) ALLORA scrivi(‘L’individuo è un obeso di classe I ‘) ALTRIMENTI SE (bmi<=39.9) ALLORA scrivi(‘L’individuo è un obeso di classe II ‘) ALTRIMENTI scrivi(‘L’individuo è un obeso di classe III ‘) FINE SE FINE SE FINE SE FINE SE FINE SE fine PROBLEMA 29. Nel 1951 la ricercatrice italiana Rita Levi Montalcini scoprì una proteina, estratta dalle ghiandole salivari del topo maschio, di nome nerve growth factor (fattore di crescita nervosa), o NGF, che si rivelò un fattore di grande importanza per il sistema nervoso periferico e centrale dell’uomo. I primi usi furono rivolti alle lesioni della cornea: grazie all’inoculazione di NGF, in due mesi gli strappi sulla cornea erano ricuciti. Recentemente l’NGF si è rivelato efficace nel trattamento delle ulcerazioni croniche delle gambe in pazienti affetti da artrite reumatoide: la seguente tabella (fonte: Istituto di Neurobiologia del CNR - Roma) mostra il tempo necessario per la completa guarigione dell’ulcera trattata con NGF. Periodo di trattamento in settimane 1 2 3 4 5 6 7 8 Riduzione dell’ulcera in % 20% 45% 50% 55% 60% 70% 80% 100% In futuro secondo gli scienziati, sono fondate le speranze che l’NGF potrebbe guarire da diabete, cancro, Parkinson, Alzheimer, sclerosi multipla e AIDS. Analizzando la tabella, realizzare, in linguaggio di progetto, l’algoritmo che, dato in input il periodo di trattamento in settimane di NGF, fornisca in output la percentuale di riduzione dell’ulcera. DATI: numero di settimane di trattamento con NGF OBIETTIVO: comunicare la percentuale di riduzione dell’ulcera sulle gambe in base al numero di settimane di trattamento con NGF VARIABILI: NumeroSettimane programma TrattamentoNGF var NumeroSettimane: intero inizio {acquisizione dei dati di input} scrivi(‘Inserisci il numero di settimane di trattamento con NGF (intero da 1 a 8) ’) leggi(NumeroSettimane) {comunicazione percentuale riduzione dell’ulcera in base alle settimane di trattamento} SE (NumeroSettimane==1) ALLORA scrivi(‘Le lesioni si sono ridotte del 20%’ ) ALTRIMENTI SE (NumeroSettimane==2) ALLORA scrivi(‘Le lesioni si sono ridotte del 45% ‘) ALTRIMENTI SE (NumeroSettimane==3) ALLORA scrivi(‘Le lesioni si sono ridotte del 50% ‘) ALTRIMENTI SE (NumeroSettimane==4) ALLORA scrivi(‘Le lesioni si sono ridotte del 55% ‘) ALTRIMENTI SE (NumeroSettimane==5) ALLORA scrivi(‘Le lesioni si sono ridotte del 60% ‘) ALTRIMENTI SE (NumeroSettimane==6) ALLORA scrivi(‘Le lesioni si sono ridotte del 70% ‘) ALTRIMENTI SE (NumeroSettimane==7) ALLORA scrivi(‘Le lesioni si sono ridotte dell’ 80% ‘) ALTRIMENTI SE (NumeroSettimane==8) ALLORA inizio scrivi(‘Le lesioni si sono ridotte del 100% ‘) scrivi(‘Il paziente è completamente guarito ‘) fine ALTRIMENTI scrivi(‘Errore sul numero di settimane inserito’) FINE SE FINE SE FINE SE FINE SE FINE SE FINE SE FINE SE FINE SE fine Il problema si può anche risolvere utilizzando il costrutto COMMUTA… invece del costrutto SE…ALLORA…ALTRIMENTI…. Infatti si ha il seguente algoritmo, che presenta sicuramente una struttura più compatta e semplice del precedente: programma TrattamentoNGFbis var NumeroSettimane: intero inizio {acquisizione dei dati di input} scrivi(‘Inserisci il numero di settimane di trattamento con NGF (intero da 1 a 8) ’) leggi(NumeroSettimane) {comunicazione percentuale riduzione dell’ulcera in base alle settimane di trattamento} COMMUTA (NumeroSettimane) inizio CASO 1: scrivi(‘Le lesioni si sono ridotte del 20%’ ) CASO 2: scrivi(‘Le lesioni si sono ridotte del 45%’ ) CASO 3: scrivi(‘Le lesioni si sono ridotte del 50%’ ) CASO 4: scrivi(‘Le lesioni si sono ridotte del 55%’ ) CASO 5: scrivi(‘Le lesioni si sono ridotte del 60%’ ) CASO 6: scrivi(‘Le lesioni si sono ridotte del 70%’ ) CASO 7: scrivi(‘Le lesioni si sono ridotte dell’ 80%’ ) CASO 8: inizio scrivi(‘Le lesioni si sono ridotte del 100% ‘) scrivi(‘Il paziente è completamente guarito‘) fine IN CASO CONTRARIO: scrivi(‘Errore sul numero di settimane inserito’) fine FINE COMMUTA fine PROBLEMA 30. Scrivere in linguaggio di progetto l’algoritmo che risolve il seguente problema: Per la vendita di un prodotto si deve applicare uno sconto progressivo in base al numero di pezzi ordinati, secondo la seguente tabella: Numero Pezzi Ordinati Fino a 3 Fino a 5 Fino a 10 Più di 10 Percentuale Sconto 5% 10% 20% 30% Determinare l’importo totale scontato. DATI: il numero dei pezzi ordinati e il prezzo unitario del prodotto OBIETTIVO: calcolare e comunicare l’importo totale scontato in base alla quantità ordinata VARIABILI: NumeroPezzi, PrezzoUnitario, ScontoPrezzoUnitario, TotaleScontato programma ImportoTotaleScontato var NumeroPezzi: intero PrezzoUnitario, ScontoPrezzoUnitario, TotaleScontato: reale inizio {acquisizione dei dati di input} scrivi(‘Inserisci il numero dei pezzi ordinati ‘) leggi(NumeroPezzi) scrivi(‘Inserisci il prezzo unitario in € del prodotto ‘) leggi(PrezzoUnitario) {valutazione del numero dei pezzi ordinati e calcolo dello sconto sul prezzo unitario} COMMUTA (NumeroPezzi) inizio CASO 1: CASO 2: CASO 3: ScontoPrezzoUnitario=(PrezzoUnitario*5)/100 CASO 4: CASO 5: ScontoPrezzoUnitario=(PrezzoUnitario*10)/100 CASO 6: CASO 7: CASO 8: CASO 9: CASO 10: ScontoPrezzoUnitario=(PrezzoUnitario*20)/100 IN CASO CONTRARIO: ScontoPrezzoUnitario=(PrezzoUnitario*30)/100 fine FINE COMMUTA {calcolo dell’importo totale scontato} TotaleScontato=NumeroPezzi*(PrezzoUnitario-ScontoPrezzoUnitario) {comunicazione dell’importo totale scontato} scrivi(‘L’importo totale scontato in base alla quantità ordinata è di € ‘+TotaleScontato) fine PROBLEMA 31. Tutte le informazioni all’interno di un elaboratore sono rappresentate come insiemi di bit (contrazione di BInary digiT), poiché le cifre usate sono quelle binarie (cioè con due soli possibili stati: “0” e “1”). Per comodità i bit vengono raggruppati in gruppi di 8 e questo insieme prende il nome di byte. Nei moderni calcolatori la quantità di informazioni gestite è notevole, dell’ordine di milioni di byte, per cui risulta inadeguato esprimere tale capacità in semplici byte. Si usano per questo i multipli del byte. Nella seguente tabella vengono mostrati i multipli del byte, la loro sigla e la corrispondenza in byte. MULTIPLI kilobyte megabyte gigabyte terabyte petabyte exabyte zettabyte yottabyte SIGLA kB MB GB TB PB EB ZB YB CORRISPONDENZA 1024 byte (circa 1000 byte) 1024 kbyte (circa 1000000 di byte) 1024 Mbyte (circa 1000000000 di byte) 1024 Gbyte 1024 Tbyte 1024 Pbyte 1024 Ebyte 1024 Zbyte Scrivere in linguaggio di progetto l’algoritmo che permette all’utente di inserire in input un multiplo del byte e di avere in output il suo valore corrispondente in byte. DATI: un multiplo del byte. OBIETTIVO: visualizzare il valore corrispondente del multiplo del byte. VARIABILI: MultiploByte programma MultiploInByte var MultiploByte: stringa inizio {acquisizione dei dati di input} scrivi(‘Inserisci un multiplo del byte. kB/MB/GB/TB/PB/EB/ZB/YB ‘) leggi(MultiploByte) {valutazione del multiplo e visualizzazione della sua corrispondenza in byte} COMMUTA (MultiploByte) inizio CASO ‘kB’: scrivi(‘kB corrisponde a circa 1000 byte ‘) CASO ‘MB’: scrivi(‘MB corrisponde a circa 1000000 di byte ‘) CASO ‘GB’: scrivi(‘GB corrisponde a circa 1000000000 di byte ‘) CASO ‘TB’: scrivi(‘TB corrisponde a circa 1000000000000 di byte ‘) CASO ‘PB’: scrivi(‘PB corrisponde a circa 1000000000000000 di byte ‘) CASO ‘EB’: scrivi(‘EB corrisponde a circa 1000000000000000000 di byte ‘) CASO ‘ZB’: scrivi(‘ZB corrisponde a circa 1000000000000000000000 di byte ‘) CASO ‘YB’: scrivi(‘YB corrisponde a circa 1000000000000000000000000 di byte ‘) IN CASO CONTRARIO: scrivi(‘ERRORE!! Hai commesso un errore nell’inserimento del multiplo ‘) fine FINE COMMUTA fine PROBLEMA 32. Scrivere in linguaggio di progetto l’algoritmo che permette di risolvere il seguente problema: Siano dati in input due enunciati p e q e i loro valori di verità vero o falso. Il sistema dovrà calcolare e fornire in output il valore di verità degli enunciati composti: p and q, p or q, not p, not q. Si ricordi che: i connettivi logici and, or, not rappresentano nell’algebra booleana rispettivamente la congiunzione logica o prodotto logico, la disgiunzione inclusiva o somma logica, la negazione logica o complemento. DATI: due enunciati p e q e i loro valori di verità vero o falso OBIETTIVO: calcolare e comunicare i valori di verità degli enunciati composti p and q, p or q, not p, not q VARIABILI: EnunciatoP, EnunciatoQ, ValVeritàP, ValVeritàQ, valveritàp, valveritàq, valveritàpANDq, valveritàpORq, valveritàNOTp, valveritàNOTq programma valori_di_George_Boole var EnunciatoP, EnunciatoQ: stringa ValVeritàP, ValVeritàQ: carattere valveritàp, valveritàq, valveritàpANDq, valveritàpORq, valveritàNOTp: booleano valveritàNOTq: booleano inizio {acquisizione dei dati di input} scrivi(‘Inserisci l’enunciato p ‘) leggi(EnunciatoP) scrivi(‘Introduci il valore di verità (vero o falso) di p: V/F ‘) leggi(ValVeritàP) scrivi(‘Inserisci l’enunciato q ‘) leggi(EnunciatoQ) scrivi(‘Introduci il valore di verità (vero o falso) di q: V/F ‘) leggi(ValVeritàQ) {assegnazione del valore di verità alle variabili booleane valveritàp e valveritàq} SE (ValVeritàP==’V’) ALLORA valveritàp=vero ALTRIMENTI valveritàp=falso FINE SE SE (ValVeritàQ==’V’) ALLORA valveritàq=vero ALTRIMENTI valveritàq=falso FINE SE {assegnazione del valore di verità alle variabili booleane valveritàpANDq e valveritàpORq} valveritàpANDq = valveritàp and valveritàq valveritàpORq = valveritàp or valveritàq {assegnazione del valore di verità alle variabili booleane valveritàNOTp e valveritàNOTq} valveritàNOTp = not valveritàp valveritàNOTq = not valveritàq {comunicazione dei valori di verità degli enunciati: “p and q”, “p or q”, “not p”, “not q”} scrivi(‘Il valore di verità dell’enunciato composto “p and q” è ‘+valveritàpANDq) scrivi(‘Il valore di verità dell’enunciato composto “p or q” è ‘+valveritàpORq) scrivi(‘Il valore di verità dell’enunciato composto “not p” è ‘+valveritàNOTp) scrivi(‘Il valore di verità dell’enunciato composto “not q” è ‘+valveritàNOTq) fine PROBLEMA 33. Scrivere in linguaggio di progetto l’algoritmo che permette di risolvere il seguente problema: Realizzare un menù di scelta relativo ad argomenti di informatica, l’utente deve effettuare in input una scelta ed il sistema deve fornire in output una breve trattazione sull’argomento scelto. DATI: un numero intero corrispondente alla scelta effettuata dall’utente OBIETTIVO: visualizzare una breve trattazione sull’argomento scelto VARIABILI: SceltaArgomento programma SceltaDaMenù var SceltaArgomento: intero inizio {visualizzazione per l’utente del menù di scelta dell’argomento} scrivi(‘1. Sistema di elaborazione ‘) scrivi(‘2. Componenti di un sistema di elaborazione‘) scrivi(‘3. Componenti hardware ‘) scrivi(‘4. CPU ‘) scrivi(‘5. Memoria centrale ‘) scrivi(‘6. Memorie di massa ‘) scrivi(‘7. Periferiche di input ‘) scrivi(‘8. Periferiche di output ‘) scrivi(‘9. Il software ‘) scrivi(’10. Software di base ‘) scrivi(’11. Software applicativo ‘) scrivi(’12. Software di programmazione ‘) {acquisizione dei dati di input} scrivi(‘Inserisci un intero tra 1 e 12 per scegliere un argomento del menù‘) leggi(SceltaArgomento) {valutazione della scelta e visualizzazione di una breve trattazione sull’argomento} COMMUTA (SceltaArgomento) inizio CASO 1: inizio scrivi(‘Un sistema di elaborazione è un insieme di elementi che costituiscono’) scrivi(‘un’unica entità per il perseguimento di elaborare dati e informazioni’) fine CASO 2: inizio scrivi(‘Un sistema di elaborazione ha due componenti. ‘) scrivi(‘L’hardware (hard =”solido”, ware =”componente”) che’) scrivi(‘è l’insieme delle componenti fisiche (meccaniche, elettriche, ‘) scrivi(‘elettroniche, magnetiche e ottiche) che costituiscono l’elaboratore e ‘) scrivi(‘il software (soft=”soffice”, ware=”componente”) che è la parte logica’) scrivi(‘di un elaboratore, costituita dai programmi residenti nella memoria ’) scrivi(‘del sistema o nei supporti di memorizzazione’) fine CASO 3: inizio scrivi(‘Le componenti hardware sono: CPU (Central Processing Unit, “unità’) scrivi(‘centrale di elaborazione”), Memoria centrale, Memorie di massa, ‘) scrivi(‘Periferiche di input, Periferiche di output.’) fine CASO 4: inizio scrivi(‘La CPU è il cervello dell’elaboratore in cui avvengono tutti i processi’) scrivi(‘di elaborazione.’) fine CASO 5: inizio scrivi(‘La memoria centrale è un dispositivo elettronico che conserva le ‘) scrivi(‘istruzioni per l’avvio del sistema e memorizza informazioni, istruzioni’) scrivi(‘e dati per l’elaborazione’) fine CASO 6: inizio scrivi(‘Le memorie di massa sono supporti magneto-ottici-elettronici che ‘) scrivi(‘permettono di memorizzare dati e programmi in modo permanente. ‘) scrivi(‘Esempi sono: i nastri, gli hard disk, i CD, i DVD, le USB flash drive ‘) scrivi(‘ ( o chiavette USB), le memory card.’) fine CASO 7: inizio scrivi(‘Le periferiche di input sono tutti quei dispositivi che consentono ‘) scrivi(‘l’immissione dei dati e delle istruzioni dall’esterno all’interno ‘) scrivi(‘dell’elaboratore. Esempi sono: la tastiera, il mouse, la track ball, ‘) scrivi(‘il touchpad, lo scanner, il joystick, la webcam, la macchina ‘) scrivi(‘fotografica digitale, i microfoni, la penna ottica, il touchscreen.’) fine CASO 8: inizio scrivi(‘Le periferiche di output sono tutti quei dispositivi che consentono’) scrivi(‘la comunicazione all’esterno (emissione) dei dati elaborati, intermedi’) scrivi(‘o finali. Esempi sono: il video, la stampante, il plotter, le casse ‘) scrivi(‘acustiche, le cuffie e le auricolari, il touchscreen. ‘) fine CASO 9: inizio scrivi(‘Il software si suddivide in: software di base, software applicativo e’) scrivi(‘software di programmazione’) fine CASO 10: inizio scrivi(‘Il software di base è l’insieme di programmi in grado di far ’) scrivi(‘funzionare l’elaboratore, semplificando il lavoro dell’uomo e ‘) scrivi(‘ottimizzando l’uso delle risorse di sistema. I programmi sono: il’) scrivi(‘sistema operativo, gli editor e i compilatori.’) fine CASO 11: inizio scrivi(‘Il software applicativo è costituito dai programmi utilizzabili ’) scrivi(‘dall’utente finale del sistema per espletare un lavoro. Esempi sono:’) scrivi(‘MS Word, MS Excel, MS PowerPoint, MS Access,Adobe Illustrator,’) scrivi(‘Macromedia Director ecc ‘) fine CASO 12: inizio scrivi(‘Il software di programmazione permette lo sviluppo di programmi,’) scrivi(‘ mediante l’uso di codici specifici, per le esigenze più diverse. ‘) fine IN CASO CONTRARIO: scrivi(‘Non hai inserito un numero relativo al menù di scelta dell’argomento’) fine FINE COMMUTA fine PROBLEMA 34. Scrivere in linguaggio di progetto l’algoritmo che permette di risolvere il problema precedente, aggiungendo la condizione che l’utente può ripetere quante volte vuole la scelta di un argomento del menù. E’ sufficiente inserire un costrutto iterativo, ad esempio la struttura iterativa ESEGUI…MENTRE… Segue il seguente algoritmo: DATI: un numero intero corrispondente alla scelta effettuata dall’utente e la risposta (positiva o negativa) alla richiesta di voler effettuare un’altra scelta di un argomento del menù OBIETTIVO: visualizzare ad ogni richiesta una breve trattazione sull’argomento scelto VARIABILI: SceltaArgomento, Risposta programma SceltaDaMenù var SceltaArgomento: intero Risposta: stringa inizio ESEGUI inizio {visualizzazione per l’utente del menù di scelta dell’argomento} scrivi(‘1. Sistema di elaborazione ‘) scrivi(‘2. Componenti di un sistema di elaborazione‘) scrivi(‘3. Componenti hardware ‘) scrivi(‘4. CPU ‘) scrivi(‘5. Memoria centrale ‘) scrivi(‘6. Memorie di massa ‘) scrivi(‘7. Periferiche di input ‘) scrivi(‘8. Periferiche di output ‘) scrivi(‘9. Il software ‘) scrivi(’10. Software di base ‘) scrivi(’11. Software applicativo ‘) scrivi(’12. Software di programmazione ‘) {acquisizione del numero intero corrispondente alla scelta da effettuare} scrivi(‘Inserisci un intero tra 1 e 12 per scegliere un argomento del menù‘) leggi(SceltaArgomento) {valutazione della scelta e visualizzazione di una breve trattazione sull’argomento} COMMUTA (SceltaArgomento) inizio CASO 1: inizio scrivi(‘Un sistema di elaborazione è un insieme di elementi che costituiscono’) scrivi(‘un’unica entità per il perseguimento di elaborare dati e informazioni’) fine CASO 2: inizio scrivi(‘Un sistema di elaborazione ha due componenti. ‘) scrivi(‘L’hardware (hard =”solido”, ware =”componente”) che’) scrivi(‘è l’insieme delle componenti fisiche (meccaniche, elettriche, ‘) scrivi(‘elettroniche, magnetiche e ottiche) che costituiscono l’elaboratore e ‘) scrivi(‘il software (soft=”soffice”, ware=”componente”) che è la parte logica’) scrivi(‘di un elaboratore, costituita dai programmi residenti nella memoria ’) scrivi(‘del sistema o nei supporti di memorizzazione’) fine CASO 3: inizio scrivi(‘Le componenti hardware sono: CPU (Central Processing Unit, “unità’) scrivi(‘centrale di elaborazione”), Memoria centrale, Memorie di massa, ‘) scrivi(‘Periferiche di input, Periferiche di output.’) fine CASO 4: inizio scrivi(‘La CPU è il cervello dell’elaboratore in cui avvengono tutti i processi’) scrivi(‘di elaborazione.’) fine CASO 5: inizio scrivi(‘La memoria centrale è un dispositivo elettronico che conserva le ‘) scrivi(‘istruzioni per l’avvio del sistema e memorizza informazioni, istruzioni’) scrivi(‘e dati per l’elaborazione’) fine CASO 6: inizio scrivi(‘Le memorie di massa sono supporti magneto-ottici-elettronici che ‘) scrivi(‘permettono di memorizzare dati e programmi in modo permanente. ‘) scrivi(‘Esempi sono: i nastri, gli hard disk, i CD, i DVD, le USB flash drive ‘) scrivi(‘ ( o chiavette USB), le memory card.’) fine CASO 7: inizio scrivi(‘Le periferiche di input sono tutti quei dispositivi che consentono ‘) scrivi(‘l’immissione dei dati e delle istruzioni dall’esterno all’interno ‘) scrivi(‘dell’elaboratore. Esempi sono: la tastiera, il mouse, la track ball, ‘) scrivi(‘il touchpad, lo scanner, il joystick, la webcam, la macchina ‘) scrivi(‘fotografica digitale, i microfoni, la penna ottica, il touchscreen.’) fine CASO 8: inizio scrivi(‘Le periferiche di output sono tutti quei dispositivi che consentono’) scrivi(‘la comunicazione all’esterno (emissione) dei dati elaborati, intermedi’) scrivi(‘o finali. Esempi sono: il video, la stampante, il plotter, le casse ‘) scrivi(‘acustiche, le cuffie e le auricolari, il touchscreen. ‘) fine CASO 9: inizio scrivi(‘Il software si suddivide in: software di base, software applicativo e’) scrivi(‘software di programmazione’) fine CASO 10: inizio scrivi(‘Il software di base è l’insieme di programmi in grado di far ’) scrivi(‘funzionare l’elaboratore, semplificando il lavoro dell’uomo e ‘) scrivi(‘ottimizzando l’uso delle risorse di sistema. I programmi sono: il’) scrivi(‘sistema operativo, gli editor e i compilatori.’) fine CASO 11: inizio scrivi(‘Il software applicativo è costituito dai programmi utilizzabili ’) scrivi(‘dall’utente finale del sistema per espletare un lavoro. Esempi sono:’) scrivi(‘MS Word, MS Excel, MS PowerPoint, MS Access,Adobe Illustrator,’) scrivi(‘Macromedia Director ecc ‘) fine CASO 12: inizio scrivi(‘Il software di programmazione permette lo sviluppo di programmi,’) scrivi(‘ mediante l’uso di codici specifici, per le esigenze più diverse. ‘) fine IN CASO CONTRARIO: scrivi(‘Non hai inserito un numero relativo al menù di scelta dell’argomento’) fine FINE COMMUTA {richiesta di voler effettuare un’altra scelta} scrivi(‘Vuoi scegliere un altro argomento del menù? SI/NO’) leggi(Risposta) fine MENTRE (Risposta==’SI’) {quindi,mentre la risposta è SI,l’utente può scegliere} fine PROBLEMA 35. Come è stato fatto per il 34., estensione del 33., anche al problema 32., si può aggiungere la condizione che l’utente può far eseguire quante volte vuole le operazioni logiche tra due enunciati, nuovamente inseriti in input, insieme ai loro valori di verità. Si ha il seguente algoritmo, utilizzando sempre la struttura iterativa ESEGUI…MENTRE…: DATI: due enunciati p e q, i loro valori di verità vero o falso e la risposta (positiva o negativa) alla richiesta di voler far effettuare le operazioni logiche con altri due enunciati OBIETTIVO: calcolare e comunicare i valori di verità degli enunciati composti p and q, p or q, not p, not q, ad ogni richiesta dell’utente di far eseguire le operazioni logiche tra due enunciati VARIABILI: EnunciatoP, EnunciatoQ, ValVeritàP, ValVeritàQ, valveritàp, valveritàq, valveritàpANDq, valveritàpORq, valveritàNOTp, valveritàNOTq, Risposta programma valori_di_George_Boole_bis var EnunciatoP, EnunciatoQ, Risposta: stringa ValVeritàP, ValVeritàQ: carattere valveritàp, valveritàq, valveritàpANDq, valveritàpORq, valveritàNOTp: booleano valveritàNOTq: booleano inizio ESEGUI inizio {acquisizione dei due enunciati e dei rispettivi valori di verità} scrivi(‘Inserisci l’enunciato p ‘) leggi(EnunciatoP) scrivi(‘Introduci il valore di verità (vero o falso) di p: V/F ‘) leggi(ValVeritàP) scrivi(‘Inserisci l’enunciato q ‘) leggi(EnunciatoQ) scrivi(‘Introduci il valore di verità (vero o falso) di q: V/F ‘) leggi(ValVeritàQ) {assegnazione del valore di verità alle variabili booleane valveritàp e valveritàq} SE (ValVeritàP==’V’) ALLORA valveritàp=vero ALTRIMENTI valveritàp=falso FINE SE SE (ValVeritàQ==’V’) ALLORA valveritàq=vero ALTRIMENTI valveritàq=falso FINE SE {assegnazione del valore di verità alle variabili booleane valveritàpANDq e valveritàpORq} valveritàpANDq = valveritàp and valveritàq valveritàpORq = valveritàp or valveritàq {assegnazione del valore di verità alle variabili booleane valveritàNOTp e valveritàNOTq} valveritàNOTp = not valveritàp valveritàNOTq = not valveritàq {comunicazione dei valori di verità degli enunciati: “p and q”, “p or q”, “not p”, “not q”} scrivi(‘Il valore di verità dell’enunciato composto “p and q” è ‘+valveritàpANDq) scrivi(‘Il valore di verità dell’enunciato composto “p or q” è ‘+valveritàpORq) scrivi(‘Il valore di verità dell’enunciato composto “not p” è ‘+valveritàNOTp) scrivi(‘Il valore di verità dell’enunciato composto “not q” è ‘+valveritàNOTq) {richiesta di voler far eseguire le operazioni logiche con altri due enunciati} scrivi(‘Vuoi far eseguire le operazioni logiche con altri due enunciati? SI/NO’) leggi(Risposta) fine MENTRE (Risposta==’SI’) {mentre la risposta è SI,le operazioni vengono rieseguite} fine PROBLEMA 36. Scrivere in linguaggio di progetto l’algoritmo che permette di risolvere il seguente problema: Un grande capannone, di modello una piramide regolare, avente per base un quadrato, ospita 500 senza tetto. Determinare l’altezza di tale capannone. Si ricordi che, denotando con: S – la lunghezza sul terreno dell’ombra del capannone, ottenuta quando il raggio solare passa per il vertice della piramide; s – la lunghezza dell’ombra di un bastone piantato verticalmente nel terreno, in modo che: il raggio solare che passa per la cima di esso, l’ombra proiettata sul terreno e il bastone stesso formino un triangolo rettangolo; P – l’altezza del bastone; l – il lato di base del capannone; si ha: h = altezza capannone = (P / s) * (S + (l / 2)) - METODO di TALETE DATI: S, s, P, l OBIETTIVO: determinare e comunicare l’altezza del capannone VARIABILI: LungOmbraCapan, LungOmbraBastone, AltezzaBastone, LatoBase, AltezzaCapan programma Capannone var LungOmbraCapan, LungOmbraBastone, AltezzaBastone, LatoBase: reale AltezzaCapan: reale inizio {acquisizione dei dati di input} scrivi(‘Inserisci la lunghezza in metri dell’ombra del capannone’) leggi(LungOmbraCapan) scrivi(‘Inserisci la lunghezza in metri dell’ombra del bastone’) leggi(LungOmbraBastone) scrivi(‘Inserisci la misura in metri dell’altezza del bastone’) leggi(AltezzaBastone) scrivi(‘Inserisci la misura in metri del lato di base del capannone’) leggi(LatoBase) {calcolo e comunicazione dell’altezza del capannone} AltezzaCapan=(AltezzaBastone / LungOmbraBastone)*(LungOmbraCapan+(LatoBase/2)) scrivi(‘L’altezza del capannone è di ‘+AltezzaCapan+’ metri’) fine PROBLEMA 37. Scrivere in linguaggio di progetto l’algoritmo che risolve il seguente problema: Si consideri un doppio piano inclinato, rappresentato graficamente da un triangolo ABC, di base BC (orizzontale) e di inclinazioni AB e AC. L’inclinazione AC misura l1 e l’inclinazione AB misura l2. Un filo, portante tante sferette metalliche, di densità uniforme, viene posto sulle due inclinazioni. La catena parte quindi da B, passa per A e giunge a C. Si indichino inoltre con P1 e P2 i pesi rispettivi dei tratti AC e AB di catena. Dati in input i valori di l1, l2 e P2, stabilire quale valore deve avere P1 in modo tale che la parte AC di catena possa fare equilibrio alla parte AB. Si ha: P1 = peso tratto AC di catena = P2 * (l1 / l2) - METODO di STEVINO DATI: l1, l2, P2 OBIETTIVO: determinare il peso P1 del tratto AC in modo tale che la catena stia in equilibrio sul doppio piano inclinato VARIABILI: l1, l2, P1, P2 programma CatenaDiStevino var l1, l2, P1, P2: reale inizio {acquisizione dei dati di input} scrivi(‘Inserisci la misura in metri del lato AC del doppio piano inclinato’) leggi(l1) scrivi(‘Inserisci la misura in metri del lato AB del doppio piano inclinato’) leggi(l2) scrivi(‘Inserisci il peso in grammi del tratto AB di catena’) leggi(P2) {calcolo del peso P1} P1 = P2 * (l1 / l2) {comunicazione del valore di P1} scrivi(‘Il peso del tratto AC di catena, tale che la catena stia in equilibrio sul doppio piano inclinato è di ‘+P1+’ grammi’) fine PROBLEMA 38. Realizzare l’algoritmo in linguaggio di progetto che permette di risolvere il seguente problema: Su una ruota agiscono due forze F1 = 156.8 N e F2 in N, che tendono a farla ruotare l’una in un verso e l’altra nel verso contrario. Il braccio della forza F1 è di 22 cm e quello della forza F2 misura 110 cm. Dato in input il valore di F2, stabilire se con tale forza la ruota è tenuta in equilibrio. DATI: il valore in Newton della forza F2 OBIETTIVO: stabilire se, con tale forza, la ruota è tenuta in equilibrio VARIABILI: F2, momenti (il momento di una forza è il prodotto della forza per il braccio) COSTANTI: F1=156.8, b1=22, b2=110 programma RuotaInEquilibrio var F2, momenti: reale F1=156.8; b1=22; b2=110 inizio {acquisizione dei dati di input} scrivi(‘Inserisci il valore della forza F2’) leggi(F2) {valutazione della forza F2 e relative comunicazioni} momenti=F2 * b2 – F1 * b1 SE (momenti>0) ALLORA inizio scrivi(‘La ruota non è in equilibrio, il valore della forza F2 deve essere inferiore’) scrivi(‘Inserisci nuovamente il valore della forza F2’) leggi(F2) momenti=F2 * b2 – F1 * b1 SE (momenti<>0) ALLORA inizio F2=(F1*b1)/b2 scrivi(‘La ruota non è ancora in equilibrio. Il valore esatto di F2 è ‘+F2+’ N’) fine ALTRIMENTI scrivi(‘ Il valore della forza F2 ora è esatto, la ruota è in equilibrio’) FINE SE fine ALTRIMENTI SE (momenti<0) ALLORA inizio scrivi(‘La ruota non è in equilibrio, il valore di F2 deve essere maggiore’) scrivi(‘Inserisci nuovamente il valore della forza F2’) leggi(F2) momenti=F2 * b2 – F1 * b1 SE (momenti<>0) ALLORA inizio F2=(F1*b1)/b2 scrivi(‘La ruota non è ancora in equilibrio. Il valore esatto di F2 è ‘+F2+’ N’) fine ALTRIMENTI scrivi(‘Il valore della forza F2 ora è esatto, la ruota è in equilibrio’) FINE SE fine ALTRIMENTI scrivi(‘Bene! Il valore della forza F2 è esatto, la ruota è in equilibrio’) FINE SE FINE SE fine PROBLEMA 39. Realizzare un algoritmo in linguaggio di progetto che permette di determinare una coppia di classi contigue di numeri razionali che individui, con una approssimazione di sette cifre decimali, la radice quadrata di un numero reale assoluto r. Risoluzione: Le classi contigue saranno date mediante una successione di intervalli “inscatolati”, contenuti uno dentro l’altro. La ricerca del primo intervallo sarà realizzata con il costrutto iterativo ESEGUI…MENTRE… che utilizza la variabile di controllo A, inizializzata a zero e che si incrementa del valore h=1 mentre A²<r. Se A² ≥ r, l’intervallo [a, b] viene così definito: se A² = r, a=A e b=A+h; se A² > r, a=A-h e b=A. La ricerca degli intervalli successivi si ottiene nello stesso modo con h = h/10, mediante il costrutto iterativo MENTRE…, la cui condizione h > 0.0000001 viene controllata prima di ogni iterazione. Gli intervalli sono numerati dalla variabile conteggio. DATI: un numero reale assoluto r OBIETTIVO: determinare e visualizzare una successione di intervalli “inscatolati”. L’ultimo contiene la radice quadrata del numero reale r, con una approssimazione di sette cifre decimali. VARIABILI: conteggio, r, A, A1, a, b, h programma classi_contigue var conteggio: intero r, A, A1, a, b, h: reale inizio {acquisizione dei dati di input} scrivi(‘Inserisci il numero reale assoluto r ‘) leggi(r) {inizializzazione delle variabili conteggio, a, h} conteggio=1 a=0 h=1 {realizzazione e visualizzazione degli intervalli inscatolati} MENTRE (h>0.0000001) inizio A=a ESEGUI inizio A=A+h fine MENTRE (A² < r) {fine costrutto iterativo esegui…mentre…} A1=A² SE ( | A1 – r | < 0.0000001) ALLORA inizio a=A b=A+h fine ALTRIMENTI inizio a=A-h b=A fine FINE SE scrivi(‘Intervallo ‘+conteggio+’ [ ‘+a+’ , ‘+b+ ‘ ] ‘) conteggio=conteggio+1 h=h/10 fine costrutto iterativo MENTRE fine Ad esempio, per r=7, l’algoritmo fornisce il seguente output: Intervallo 1 [2.0000000, 3.0000000] Intervallo 2 [2.6000000, 2.7000000] Intervallo 3 [2.6400000, 2.6500000] Intervallo 4 [2.6450000, 2.6460000] Intervallo 5 [2.6457000, 2.6458000] Intervallo 6 [2.6457500, 2.6457600] Intervallo 7 [2.6457510, 2.6457520] Intervallo 8 [2.6457513, 2.6457514]. Si ricordi che la radice quadrata di 7 è uguale a: 2.645751311064590590501615753639… Nella stesura del precedente algoritmo, sono state utilizzate tre tipologie di strutture di controllo: una struttura di sequenza e di selezione e due strutture iterative. Per quanto riguarda l’uso delle strutture di controllo per la costruzione degli algoritmi, il riferimento classico è il Teorema di BÖHM-JACOPINI (1966) che può essere così formulato: Un qualsiasi algoritmo può essere espresso usando esclusivamente le strutture di sequenza, di selezione e di iterazione. PROBLEMA 40. Realizzare in linguaggio di progetto l’algoritmo che permette di determinare la lunghezza della circonferenza, come elemento di separazione delle classi contigue delle sue lunghezze per difetto e per eccesso. Per la risoluzione si applica il metodo di Archimede, infatti si parte dal quadrato inscritto e da quello circoscritto e si raddoppia via via il numero dei lati sino a pervenire a poligoni di 8192 lati. Non si procede oltre gli 8192 lati in quanto se il numero dei lati supera 10000, a causa degli errori di arrotondamento, i valori ricavati risulterebbero errati. DATI: il raggio della circonferenza OBIETTIVO: calcolare e comunicare la lunghezza della circonferenza come elemento di separazione delle classi contigue delle sue lunghezze per difetto e per eccesso. Calcolare e comunicare inoltre la lunghezza della circonferenza con la formula C=2 π r per confrontare i risultati ottenuti. VARIABILI: raggio, latoPolinscritto, latoPolCircoscritto, apotemaPolinscritto, perimetroPolinscritto, perimetroPolCircoscritto, lunghezzaCirconf, numeroLatiPoligono programma circonferenza var numeroLatiPoligono: intero raggio, latoPolinscritto, latoPolCircoscritto, apotemaPolinscritto: reale perimetroPolinscritto, perimetroPolCircoscritto, lunghezzaCirconf: reale inizio {acquisizione dei dati di input} scrivi(‘Digitare il raggio della circonferenza ‘) leggi(raggio) {inizializzazione a quattro del numero dei lati del primo poligono (quadrato)} numeroLatiPoligono=4 {calcolo della misura del lato del quadrato inscritto} latoPolinscritto=raggio*(radicequadrata(2)) {calcolo e comunicazione della lunghezza della circonferenza come elemento} {separatore delle classi contigue delle lunghezze per difetto e per eccesso} ESEGUI inizio {calcolo apotema poligono inscritto} apotemaPolinscritto=radicequadrata(4*(raggio)²-(latoPolinscritto)²) / 2 {calcolo del lato del poligono circoscritto} latoPolCircoscritto=raggio*(latoPolinscritto/apotemaPolinscritto) {calcolo del perimetro del poligono inscritto} perimetroPolinscritto=latoPolinscritto*numeroLatiPoligono {calcolo del perimetro del poligono circoscritto} perimetroPolCircoscritto=latoPolCircoscritto*numeroLatiPoligono {visualizzazione del numero dei lati e del perimetro del poligono inscritto e circoscritto} scrivi(‘Num.lati‘+numeroLatiPoligono+’Per.pol.inscr.’+perimetroPolinscritto+’Per.pol.circo.’ +perimetroPolCircoscritto) {calcolo del lato del poligono inscritto ottenuto raddoppiando il numero dei lati} latoPolinscritto=radicequadrata(2*(raggio)²-(raggio*radicequadrata((4*(raggio)²)+ -(latoPolinscritto)²))) {calcolo del numero dei lati del poligono successivo} numeroLatiPoligono=2*numeroLatiPoligono fine MENTRE (numeroLatiPoligono<=10000) {fine costrutto iterativo esegui…mentre…} {calcolo della misura della lunghezza della circonferenza con la formula C=2 π r} {per confrontare i risultati ottenuti} lunghezzaCirconf=2*(3.1415927)*raggio {visualizzazione della misura della lunghezza della circonferenza} scrivi(‘Misura della circonferenza con la formula C=2 π r: ‘+lunghezzaCirconf) scrivi(‘Come si vede i risultati ottenuti coincidono.’) fine Ad esempio, per raggio=0.5, l’algoritmo fornisce il seguente output: Num.lati 4 Per.pol.inscr. 2.828427 Per.pol.circo. 4.000000 Num.lati 8 Per.pol.inscr. 3.061467 Per.pol.circo. 3.313708 Num.lati 16 Per.pol.inscr. 3.121445 Per.pol.circo. 3.182598 Num.lati 32 Per.pol.inscr. 3.136548 Per.pol.circo. 3.151725 Num.lati 64 Per.pol.inscr. 3.140331 Per.pol.circo. 3.144118 Num.lati 128 Per.pol.inscr. 3.141277 Per.pol.circo. 3.142224 Num.lati 256 Per.pol.inscr. 3.141514 Per.pol.circo. 3.141750 Num.lati 512 Per.pol.inscr. 3.141573 Per.pol.circo. 3.141632 Num.lati 1024 Per.pol.inscr. 3.141588 Per.pol.circo. 3.141602 Num.lati 2048 Per.pol.inscr. 3.141591 Per.pol.circo. 3.141595 Num.lati 4096 Per.pol.inscr. 3.141592 Per.pol.circo. 3.141593 Num.lati 8192 Per.pol.inscr. 3.141592 Per.pol.circo. 3.141592 Misura della circonferenza con la formula C=2 π r: 3.1415927 Come si vede i risultati ottenuti coincidono.