Politecnico di Milano Esercizi Stringhe Ricerca binaria.

Slides:



Advertisements
Presentazioni simili
INFORMATICA Altre Istruzioni di I/O
Advertisements

LINGUAGGIO DI PROGRAMMAZIONE C
INFORMATICA Algoritmi fondamentali
Corso di Laurea Triennale in Ingegneria Gestionale Corso di Fondamenti di informatica A. A A.Pinto Algoritmi di ricerca 1.
Process synchronization
Uso avanzato di C.
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
Introduzione al linguaggio C
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Stringhe di caratteri In linguaggio C.
PROGRAMMARE IN PASCAL (le basi)
Informatica Generale Marzia Buscemi
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 2 Copyright © The McGraw.
Anno accademico Array e puntatori in C.
INFORMATICA Strutture iterative
Caratteri e stringhe di caratteri
PROGRAMMI DI RICERCA E ORDINAMENTO
Tail recursion: esempio
Algoritmi Politecnico di Milano C Primi programmi Politecnico di Milano.
Algebra di Boole ed elementi di logica
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 20 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 2 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
Algebra di Boole ed elementi di logica
Process synchronization
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Tipi di dati strutturati Marco D. Santambrogio – Ver. aggiornata al 4 Marzo 2013.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Esercitazione 2 (3 dicembre 2008)
Esercizio 4 Data una stringa P di lunghezza m e definita sullalfabeto, scrivere un programma PERL per calcolare la seguente funzione: PREFIX_FUNCTION:
Funzioni di Libreria per le stringhe DICHIARAZIONI CONTENUTE NEL FILE: char *strcpy( char *dest, const char *sorg ); Copia sorg in dest, incluso il carattere.
Corso di Informatica A.A Corso di Informatica Laurea Triennale - Comunicazione&Dams Dott.ssa Adriana Pietramala Dott.ssa.
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
Struct, enum, Puntatori e Array dinamici
Strutture di controllo nel C
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Strutture di controllo in C -- Flow Chart --
Esercizi C sui tipi definiti dall’utente
Esercizi di riepilogo sul linguaggio C: file, puntatori, liste
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
File di testo, file binari
Esercizi C su array e matrici
Dichiarazioni e tipi predefiniti nel linguaggio C
Le liste dinamiche La ricorsione
I File.
Le funzioni.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 3 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
void binario(int n); …………………
Unità Didattica 3 Linguaggio C
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
14 marzo 2002 Avvisi:.
Esercizi su File e Liste
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Gestione dei file di testo, matrici e struct
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Esercitazione 1 Marco D. Santambrogio – Ver. aggiornata al 9 Aprile 2014.
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni – BCOR Ingegneria Elettronica – BELR Introduzione al C Esercitazione 5 D. Bloisi, A.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
ALGORITMI Un algoritmo è un insieme di istruzioni: -ordinate -non ambigue -effettivamente computabili.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 20 Ottobre 2014.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 7: 16 Giugno 2014 Marco D. Santambrogio – Gianluca Durelli –
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Esercizi sui dati strutturati 13 Tipi di dati strutturati.
Transcript della presentazione:

Politecnico di Milano Esercizi Stringhe Ricerca binaria

- 2 - Stringhe Array di caratteri Funzioni: strcpy() strcmp() strlen() char stringaA[10], stringaB[10]; strcpy(stringaA, stringaB); Copia Confronti (if, while, for) if (strcmp(stringaA, stringaB) 0)… Specificatore di formato: "%s" Note per la scanf() : La stringa letta non può contenere spazi Non usare &

- 3 - Stringhe Terminatore \0 usato dalle funzioni standard di string.h per segnalare la fine della stringa: char esempio1[4], esempio2[5]; strcpy (esempio1, "2Es"); strcpy (esempio2, "AbC"); \0sE2 esempio1 Inizializzazione: char esempio2[5] = "AbC"; oppure: char esempio1[] = "2Es"; \0CbA esempio2 ?

