Matrici Vettori di stringhe Esercizi risolti



Documenti analoghi
Esercitazione 4. Comandi iterativi for, while, do-while

Iterazione determinata e indeterminata

Caratteri e stringhe

Strutture dati. Operatori di incremento e decremento. Strutture di dati. Strutture di dati. ++ e -- Esempi. Vettori e matrici.

ESERCIZI SU IF/WHILE. Esercizio 1) Legge due numeri e controlla se il primo è multiplo del secondo.

Operazioni elementari sulle stringhe

STRINGHE: ARRAY DI CARATTERI! a p e \0

Caratteri e stringhe. Funzioni di libreria

SULL USO DEI CARATTERI. char x; si legge con ( %c,&x) e si stampa con ( %c,x) ma anche con ( %d,x) DUE ESEMPI

Esercizi proposti. Esercizio Somma numeri Esercizio Bersagli Esercizio Consumi toner

Esercizi. Stringhe. Stringhe Ricerca binaria

Informatica B Esercitazione 4 (Soluzioni)

C: panoramica. Violetta Lonati

Stringhe di caratteri

Lezione 8: Stringhe ed array multidimensionali

I puntatori e l allocazione dinamica di memoria

Caratteri e stringhe. Vettori di caratteri. Il tipo stringa Terminatore nullo Input/output di stringhe Politecnico di Torino 1

linguaggio di programmazione e programma

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Linguaggio C. strutture di controllo: strutture sequenziali e condizionali. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Politecnico di Torino

Informatica A (per gestionali) A.A. 2004/2005. Esercizi di programmazione C Stringhe Ricerca binaria

Stringhe. Concetti chiave

Elementi di Informatica A. A. 2016/2017

Algoritmi di ordinamento. Algoritmi. Selection sort semplificato - I. Selection sort semplificato - II

LP1 Lezione 13: i File in C. Maurizio Tucci

Matrici Vettori di stringhe. Matrici Definizione di matrici in C Operazioni elementari sulle matrici Vettori di stringhe Esercizi proposti Sommario

Puntatori e array. Violetta Lonati

Gestione dei file. Linguaggio ANSI C Input/Output - 13

Università degli Studi di Ferrara

Gestione di files Motivazioni

Caratteri e stringhe. Esercizi proposti. Esercizio Parola palindroma Esercizio Iniziali maiuscole Esercizio Alfabeto farfallino

Caratteri e stringhe

Lezione 10 Liste. Rossano Venturini. Pagina web del corso.

Lezione 8 Liste. Rossano Venturini. Pagina web del corso.

Il presente plico contiene 3 esercizi e 2 domande e deve essere debitamente compilato con cognome e nome, e numero di matricola.

Esercitazione di Lab. di Sistemi Operativi a.a. 2012/ I processi Unix -

Linguaggio C - Array. Array: tipo nome_array[num_elementi]

Settimana n.9. Obiettivi Stringhe Matrici Vettori di Stringhe

Fondamenti di Informatica 2

Cicli e iterazioni Esercizi risolti

Lezione 5 Sottoarray di somma massima

Vettori di caratteri. Caratteri e stringhe. Stringhe in C. Vettori di caratteri. char saluto[10] ; B u o n g i o r n o 4. Esempio.

Linguaggio C: Stringhe Valeria Cardellini

I/O Avanzato in C: scheda riassuntiva

FILE BINARI. I file di testo non sono indispensabili: sono semplicemente comodi 1

Lezione 3 Sottoarray di somma massima

Lezione 3 Sottoarray di somma massima

Implementazione dell albero binario in linguaggio C++

Vettori di stringhe. Matrici Vettori di stringhe. Matrici di caratteri. Vettori di stringhe. char tris[3][3] ; Esercizio Verifica Sudoku.

Problem solving elementare su dati vettoriali

Strutture di controllo in C. Strutture di controllo in C -- Flow Chart --

