Ambienti di Programmazione per il Software di Base

Slides:



Advertisements
Presentazioni simili
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
Advertisements

Stringhe di caratteri In linguaggio C.
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
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.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
Operatori di incremento e decremento
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Approfondimenti di C, Stringhe e file 13 Stringhe.
Script bash I file di comandi in Linux. BASH  Bourne Again Shell  Modalità interattiva o batch (file di comandi)  Ambiente di programmazione “completo”
1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Fondamenti di Informatica A - Massimo Bertozzi LE FUNZIONI.
1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Process synchronization
Gestione della memoria
ELEMENTI DI INFORMATICA
Ambienti di Programmazione per il Software di Base
© 2007 SEI-Società Editrice Internazionale, Apogeo
La classe String Una stringa è una sequenza di caratteri
Introduzione al linguaggio C
Tutorato Elementi di Informatica 2013
10. Programmazione Ricorsiva Ing. Simona Colucci
Process synchronization
L’AMBIENTE CODE BLOCKS E L’IO
I FILES AD ACCESSO SEQUENZIALE
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
TERNE PITAGORICHE Obiettivi dell’esercitazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Secondo Programma in C.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
© 2007 SEI-Società Editrice Internazionale, Apogeo
Programmazione e Laboratorio di Programmazione
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
APPUNTI SUL LINGUAGGIO C
La struttura dei primi programma in C
APPUNTI SUL LINGUAGGIO C Esercizi su File e Alberi Binari
Le stringhe in C++ Laboratorio 26 Aprile Dott. Serena Villata
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C Allocazione dinamica della memoria
Programmazione e Laboratorio di Programmazione
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Programmazione e Laboratorio di Programmazione
APPUNTI SUL LINGUAGGIO C
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Array e Stringhe Linguaggio C.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

Ambienti di Programmazione per il Software di Base Le Funzioni in C Il passaggio di parametri Le stringhe Argomenti della riga di comando Conversione dei dati in C Ambienti di Programmazione per il Software di Base

Ambienti di Programmazione per il Software di Base Funzioni In C le funzioni sono caratterizzate da un nome, dal tipo della variabile ritornata e da una lista di parametri (opzionali) La lista dei parametri (anche se vuota) deve essere esplicitata Il valore ritornato deve essere compatibile, a meno di conversione esplicita, con il tipo della funzione double max( double a, double b) { return (a>b) ? a : b; } Tipo ritornato Parametri Corpo della funzione Valore di ritorno Ambienti di Programmazione per il Software di Base

Prototipi delle funzioni Prima di essere usata, una funzione deve essere dichiarata (nel file che la usa) I prototipi rendono le funzioni in C “type safe”, nel senso che i valori reali degli argomenti vengono all’occorrenza convertiti nei tipi formali specificati dal prototipo #include <stdio.h> double max(double, double); int main() { double m = max(1, 3); printf(“Il massimo e` %d\n“, m ); return 0; } main.c double max (double a, double b) { return (a>b) ? a : b; } max.c Prototipo di max (normalmente in max.h) Ambienti di Programmazione per il Software di Base

