• Non ci sono risultati.

Università degli Studi di Udine

N/A
N/A
Protected

Academic year: 2021

Condividi "Università degli Studi di Udine"

Copied!
13
0
0

Testo completo

(1)

FONDAMENTI DI INFORMATICA

Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI

Facoltà di Ingegneria

Università degli Studi di Udine

Linguaggio C

Scegliere un algoritmo

(2)

Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei trattati internazionali. Il titolo ed i copyright relativi alle slides (ivi inclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio, musica e testo) sono di proprietà degli autori prof. Pier Luca Montessoro e ing. Davide Pierattoni, Università degli Studi di Udine.

Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero dell’Università e Ricerca Scientifica e Tecnologica, per scopi istituzionali, non a fine di lucro. In tal caso non è richiesta alcuna autorizzazione.

Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su supporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non esplicitamente autorizzata per iscritto, a priori, da parte degli autori.

L’informazione contenuta in queste slide è ritenuta essere accurata alla data della pubblicazione. Essa è fornita per scopi meramente didattici e non per essere utilizzata in progetti di impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza preavviso. Gli autori non assumono alcuna responsabilità per il contenuto di queste slide (ivi incluse, ma non limitatamente, la correttezza, completezza, applicabilità, aggiornamento dell’informazione).

In ogni caso non può essere dichiarata conformità all’informazione contenuta in queste slide.

In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono

Nota di Copyright

(3)

Scegliere un algoritmo

• Gli algoritmi classici sono descritti in letteratura e vanno scelti in base alla

complessità del problema, al tipo di dati, ecc.

• Ogni problema ha poi bisogno di elaborazioni specifiche dei dati in ingresso e in uscita

• Due grandi famiglie di problemi:

– mantengo tutti i dati in memoria e li elaboro

– elaboro e/o trasformo i dati man mano che li leggo

(4)

Mantengo tutti i dati in memoria e li elaboro

definisco una struttura dati adeguata (es. vettore di struct)

while (ci sono ancora dati)

leggo i dati e li memorizzo elaboro i dati

genero il risultato (es. scrivo in un file)

(5)

Mantengo tutti i dati in memoria e li elaboro

• NOTE:

– devo sapere la dimensione MASSIMA dei dati da memorizzare

– la lettura dei dati tipicamente richiede una funzione che interpreta il formato di

ingresso

– l’elaborazione dei dati richiede una o più

funzioni che NON ESEGUONO input né

output

(6)

Elaboro e/o trasformo i dati man mano che li leggo

definisco una struttura dati adeguata per rappresentare un singolo dato

(es. una stuct, una stringa, un numero) while (ci sono ancora dati)

{

leggo il dato e lo memorizzo in una variabile elaboro il dato

genero il risultato

(es. scrivo il dato trasformato in un file)

}

(7)

Elaboro e/o trasformo i dati man mano che li leggo

• NOTE:

– utile quando NON CONOSCO LA DIMENSIONE MASSIMA dei dati in ingresso

– la lettura del singolo dato tipicamente richiede una funzione che interpreta il formato di ingresso

– l’elaborazione dei dati richiede una o più

funzioni che NON ESEGUONO input né

(8)

Lettura del dato

• Caso 1: devo elaborare un testo

→ lettura carattere per carattere (es. fgetc)

• Caso 2: devo leggere dei dati testuali e numerici in formato fisso (es. numero predefinito di parole in ogni riga)

→ lettura formattata (fscanf con opportuni codici di formato)

• Caso 3: i dati sono organizzati per righe, di formato variabile

→ lettura riga per riga (fgets) e poi interpretazione

(9)

Caso 1: esempio

...

while ((ch = fgetc (fp)) != EOF) {

if (ch == '/')

trovato_slash = 1;

else if ((ch == '*') && trovato_slash) {

in_commento = 1;

trovato_slash = 0;

}

else

trovato_slash = 0;

(10)

Caso 2: esempio

...

while (fscanf (fpin, "%s %d %d",

s, &n1, &n2) != EOF) {

totale += elabora (s, n1, n2, s_mod);

fprintf (fpout, "%s %d", s_mod, n1);

}

return totale;

(11)

Caso 3: esempio

...

while (fgets (s, NMAX, fp) != NULL) {

dato_corrente = estrai_dato (s);

if (cerca_nome (dato_corrente.codice, codice_cercato))

{

fprintf (fpout, "%s %d",

dato_corrente.codice, dato_corrente.prezzo);

}

(12)

Ricerche

• Ricordarsi sempre che gli algoritmi di ricerca sono asimmetrici:

...

while (ci sono ancora dati) {

if (dato corrente == dato cercato) return informazioni cercate

procedi al prossimo dato

}

(13)

Avanzare in una stringa

• Ricordarsi sempre

che ad un certo punto la stringa finisce...

• Se siamo sicuri che il formato sia corretto:

while (s[i] != '\0') {

...

while (s[i] == ' ') {

...

i++;

}

while (s[i] != ',') {

...

i++;

}

while (s[i] != '\0') {

...

Riferimenti

Documenti correlati

In ogni caso non può essere dichiarata conformità all’informazione contenuta in queste slide.. In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide

In ogni caso non può essere dichiarata conformità all’informazione contenuta in queste slide.. In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide

3. la Sartrade s.r.l. in liquidazione non si costituiva in giudizio. con il primo motivo di ricorso l'Agenzia delle entrate deduce la violazione e falsa applicazione dell'art.

Le rotte congiungono aeroporti situati nella zona temperata dell'emisfero nord e per la valutazione dell'autonomia massima chilometrica le caratteristiche fisiche della

ipotesi, puoi richiedere ed ottenere il cosiddetto domicilio sanitario, ossia l’iscrizione temporanea, per un periodo di tempo non inferiore a tre mesi e non superiore ad un

RICHIESTA MARCHI AURICOLARI PER L’IDENTIFICAZIONE DI OVINI E CAPRINI (Regolamento CE n5. Approvato ed emesso

− una variabile d’istanza di un oggetto viene allocata (nello heap) quando l’oggetto viene creato heap. − una variabile d’istanza viene deallocata quando l’oggetto

[r]