1: /* Nome del programma: gestione_articoli_01.cpp 2: Realizzato da: Gaetano Della Cerra 3: Data: 06/02/ III Informatica Serale I.T.I.S.

E9 Esercizi sul Capitolo 9 Array

E17 Esercizi sugli Array in Java

Informatica B Esercitazione 5

2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.

Laboratorio Informatica Classe 4A Serale Venerdì 18/02/2011. Gruppo. Cognome Riontino Nome Raffaele. Cognome Nome

Esercitazione di Reti degli elaboratori

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Input robusto. Problemi nella lettura da file Soluzione basata su fgetc Funzione sscanf Soluzione basata su fgets

Introduzione al linguaggio C Puntatori

Introduzione al linguaggio C Dati aggregati

Sequenze di controllo C:

Esercizio 1 (15 punti)

Esercizio 1 (15 punti)

Array Tipi di dato semplici e strutturati strutturati array elementi omogenei numero d ordine indice lunghezza dimensione

Laboratorio. Due. 1) Switch 2) Costrutti Iterazione (For, While, do while)

Primo programma in C

import java.io.*; Pag. 1 di 15

Caratteri e stringhe

Qualsiasi programma in C++ segue lo schema:

if else Fondamenti di Informatica (Modulo B) !""#$ % ( #if else ) " *+ #switch if (Condizione) Istruzione

Caratteri e stringhe Esercizi risolti

Laboratorio di Algoritmi e Strutture Dati

File di testo con stringhe

Rappresentazione di dati

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Progetto per il Laboratorio di Programmazione Un interprete per il linguaggio PINO. Modulo I: Le tavole dei simboli (TS)

Input robusto. I/O Avanzato e File. Lettura da file. Input robusto. Esempio. Errori di formato

1: /* Nome del programma: numero_giorni_01.cpp - Data: 03/04/2010 2: Realizzato da: Gaetano Della Cerra - III Informatica Serale I.T.I.S.

Elementi di Informatica

Fondamenti di Informatica T-1 Modulo 2

Politecnico di Torino

Rappresentazione di dati

Informatica B Esercitazione 6

Introduzione al Linguaggio C

Operazioni sulle stringhe

Programmazione C Massimo Callisto De Donato

Tecniche della Programmazione lezione 17

Elementi di C++ di base

Le basi del linguaggio Java

Dati due punti sul piano calcolare la loro distanza

==,!=, >, <, >=, <= (a > 7), (b % 2 == 0), (x <= w) &&, (a > 7) && (b % 2 == 0)!(x >= 7) (a == 0)

RICERCA DI UN ELEMENTO

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

Lab 04 Istruzioni, cicli e array"

Corso di Laurea in Matematica

DOMANDA 2 Dire se le seguenti espressioni logiche sono equivalenti: ((A B ) (A+B ))+(B C ) = (A B )+(B C ) e giustificare la risposta Risposta

Transcript:

Esercizi risolti 1 Esercizio: Concorso di intelligenza In un concorso di intelligenza, N giudici esprimono il loro giudizio su K candidati. Il giudizio è un valore numerico tra 0 e 5. Si scriva un programma in linguaggio C per determinare il candidato più intelligente, ed il giudice più severo. Soluzione 1 /* PROGRAMMAZIONE IN C */ 2 3 /* File: concorso_intelligenza.c */ 4 /* Soluzione proposta esercizio "Concorso di intelligenza" */ 5 6 #include <stdio.h> 7 #include <stdlib.h> 8 9 #define MAXK 100 /* max n. candidati */ 10 #define MAXN 10 /* max n. giudici */ 11 12 int main(void) 13 { 14 int voti[maxk][maxn] ; 15 int tot[maxk] ; /* somma dei voti per ogni candidato */ 16 int totg[maxn] ; /* somma dei voti di ogni giudice */ 17 int K, N ; 18 int i, j ; 19 int min, max, posmin, posmax ; 20 21 printf("quanti candidati ci sono? "); 22 scanf("%d", &K) ; 23 24 printf("quanti giudici ci sono? "); 25 scanf("%d", &N) ; 26 27 for (i=0; i<k; i++) 28 { 29 printf("immettere i giudizi per il candidato %d\n", i+1); 30 31 for (j=0; j<n; j++) 32 { 33 printf("giudice %d, cosa pensi del candidato %d? ", 34 j+1, i+1 ); 35 scanf("%d", & voti[i][j] ) ; 36 } 37 } 38 39 for (i=0; i<k; i++) tot[i]=0 ; 40 for (j=0; j<n; j++) totg[j]=0 ; 41 c 2006 Politecnico di Torino 1

