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

Documenti analoghi
Matrici Vettori di stringhe. Programmazione in C. Riferimenti al materiale

Caratteri e stringhe

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

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 - Array. Array: tipo nome_array[num_elementi]

Stringhe di caratteri

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

Caratteri e stringhe

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

Problema. Vettori e matrici. Vettori. Vettori

Input/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari

stringhe array monodimensionali char. libreria < string.h>

Esercizio 1: calcolo insieme intersezione

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

Soluzione/* PROGRAMMAZIONE IN C */ #include <stdio.h> #include <stdlib.h>

Esercizio. Una moneta viene lanciata 1000 volte. Su 1000 lanci, per 600 volte esce croce. Quale è la ridondanza presente nella moneta?

Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' a p e \0

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Stringhe. Concetti chiave

Array multidimensionali e stringhe

Esercitazione 6. Array

Matrici. Matrici.h Definizione dei tipi. Un po di esercizi sulle matrici Semplici. Media difficoltà. Difficili

Saggio di Informatica Classe 3A (B)

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali

Istruzioni iterative (o cicliche)

Rappresentazione binaria delle variabili (int e char)

Lezione 6: Funzioni di I/O avanzate

Esercizi di programmazione in C

STRINGHE: ARRAY DI CARATTERI! a p e \0

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

Stringhe e tipi di dati strutturati

Caratteri e stringhe Esercizi risolti

Elementi di C++ di base

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

Stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Stringhe in C. Alessandra Giordani Lunedì 23 aprile 2012

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

Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi

Linguaggi di programmazione + laboratorio a.a. 2012/2013

Caratteri e stringhe

Esercizi. Stringhe. Stringhe Ricerca binaria

- Dispensa III - PROGRAMMAZIONE C (Parte I)

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

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Multidimensionali. Array Multidimensionali. Tipi di array. Matrice: array bidimensionale. Array multidimensionale. Dichiarazione di una matrice

Fondamenti di Informatica T-1 Modulo 2

Informatica B

Introduzione alla programmazione Esercizi risolti

Lettura da tastiera e scrittura su monitor

LABORATORIO DI FONDAMENTI DI INFORMATICA DIAGRAMMI DI FLUSSO E CODIFICA IN C DEGLI ALGORITMI

Esercizio 1 - cicli. Esercizio 1 cicli - Soluzione

Costrutti condizionali e iterativi

Linguaggio C. tipi di dati definiti dall utente. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Appello del 21 Luglio 2010 COGNOME E NOME RIGA COLONNA MATRICOLA

5 Stringhe. Esiste una libreria di C che gestisce le stringhe string.h essa ci permette di:

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

char* titolo= Libreria sulle stringhe Esempi: (strcpy) (strstr)... Laboratorio di Informatica L-A 1

s r t i r n i g n. g h s r t c r p c y s r t c r a c t s r t c r m c p s r t c r h c r s r t s r t s r

HOMEWORKS. in modo che il programma stampi N ripetizioni della stringa HelloWorld (su righe diverse), con N inserito dall utente.

Esercizi proposti. Funzioni. Esercizio Confronto tra date. Esercizi proposti. Analisi. Controlli

Esercizio 1: calcolo del massimo di una sequenza (versione 1)

Esercitazione 8. Array multidimensionali

Operazioni elementari sulle stringhe

Corso di Informatica B - Sezione D. Esercitazioni Linguaggio C

Caratteristiche di un linguaggio ad alto livello

I puntatori e l allocazione dinamica di memoria. Esercizi risolti

# include<stdio.h> int main() { // Dichiarazioni int n; int i;

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

Funzioni di libreria. Caratteri e stringhe. Librerie sulle stringhe. Funzioni di libreria. Rappresentazione. Suggerimenti

Esercizi C su array e matrici

1 (6) 2 (7) 3 (7) 4 (7) 5 (6)

Caratteri e stringhe

INFORMATICA. Strutture iterative

I vettori in C. Vettori. Definizione di vettori in C. int dato[10] ; int. Numero di elementi. Tipo di dato base. Nome del vettore.

Corso di Reti di Calcolatori L-A

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()

Come va usato il codice dei caratteri

Capitolo 2 Fondamenti di Informatica - Esercizi

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

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

Manipolazioni elementari di flussi di testo strutturati

Algoritmi e basi del C Struttura di un programma

Si vuole realizzare un programma in grado di verificare se una griglia assegnata rispetta le regole del gioco.

Linguaggio C. Aggregati di dati

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Strategie di programmazione