- 4 - Codice di Cesare La codifica crittografica di Cesare consiste nel sostituire ogni carattere con quello che si trova nella k-esima posizione successiva dellalfabeto. Il numero k rappresenta la chiave (0 < k < 26). Es. k = 2 : a c, e g, z b Per decriptare, basta sostituire ogni carattere con quello che si trova nella k-esima posizione precedente dellalfabeto Scrivere un programma che: Accetti in ingresso una stringa (composta da soli caratteri minuscoli e priva di spazi) e un codice Scriva la versione crittografata della stringa Decripti il risultato e visualizzi la stringa originale.

- 5 - Codice di Cesare a0a0 b1b1 c2c2 d3d3 e4e4 f5f5 g6g6 h7h7 i8i8 j9j9 k 10 l 11 m 12 n 13 o 14 p 15 q 16 r 17 s 18 t 19 u 20 v 21 w 22 x 23 y 24 z 25

- 6 - Codice di Cesare #include const unsigned int CRIPTA = 0; const unsigned int DECRIPTA = 1; void codificaCesare (char parola[], unsigned int k, unsigned int azione) { int i = 0, temp; for (i = 0; i < strlen(parola); i++) {.

- 7 - Codice di Cesare if (azione == CRIPTA) { parola[i] = parola[i] - 'a'; temp = parola[i] + k; if (temp < 26) { parola[i] = temp; } else { parola[i] = temp - 26; } parola[i] = parola[i] + 'a'; }.

- 8 - Codice di Cesare else /* decripta */ { parola[i] = parola[i] - 'a'; temp = parola[i] - k; if (temp >= 0) { parola[i] = temp; } else { parola[i] = temp + 26; } parola [i] = parola[i] + 'a'; } } /* fine ciclo for */ }.

- 9 - Codice di Cesare void main() { char parola[20]; unsigned int chiave, i; printf ("Parola: "); scanf ("%s", parola); printf ("Chiave: "); scanf ("%u", &chiave); codificaCesare(parola, chiave, CRIPTA); printf ("Criptata: "); printf ("%s\n", parola); codificaCesare(parola, chiave, DECRIPTA); printf ("Decriptata: %s", parola); }.

