Esercizi C sui tipi definiti dall’utente

Slides:



Advertisements
Presentazioni simili
Corso di Fondamenti di Programmazione canale E-O
Advertisements

INFORMATICA Altre Istruzioni di I/O
LINGUAGGIO DI PROGRAMMAZIONE C
INFORMATICA Algoritmi fondamentali
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
Iterazione A. Ferrari.
Stringhe di caratteri In linguaggio C.
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Introduzione al linguaggio C
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Anno accademico Array e puntatori in C.
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
INFORMATICA Strutture iterative
Programmazione Procedurale in Linguaggio C++
FUNZIONI DI BIBLIOTECA
Tail recursion: esempio
Algoritmi Politecnico di Milano C Primi programmi Politecnico di Milano.
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.
Process synchronization
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Tipi di dati strutturati Marco D. Santambrogio – Ver. aggiornata al 4 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 3: 24 Ottobre 2011 Sadegh Astaneh – Marco D. Santambrogio –
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
APPUNTI SUL LINGUAGGIO C
INFORMATICA Esercizi.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
Esercizio: Copiare un file in un nuovo file mediante le funzioni read e write.
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 --
Politecnico di Milano Esercizi Stringhe Ricerca binaria.
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.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
Massimo Comun Divisore
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
Esercizi su File.
Università degli Studi di BresciaA.A. 2012/2013 Fondamenti di Programmazione Docente: Alessandro SaettiA.A. 2012/2013 Università degli Studi di Brescia.
Università degli Studi di BresciaA.A. 2012/2013 Fondamenti di Programmazione Docente: Alessandro SaettiA.A. 2012/2013 Università degli Studi di Brescia.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
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.
lun mar mer gio ven SAB DOM FEBBRAIO.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 20 Ottobre 2014.
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
CORSO DI PROGRAMMAZIONE II
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (III)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Codifica binaria dell’informazione Marco D. Santambrogio – Ver. aggiornata al 11.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array n-dimensionali e tipi di dati strutturati Marco D. Santambrogio – Ver. aggiornata.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Esercizi sui dati strutturati 13 Tipi di dati strutturati.
Array n-dimensionali e tipi di dati strutturati
Array n-dimensionali e tipi di dati strutturati
Array n-dimensionali e tipi di dati strutturati
Transcript della presentazione:

Esercizi C sui tipi definiti dall’utente Typedef, tipi enumerativi e strutturati

Definire un nuovo tipo Sinonimi: typedef int Intero; Intero a; int b; typedef char Stringa[10]; Stringa c; char d[10]; Tipi enumerativi: typedef enum {lun,mar,mer,gio,ven,sab,dom} Settimana; Settimana giorno; giorno = lun; giorno = 3; /* 3 equivale a gio */ Non funziona con scanf() e printf().

Definire un nuovo tipo Tipi strutturati: typedef struct { char campo1; float campo2; int campo3[2]; } Record; Record ilMioRecord; ? ilMioRecord 24.56 23 A ilMioRecord 45 campo1 campo2 campo3 ilMioRecord.campo1 = 'A'; ilMioRecord.campo2 = 24.56; ilMioRecord.campo3[0] = 23; ilMioRecord.campo3[1] = 45; 1 x 1 byte + 1 x 4 byte + 2 x 2 byte = --------------- 9 byte

Numeri complessi L’utente inserisce due numeri complessi (parte reale e parte immaginaria) e l’elaboratore esegue l’operazione di somma Es: 3+4i + 5-6i = 8-2i Il programma chiede all’utente se vuole calcolare un’altra somma. Se l’utente inserisce il carattere ‘q’ il programma termina, altrimenti ricomincia daccapo.

Numeri complessi #include <stdio.h> void main() { typedef struct float reale; float immag; } Complesso; Complesso n1, n2, somma; char fine; .

Numeri complessi do { printf ("Numero 1, parte reale: "); scanf ("%f", &n1.reale); printf ("Numero 1, parte immag: "); scanf ("%f", &n1.immag); printf ("Numero 2, parte reale: "); scanf ("%f", &n2.reale); printf ("Numero 2, parte immag: "); scanf ("%f", &n2.immag); .

Numeri complessi somma.reale = n1.reale + n2.reale; somma.immag = n1.immag + n2.immag; printf ("Totale: %f%+fi\n", somma.reale, somma.immag); printf ("Fine? "); scanf (" %c", &fine); /*vedi nota su scanf()*/ }while (fine != 'q'); } "%f" stampa un numero float con il segno “-” se è negativo, senza segno se è positivo "%+f" stampa un numero float con il segno “-” se è negativo, con il segno “+” se è positivo "i" non fa parte degli specificatori di formato.

Una nota sulla scanf() Quando inserisco dei dati da tastiera, gli stessi vengono accodati nello standard input (stdin) del programma Anche in carattere ENTER finale viene accodato: Se inserisco: 123 [ENTER] Ottengo in stdin: 123 ‘\n’ Eseguo scanf(“%d”,&x); stdin diventa: ‘\n’ Inserisco il numero 432; stdin diventa: ‘\n’ 432 ‘\n’ La scanf() scarta l’eventuale ‘\n’ che incontra prima del numero da leggere ma lascia il ‘\n’ finale.