42 for (i=0; i<k; i++) 43 { 44 /* già fatto tot[i] = 0 ; */ 45 for (j=0; j<n; j++) 46 { 47 tot[i] = tot[i] + voti[i][j] ; 48 totg[j] = totg[j] + voti[i][j] ; 49 } 50 } 51 52 max = tot[0] ; 53 posmax = 0 ; 54 for (i=1; i<k; i++) 55 { 56 if (tot[i]>max) 57 { 58 max = tot[i]; 59 posmax = i ; 60 } 61 } 62 63 printf("il vincitore e il candidato numero %d\n", posmax+1); 64 65 min = totg[0] ; 66 posmin = 0 ; 67 for (i=1; i<n; i++) 68 { 69 if (totg[i]<min) 70 { 71 min = totg[i]; 72 posmin = i ; 73 } 74 } 75 76 printf("il giudice piu severo e il numero %d\n", posmin+1); 77 exit(0) ; 78 } 2 Esercizio: Statistiche testo Si scriva un programma in C che acquisisca da tastiera un testo libero, composto da più righe (max 1000) di un numero di caratteri non superiore a 100 ciascuna. L inserimento termina quando l utente inserirà una riga uguale a FINE. Al termine dell acquisizione del testo, il programma dovrà stampare le seguenti statistiche: 1. il numero totale di righe inserite 1 ; 2. il numero totale di caratteri inseriti; 3. il numero totale di caratteri alfanumerici inseriti; 4. il numero totale di parole inserite. Soluzione 1 esclusa quella contentente FINE c 2006 Politecnico di Torino 2

1 /* PROGRAMMAZIONE IN C */ 2 3 /* File: statistiche.c */ 4 /* Soluzione proposta esercizio "Statistiche testo" */ 5 6 #include <stdio.h> 7 #include <stdlib.h> 8 #include <string.h> 9 #include <ctype.h> 10 11 int main(void) 12 { 13 const int MAX = 1000 ; 14 const int LUN = 100 ; 15 16 char testo[max][lun+1] ; 17 int N ; /* righe inserite */ 18 int ncar, nalfa, npar ; 19 int end ; 20 21 char riga[300] ; 22 int i,j ; 23 24 N = 0 ; 25 end = 0 ; 26 do 27 { 28 printf("testo: ") ; 29 gets(riga) ; 30 31 if ( strlen(riga) > LUN ) 32 printf("errore: riga troppo lunga (max %d caratteri)\n", LUN) ; 33 else if ( strcmp( riga, "FINE" )==0 ) 34 end = 1 ; 35 else 36 { 37 strcpy( testo[n], riga ) ; 38 N++ ; 39 } 40 } 41 while (end==0 && N<MAX) ; 42 43 printf("l utente ha inserito %d righe\n", N) ; 44 45 ncar = 0 ; 46 for (i=0; i<n; i++) 47 ncar = ncar + strlen( testo[i] ) ; 48 49 printf("l utente ha inserito %d caratteri\n", ncar) ; 50 51 nalfa = 0 ; 52 for (i=0; i<n; i++) 53 { 54 for (j=0; testo[i][j]!=0; j++) 55 { 56 if ( isalnum( testo[i][j] ) ) c 2006 Politecnico di Torino 3

