Breve riepilogo della puntata precedente:
|
|
- Florindo Chiari
- 8 anni fa
- Visualizzazioni
Transcript
1 Breve riepilogo della puntata precedente: 1. In C, il passaggio dei parametri alle funzioni avviene sempre per copia, ovvero il valore del parametro viene copiato all'interno della variabile che rappresenta il parametro stesso nel codice di implementazione della funzione. Per una singola variabile, la COPIA del valore del parametro richiede un numero di byte pari al valore da copiare; per un parametro di tipo int, quindi, sono richiesti 4 Byte. Nel caso in cui sia necessario passare ad una funzione un intero array, le cose si complicano un po', in quanto il quantitativo di memoria richiesta per effettuare la COPIA del parametro può diventare significativo. Ad esempio, un array di 100 double occupa 800 Byte, una tabella che rappresenta un'immagine può raggiungere alcuni MByte. Un metodo per risparmiare memoria ed evitare copie è quello di utilizzare come parametro della funzione non più il valore (o i valori) che intendiamo far conoscere alla funzione ma la posizione che tali valori hanno all'interno della memoria, ovvero passare alla funzione una variabile di tipo puntatore. In questo modo sia il passaggio di una variabile di tipo int che il passaggio di un array di int che il passaggio di un array di double richiederanno lo stesso quantitativo di memoria, ovvero quella richiesta per copiare il valore di una variabile di tipo puntatore (4 Byte). Domandona: Secondo quanto detto sopra, sembra che la scelta di passare un array ad una funzione mediante un puntatore sia giustificata solo dal risparmio, in termini di memoria, che tale scelta comporta. E' proprio così? 2. Vantaggi e svantaggi del passare un puntatore ad una funzione Utilizzo poca memoria per il passaggio dei valori delle variabili Permetto ad una funzione di modificare il valore di una variabile Si possono avere modifiche accidentali del valore di una variabile Non posso usufruire dei cast impliciti
2 Cosa significa l'ultima affermazione? Confrontiamo due funzioni #include <stdio.h> void funzione_di_prova(int); int main() {float c = 4.5; funzione_di_prova(c); return 0; void funzione_di_prova(int a) {a = a+3; printf("\n il valore e\' %d",a); #include <stdio.h> void funzione_di_prova(int*); int main() {float c = 4.5; funzione_di_prova(&c); return 0; void funzione_di_prova(int *b) {*b = *b + 3; printf("\n il valore e\' %d", *b); Ecco l'output il valore e' 7 Ecco l'output il valore e' viene effettuato un cast implicito per convertire il valore del parametro da float il parametro viene interpretato come int -> perdita di cifre significative no problem viene effettuato un cast implicito per convertire il valore del parametro da float* il parametro viene interpretato come int* -> può cambiare il numero totale di byte letti e cambia l'interpretazione dei bit pericoloso! da evitare!
3 Supponiamo di avere a disposizione un gruppo di 8 byte, contigui. Tali 8 byte possono essere pensati come ad un double o come ad un array di 8 char. Quindi mi posso muovere al loro interno sia pensando che ci sia un solo numero in virgola mobile o 8 interi da 8 bit. /* esempio: una copia di un double effettuata in modo un po' strano... */ #include <stdio.h> int main() {double doub1,doub2; /* creo due aree di memoria da 8 byte */ char *ptchar1,*ptchar2; /* ecco i puntatori che servono per scorrerle byte a byte */ int i; doub1 = ; ptchar1=(char*) &doub1; /* cast ESPLICITO! */ for(i=0;i<8;i++) printf("%d",*(ptchar + i)); /* visualizzo i valori dei singoli Byte */ ptchar2 = (char*) &doub2; for(i=0;i<8;i++) *(ptchar2+i) = *(ptchar1 + i);
4 printf("\n %f %f",doub1,doub2); return 0; /* fine esempio */ Provate a visualizzare l'output di questo codice! Le stringhe Le stringhe sono un particolare tipo di array di char in quanto, diversamente dagli array convenzionali, è possibile conoscerne la lunghezza; essendo le stringhe degli array, la loro gestione, da parte della libreria standard, viene effettuata SOLO MEDIANTE PUNTATORI A CHAR. Convenzionalmente, si assume che 1. la stringa inizi in corrispondenza del carattere cui fa riferimento il puntatore utilizzato per identificare la stringa stessa 2. la stringa termini quando, al suo interno, si incontra il carattere '\0', cioè il carattere avente codice ASCII nullo. Le funzioni della libreria standard, i cui prototipi si trovano all'interno del file string.h, considerano solo i caratteri dell'intero vettore che vanno dall'inizio della stringa fino al carattere di terminazione.
5 NOTA: la fine della stringa non coincide sempre con la fine dell'array di char. La stringa termina quando incontriamo il carattere con codice ASCII nullo mentre l'array termina quando arriviamo all'ultimo elemento. indice : valore dell'elemento : c i a o \0 c i a o! Per le funzioni della libreria standard la stringa termina alla posizione 4 nonostante l'array di char sia composto in totale da 10 caratteri. Utilizzando un opportuno specificatore di formato, %s, è inoltre possibile inserire i caratteri digitati sulla tastiera direttamente all'interno di una stringa: /* inizio codice */ #include <stdio.h> int main() {char stringa[40]; printf("\n inserisci dei caratteri, non più di 39!"); /* ci vuole spazio per il terminatore */ scanf("%s",stringa); /* passo a scanf() il puntatore all'array di char */ /* il carattere con codice ASCII nullo viene inserito automanticamente da scanf() */ printf("\n ecco la stringa inserita dall'utente: %s",stringa); return 0; /* fine codice */ 1. Attenzione: evitiamo gli accessi illegali alla memoria! Controllare SEMPRE di avere spazio a sufficienza per memorizzare i caratteri inseriti dall'utente
6 Nell'esempio visto prima, se l'utente inserisce 50 caratteri vengono superati i limiti dell'array e si accede ad aree della memoria in cui non siamo autorizzati a scrivere. In generale, quindi, sovradimensionare gli array che servono per accettare input. 2. Non usare MAI dei puntatori non inizializzati /* inizio esempio */ #include <stdio.h> int main() {char *stringa; printf("\n inserisci dei caratteri!"); scanf("%s",stringa); /* passo a scanf() il puntatore a char */ /* accesso illegale alla memoria!!! il puntatore non è stato inizializzato */ printf("\n ecco la stringa inserita dall'utente: %s",stringa); return 0; /* fine esempio */ Ecco alcune delle funzioni appartenenti alla libreria standard che possono essere utilizzate per la gestione delle stringhe int strlen(char *s) la funzione restituisce un numero intero pari al numero di caratteri che compongono la stringa s (ovvero il numero di caratteri che sta prima di quello nullo) char * strcpy(char*s1,char*s2) la funzione copia la stringa s2 all'interno di s1 e restituisce poi la stringa s1 (s1 deve essere abbastanza grande da contenere s2). Anche il carattere nullo viene copiato in s1. int strcmp(char*s1,char*s2)
7 la funzione confronta la stringa s1 con la stringa s2. il valore restituito è: negativo se, secondo l'ordine alfabetico, s1 viene prima di s2; zero se le due stringhe coincidono; positivo se, secondo l'ordine alfabetico, s1 viene dopo s2. int strncmp(char*s1,char*s2,int n) la funzione confronta al massimo n caratteri della stringa s1 con quelli della stringa s2. il valore restituito è: negativo se, secondo l'ordine alfabetico, la porzione di s1 viene prima di quella di s2; zero se le due stringhe coincidono; positivo se, secondo l'ordine alfabetico, la porzione di s1 viene dopo quella di s2. /* Breve esempio di utilizzo */ #include <string.h> #include <stdio.h> #define DIM 50 int main() {char parola[dim]; /* costruisco una stringa non inizializzata */ int lunghezza, confronto; strcpy( parola, "ecco una stringa costante 3987 #()$(#*@ " ); /* inizializzo la stringa copiando all'interno della stringa parola una stringa costante (ovvero un gruppo di caratteri circondato da DOPPI apici) */ printf("\n ecco la stringa inizializzata: %s",parola); lunghezza = strlen ( parola ); printf("\n l'array di char contiene %d caratteri, la stringa ne occupa %d",dim,lunghezza); /* confronto la stringa parola con una stringa costante */ confronto = strcmp( parola, "ecco" ); printf("\n il risultato del confronto: %d",confronto); /* ripeto il confronto, limitando il numero di caratteri letti */ confronto = strncmp( parola, "ecco", 4); printf("\n il risultato del nuovo confronto: %d",confronto); return 0; /* fine esempio */ Ecco l'output:
8 ecco la stringa inizializzata: ecco una stringa costante l'array di char contiene 50 caratteri, la stringa ne occupa 40 il risultato del confronto: 1 il risultato del nuovo confronto: 0 Usiamo ora le funzioni di libreria per preparare un programma che: 1. consenta all'utente di inserire una stringa di testo 2. determini la lunghezza della stringa di testo 3. verifichi se l'articolo "il" compaia o meno nella stringa inserita dall'utente e determini quante volte tale articolo sia presente all'interno della stringa (-> funzione) 4. analizzi i caratteri che compongono la stringa (-> funzione basata su analisi_carattere()) Iniziamo dalle funzioni (3) prepariamo una funzione che verifichi se l'articolo "il" compaia o meno nella stringa inserita dall'utente e determini quante volte tale articolo sia presente all'interno della stringa La funzione deve analizzare una stringa, essa quindi necessita di un unico parametro che permetta di identificare univocamente la stringa stessa, ovvero un puntatore a char.
9 Una volta determinato se "il" compaia o meno nella stringa, la funzione deve restituire il numero di occorrenze dell'articolo; il valore restituito dalla funzione sarà perciò di tipo int. prototipo: int CercaArticolo(char *); /* prima versione */ int CercaArticolo(char *stringa) {int occorrenze = 0; /* questa è la variabile che serve a contare il numero di volte che l'articolo "il" compare all'interno della stringa */ char pattern[3]; strcpy(pattern, "li" ); if( strncmp(stringa, pattern, 2) ) {occorrenze ++; /* sarebbe stato equivalente scrivere if( strncmp(stringa, "li", 2) ) {occorrenze ++; */ return occorrenze; /* questo confronto, però, funziona solo nel caso in cui la stringa che la funzione riceve come parametro sia, ad esempio : "il cane dei vicini abbaia". ma se il parametro è : "è quello il cane che abbaia" allora tale criterio di ricerca non va bene, in quanto non riconosce la presenza della coppia di caratteri "il" */ Per cercare bene in tutta la stringa devo spostarmi all'interno della stringa; è quindi necessario che il confronto venga fatto ridefinendo l'inizio della stringa
10 char prova[30]; strcpy(prova, "ecco alcuni termini di prova"); printf("\n%s",prova); /* visualizza "ecco alcuni termini di prova" */ printf("\n%s",prova + 5); /* visualizza "alcuni termini di prova" */ printf("\n%s",prova + 12); /* visualizza "termini di prova" */ Il puntatore rappresenta, quindi, una sorta di indice con cui scorrere la stringa. L'elemento cui fa riferimento il puntatore rappresenta l'inizio effettivo della stringa (per le funzioni di accesso della libreria standard) /* seconda versione */ int CercaArticolo(char *stringa) {int occorrenze = 0; /* questa è la variabile che serve a contare il numero di volte che l'articolo "il" compare all'interno della stringa */ int i; char pattern[3]; strcpy(pattern, "li" ); /* devo scorrere la stringa fino a quando il numero di caratteri di cui è composta è sufficiente ad effettuare il confronto*/ for( i = 0; i < ( strlen(stringa)-strlen(pattern) ); i++) { if( strncmp(stringa + i, pattern, 2) ) {occorrenze ++; return occorrenze;... chiaramente usando questo metodo la stringa "il cane abbaia al gatto smilzo"
11 contiene 2 occorrenze dell'articolo "il"... (4) prepariamo una funzione che analizzi i caratteri presenti nella stringa La funzione necessita di un solo parametro, ovvero la stringa da analizzare, e non deve restituire alcun valore, in quanto il risultato dell'analisi di ciascuno dei caratteri verrà visualizzato utilizzando la funzione analisi_carattere() preparata alcune lezioni fa. Prototipo: #include <mie_funzioni.h> void analizza_stringa(char*); /* versione 1 */ void analizza_stringa(char* parola) {int i; /* indice da utilizzare per scorrere la stringa */ for(i = 0; i < strlen(parola); i++) {analisi_carattere(parola[i]); /* versione 2: il valore logico di 0 e' FALSO. Il ciclo si ferma quando viene incontrato il carattere con codice ASCII nullo */ void analizza_stringa(char* parola) {int i; /* indice da utilizzare per scorrere la stringa */ for(i = 0; parola[i] ; i++) {analisi_carattere(parola[i]);
12 /* versione 3: anche il puntatore può essere pensato come un indice da incrementare ad ogni iterazione... */ void analizza_stringa(char* parola) { for( ; *parola ; parola++) {analisi_carattere(*parola); /* in questa implementazione ho modificato il valore del puntatore!! è pericoloso agire in questo modo??? */ /* versione 4: usiamo l'implementazione ricorsiva */ la funzione richiama se stessa fino a quando non viene individuata la condizione di fine della procedura ricorsiva la condizione che determina la fine della procedura ricorsiva è: ho incontrato il carattere con codice ASCII nullo
13 void analizza_stringa(char* parola) {if ( *parola ) {analisi_carattere(*parola) ; analizza_stringa(parola+1); /* ecco il codice */ #include <string.h> #include <stdio.h> #include <mie_funzioni.h> #define DIM 50 int CercaArticolo(char *); void analizza_stringa(char*); int main() {char parola[dim]; /* costruisco una stringa non inizializzata */ int lunghezza; int occorrenze; printf("\n inserisci una stringa contenente non più di 30 caratteri"); scanf("%s",parola); lunghezza = strlen ( parola ); printf("\n l'array di char contiene %d caratteri, la stringa ne occupa %d",dim,lunghezza); /* cerco nella stringa parola le occorrenze dell'articolo "il"*/ occorrenze = CercaArticolo(parola); printf("\n nella stringa sono state trovate %d occorrenze ",occorrenze); /* in alternativa, sfruttando il valore restituito dalla funzione */ printf("\n nella stringa sono state trovate %d occorrenze ",CercaArticolo(parola)); /* analizzo la stringa, carattere per carattere */ analizza_stringa(parola); return 0; int CercaArticolo(char *stringa)
14 {int occorrenze = 0; int i; char pattern[3]; strcpy(pattern, "li" ); for( i = 0; i < ( strlen(stringa)-strlen(pattern) ); i++) { if( strncmp(stringa + i, pattern, 2) ) {occorrenze ++; return occorrenze; void analizza_stringa(char* parola) {if ( *parola ) {analisi_carattere(*parola) ; analizza_stringa(parola+1); /* fine esempio */ Esercizio: Implementare una funzione che accetti come parametro un puntatore a char e che restituisca un numero intero. La funzione deve inizialmente determinare la lunghezza della stringa e poi visualizzare tale valore. Essa deve poi scorrere, carattere per carattere, la stringa cui fa riferimento il puntatore che riceve come parametro; se un carattere è una lettera minuscola, allora la lettera deve diventare maiuscola; se un carattere è una lettera maiuscola, allora la lettera deve diventare minuscola; tutti gli altri caratteri devono essere sostituiti con il carattere ' ' (spazio). Terminato questo controllo, la funzione deve restituire un valore pari al numero di sostituzioni effettuate. Implementare una funzione che accetti come parametro due stringhe e che restituisca un valore di tipo intero. La funzione deve determinare se la seconda stringa sia presente o meno all'interno della prima; nel caso in cui tale condizione sia verificata, TUTTI i caratteri della prima stringa che compongono una sottostringa uguale alla seconda devono essere sostituiti con degli asterischi.
15 Ad esempio, se i parametri sono "la casa del vicino e' bella ma piccola" "la" il risultato deve essere "** casa del vicino e' bel** ma picco**" Il valore da restituire deve essere pari al numero di sostituzioni effettuate
Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};
ESERCIZI 2 LABORATORIO Problema 1 Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; Chiede all'utente un numero e, tramite ricerca
DettagliGli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori
Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine
DettagliLe stringhe. Le stringhe
Informatica: C++ Gerboni Roberta Stringhe di caratteri (esempi di utilizzo dei vettori) Nel linguaggio C++ una stringa è semplicemente un vettore di caratteri Vettori di caratteri La stringa "hello" è
DettagliInformatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica
Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica Dipartimento di Elettronica, Informazione e Bioingegneria Informatica B Sezione D Franchi Alessio Mauro,
DettagliMatematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE
Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE NOME: COGNOME: ============================================================== Esercizio 1 ci sono tante "righe"; non è detto servano tutte...
DettagliCos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp. 305-341 KP Cap. 6 pp. 241-247
Cos è una stringa (1) Stringhe DD Cap. 8 pp. 305-341 KP Cap. 6 pp. 241-247 Una stringa è una serie di caratteri trattati come una singola unità. Essa potrà includere lettere, cifre, simboli e caratteri
DettagliLABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 15.V.2015. Indice
LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 15.V.2015 VINCENZO MARRA Indice Parte 1. Input/Output standard dalla console 2 Esercizio 1 2 Eco
DettagliFunzioni in C. Violetta Lonati
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni
DettagliCaratteri e stringhe Esercizi risolti
Esercizi risolti 1 Esercizio: Conta vocali e consonanti Scrivere un programma in linguaggio C che legga una frase introdotta da tastiera. La frase è terminata dall introduzione del carattere di invio.
DettagliIntroduzione alla programmazione in C
Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale
DettagliVariabili e tipi di dato
Variabili e tipi di dato Tutte le variabili devono essere dichiarate, specificandone il tipo La dichiarazione deve precedere l uso Il tipo è un concetto astratto che esprime: L allocazione di spazio per
DettagliLaboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014
Laboratorio di Programmazione 1 1 Docente: dr. Damiano Macedonio Lezione 18 31/03/2014 Funzioni: Dichiarazione e Definizione La dichiarazione di una funzione serve a comunicare al compilatore quali sono
DettagliAllocazione dinamica della memoria - riepilogo
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della
Dettaglivoid funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }
FUNZIONI 57. Cosa servono le funzioni? A spezzare il programma in diverse parti relativamente indipendenti fra loro, ovvero interagenti sono attraverso i parametri di input ed IL VALORE di uscita. In questo
DettagliGestione delle stringhe in C
Gestione delle stringhe in C 1 Generalità Una stringa è un vettore di caratteri il cui ultimo elemento è un carattere terminatore (o di fine stringa), codificato dal carattere di codice 0 e rappresentato
DettagliStrutturazione logica dei dati: i file
Strutturazione logica dei dati: i file Informazioni più complesse possono essere composte a partire da informazioni elementari Esempio di una banca: supponiamo di voler mantenere all'interno di un computer
Dettaglipuntatori Lab. Calc. AA 2007/08 1
puntatori Lab. Calc. AA 2007/08 1 parametri delle funzioni (dalla lezione scorsa) gli argomenti in C vengono passati by value dalla funzione chiamante alla funzione chiamata la lista degli argomenti viene
DettagliStrutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)
Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi
DettagliLe variabili. Olga Scotti
Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.
DettagliLinguaggio C - Stringhe
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - Stringhe La presente dispensa e da utilizzarsi ai
Dettagli[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008
Se devo memorizzare più valori che sono in qualche modo parenti dal punto di vista logico, posso usare il concetto di vettore di variabili (array). Ad esempio, se devo memorizzare le temperature di tutti
DettagliLe funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.
Le funzioni in C I programmi C sono costituiti da definizioni di variabili e funzioni. Una definizione di funzione ha il seguente formato: tipo-ritornato nome-funzione(lista-parametri) { dichiarazioni
DettagliINFORMATICA - I puntatori Roberta Gerboni
1 2 I puntatori in C++ Il puntatore un tipo di dato scalare, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Dominio: Il dominio di una variabile di tipo puntatore è un
DettagliIntroduzione al linguaggio C Gli array
Introduzione al linguaggio C Gli array Vettori nome del vettore (tutti gli elementi hanno lo stesso nome, c) Vettore (Array) Gruppo di posizioni (o locazioni di memoria) consecutive Hanno lo stesso nome
DettagliFondamenti di Informatica 2
Fondamenti di Informatica 2 della prova scritta del 28 Febbraio 2006 Esercizio 1 (4 punti) Date le seguenti variabili int A[] = 2,3,7,-2,5,8,-4; int N = 7; int min = 3; int i; Scrivere la porzione di codice
DettagliDati testuali. Caratteri e stringhe. Tipi di dato testuali. Dati testuali. Il sistema dei tipi C. Rappresentazione dei testi
Tipi di dato testuali Caratteri Stringhe Caratteri e stringhe 5 Tipi di dato testuali I programmi visti finora erano in grado di elaborare esclusivamente informazioni numeriche Numeri eri (), numeri reali
DettagliEsempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante
Esercizio 0 Scambio lettere Scrivere la funzione void scambiolettere(char *dest, char *lettere, int p_o_d) che modifichi la stringa destinazione (dest), sostituendone i caratteri pari o dispari (a seconda
DettagliCorso di Fondamenti di Informatica
Corso di Fondamenti di Informatica I tipi strutturati: gli array e le strutture Claudio De Stefano - Corso di Fondamenti di Informatica 1 arrays un array (o vettore) è una sequenza di oggetti dello stesso
DettagliPROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI
PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA in termini generali: Dati in input un insieme S di elementi (numeri, caratteri, stringhe, ) e un elemento
DettagliAlcune regole di base per scrivere un programma in linguaggio C
Alcune regole di base per scrivere un programma in linguaggio C Un programma il linguaggio C (listato) viene scritto in formato testo ed archiviato in un file: *.c Per scrivere un listato C si utilizza
DettagliPer scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli
CODICE Le fonti in cui si possono trovare tutorial o esempi di progetti utilizzati con Arduino si trovano nel sito ufficiale di Arduino, oppure nei forum di domotica e robotica. Il codice utilizzato per
Dettagli2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.
1 Esercizio 1 1. Immaginate di avere una calcolatore che invece che poter rappresentare i classici due valori per ogni bit (0/1) possa rappresentare 7 valori per ogni bit. (a) Quanti bit gli occorreranno
DettagliFunzioni. Il modello console. Interfaccia in modalità console
Funzioni Interfaccia con il sistema operativo Argomenti sulla linea di comando Parametri argc e argv Valore di ritorno del programma La funzione exit Esercizio Calcolatrice 2, presente in tutti i programmi
DettagliScrivere uno script php che, dato un array associativo PERSONE le cui chiavi sono i
Esercizi PHP 1. Scrivere uno script PHP che produca in output: 1. La tabellina del 5 2. La tavola Pitagorica contenuta in una tabella 3. La tabellina di un numero ricevuto in input tramite un modulo. Lo
DettagliModulo 4: Ereditarietà, interfacce e clonazione
Modulo 4: Ereditarietà, interfacce e clonazione Argomenti Trattati: Classi, Superclassi e Sottoclassi Ereditarietà Ereditarietà ed Attributi Privati Override super Ereditarietà e Costruttori Polimorfismo
DettagliStudente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2006-07 Secondo Compitino 21 Dicembre 2006
Studente (Cognome Nome): Matricola: Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2006-07 Secondo Compitino 21 Dicembre 2006 Si noti che le soluzioni ai quesiti saranno considerate
DettagliAlgoritmi e strutture dati. Codici di Huffman
Algoritmi e strutture dati Codici di Huffman Memorizzazione dei dati Quando un file viene memorizzato, esso va memorizzato in qualche formato binario Modo più semplice: memorizzare il codice ASCII per
DettagliRICERCA DI UN ELEMENTO
RICERCA DI UN ELEMENTO Si legga da tastiera un array di N elementi (N stabilito dall utente) Si richieda un elemento x il programma deve cercare l elemento x nell array Se l elemento è presente, deve visualizzare
DettagliProgrammazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto
Università degli studi di Camerino Scuola di scienze e tecnologia - Sezione Informatica Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto LEZIONE
DettagliGestione dei File in C
Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte
DettagliTrattamento delle STRINGHE in C(++)
Trattamento delle STRINGHE in C(++) Le cose che qui vengono dette valgono sia per il linguaggio C che per il C++. Nel linguaggio C non esiste, a differenza di quel che avviene per altri linguaggi di programmazione
Dettagli10 - Programmare con gli Array
10 - Programmare con gli Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it
DettagliIntroduzione al Linguaggio C
Introduzione al Linguaggio C File I/O Daniele Pighin April 2009 Daniele Pighin Introduzione al Linguaggio C 1/15 Outline File e dati Accesso ai file File I/O Daniele Pighin Introduzione al Linguaggio C
DettagliInizializzazione, Assegnamento e Distruzione di Classi
Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della
DettagliAlgoritmi di Ricerca. Esempi di programmi Java
Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare
DettagliInformatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica
Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica Dipartimento di Elettronica, Informazione e Bioingegneria Informatica B Sezione D Franchi Alessio Mauro,
DettagliConvertitori numerici in Excel
ISTITUTO DI ISTRUZIONE SUPERIORE G. M. ANGIOY CARBONIA Convertitori numerici in Excel Prof. G. Ciaschetti Come attività di laboratorio, vogliamo realizzare dei convertitori numerici con Microsoft Excel
DettagliUniversità degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella
Corso di Informatica Puntatori Anno Accademico 2010/2011 Francesco Tortorella Variabili, registri ed indirizzi Abbiamo visto che la definizione di una variabile implica l allocazione (da parte del compilatore)
DettagliGestione dei File. dischi nastri cd
Gestione dei File Per mantenere disponibili i dati tra le diverse esecuzioni di un programma, questi si devono archiviare in file su memoria di massa (dati persistenti): dischi nastri cd Un file è un astrazione
DettagliEditor vi. Editor vi
Editor vi vi 1 Editor vi Il vi è l editor di testo standard per UNIX, è presente in tutte le versioni base e funziona con qualsiasi terminale a caratteri Permette di visualizzare una schermata alla volta
DettagliSPECIFICHE E LIMITI DI EXCEL
SPECIFICHE E LIMITI DI EXCEL Un "FOGLIO DI CALCOLO" è un oggetto di un programma per computer costituito da un insieme di celle, organizzate in righe e colonne, atte a memorizzare dati ed effettuare operazioni
DettagliEsercizi di programmazione in C
Esercizi di programmazione in C Esercizio 1 Scrivere un programma in linguaggio C che legga da tastiera una sequenza di lunghezza ignota a priori di numeri interi positivi. Il programma, a partire dal
DettagliConcetto di Funzione e Procedura METODI in Java
Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile
DettagliDall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni
Dall Algoritmo al Programma Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni IL PROGRAMMA Gli algoritmi sono modelli di descrizione astratti e per controllarne il funzionamento devono essere
DettagliCorso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011
Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011 Testo Il database di un videonoleggio è costituito da due vettori paralleli.
DettagliLa struttura dati ad albero binario
La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,
DettagliProgrammazione I / Informatica generale Prova scritta 11 Giugno 2008
Programmazione I / Informatica generale Prova scritta 11 Giugno 2008 NOTA: Si trascuri ogni problema legato al tipo ed al valore di ritorno della funzione main. Inoltre, nei programmi è da sottintendere
DettagliProblem solving elementare su dati vettoriali
Problem solving elementare su dati vettoriali Introduzione Verifiche su sequenze di dati Selezione o ricerca di dati 2 2006 Politecnico di Torino 1 Introduzione (1/2) I problemi di verifica consistono
DettagliSiamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.
DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti
DettagliSoluzioni degli esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)
Soluzioni degli esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo) Soluzioni delle prove al calcolatore Esercizio 7 (esame del 08/01/2009) class TabellaDiNumeri{ private double[][] tabella;
Dettaglihttp://esamix.labx Quotazione compareto( ) Quotazione piurecente( ) Quotazione Quotazione Quotazione non trovato count( )
Materiale di ausilio utilizzabile durante l appello: tutto il materiale è a disposizione, inclusi libri, lucidi, appunti, esercizi svolti e siti Web ad accesso consentito in Lab06. L utilizzo di meorie
Dettagli4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0
Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice
DettagliRecord in C: il costruttore struct.
Record in C: il costruttore struct. Le variabili di tipo record e i nuovi tipi record si dichiarano in C tramite il costruttore di tipo struct:. ::= ;
DettagliSistema operativo: Gestione della memoria
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Sistema operativo: Gestione della memoria La presente dispensa e
DettagliLABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B
LABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B 23.XI.2012 VINCENZO MARRA Indice Esercizio 1 1 Menu 1 Tempo: 35 min. 2 Commento 1 2 Esercizio 2 2 Ordinamento e ricerca binaria con la classe
DettagliProgetto di RHS MicroAODV per Reti di Sensori A.A. 2007/2008
Progetto di RHS MicroAODV per Reti di Sensori A.A. 2007/2008 Si consideri una rete di sensori MicaZ con sistema operativo TinyOS, dove ogni nodo è identificato da un ID unico e dove è presente un solo
DettagliCorso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2005-06 Secondo Compitino 17 Dicembre 2005
Studente (Cognome Nome): Matricola: Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2005-06 Secondo Compitino 17 Dicembre 2005 Si noti che le soluzioni ai quesiti saranno considerate
Dettagli3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
3 - Variabili Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di
DettagliAPPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 17.XI.2015
APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 17.XI.2015 VINCENZO MARRA Indice Esercizio 1 1 Conversione di un numero naturale in base b.
DettagliLa gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni
La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.
DettagliProgrammazione in Java Parte I: Fondamenti
Programmazione in Java Parte I: Fondamenti Lezione 1 Dott. Marco Faella Riferimenti Testi consigliati: Progettazione del software e design pattern in Java di C.S. Horstmann Apogeo Gli esempi di codice
DettagliVerifica che una grammatica sia Context Free nel GrammaReader
Verifica che una grammatica sia Context Free nel GrammaReader Sommario Dispensa di Linguaggi di Programmazione Corrado Mencar Pasquale Lops In questa dispensa si descrivono alcune soluzioni per verificare
DettagliUniversità di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record
DettagliGUIDA ALLA PROGRAMMAZIONE GRAFICA IN C
GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C.:luxx:. PREMESSE In questa guida non verranno trattati i costrutti di flusso, le funzioni, o comunque le caratteristiche del linguaggio, che si danno come presupposte.
DettagliEsempio: Array di struct
Esempio: Array di struct Scrivere un programma C che definisca la struttura esame, composta dal nome dell esame (stringa) e dal voto (intero). Si leggano poi da terminale n esami, con n definito dall utente
DettagliRichiesta pagina PHP (es: index.php)
PHP PHP = personal home page SERVER Richiesta pagina PHP (es: index.php) Server Web (Apache) in ascolto sulla porta 80, si accorge che la pagina richiesta è una pagina PHP in base all'estensione o con
DettagliESEMPIO 1: eseguire il complemento a 10 di 765
COMPLEMENTO A 10 DI UN NUMERO DECIMALE Sia dato un numero N 10 in base 10 di n cifre. Il complemento a 10 di tale numero (N ) si ottiene sottraendo il numero stesso a 10 n. ESEMPIO 1: eseguire il complemento
DettagliCodifica: dal diagramma a blocchi al linguaggio C++
Codifica: dal diagramma a blocchi al linguaggio C++ E necessario chiarire inizialmente alcuni concetti. La compilazione Il dispositivo del computer addetto all esecuzione dei programmi è la CPU La CPU
DettagliCalcolare il massimo di una lista
Calcolare il massimo di una lista Ieri abbiamo imparato a calcolare il massimo di una lista predefinita: lista = [4,24,-89,81,3,0,-12,31] max = lista[0] # questo e' un commento: primo elemento di lista
DettagliLINGUAGGI DI PROGRAMMAZIONE
LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di
DettagliIl tipo di dato astratto Pila
Il tipo di dato astratto Pila Il tipo di dato Pila Una pila è una sequenza di elementi (tutti dello stesso tipo) in cui l inserimento e l eliminazione di elementi avvengono secondo la regola seguente:
DettagliDispense di Informatica per l ITG Valadier
La notazione binaria Dispense di Informatica per l ITG Valadier Le informazioni dentro il computer All interno di un calcolatore tutte le informazioni sono memorizzate sottoforma di lunghe sequenze di
DettagliFondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'
Prima di cominciare: si scarichi dal sito http://esamix.labx il file StartKit5.zip contenente i file necessari (solution di VS2008 e progetto compresi). Avvertenze per la consegna: apporre all inizio di
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E08 Soluzione Esercizi F. Gasparetti, C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf1/ Soluzione Esercizi
DettagliStruttura a record. File ad accesso diretto. Modalità di apertura. Modalità di apertura
Struttura a record 2 File ad accesso diretto Il file è organizzato in record aventi tutti la stessa struttura e quindi dimensione record 0 record 1 record 2 Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione
DettagliFondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C
Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009 Lab 02 Tipi semplici in C Obiettivo dell esercitazione Acquistare familiarità con i tipi di dato semplici supportati
DettagliEsercizio: gestione di un conto corrente
Esercizio: gestione di un conto corrente Si realizzi un conto corrente bancario mediante: - una ASTRAZIONE DI DATO - un TIPO DI DATO ASTRATTO Il conto corrente è caratterizzato dalle seguenti informazioni:
DettagliLinguaggio C - Funzioni
Linguaggio C - Funzioni Funzioni: Il linguaggio C è di tipo procedurale; ogni programma viene suddiviso in sottoprogrammi, ognuno dei quali svolge un determinato compito. I sottoprogrammi si usano anche
DettagliLa gestione della memoria
La gestione della memoria DOTT. ING. LEONARDO RIGUTINI DIPARTIMENTO INGEGNERIA DELL INFORMAZIONE UNIVERSITÀ DI SIENA VIA ROMA 56 53100 SIENA UFF. 0577234850-7102 RIGUTINI@DII.UNISI.IT HTTP://WWW.DII.UNISI.IT/~RIGUTINI/
DettagliLe variabili di Visual Basic consentono di memorizzare temporaneamente valori durante
Tiipii dii Datii iin Viisuall Basiic Le variabili di Visual Basic consentono di memorizzare temporaneamente valori durante l'esecuzione di un'applicazione. Alle variabili è associato un nome, utilizzato
DettagliINTRODUZIONE I CICLI DI BORSA
www.previsioniborsa.net 1 lezione METODO CICLICO INTRODUZIONE Questo metodo e praticamente un riassunto in breve di anni di esperienza e di studi sull Analisi Tecnica di borsa con specializzazione in particolare
DettagliGuida Joomla. di: Alessandro Rossi, Flavio Copes
Guida Joomla di: Alessandro Rossi, Flavio Copes Grafica e template 1. 15. La grafica e i template Personalizzare l'aspetto del sito aggiungendo nuovi template e customizzandoli 2. 16. Personalizzare il
DettagliI puntatori /2. Ad esempio. // inizio codice. #include <stdio.h> void mostra(int); int main() {int a = 10; mostra(a); return 0;}
I puntatori /2 In C, il passaggio dei parametri alle funzioni avviene sempre per copia, ovvero il valore del parametro viene copiato all'interno della variabile che rappresenta il parametro stesso nel
DettagliEsercizio 1. Esercizi 5. Esercizio 3. Esercizio 2 CICLI
Esercizi 5 Esercizio 1 Realizzare una funzione che, chiesto all utente un numero intero pari a N, ricavi e stampi a video tutte le terne pitagoriche con i cateti minori o uguali ad N. CICLI Una terna pitagorica
DettagliESERCIZI DI PROBLEM SOLVING E COMPOSIZIONE DEI DIAGRAMMI DI FLUSSO per le classi terza
ESERCIZI DI PROBLEM SOLVING E COMPOSIZIONE DEI DIAGRAMMI DI FLUSSO per le classi terza vers.3 in lavorazione Docente SAFFI FABIO Contenuti 01.Esercizi generici sul diagramma di flusso - flow chart... 2
DettagliIndirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili
Indirizzo di una funzione 2 Puntatori a funzioni Ver. 2.4 Si può chiamare una funzione utilizzando l indirizzo di memoria dal quale inizia il codice eseguibile della funzione stessa L indirizzo di memoria
Dettagli12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)
12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,
DettagliAccess. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database
Microsoft Access Introduzione alle basi di dati Access E un programma di gestione di database (DBMS) Access offre: un supporto transazionale limitato Meccanismi di sicurezza, protezione di dati e gestione
DettagliTesti di Esercizi e Quesiti 1
Architettura degli Elaboratori, 2009-2010 Testi di Esercizi e Quesiti 1 1. Una rete logica ha quattro variabili booleane di ingresso a 0, a 1, b 0, b 1 e due variabili booleane di uscita z 0, z 1. La specifica
DettagliGestione della memoria. Paginazione Segmentazione Segmentazione con paginazione
Gestione della memoria Paginazione Segmentazione Segmentazione con paginazione Modello di paginazione Il numero di pagina serve come indice per la tabella delle pagine. Questa contiene l indirizzo di base
Dettagli