Una nota sulla scanf() Adesso proviamo a leggere un carattere: Inserisco il carattere ‘w’; stdin diventa: ‘\n’ ‘w’ ‘\n’ Eseguo scanf(“%c”,&y); stdin diventa: ‘w’ ‘\n’ La scanf(), quando legge un carattere (e solo in questo caso), NON scarta l’eventuale ‘\n’ iniziale! Lo mette nella variabile y e lascia il resto in stdin Senza immettere nient’altro, eseguo un’altra scanf(“%c”,&y); stdin diventa: ‘\n’ Questa volta la scanf() mette ‘w’ in y Quindi: se devo leggere caratteri (“&c”) ma prima ho effettuato altre letture, devo togliere da stdin il carattere ‘\n’ rimasto.

Squadra di calcio Il programma, partendo da un array che contiene i dati personali dei calciatori di una squadra, permette di calcolare: totale goal fatti dalla squadra goal fatti dagli attaccanti goal fatti dai centrocampisti goal fatti dai difensori totale goal subiti dalla squadra Il programma inoltre visualizza i dati personali di tutti i giocatori Per ogni giocatore, il programma memorizza: numero di maglia ruolo goal fatti (subiti, se è un portiere).

Squadra di calcio #include <stdio.h> void main() { typedef enum {portiere,difensore, centrocampista,attaccante} TipoRuolo; typedef struct unsigned int numero; unsigned int goal; TipoRuolo ruolo; } Giocatore; const unsigned int MAX = 30; Giocatore giocatori[MAX]; unsigned int i, numGiocatori; unsigned int totaleGoalFatti = 0, totaleGoalSubiti = 0; .

Squadra di calcio unsigned int goalAttaccanti=0, goalDifensori=0, goalCentrocampisti=0; /* DATI. In programma vero, letti da un file */ giocatori[0].numero = 9; giocatori[0].goal = 9; giocatori[0].ruolo = attaccante; giocatori[1].numero = 1; giocatori[1].goal = 9; giocatori[1].ruolo = portiere; numGiocatori = 2; /* Fine DATI. */ .

Squadra di calcio for (i = 0; i < numGiocatori; i++) { printf ("Giocatore:%u, ruolo:%u, goal:%u\n", giocatori[i].numero, giocatori[i].ruolo, giocatori[i].goal); if (giocatori[i].ruolo != portiere) totaleGoalFatti = totaleGoalFatti + giocatori[i].goal; if (giocatori[i].ruolo == attaccante) goalAttaccanti = goalAttaccanti + giocatori[i].goal; } .

Squadra di calcio else if (giocatori[i].ruolo==centrocampista) { goalCentrocampisti = goalCentrocampisti + giocatori[i].goal; } else goalDifensori = goalDifensori + giocatori[i].goal; else /* il giocatore è un portiere */ totaleGoalSubiti = totaleGoalSubiti + giocatori[i].goal; } .

Squadra di calcio } /* fine for */ printf ("Goal fatti: %u\n", totaleGoalFatti); printf ("Attacco:%u, centroc:%u, difesa: %u\n", goalAttaccanti, goalCentrocampisti, goalDifensori); printf ("Goal subiti:%u\n", totaleGoalSubiti); } .

Schedine Il programma, partendo da un array di dimensione prefissata che contiene in ogni cella: codice giocata data della giocata colonna con i tredici segni Copia in un altro vettore solo le giocate dell’anno 2002 Quindi, visualizza queste giocate.

Schedine #include <stdio.h> void main() { const unsigned int NUMSEGNI = 13, NUMGIOCATE = 3; const unsigned int ANNOCERCATO = 2002; typedef struct unsigned int giorno; unsigned int mese; unsigned int anno; } TipoData; unsigned int codice; TipoData data; char colonna[NUMSEGNI]; } Giocata; .

Schedine Giocata giocate[NUMGIOCATE], trovate[NUMGIOCATE]; unsigned int i, k, j = 0; for (i = 0; i < NUMGIOCATE; i++) { printf ("Codice: "); scanf ("%u", &giocate[i].codice); printf ("Giorno mese anno: "); scanf ("%u", &giocate[i].data.giorno); scanf ("%u", &giocate[i].data.mese); scanf ("%u", &giocate[i].data.anno); scanf ("%*c"); printf ("Colonna: "); for (k = 0; k < NUMSEGNI; k++) { /* tutti insieme */ scanf ("%c", &giocate[i].colonna[k]); } } .

Schedine for (i = 0; i < NUMGIOCATE; i++) { if (giocate[i].data.anno == ANNOCERCATO) trovate[j] = giocate[i]; j++; } } .

Schedine for (i = 0; i < j; i++) { printf ("Cod: %u ", trovate[i].codice); printf ("Data: %u/%u/%u\n", trovate[i].data.giorno, trovate[i].data.mese, trovate[i].data.anno); for (k = 0; k < NUMSEGNI; k++) printf ("%c ", trovate[i].colonna[k]); } printf ("\n"); } .