Esercizio 1. Esercizio 1 - Soluzione

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 28 Gennaio 1999 PROVA SCRITTA

Calcolo Parallelo. Domanda. In particolare. Qual è l algoritmo parallelo. PROBLEMA: Prodotto Matrice-Vettore

Algoritmi e basi del C

Esercitazioni di Algebra e Geometria

Stringhe e allocazione dinamica della memoria

Scelte ed alternative

string.h strcpy strc strcat strcmp strcmp strchr strstr strstr i t r ; s r \0 int strlen(char* str) char pippo[]={ p, i, p, p, o, \0 \ };

Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni. Lab 06 Array" Lab06 1

Informatica B

Caratteri e stringhe. Funzioni di libreria

Transcript:

Matrici di caratteri I/O di vettori di stringhe Matrici Matrici di caratteri Nel definire una matrice, è ovviamente possibile usare il tipo base char Permette di memorizzare una tabella NxM di caratteri ASCII Ogni posizione [i][j] deve contenere un carattere Non può essere vuota Non può contenere più di un carattere char tris[][] ; O Esercizio Verifica Sudoku Esempio Si realizzi un programma in C che verifichi la corretta soluzione della griglia di un Sudoku Il programma acquisisce da tastiera la griglia x, in cui ciascun elemento è un carattere tra e Il programma deve verificare se il Sudoku è stato correttamente risolto

Analisi Tutti i valori devono essere singoli caratteri tra e Su ciascuna delle righe, non devono esserci valori ripetuti Su ciascuna delle colonne, non devono esserci valori ripetuti In ciascuno dei blocchi x, non devono esserci valori ripetuti Soluzione (/) const int N = ; char sudoku[n][n] ; int i, j, k ; /* indici dei cicli */ int r, c, r, c ; char ch ; int err, good ; /* flag */ printf("verifica Sudoku\n") ; sudokuc Soluzione (/) Soluzione (/) for(i=; i<n; i++) printf("riga %d:\n", i+) ; for(j=; j<n; j++) Acquisisci un carattere ch tra e sudoku[i][j] = ch ; sudokuc for(i=; i<n; i++) do printf(" printf("riga Colonna %d:\n", ", i+) j+) ;; ch = for(j=; getchar() j<n; ; j++) if( ch<'' ch>'' ) printf("errata - ripeti\n") ; Acquisisci un carattere /* elimina fino ch fine tra linea e */ while( getchar()!='\n') sudoku[i][j] = ch ; /*nop*/ ; while( ch<'' ch>'') ; sudokuc Soluzione (/) /* Stampa il tabellone */ for(i=; i<; i++) for(j=; j<; j++) printf("%c ", sudoku[i][j]) ; if(j== j==) printf(" ") ; printf("\n"); if(i== i==) printf("\n") ; sudokuc good = ; /* flag generale */ /* Verifica le righe */ for(i=; i<n; i++) printf("riga %d: ", i+) ; err = ; Soluzione (/) sudokuc /* ricerca duplicati su col j,k */ for(j=; j<n; j++) for(k=j+; k<n; k++) if(sudoku[i][j]== sudoku[i][k]) err = ;

Soluzione (/) Soluzione (/) if(err==) printf("ok\n"); printf("errore!\n"); good = ; sudokuc for(i=; i<n; i++) /* Colonne */ printf("colonna %d: ", i+) ; err = ; /* ricerca dupl su righe j,k */ for(j=; j<n; j++) for(k=j+; k<n; k++) if(sudoku[j][i]==sudoku[k][i]) err = ; if(err==) printf("ok\n"); printf("errore!\n"); good = ; sudokuc Ricerca per blocchi Ricerca per blocchi j j+ i i+ Ricerca per blocchi Soluzione (/) j j+ i i+ r,c r,c for(i=; i<n; i=i+) for(j=; j<n; j=j+) printf("blocco (%d,%d)-(%d,%d): ", i+, j+, i+, j+) ; /* ricerca duplicati nel blocco */ /* Confronta [r][c] con [r][c] */ err = ; sudokuc