Ambienti di Programmazione per il Software di Base Chiamata per valore Con il passaggio per valore la funzione non può modificare il valore dei suoi argomenti Es: int i = 5, j=7; Dopo la chiamata di greater (i,j) i vale sempre 5 e j vale sempre 7 bool greater(int i, int j) { // se i>j scambia i e j if (i>j) { int temp=i; i=j; j=temp; return true; } else return false; Argomenti passati “per valore” sono scambiati nella funzione ma nel programma chiamante hanno i valori vecchi Ambienti di Programmazione per il Software di Base

Puntatori come parametri L’uso dei puntatori permette ad una funzione di modificare il valore dei suoi argomenti Es: int i = 5, j=7; Dopo la chiamata di greater (&i,&j) i varrà 7 e j 5 bool greater(int *p1, int *p2) { /* se il valore puntato da p1 > valore puntato da p2 scambia i due valori*/ if (*p1>*p2) { int temp=*p1; *p1=*p2; *p2=temp; return true; } else return false; Se passo i puntatori le modifiche Hanno effetto sul programma chiamante Ambienti di Programmazione per il Software di Base

Chiamata per riferimento (ATTENZIONE: solo C++) L’uso dei riferimenti permette ad una funzione di modificare il valore dei suoi argomenti In C usare i puntatori (vedi lucido precedente) Con i riferimenti è sufficiente chiamare greater (i, j); Per ragioni di efficenza, oggetti di grandi dimensioni (in termini di memoria) vengono normalmente passati “by reference”. bool greater(int& i, int& j) { // se i>j scambia i e j if (i>j) { int temp=i; i=j; j=temp; return true; } else return false; Argomenti passati “by reference” possono essere modificati dalla funzione stessa Ambienti di Programmazione per il Software di Base

Le Stringhe in C : Definizioni ● Stringa: una sequenza di caratteri memorizzati in locazioni contigue di memoria e terminata dal carattere ‘\0’, detto “terminatore di stringa” x ‘s’ ‘t’ ‘r’ ‘i’ ‘n’ ‘g’ ‘a’ ‘\0’ Ambienti di Programmazione per il Software di Base

Le Stringhe in C : Ingresso/uscita di stringhe ● Creazione: char variabile[10]; char variabile[] = “valore_stringa”; ● Acquisizione: scanf(“%s”, address); con address espressione di tipo char * ● Modifiche allo stato della memoria: 1. memorizza i caratteri acquisiti da tastiera a partire dalla locazione di indirizzo address, fino al primo di un insieme di caratteri delimitatori (‘\n’, blank, …) escluso 2. aggiunge in coda ai caratteri memorizzati il terminatore di stringa Ambienti di Programmazione per il Software di Base

Le Stringhe in C : Ingresso/uscita di stringhe ● Esempio: char *stringa x ‘p’ ‘r’ #include <stdio.h> void main () { char stringa [10]; scanf(“%s”, stringa); } ‘o’ ‘v’ ‘a’ ‘\0’ prova Ambienti di Programmazione per il Software di Base

Le Stringhe in C : Ingresso/uscita di stringhe ● Visualizzazione: printf(“%s”, address); con address espressione di tipo char * ● Effetto: visualizza i caratteri in memoria a partire dalla locazione di indirizzo address, fino al primo terminatore di stringa ● Esempio: #include <stdio.h> void main () { char stringa [10]; scanf(“%s”, stringa); printf(“%s”, stringa); }; poi poi Ambienti di Programmazione per il Software di Base

Le Stringhe in C : Ingresso/uscita di stringhe ● Costante di tipo stringa: sequenza di caratteri racchiusa tra doppi apici ● Esempio: #include <stdio.h> void main () { printf("%s\n", "Allora!!!"); printf("%s\n", "Allo\0ra!!!"); } Allora!!! Allo Ambienti di Programmazione per il Software di Base

Le Stringhe in C : strlen() ● Attenzione: per poter utilizzare le funzioni seguenti è necessario includere la direttiva per il preprocessore #include <string.h> ● La funzione strlen(): int strlen (char *s) ● Valore restituito: il numero di caratteri memorizzati a partire da s fino al primo delimitatore di fine stringa escluso ● Molto informalmente: restituisce la lunghezza di s Ambienti di Programmazione per il Software di Base

Le Stringhe in C : strlen() ● Esempio: ‘p’ ‘r’ ‘o’ ‘v’ ‘a’ ‘\0’ x char *stringa #include <stdio.h> void main () { char stringa [10]; int lung; …. lung = strlen(stringa); } 5 Ambienti di Programmazione per il Software di Base

Le Stringhe in C : strcpy() ● La funzione strcpy(): char *strcpy (char *s1, char *s2) ● Modifiche allo stato della memoria: copia i caratteri memorizzati a partire da s2, fino al primo terminatore di stringa incluso, a partire da s1 ● Valore restituito: s1 ● Molto informalmente: sostituisce la stringa s1 con la stringa s2 Ambienti di Programmazione per il Software di Base

Le Stringhe in C : strcpy() ● Esempio: ‘p’ ‘r’ ‘o’ ‘n’ ‘t’ ‘i’ ‘\0’ ‘v’ ‘a’ char *s1 x char *s2 ‘v’ ‘i’ ‘a’ #include <stdio.h> void main () { char s1 [8]; char s2 [5]; …. printf(“%s”, strcpy(s1, s2); } ‘\0’ via s1 Ambienti di Programmazione per il Software di Base

Le Stringhe in C : strcat() ● La funzione strcat(): char *strcat(char *s1, char *s2) ● Descrizione: copia i caratteri memorizzati a partire da s2, fino al primo carattere di fine stringa incluso, a partire dall’indirizzo del primo carattere di fine stringa successivo a s1 ● Valore restituito: s1 ● Molto informalmente: concatena la stringa s2 alla stringa s1 Ambienti di Programmazione per il Software di Base

Le Stringhe in C : strcat() ● Esempio: ‘v’ ‘i’ ‘a’ char *s1 x ‘\0’ char *s2 “ ” ‘\0’ ‘v’ #include <stdio.h> void main () { char s1 [8]; char s2 [5]; …. strcat(s1, “ ”); printf(“%s”, strcat(s1, s2)); } ‘a’ ‘i’ ‘\0’ via vai s1 Ambienti di Programmazione per il Software di Base

Le Stringhe in C : strcmp() ● La funzione strcmp(): int strcmp(char *s1, char *s2); ● Valore restituito: confronta i caratteri memorizzati a partire da s1 con quelli memorizzati a partire da s2 fino a incontrare la prima coppia di caratteri differenti o il primo delimitatore di stringa Restituisce: 0 se ha raggiunto una coppia di caratteri di fine stringa un valore positivo se il carattere raggiunto a partire da s1 precede lessicograficamente quello raggiunto a partire da s2 un valore negativo altrimenti Ambienti di Programmazione per il Software di Base

Le Stringhe in C : strcmp() ● O più informalmente: 0 se le due stringhe sono uguali un valore positivo se la stringa s1 precede lessicograficamente la stringa s2 un valore negativo se la stringa s2 precede lessicograficamente la stringa s1 Ambienti di Programmazione per il Software di Base

Input dalla linea di comando in C Il C permette di leggere argomenti dalla linea di comando, e questi possono poi essere utilizzati all'interno dei programmi. In fase di lancio del programma, possiamo scrivere gli argomenti dopo il nome del programma da eseguire. Al fine di essere in grado di utilizzare tali argomenti, e' necessario definirli nella funzione main nel seguente modo: main(int argc, char **argv) argc e' il numero degli argomenti digitati, incluso il nome del programma argv e' un array di stringhe contenente ciascuno un argomento, compreso il nome del programma come primo elemento. Ambienti di Programmazione per il Software di Base

Input dalla linea di comando in C #include <stdio.h> main(int argc, char **argv) { /* programma per stampare gli argomenti dalla linea di comando */ int i; printf("argc=%d\n",argc); for(i=0;i < argc;++i) printf("argv[%d]:=%s\n",i,argv[i]); } Ambienti di Programmazione per il Software di Base

Input dalla linea di comando in C Se si e' compilato, chiamandolo args e fatto eseguire scrivendo: args f1 "f2" f3 4 stop! l'output sara': argc=6 argv[0]=args argv[1]=f1 argv[2]=f2 argv[3]=f3 argv[4]=4 argv[5]=stop! Ambienti di Programmazione per il Software di Base

Input dalla linea di comando in C Note: argv[0] e' il nome del programma; argc totalizza anche il nome del programma; tra gli argomenti, i caratteri "" vengono ignorati (sono considerati solamente delimitatori di argomenti); gli spazi bianchi delimitano gli argomenti; nel caso in cui sia necessario mantenere spazi bianchi, occorre metterli tra "". Ambienti di Programmazione per il Software di Base

Conversione dei dati in C Per convertire una stringa in un numero, la via più semplice è usare le funzioni di libreria (del C) atoi e atof : int atoi(const char *str); dove l’argomento è una stringa contenente la rappresentazione decimale di un numero intero, esegue la conversione di argomento e restituisce un valore di tipo int . double atof(const char *str); dove l‘argomento è una stringa contenente la rappresentazione decimale di un numero floating (in notazione normale o esponenziale), esegue la conversione di argomento e restituisce un valore di tipo double Entrambe le funzioni vanno utilizzate includendo l'header-file: <stdlib.h> Ambienti di Programmazione per il Software di Base

Conversione dei dati in C /* Converte una stringa in un intero */ #include <stdio.h> #include <stdlib.h> char stringNum[] = "1234"; main() { int intNum; intNum = atoi( stringNum ); printf(“intNum = %d\n", intNum ); } Ambienti di Programmazione per il Software di Base

Conversione dei dati in C Per convertire numeri in stringhe, è più conveniente (rispetto ad altre possibilità) usare la funzione di libreria (del C) sprintf. Infatti questa funzione, non solo esegue la conversione, ma permette anche di ottenere una stringa formattata nel modo desiderato. La funzione sprintf é identica alla printf salvo il fatto che scrive in una stringa anziché su stdout. Il primo argomento é la variabile stringa (definita come array di tipo char) in cui inserire i dati formattati. Il secondo argomento é la control-string (come il primo della printf). Il terzo argomento e i successivi sono i dati da formattare (come il secondo e i successivi della printf). Ambienti di Programmazione per il Software di Base

Conversione dei dati in C /* sprintf example */ #include <stdio.h> int main () { char buffer [50]; int n, a=5, b=3; n = sprintf (buffer, "%d plus %d is %d", a, b, a+b); printf ("[%s] is a %d char long string\n",buffer,n); return 0; } Output: [5 plus 3 is 8] is a 13 char long string Ambienti di Programmazione per il Software di Base

Ambienti di Programmazione per il Software di Base Esercizi proposti Scrivere un programma C che prenda come parametri da linea di comando due interi e ne stampi a schermo il prodotto. Scrivere un programma C che richieda di inserire parole da tastiera fino a che non venga digitata la stringa “EOF” e stampi a schermo il numero di volte che compare nel testo il carattere ‘a’ Ambienti di Programmazione per il Software di Base