Indirizzi Internet Scrivere un programma basato su funzioni che: Chieda allutente di inserire degli indirizzi Internet (per es: ftp.pippo.com) controllando che siano lunghi almeno quattro caratteriwww.polimi.itftp.pippo.com Completi lindirizzo con il relativo protocollo (es: ftp://ftp.pippo.com) Scriva gli indirizzi sul monitor. Se lindirizzo da stampare è il programma dovrà visualizzare SITO DEL POLI.

Indirizzi Internet #include typedef char Stringa[100]; void leggiInd (Stringa indirizzi[],unsigned int nInd); void scriviInd(Stringa indirizzi[],unsigned int nInd); void main() { const unsigned int NUMIND = 4; Stringa indirizzi[NUMIND]; leggiInd (indirizzi, NUMIND); scriviInd (indirizzi, NUMIND); }.

Indirizzi Internet void leggiInd (Stringa indirizzi[], unsigned int nInd) { unsigned int i; Stringa protocollo; for (i = 0; i < nInd; i++) { do { printf ("Indirizzo %d: ", i); scanf ("%s", indirizzi[i]); /* NO & */ } while (strlen (indirizzi[i]) < 4);.

Indirizzi Internet if (strstr (indirizzi[i], "ftp.") != NULL) { strcpy (protocollo, "ftp://"); } else { strcpy (protocollo, " } strcat (protocollo, indirizzi[i]); strcpy (indirizzi[i], protocollo); } } /* Fine funzione leggiInd() */.

Indirizzi Internet void scriviInd (Stringa indirizzi[],unsigned int nInd) { unsigned int i; for (i = 0; i < nInd; i++) { printf ("Indirizzo: %s ", indirizzi[i]); if (strcmp (indirizzi[i], " == 0) { printf ("E il sito del Poli!"); } printf ("\n"); } }.

Algoritmo di ricerca binaria Lalgoritmo funziona sse lutente inserisce i dati già ordinati (in senso crescente nellesempio che segue) Algoritmo per trovare dato in vett[LUNGH] : inizio=0, fine=LUNGH–1 Do Calcola punto di mezzo dell'elenco: medio=(inizio+fine)/2 If dato == vett[medio] trovato nella posizione indicata da medio Else if dato < vett[medio], il dato dovrà essere in vett[i] con i=iniz,iniz+1,...,medio-1 allora fine = medio-1 Else il dato cercato può essere solo in vett[i] con i=medio+1,medio+2,...,fine allora inizio=medio+1 While ( dato non trovato and tra inizio e fine ci sono celle).

Algoritmo di ricerca binaria inizio fine Dato da trovare: 8 inizio fine fine inizio medio Trovato? NO Inizio > fine? NO medio Trovato? SI medio Trovato? NO Inizio > fine? NO

Algoritmo di ricerca binaria inizio fine Dato da trovare: 12 inizio fine medio fine inizio iniziofine medio Trovato? NO Inizio > fine? NO Inizio > fine? SI medio

Ricerca binaria Scrivere un programma che, utilizzando le funzioni, permetta di: Inserire i dati della carta didentità di alcune persone Dato un cognome, cercare se corrisponde ad una persona nel vettore. In caso positivo, visualizzare la posizione nel vettore e tutti i dati personali Utilizzare lalgoritmo di ricerca binaria. Si assume che le carte didentità siano inserite già ordinate per cognome. In caso di cognome duplicato, la ricerca si fermerà alla prima occorrenza trovata.

Ricerca binaria #include typedef char Stringa[30]; typedef struct { Stringa nome, cognome; unsigned int eta; Stringa indirizzo; } CartaIdentita;.

Ricerca binaria /* Ricerca binaria (array ordinato) */ int cercaBin (CartaIdentita persone[], unsigned int lungh, Stringa cerca) { typedef enum {falso, vero} Booleano; int iniz, fine, medio; Booleano trovato; iniz = 0; fine = lungh - 1; trovato = falso;.

Ricerca binaria do { medio = (iniz + fine) / 2; if(strcmp(cerca,persone[medio].cognome)<0) { fine = medio - 1; } else if(strcmp(cerca,persone[medio].cognome)>0) { iniz = medio + 1; } else { trovato = vero; } } while (!trovato && iniz <= fine);

Ricerca binaria if (trovato) { return medio; /* Si ferma alla prima */ } /* occorrenza trovata */ else { return -1; } } /* Fine funzione cercaBin() */.

Ricerca binaria void stampa (int p, CartaIdentita persone[]) { if (p != -1) { printf ("Trovato in posiz: %d\n", p); printf ("Cognome: %s\n",persone[p].cognome); printf ("Nome: %s\n", persone[p].nome); printf ("Età: %u\n", persone[p].eta); printf ("Indirizzo: %s\n", persone[p].indirizzo); } else { printf ("Non trovato\n"); } }.

Ricerca binaria void main() { const int LUNGH = 5; CartaIdentita listaPersone[LUNGH]; Stringa cognomeCercato; int posiz; unsigned int i; for (i = 0; i < LUNGH; i++) { printf ("Cognome: "); scanf("%s",listaPersone[i].cognome);/* NO & */ printf ("Nome: "); scanf("%s",listaPersone[i].nome); /* NO & */.

Ricerca binaria printf ("Età: "); scanf ("%u", &listaPersone[i].eta); /* con & */ printf ("Indirizzo: "); scanf("%s",listaPersone[i].indirizzo);/*NO & */ } printf ("Cognome da cercare: "); scanf ("%s", cognomeCercato); /* NO & */ posiz=cercaBin(listaPersone,LUNGH,cognomeCercato); stampa (posiz, listaPersone); }.