Soluzione (/) Soluzione (/) for(r=i; r<i+; r++) for(c=j; c<j+; c++) /* elemento [r][c] */ for(r=i; r<i+; r++) for(c=j; c<j+; c++) /* rispetto a [r][c] */ if( ((r!=r) (c!=c)) && sudoku[r][c]== sudoku[r][c] ) err = ; /*r,c*/ /*r,c*/ sudokuc if(err==) printf("ok\n"); printf("errore!\n"); good = ; /*j*/ /*i*/ sudokuc Soluzione (/) sudokuc if(good==) printf("sudoku valido!\n"); printf("sudoku errato\n"); Esempio Una matrice di caratteri può anche essere vista come: Un vettore di vettori di caratteri, cioè Un vettore di stringhe Si tratta di un metodo diverso di interpretare la stessa struttura dati char tris[][] ; char nomi[][] ; O F u l v i o \ x! w A n t o n i o \ Z C r i s t i n a \ u E l e n a \ g r d D a v i d e \ $ e

Caratteristiche Sintassi stringhe di lunghezza variabile char nomi[][] ; Lunghezza max caratteri F u l v i o \ x! w A n t o n i o \ Z C r i s t i n a \ u E l e n a \ g r d D a v i d e \ $ e Terminatore nullo in ogni stringa (riga) Definizione Nome del vettore di stringhe char vett[ma][lun] ; Numero di stringhe Lunghezzza massima di ciascuna stringa (compreso terminatore nullo) Sintassi Sintassi Definizione char vett[ma][lun] ; Accesso al singolo carattere vett[i][j] Definizione char vett[ma][lun] ; Accesso al Stringa singolo carattere (i+)-esima, da usarsi con le vett[i][j] funzioni di libreria Carattere (j+)-esimo della stringa (i+)-esima, da usarsi per l elaborazione carattere-per-carattere Accesso all intera stringa vett[i] Esempio Dato un vettore di stringhe, determinare quante volte è presente la lettera A (maiuscola o minuscola) Dato un vettore di stringhe, determinare se esistono due stringhe identiche Esempio cont = ; for(i=; i<ma; i++) for(j=; vett[i][j]!=; j++) if(toupper(vett[i][j])=='a') cont++ ; uguali = ; for(i=; i<ma; i++) for(k=i+; k<ma; k++) if(strcmp(vett[i], vett[k])==) uguali= ;

Occupazione variabile In un vettore di stringhe, ogni riga (ogni stringa) è intrinsecamente un vettore di caratteri ad occupazione variabile Terminatore nullo per indicare la lunghezza effettiva Il numero di stringhe effettivamente memorizzato potrebbe non riempire l intero vettore Variabile intera che indica l effettiva occupazione del vettore const int MA = ; const int LUN = ; char nomi[ma][lun+] ; int N ; F u l v i o \ x! w A n t o n i o \ Z C r i s t i n a \ u N= e ) a \ g r d % < d d e g $ e Esempio Errore frequente Confondere una stringa (vettore di caratteri) con un vettore di stringhe (matrice di caratteri) char s[lun+] ; char v[ma][lun+] ; s[i] è un singolo carattere s è l intera stringa v[i][j] è il singolo carattere v[i] è un intera stringa v è l intera matrice Stampa (/) Stampa (/) La stampa del contenuto di un vettore di stringhe si ottiene semplicemente stampando ciascuno degli elementi Si può utilizzare puts oppure printf for(i=; i<n; i++) puts(vett[i]) ; vettstrc

Lettura Dimensione nota a priori (/) Acquisire da tastiera un vettore di stringhe Un ciclo per ciascuna delle stringhe da leggere Lunghezza nota a priori Lunghezza determinata dalla lettura di un certo dato (es: FINE ) Acquisizione, nel ciclo, di ciascuna delle stringhe Utilizzo della funzione gets Eventualmente, lettura in una stringa d appoggio per la verifica di correttezza, prima di ricopiare nel vettore destinazione char vett[ma][lun+] ; char s[] ; do printf("quante stringhe? ") ; gets(s) ; N = atoi(s) ; if(n< N>MA) printf("valore errato: deve essere tra e %d\n", MA) ; while(n< N>MA) ; vettstrc Dimensione nota a priori (/) Lettura terminata da FINE for(i=; i<n; i++) printf("stringa %d: ", i+) ; gets(s) ; if (strlen(s)==) printf("vuota - ripeti\n"); i-- ; if(strlen(s)>lun) printf("troppo lunga max %d chr\n", LUN) ; i-- ; strcpy(vett[i], s) ; vettstrc N = ; end = ; do printf("stringa %d: ", N+) ; gets(s) ; if (strlen(s)==) printf("vuota - ripeti\n"); if(strlen(s)>lun) printf("troppo lunga\n") ; if(strcmp(s, "FINE")==) end = ; strcpy(vett[n], s) ; N++ ; while(end==) ; vettstrc