tecniche di programmazione descrivere in maniera non ambigua cosa deve fare il programma poco...
Post on 01-May-2015
218 Views
Preview:
TRANSCRIPT
TECNICHE DI PROGRAMMAZIONE
Descrivere in maniera non ambigua cosa deve fare il programma
POCO PRECISOEs. Scrivere un programma per calcolare l’area di tre figure geometriche (quadrato, triangolo, cerchio) e fare quindi la
somma delle aree.
PIU’ PRECISOEs. Scrivere un programma per caricare e mostrare il lato del
quadrato, la base e l’altezza del triangolo, il raggio del cerchio, calcolare l’area del quadrato,del triangolo e del cerchio,
mostrare i valori delle aree, fare la loro somma e mostrarle.
1
TECNICHE DI PROGRAMMAZIONE
2Accertarsi che il problema sia risolvibile.
Test della frase
Indicare se la seguente frase è VERA o FALSA"in queta frase ci sono tre erori"
VERAFALSA
ALTRO
INDECIDIBILE
TECNICHE DI PROGRAMMAZIONE
3
Se il problema è risolvibile allora è sempre possibile scrivere un algoritmo per trovare la soluzione.
TECNICHE DI PROGRAMMAZIONE
4Metodo successive approssimazioni.
1- Descrivere mediante frasi o diagrammi di flusso il problema.
SOMMA AREA QUADRATO,TRINGOLO E CERCHIO E MOSTRA
LEGGI I DATI
CALCOLO AREA QUADRATO,TRINGOLO E CERCHIO E MOSTRALI
Metodo successive approssimazioni.
2- Raffinare la descrizione usando un linguaggio più simile al linguaggio di programmazione.
Leggi i valori per: LatoQuadrato, BaseTriangolo, AltezzaTriangolo, RaggioCerchioAreaQuadrato LatoQuadrato x LatoQuadratoAreaTriangolo (BaseTriangolo x AltezzaTriangolo)/2AreaCerchio PiGreco x (Raggio)2
mostra AreaQuadrato, AreaTriangolo, AreaCerchio SommaAree AreaQuadrato + AreaTriangolo + AreaCerchio mostra SommaAree
Metodo successive approssimazioni.
2- Scrivere il programma.PROGRAM Area(input,output);{calcolo aree quadrato, trinagolo, cerchio e sommale}
CONSTPiGreco=3,14;
VARLatoQuadrato, BaseTriangolo, AltezzaTriangolo, RaggioCerchio : integer;AreaQuadrato, AreaTriangolo, AreaCerchio, SommaAree : real;
BEGIN AreaQuadrato:= LaqoQuadrato* LaqoQuadrato; AreaTriangolo:= BaseTriangolo* AltezzaTriangolo/2; AreaCerchio:= PiGreco*sqr(RaggioCerchio); writeln(‘Area Quadrato’, AreaQuadrato :5:2); writeln(‘Area Triangolo’, AreaTriangolo :5:2); writeln(‘Area Cerchio’, AreaCerchio :5:2); writeln(‘Somma Aree ‘, SommaAree :6:2);END.
TECNICHE DI TEST
TRACE - Si usano dati noti che producono risultati noti. Limite: vale solo per i dati di test.
ASSERTION - Seguire passo passo l’algoritmo e verificare che ogni passo sia logicamente coerente con i precedenti.
Limite: per algoritmi molto complessi è difficile da fare.
ON-LINE - Inserisci scritte di controllo per verificare la correttezza dell’elaborazione.
Limite: vale solo per i dati usati nei test.
MANUTENZIONE - Si usano le scritte di controllo e commento.
1 - DEFINISCI IL PROBLEMA
E’ RISOLVIBILE?
si
2 - PIANIFICA E RAFFINA UNA SEQUENZA DI AZIONI
si
3 - SCRIVI E COMPILA IL CODICE SORGENTE
noRIVEDI IL PUNTO 2SEMBRA CHE IL PROBLEMA SIA RISOLVIBILE ?
no
4 - LANCIA IL PROGRAMMA
CI SONO ERRORI DI SINTASSI ? RIVEDI IL PUNTO 3si
si
5 - USA IL PROGRAMMA
I RISULTATI SONO CORRETTI ? RIVEDI IL PUNTO 4no
noLASCIA PERDERE O
RIDEFINISCI IL PROBLEMA
SONO RICHIESTE ALTRE MODIFICHE ?si
RIPARTI DAL PUNTO 1
USO DI PSEUDO-CODICE
Uno pseudo-codice è una scrittura informale di un programma o di una sua parte a cui corrispondono eventuali istruzioni in un linguaggio tipo Pascal (codice sorgente o source code).
Esempio 1 - Introduci tre caratteri e stampali in ordine inverso a quello di inserimento.
Pseudo codice.
INPUT: leggi i valori del carattere1, carattere2 e carattere3 e mostrali sul monitor.
OUTPUT: mostra sul monitor il carattere3, il carattere2, il carattere1
Source code.
PROGRAM InvertiCaratteri(input,output);
Introduci tre caratteri e stampali in ordine inverso a quello di inserimento.
VAR Carattere1, Primo carattere. Carattere2, Secondo carattere. Carattere3: Terzo carattere.
char;BEGIN write(‘Introduci tre caratteri e poi premi Invio : ’; readln(Carattere1, Carattere2, Carattere3); writeln(‘I caratteri in ordine inverso sono: ‘, Carattere3, Carattere2,
Carattere3)END.
Generalizzando potremmo definire un algoritmo per la lettura dei dati, la loro elaborazione e la presentazione dei risultati.
Algoritmo per leggere, elaborare e mostrare.leggi i valori dei datielabora i datimostra a video i risultatiFine dell’algoritmo.
VAR Real1, Real2: real; Int1, Int2 : integer;Carattere: char;
ESEMPI LETTURA DATI
readln(Int1, Int2, Real1, Real2, Carattere)
readln(Carattere, Int1, Int2, Real1, Real2)
LE STRINGHE
Una variabile di tipo stringa rappresenta un gruppo di caratteri messi insieme con un qualche criterio.
Per definire le stringhe si usa la parola riservataSTRING.
STRING [ ]costante intera
VAR Stringa1, Stringa2: STRING[10];
TYPE Stringa10 = STRING[10];VAR Stringa1, Stringa2: Stringa10;
E’ possibile definire un tipo per introdurre un indicatore di riferimento invece di usare tipi anonimi, legati cioè a singole variabili.
TYPE = ;tipoidentificatore
EsempioProgramma per dare il benvenuto agli studenti del corso.
Pseudo-codice
Mostra la frase di benvenuto generaleChiedi il nome dello studenteMostra la frase di benvenuto usando il nome dello studente
PROGRAM BenvenutoAlCorso(input,output);Questo programma dà il benvenuto ad ogni studente del corso di Programmazione CONST NomeDocente = ‘Ernesto Burattini’; MaxLungStringa = 50; massimo numero di caratteri permessi TYPE NomeTipo = STRING[MaxLungStringa]; VAR NomeStud = NomeTipo; BEGIN writeln(‘Buongiorno’, il mio nome e’’, NomeDocente, ‘, ’); writeln(‘Potrei sapere il nome dello studente seduto in prima fila a destra?’); readln(NomeStud); writeln(‘Benvenuto al Corso di Programmazione ‘, NomeStud) END.
Benven
ALCUNE FUNZIONI STANDARD
Ogni funzione è richiamata facendo riferimento al suo identificatore.
Ogni funzione deve avere un argomento.
( )espressioneidentificatore
funzione
Ipotenusa:=sqrt(sqr(Lato1)+sqr(Lato2))
Nome Funzione TipoArgomento
TipoRisultato
Esempio
abs Valoreassolutodell’argomento
Numerico Comel’argomento
ValAss=abs(-3) 3
sqr Quadratodell’argomento
Numerico Comel’argomento
Quadr=sqr(5) 25
sqrt Radicequadratadell’argomento
Numerico Reale RadQuad=sqrt(16) ) 4
Nome Funzione TipoArgomento
TipoRisultato
Esempio
pred Predecessoredell’argomento
Carattere Carattere PredCar=pred(‘c’) b
succ Successore Carattere Carattere SuccCar=pred(‘c’) d
chr Carattere ilcui valorenumerico èl’argomento
Intero Carattere Carattere=chr(65) ) A
ord Valorenumerico ilcui carattere èl’argomento
Carattere Intero ValNum=ord(‘A’) ) 65
dell’argomento
CODIFICA CARATTERI
ASCIIAmerican Standard CodedInformation Interchange
EBCDICExtended Binary Coded Decimal
Interchange Code
Se vogliamo sapere in binario come è codificato un certo carattereè sufficiente applicare la funzione ord al carattere e quindi fare ilbinario del numero decimale così ottenuto.
ord(‘A’)=65 -------- Binario(65)=01000001
Si noti che se chr(65)=‘A’ allora chr(ord(‘A’))=‘A’
65 41 A66 42 B67 43 C68 44 D69 45 E70 46 F71 47 G72 48 H73 49 I74 4A J75 4B K76 4C L77 4D M78 4E N79 4F O80 50 P81 51 Q82 52 R83 53 S84 54 T85 55 U86 56 V87 57 W88 58 X89 59 Y90 5A Z
97 61 a98 62 b99 63 c100 64 d101 65 e102 66 f103 67 g104 68 h105 69 i106 6A j107 6B k108 6C l109 6D m110 6E n111 6F o112 70 p113 71 q114 72 r115 73 s116 74 t117 75 u118 76 v119 77 w120 78 x121 79 y122 7A z
Dec Esad Simb Dec Esad Simb
Poiché nel codice ASCII la differenza tra i codici delle maiuscole e minuscole è costante, cioè:
[ord(‘a’)-ord(‘A’)]= [ord(‘b’)-ord(‘B’)]=….= [ord(‘z’)-ord(‘Z’)]
Allora è possibile scambiare la minuscole con le maiuscole con laseguente istruzione:
Letter := chr(ord(Letter)+ord(‘A’)-ord(‘a));
Dato un testo, controllare che dopo (. Þ) o dopo (. ¶) il testo successivo inizi con la maiuscola. Se non accade sostituire la minuscola con la corrispondente maiuscola.
spazio a capo
Esercizio
PROGRAMMAZIONE TOP-DOWN
- Dividere il problema in sotto problemi (quando possibile)
- Rappresentare graficamente la struttura del problema
- Assegnare ad ogni identificatore un nome legato al suo significato. Il nome relativo (di una costante o variabile) non deve cambiare nel corso del programma, non si deve cioè chiamare con due nomi diversi lo stesso oggetto. Il valore delle variabili però, pur se il significato resta lo stesso può cambiare nel corso del programma.
Dato il rapporto di cambio tra l’Euro e le monete europee, supponiamo di dover fare un viaggio attraverso Italia, Francia e Germania. Abbiamo disponibili 1000 Euro e spendiamo :Lit 650.000 in ItaliaFF 870 in FranciaDM 280 in GermaniaCi chiediamo quanti Euro restano a fine viaggio.
Definizione del problema
Esempio
PSEUDO CODICE INIZIALE
•Calcolare la spesa in Euro in Italia•Calcolare la spesa in Euro in Francia•Calcolare la spesa in Euro in Germania•Sommare tutte le spese in Euro•Calcolare la differenza tra la spesa in Euro e la cifra iniziale
RAPPRESENTAZIONE GRAFICA
Introduci valori delcambio Trasforma
le spese inEuro
LitEuroFFEuro DDEuro
Calcola la spesa totale in Euro
Calcola ladifferenza
Mostra ilrisultato
Introduci le spesein
Lit, FF, DD ela cifra iniziale
in Euro
SpeseLitSpeseFFSpeseDDCifraEuro
SpeseLitSpeseFFSpeseDD
LitEuroFFEuro DDEuro
SpeseLitEuroSpeseFFEuroSpeseDDEuro
SpeseLitEuroSpeseFFEuroSpeseDDEuro
SpeseTotEuro
CifraEuroSpeseTotEuro
RestoViaggio
Scrivere il programma in PASCAL
Lit FF DD1936,27 1,955830258 6,559580191
I rapporti di cambio tra euro e Lit, FF e DD sono
Euro
top related