57 nalfa++ ; 58 } 59 } 60 61 printf("l utente ha inserito %d caratteri alfanumerici\n", nalfa) ; 62 63 npar = 0 ; 64 for (i=0; i<n; i++) 65 { 66 for (j=0; testo[i][j]!=0; j++) 67 { 68 /* verifico se [i][j] è il carattere 69 iniziale di una parola */ 70 if ( isalpha(testo[i][j]) && 71 ((j==0)!isalpha(testo[i][j-1])) ) 72 { 73 npar++ ; 74 } 75 } 76 } 77 78 printf("l utente ha inserito %d parole\n", npar) ; 79 exit(0) ; 80 } 3 Esercizio: Rubrica telefonica Si realizzi un programma in linguaggio C in grado di gestire una rubrica di nomi e numeri telefonici. La rubrica deve contenere fino a 100 voci diverse. Ciascuna voce è composta da un nome (max 40 caratteri) e da un numero di telefono (max 20 caratteri). Il programma deve fornire all utente un menù di scelta, con le seguenti voci: 1) Aggiungi nuova voce in rubrica 2) Ricerca esatta per nome 3) Ricerca approssimata per nome 4) Stampa completa rubrica 0) Esci dal programma Una volta che l utente ha scelto l operazione desiderata (1-4), il programma acquisirà i dati necessari dall utente ed eseguirà il comando. Nota: nella rubrica non possono esistere due voci con lo stesso nome. Soluzione 1 /* PROGRAMMAZIONE IN C */ 2 3 /* File: rubrica.c */ 4 /* Soluzione proposta esercizio "Rubrica telefonica" */ 5 6 #include <stdio.h> 7 #include <stdlib.h> 8 #include <string.h> 9 10 int main(void) 11 { 12 const int MAX = 100 ; /* numero max di voci */ 13 const int LUNN = 40 ; /* lunghezza del nome */ c 2006 Politecnico di Torino 4

14 const int LUNT = 20 ; /* lunghezza n. telefono */ 15 16 char nome[max][lunn+1] ; 17 char tel[max][lunt+1] ; 18 19 int N ; /* numero di voci memorizzate */ 20 21 int comando ; /* comando dell utente 0-4 */ 22 23 char riga[200] ; 24 char sn[lunn+1] ; 25 char st[lunt+1] ; 26 int i, duplicato, trovato, pos ; 27 28 /* INIZIALIZZAZIONI */ 29 30 N = 0 ; 31 32 do 33 { 34 /* STAMPA DEL MENU */ 35 puts("1) Aggiungi nuova voce in rubrica") ; 36 puts("2) Ricerca esatta per nome") ; 37 puts("3) Ricerca approssimata per nome") ; 38 puts("4) Stampa completa rubrica") ; 39 puts("0) Esci dal programma") ; 40 41 /* LETTURA DEL COMANDO */ 42 printf("inserisci il comando: ") ; 43 gets(riga) ; 44 comando = atoi( riga ) ; 45 46 /* ESECUZIONE DEL COMANDO */ 47 switch ( comando ) 48 { 49 case 1: 50 /* Acquisisci i dati */ 51 printf("inserisci il nome da aggiungere: ") ; 52 gets(sn) ; 53 printf("inserisci il numero di telefono corrispondente: ") ; 54 gets(st) ; 55 56 /* Verifica se i dati sono validi */ 57 if ( N == MAX ) 58 { 59 puts("errore: rubrica piena") ; 60 break ; 61 } 62 63 duplicato = 0 ; 64 for ( i = 0 ; i < N ; i++ ) 65 if ( strcmp(sn, nome[i]) == 0 ) 66 duplicato = 1 ; 67 68 if ( duplicato == 1 ) 69 { c 2006 Politecnico di Torino 5

70 puts("errore: nome duplicato") ; 71 break ; 72 } 73 74 /* Aggiungi il nome in rubrica */ 75 strcpy( nome[n], sn ) ; 76 strcpy( tel[n], st ) ; 77 N++ ; 78 79 break ; 80 81 case 2: /* ricerca esatta */ 82 printf("inserisci il nome da ricercare: ") ; 83 gets(sn) ; 84 85 trovato = 0 ; 86 for ( i = 0 ; i < N && trovato == 0 ; i++ ) 87 { 88 if ( strcmp( sn, nome[i] ) == 0 ) 89 { 90 trovato = 1 ; 91 pos = i ; 92 } 93 } 94 95 if ( trovato == 1 ) 96 { 97 printf("il telefono di %s e : %s\n", 98 sn, tel[pos] ) ; 99 } 100 else 101 { 102 printf("nessun %s e presente in rubrica\n", sn) ; 103 } 104 105 break ; 106 107 case 3: /* ricerca approssimata */ 108 printf("inserisci una parte del nome da ricercare: ") ; 109 gets(sn) ; 110 111 trovato = 0 ; 112 for ( i = 0 ; i < N ; i++ ) 113 { 114 if ( strstr( nome[i], sn )!= NULL ) 115 { 116 printf("%s: %s\n", nome[i], tel[i]) ; 117 trovato = 1 ; 118 } 119 } 120 121 if (trovato==0) 122 printf("non trovato...\n") ; 123 break ; 124 125 case 4: c 2006 Politecnico di Torino 6

126 printf("contenuto DELLA RUBRICA (%d VOCI)\n", N) ; 127 128 for ( i = 0 ; i < N ; i++ ) 129 printf("%s: %s\n", nome[i], tel[i] ) ; 130 break ; 131 132 case 0: 133 puts("arrivederci") ; 134 break ; 135 136 default: 137 printf("errore NEL PROGRAMMA (comando=%d)\n", comando) ; 138 } 139 140 } 141 while ( comando!= 0 ) ; 142 143 exit(0) ; 144 } 4 Esercizio: Gestione magazzino Un azienda deve tenere traccia dei beni presenti in un magazzino. L utente inserisce da tastiera dei comandi nel seguente formato: bene EU quantità dove: bene è il nome di un bene; EU è la lettera E per entrata, U per uscita; quantità è la quantità di bene entrata o uscita. L utente termina il caricamento inserendo un comando pari a FINE. In tal caso il programma deve stampare le quantità di beni presenti a magazzino. Esempio: viti E 10 dadi E 50 viti U 5 viti E 3 FINE Soluzione 1 /* PROGRAMMAZIONE IN C */ 2 3 /* File: magazzino.c */ 4 /* Soluzione proposta esercizio "Gestione magazzino" */ 5 6 #include <stdio.h> 7 #include <stdlib.h> 8 #include <string.h> 9 10 #define MAX 100 11 #define LUN 30 c 2006 Politecnico di Torino 7

12 13 int main(void) 14 { 15 char prodotti[max][lun] ; 16 char prod[lun] ; 17 int quantita[max] ; 18 int qta ; 19 char dir ; 20 int i ; 21 int trovato ; 22 int N ; /* dimensione dei vettori prodotti[] e quantita[] */ 23 24 N = 0 ; 25 26 do 27 { 28 /* acquisisci un comando dall utente */ 29 30 /* NOTA: non si può usare il costrutto 31 scanf("%s %c %d", prod, &dir, &qta) ; 32 in quanto non funziona per l ultima riga (FINE) */ 33 34 printf("comando: ") ; 35 scanf("%s", prod) ; 36 37 if ( strcmp(prod, "FINE")!= 0 ) 38 { 39 scanf(" %c %d", &dir, &qta) ; 40 41 if ( dir== E ) /* entrata */ 42 { 43 /* trova la posizione del prodotto nel vettore prodotti[] */ 44 trovato = -1 ; 45 for (i=0; i<n; i++) 46 { 47 if ( strcmp(prodotti[i], prod) == 0 ) 48 trovato = i ; 49 } 50 51 if ( trovato!= -1 ) /* prodotto esiste già */ 52 { 53 /* incrementa la posizione corrispondente del vettore 54 quantita[] */ 55 quantita[trovato] = quantita[trovato] + qta ; 56 } 57 else /* prodotto nuovo */ 58 { 59 /* aggiungi il prodotto al magazzino in posizione nuova */ 60 strcpy(prodotti[n], prod) ; 61 quantita[n] = qta ; 62 63 N++ ; 64 } 65 } 66 else /* uscita */ 67 { c 2006 Politecnico di Torino 8

68 /* trova la posizione del prodotto nel vettore prodotti[] */ 69 trovato = -1 ; 70 for (i=0; i<n; i++) 71 { 72 if ( strcmp(prodotti[i], prod) == 0 ) 73 trovato = i ; 74 } 75 76 if ( trovato == -1 ) 77 { 78 printf("prodotto %s non trovato in magazzino\n", prod); 79 } 80 else 81 { 82 /* decrementa la posizione corrispondente del vettore 83 quantita[] */ 84 quantita[trovato] = quantita[trovato] - qta ; 85 } 86 } 87 } 88 89 } 90 while ( strcmp(prod, "FINE")!= 0 ) ; 91 92 for (i=0; i<n; i++) 93 { 94 printf("%s %d\n", prodotti[i], quantita[i]) ; 95 } 96 97 exit(0) ; 98 } c 2006 Politecnico di Torino 9