Linguaggio C Guida alla programmazione. Capitolo 2. Soluzioni degli esercizi (Applica le abilità)
|
|
- Geronima Mancuso
- 8 anni fa
- Visualizzazioni
Transcript
1 Soluzioni degli esercizi (Applica le abilità) Capitolo 2 1. a) Linux ls /home/gabriele/oro MS/DOS o Windows dir \home\gabriele\oro b) Linux ls /home/gabriele MS/DOS o Windows dir \home\gabriele c) Linux ls /bin MS/DOS o Windows dir \bin d) Linux ls /home/gabriele/oro/gioielli MS/DOS o Windows dir \home\gabriele\oro\gioielli e) Linux ls /home/gabriele/oro/a* MS/DOS o Windows dir \home\gabriele\oro\a* f) Linux ls /bin/l* MS/DOS o Windows dir \bin\l* 2. a) Linux ls MS/DOS o Windows dir b) Linux ls.. MS/DOS o Windows dir.. c) Linux ls../../../bin MS/DOS o Windows dir..\..\..\bin d) Linux ls gioielli MS/DOS o Windows dir gioielli e) Linux ls a* MS/DOS o Windows dir a* f) Linux ls../../../bin/l* MS/DOS o Windows dir..\..\..\bin\l* 3. La figura a cui si fa riferimento nell esercizio è Figura 2.3 (e non la 2.9 come erroneamente indicato). a) Linux cd /etc MS/DOS o Windows cd \etc b) Linux cd /home/pluto MS/DOS o Windows cd \home\pluto c) Linux cd /home MS/DOS o Windows cd \home d) Linux cd / MS/DOS o Windows cd \ e) Linux cd /bin ls cd /home/nora MS/DOS o Windows cd \bin dir cd \home\nora
2 4. a) Linux cd../../etc MS/DOS o Windows cd..\../etc b) Linux cd../pluto MS/DOS o Windows cd..\pluto c) Linux cd.. MS/DOS o Windows cd.. d) Linux cd../.. MS/DOS o Windows cd..\.. e) Linux cd../../bin ls cd../home/nora MS/DOS o Windows cd..\..\bin dir cd..\home\nora 5. La directory a cui si fa riferimento nei punti a e c è Gabriele (e non melodia come erroneamente indicato). a) Linux cd /home/gabriele MS/DOS o Windows cd \home\gabriele b) Linux cd../gabriele MS/DOS o Windows cd..\gabriele c) Linux mkdir /home/gabriele/programmi MS/DOS o Windows mkdir \home\gabriele\programmi d) Se la directory corrente è ancora nora: Linux mkdir../gabriele/programmi MS/DOS o Windows mk dir..\gabriele\programmi Se invece con i comandi indicati nei punti precedenti la directory corrente è ora Gabriele: Linux mkdir programmi MS/DOS o Windows mkdir programmi e) Se la directory corrente è ancora nora: Linux rmdir../gabriele/programmi MS/DOS o Windows rmdir..\gabriele\programmi Se invece, con i comandi indicati nei punti precedenti, la directory corrente è ora Gabriele: Linux rmdir programmi MS/DOS o Windows rmdir programmi 6. L esercizio presenta una difficoltà in quanto il nome del file contiene un carattere spazio al suo interno, C DOC, se al posto dello spazio ci fosse un carattere di sottolineatura, C02_2008.DOC, le soluzioni sarebbero le seguenti: a) Linux cp C02_2008.DOC C02BACKUP.DOC MS/DOS o Windows copy C02_2008.DOC C02BACKUP.DOC b) Linux cp C02_2008.DOC../C02COPIA.DOC MS/DOS o Windows copy C02_2008.DOC..\C02COPIA.DOC c) Linux rm C02_2008.DOC MS/DOS o Windows del C02_2008.DOC Per porter considerare lo spazio si deve porre il nome tra doppi apici: a) MS/DOS o Windows copy "C DOC" C02BACKUP.DOC b) MS/DOS o Windows copy "C DOC"..\C02COPIA.DOC c) MS/DOS o Windows del "C DOC" 7. a) Linux mkdir fileprecedenti MS/DOS o Windows mkdir fileprecedenti
3 b) Linux cp * fileprecedenti MS/DOS o Windows copy *.* fileprecedenti c) Linux rm *.DOC MS/DOS o Windows del *.DOC 8. a) Linux mkdir T08/filePrecedenti MS/DOS o Windows mkdir T08\filePrecedenti b) Linux cp T08/* T08/filePrecedenti MS/DOS o Windows copy T08\*.* T08\filePrecedenti c) Linux rm T08/*.DOC MS/DOS o Windows del T08\*.DOC
4 Capitolo 3 1 Si suppone che il cellulare utilizzato sia in grado di effettuare la ricerca di un nome digitandone in sequenza le lettere. a. Premi sul cellulare il tasto che attiva la rubrica b. premi la prima lettera del nome ricercato c. fintantoché non appare sullo schermo l intero nome ricercato oppure il messaggio nessuna corrispondenza premi la successiva lettera del nome d. Se è apparso sullo schermo l intero nome ricercato premere il tasto di avvio chiamata telefonica. d. fine 2 a. Scrivi 1 b. fintantoché il numero scritto è diverso da 100, scrivi il numero precedente + 1 c. fine 3 a. Scrivi 1 b. fintantoché il numero scritto è diverso da 99, scrivi il numero precedente + 2 c. fine 4 a. Scrivi -2 b. fintantoché il numero scritto è diverso da -50, scrivi il numero precedente - 2 c. fine 5 a. Scrivi 150 b. addiziona 1 al numero precedente c. se il resto della divisione intera del numero ottenuto per 4 è diverso da zero scrivi il numero d. fintantoché il numero ottenuto è diverso da -4 vai all istruzione b e. fine 6 a. Suddividi le carte in 4 mazzi, ognuno dei quali costituito da carte dello stesso seme b. per ogni seme ordina le carte dall asso al re c. prendi il mazzo di cuori, quadri, fiori e picche La descrizione può avere un maggior dettaglio, per esempio: a. Suddividi le carte in 4 mazzi, ognuno dei quali costituito da carte dello stesso seme b. per ogni seme prendi l asso, prendi il due, prendi il tre.. prendi il re c. prendi il mazzo di cuori, quadri, fiori e picche 7 Alla prima mossa si devono lasciare all avversario 9 oggetti (4i + 1, i = 2) a. Raccogli 2 oggetti b. il secondo giocatore raccoglie m oggetti (1 m 3) c. finché ci sono ancora oggetti sul tavolo: raccogli 4 m oggetti e vai all istruzione b d. fine (il secondo giocatore gioca sempre per ultimo e il primo giocatore vince sempre) 8 a. Il primo giocatore raccoglie m oggetti (m può essere 1 o 3) b. raccogli m oggetti c. il primo giocatore raccoglie m oggetti (1 m 3) d. finché ci sono ancora oggetti sul tavolo: raccogli 4 m oggetti e vai all istruzione c e. fine (il primo giocatore gioca sempre per ultimo e il secondo giocatore vince sempre)
5 9 Non è possibile scrivere un algoritmo vincente quando gli oggetti sono n = 4i + 1, per esempio 9, 13, 17, 21 ecc. In tali circostanze il primo giocatore non può lasciare al secondo un numero di oggetti della forma 4i + 1. Negli altri casi (n diverso da 4i + 1) l algoritmo è il seguente. a. Raccogli j oggetti, dove j = 2 se r = 3 (r è il resto della divisione intera di n per 4), j = 1 se r = 2, j = 3 se r = 0 b. il secondo giocatore raccoglie m oggetti (1 m 3) c. finché ci sono ancora oggetti sul tavolo: raccogli 4 m oggetti e vai all istruzione b d. fine (il secondo giocatore gioca sempre per ultimo e il primo giocatore vince sempre) 10 a. Prendi i coefficienti a, b e c b. calcola Δ = b 2 4ac c. se Δ < 0 non esistono radici reali, altrimenti se Δ = 0 allora x 1 = x 2 = b/2a, altrimenti x 1 = ( b + Δ)/2a, x 2 = ( b Δ)/2a 12 a. Scrivi 1 b. considera il primo numero naturale c. addiziona al numero scritto il successivo numero naturale d. fintantoché il numero ottenuto è minore di 1000 scrivi il numero e vai all istruzione b e. fine 13 a. Considera il primo numero naturale b. scrivi il numero naturale considerato moltiplicato due volte per se stesso c. fintantoché il numero ottenuto è minore di considera il successivo numero naturale e vai all istruzione b d. fine
6 Capitolo 4 2 numero = 1; while(numero<101) scrivi numero; numero = numero + 1; o, tra le tante alternative: numero = 0; do numero = numero + 1; scrivi numero; while (numero!=100); 3 numero = 1; while(numero<100) scrivi numero; numero = numero + 2; 5 numero = 150; while(numero<0) if(numero%4!=0) scrivi numero; numero = numero + 1; 7 n è la variabile che contiene il numero di oggetti con cui si gioca, mentre m è la variabile che contiene il numero di oggetti che preleva il secondo giocatore. Si dà per scontato che il secondo giocatore raccolga 1, 2 o 3 oggetti, per cui l istruzione prendi m; assegnerà a m un valore intero compreso tra 1 e 3. In realtà questi valori andrebbero controllati. n = 11; n = n 2; while(n>4) prendi m; n = n m; n = n (4 m); scrivi "Tocca al secondo giocatore, e il primo ha vinto" Naturalmente avremmo potuto scrivere al posto delle ultime due istruzioni n=n m (4 m). 8 Nota: si dà per scontato che il primo giocatore raccolga 1 o 3 oggetti al primo giro e 1, 2 o 3 oggetti ai giri successivi. In realtà questi valori andrebbero controllati.
7 n = 11; prendi m; n = n m; while(n>4) prendi m; n = n m; n = n (4 m); scrivi "Tocca al primo giocatore, e il primo ha vinto" 9 Non è possibile scrivere un algoritmo vincente quando gli oggetti sono n = 4i + 1, per esempio 9, 13, 17, 21 ecc. In tali circostanze il primo giocatore non può lasciare al secondo un numero di oggetti della forma 4i + 1. Negli altri casi (n diverso da 4i+1) l algoritmo è il seguente. prendi n; r = n % 4; if(r=3) j=2; if(r=2) j=1; if(r=0) j=3); n = n j; while(n>4) prendi m; n = n m; n = n (4 m); scrivi "tocca al secondo giocatore, e il primo ha vinto" Abbiamo utilizzato una sequenza di tre if per determinare il valore di j; avremmo potuto utilizzare una cascata di if (vedi Capitolo 7): if(r=3) j=2; else if(r=2) j=1; else j=3; Dato che nel nostro caso i valori ammissibili del resto della divisione intera di n per 4 possono essere solo 0, 2, 3 (1 non può essere, altrimenti n sarebbe della forma 4i + 1) possiamo evitare l ultima if: if(r=0) e mettere direttamente l else. 13 numero = 1; naturale = 2; while(numero<1000) scrivi numero; numero = numero + naturale; naturale = naturale + 1; 14 numero = 1; while(numero*numero*numero<10000) scrivi numero*numero*numero; numero = numero + 1;
8 Capitolo 5 5 #include <math.h> #define ZERO 0 #define TOP 1000 int a, b, c, x, y; printf("valore di x: "); scanf("%d", &x); printf("valore di y: "); scanf("%d", &y); a = ZERO abs(x); b = TOP abs(y); c = a*b; printf("valore di a: %d\n", a); printf("valore di b: %d\n", b); printf("valore di c: %d\n", c); SUGGERIMENTI DI PROGRAMMAZIONE Non si riescono a leggere i risultati nella finestra di esecuzione del programma Se eseguendo i programmi non si riescono a leggere i risultati, la causa potrebbe essere la chiusura immediata della finestra d esecuzione che non lascia il tempo per osservare l output del programma sul video. Per ovviare all inconveniente, si può utilizzare il seguente artifizio facile da interpretare, ma che comunque verrà spiegato nel proseguo dello studio. Inserire la dichiarazione della variabile carattere pausa: char pausa; Aggiungere come ultime due istruzioni del programma: che mettono in attesa il programma in esecuzione della pressione di un tasto da parte dell utente. Sarebbe meglio farle precedere da un messaggio esplicativo. printf("un tasto qualsiasi per continuare\n"); SUGGERIMENTI DI PROGRAMMAZIONE errore di compilazione 'abs' undeclared In alcune implementazioni la libreria math.h non contiene abs ma solo fabs, che restituisce il valore assoluto di valori in virgola mobile, in tal caso il compilatore ritorna un errore del tipo: `abs' undeclared (first use this function) in tal caso sostituire nel programma fabs ad abs. Il compilatore avvertirà (Warning) che viene effettuata una conversione da intero a double, ma in questo caso tutto funziona correttamente: [Warning] converting to `int' from `double'
9 11 Visualizza Visualizzano 48, -60, 6 e Visualizzano 24, -84, -6 e Visualizzano 37, -48, 5 e 2.
10 Capitolo #define A 2 #define B 545 char pausa; printf("%7d%4d\n", A, B); printf("%1d%3d\n", A, B); printf("%1d%2d\n", A, B); printf("%7d%4d%4d\n", A, B, A+B); printf("%7d%4d%4d\n", A, B, A*B); printf("%7d%4d%5d\n", A, B, A*B+A); printf("%7d%4d%9d\n", A, B, A*A*B*B); 6 char pausa; char c1, c2, c3; c1='p'; c2='&'; c3='f'; printf("%c%c%c\n", c1, c2, c3); printf("%c%c %c\n", c1, c2, c3); printf("%c %c %c\n", c1, c2, c3); printf("padre:%c %c Figlio:%c\n", c1, c2, c3); printf("padre: %c %c Figlio: %c\n", c1, c2, c3); 7 char pausa; char asso, re, donna; int a, r, d; asso='a'; re='r'; donna='d';
11 a=11; r=10; d=9; printf("%c %d %c %d %c %d\n", asso, a, re, r, donna, d); printf("%c%c%c %d %d %d\n", asso, re, donna, a, r, d); printf("%d %c %d %c %d %c\n", a, asso, r, re, d, donna); printf("%d %c %d %c %d %c\n", d, donna, r, re, a, asso); printf("asso %c%d RE %c%d Donna %c%d\n", asso, a, re, r, donna, d);
12 Capitolo 7 2 /* Determina il maggiore tra quattro valori */ int a, b, c, d; printf("\ndigita quattro valori interi distinti: "); scanf("%d", &a); scanf("%d", &b); scanf("%d", &c); scanf("%d", &d); if(a>b) if(a>c) if(a>d) printf("il maggiore e': %d\n", a); else printf("il maggiore e': %d\n", d); else if(c>d) printf("il maggiore e': %d\n", c); else printf("il maggiore e': %d\n", d); else if(b>c) if(b>d) printf("il maggiore e': %d\n", b); else printf("il maggiore e': %d\n", d); else if(c>d) printf("il maggiore e': %d\n", c); else printf("il maggiore e': %d\n", d); 4 /* Determina il maggiore e il minore fra tre valori */ int a, b, c; printf("\ndigita tre valori interi distinti: "); scanf("%d", &a); scanf("%d", &b); scanf("%d", &c); if(a>b) if(a>c) printf("il maggiore e': %d\n", a); if(b<c) printf("il minore e': %d\n", b); else printf("il minore e': %d\n", c);
13 else printf("il maggiore e': %d\n", c); printf("il minore e': %d\n", b); else if(b>c) printf("il maggiore e': %d\n", b); if(a<c) printf("il minore e': %d\n", a); else printf("il minore e': %d\n", c); else printf("il maggiore e': %d\n", c); printf("il minore e': %d\n", a); 5 /* Esempio visualizzazione menu e controllo scelte utente */ char scelta; printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); printf("\n MENU DI PROVA\n"); printf("\n a) Per immettere dati"); printf("\n b) Per determinare il maggiore"); printf("\n c) Per determinare il minore"); printf("\n d) Per ordinare"); printf("\n e) Per visualizzare"); printf("\n\n Scelta: "); scelta = getchar(); switch(scelta) case 'a': printf("\n In esecuzione l'opzione a"); case 'b': printf("\n In esecuzione l'opzione b"); case 'c': printf("\n In esecuzione l'opzione c"); case 'd': printf("\n In esecuzione l'opzione d"); case 'e': printf("\n In esecuzione l'opzione e"); default: printf("\n Opzione inesistente");
14 9 int punteggio = 0; char risposta; char pausa; printf("\nil matematico Kummer e' vissuto nel '700 (s/n)? "); scanf("%c", &risposta); if(risposta=='n') punteggio = punteggio + 1; printf("\nl'ultimo teorema di Fermat e' stato dimostrato alla fine del '900 (s/n)? "); scanf("%c", &risposta); if(risposta=='s') punteggio = punteggio + 1; printf("\nla cardinalita' di tutti gli interi e maggiore di quella dei soli interi pari(s/n)? "); scanf("%c", &risposta); if(risposta=='n') punteggio = punteggio + 1; printf("\npunteggio: %d su 3", punteggio); printf("\npremi un tasto per continuare."); 10 int punteggio = 0; char risposta; char pausa; printf("\nil matematico Kummer e' vissuto nel '700 (s/n)? "); scanf("%c", &risposta); if(risposta=='n') punteggio = punteggio + 1; else punteggio = punteggio - 1; printf("\nl'ultimo teorema di Fermat e' stato dimostrato alla fine del '900 (s/n)? "); scanf("%c", &risposta); if(risposta=='s') punteggio = punteggio + 1; else punteggio = punteggio - 1; printf("\nla cardinalita' di tutti gli interi e maggiore di quella dei soli interi pari(s/n)? "); scanf("%c", &risposta); if(risposta=='n') punteggio = punteggio + 1; else punteggio = punteggio - 1; printf("\npunteggio: %d su 3", punteggio); printf("\npremi un tasto per continuare.");
15 11 int punteggio = 0; char risposta; char pausa; printf("\nil matematico Kummer e' vissuto nel '700 (s/n)? "); scanf("%c", &risposta); if(risposta=='n') punteggio = punteggio + 1; printf("\npitagora e' vissuto nel III secolo a.c. (s/n)? "); scanf("%c", &risposta); if(risposta=='n') punteggio = punteggio + 1; else punteggio = punteggio - 1; printf("\neuclide e' vissuto nel III secolo a.c. (s/n)? "); scanf("%c", &risposta); if(risposta=='s') punteggio = punteggio + 1; else punteggio = punteggio - 1; printf("\npunteggio: %d su 3", punteggio); else punteggio = punteggio - 1; printf("\nl'ultimo teorema di Fermat e' stato dimostrato alla fine del '900 (s/n)? "); scanf("%c", &risposta); if(risposta=='s') punteggio = punteggio + 1; else punteggio = punteggio - 1; printf("\nla cardinalita' di tutti gli interi e maggiore di quella dei soli interi pari? "); scanf("%c", &risposta); if(risposta=='n') punteggio = punteggio + 1; else punteggio = punteggio - 1; printf("\npunteggio: %d su 3", punteggio); printf("\npremi un tasto per continuare."); 12 int punteggio = 0; char risposta; char pausa; printf("\nil matematico Kummer e' vissuto nel '700 (s/n)? "); scanf("%c", &risposta); if(risposta=='n')
16 punteggio = punteggio + 1; printf("\npitagora e' vissuto nel III secolo a.c. (s/n)? "); scanf("%c", &risposta); if(risposta=='n') punteggio = punteggio + 1; printf("\ngauss e' vissuto dopo Galileo (s/n)? "); scanf("%c", &risposta); if(risposta=='s') punteggio = punteggio + 1; else punteggio = punteggio - 1; else punteggio = punteggio - 1; printf("\neuclide e' vissuto nel III secolo a.c. (s/n)? "); scanf("%c", &risposta); if(risposta=='s') punteggio = punteggio + 1; else punteggio = punteggio - 1; printf("\npunteggio: %d su 3", punteggio); else punteggio = punteggio - 1; printf("\nl'ultimo teorema di Fermat e' stato dimostrato alla fine del '900 (s/n)? "); scanf("%c", &risposta); if(risposta=='s') punteggio = punteggio + 1; else punteggio = punteggio - 1; printf("\nla cardinalita' di tutti gli interi e maggiore di quella dei soli interi pari? "); scanf("%c", &risposta); if(risposta=='n') punteggio = punteggio + 1; else punteggio = punteggio - 1; printf("\npunteggio: %d su 3", punteggio); printf("\npremi un tasto per continuare."); 13 int punteggio = 0; char risposta; char pausa; printf("\nil matematico Kummer e' vissuto nel '700 (s/n)? "); scanf("%c", &risposta); if(risposta=='n') punteggio = punteggio + 1; printf("\npitagora e' vissuto nel III secolo a.c. (s/n)? "); scanf("%c", &risposta);
17 if(risposta=='n') punteggio = punteggio + 1; printf("\ngauss e' vissuto dopo Galileo (s/n)? "); scanf("%c", &risposta); if(risposta=='s') punteggio = punteggio + 1; else punteggio = punteggio - 1; else punteggio = punteggio - 1; printf("\neuclide e' vissuto nel III secolo a.c. (s/n)? "); scanf("%c", &risposta); if(risposta=='s') punteggio = punteggio + 1; else punteggio = punteggio - 1; printf("\npunteggio: %d su 3", punteggio); else punteggio = punteggio - 1; printf("\nl'ultimo teorema di Fermat e' stato dimostrato alla fine del '900 (s/n)? "); scanf("%c", &risposta); if(risposta=='s') punteggio = punteggio + 1; printf("\nriemann e' nato dopo Gauss (s/n)? "); scanf("%c", &risposta); if(risposta=='s') punteggio = punteggio + 1; else punteggio = punteggio - 1; else punteggio = punteggio - 1; printf("\nla cardinalita' di tutti gli interi e maggiore di quella dei soli interi pari? "); scanf("%c", &risposta); if(risposta=='n') punteggio = punteggio + 1; else punteggio = punteggio - 1; printf("\npunteggio: %d su 3", punteggio); printf("\npremi un tasto per continuare.");
18 Capitolo 8 1 /* Verifica il valore delle espressioni date */ int a, b, c, ris; a = 5; b = 35; c = 7; ris = a+b*c; printf("\n a) %d", ris); ris = a>b; printf("\n b) %d", ris); ris = (a+b) * (a<b); printf("\n c) %d", ris); ris = (a+b) && (a<b); printf("\n d) %d", ris); ris = (a+b) (a>b); printf("\n e) %d", ris); ris = ((a*c) b) (a>b); printf("\n f) %d", ris); ris = ((a*c)!= b) (a>b); printf("\n g) %d", ris); ris = (a>b) (a<c) (c==b); printf("\n h) %d\n", ris); /* O ALTERNATIVAMENTE ALL'INTERNO DELLE PRINTF */ printf("\n a) %d", a+b*c); printf("\n b) %d", a>b); printf("\n c) %d", (a+b) * (a<b)); printf("\n d) %d", (a+b) && (a<b)); printf("\n e) %d", (a+b) (a>b)); printf("\n f) %d", ((a*c) b) (a>b)); printf("\n g) %d", ((a*c)!= b) (a>b)); printf("\n h) %d\n", (a>b) (a<c) (c==b)); I risultati visualizzati dal programma saranno i seguenti: a) 250 b) 0 c) 40 d) 1 e) 1 f) 0 g) 0 h) 1 2 I risultati visualizzati dal programma saranno i seguenti: a) Vero (1) b) Falso (0) c) Vero (1) d) Vero (1) e) Falso (0) f) Vero (1) 3 I risultati visualizzati dal programma saranno: a) vero (1) b) falso (0) c) vero (1) d) vero (1) e) vero (1) f) falso (0)
19 4 d = (a*2+b)!= c? a*b*c: a+b+c; 5 printf("\n Il maggiore e': %d", (x=(a>b)?a:b)>c?x:c); dove x è una variabile int.
20 Capitolo 9 1 /* Determina il fattoriale dei numeri minori o uguali all'intero immesso dall'utente */ int n, fat, aux; printf("calcolo DEI FATTORIALI DEI NUMERI <= N\n\n"); printf("inser. n: "); scanf("%d", &n); fat = 1; printf("il fattoriale di: 0 ha valore: %d\n", fat); for(aux=1; aux<=n; aux++) fat = fat*aux; printf("il fattoriale di: %d ha valore: %d\n", aux, fat); 2 /* Determina il maggiore, il minore e la media dei valori immessi */ #include <limits.h> int i, n, numero, max, min, media; printf("maggiore MINORE E MEDIA\n"); min = INT_MAX; max = INT_MIN; media = 0; i = 1; do printf("\nlunghezza della sequenza: "); scanf("%d", &n); while(n<1); for(i=1; i<=n; i++) printf("valore int.: \t"); scanf("%d", &numero); if(numero>max) max = numero; else if(numero<min) min = numero; media = media+numero; printf("maggiore: %d\n", max); printf("minore: %d\n", min); printf("media: %d\n", media/n);
21 3 /* Visualizza un rettangolo di cornice * e parte interna Q; le dimensioni del rettangolo sono decise dall'utente */ int i, j, linee, colonne; do printf("\nnumero di linee: "); scanf("%d", &linee); while(linee<1); do printf("\nnumero di colonne: "); scanf("%d", &colonne); while(colonne<1); for(i=1; i<=linee; i++) for(j=1; j<=colonne; j++) if(i==1 i==linee j==1 j==colonne) printf("*"); if(j==colonne) printf("\n"); else printf("q"); 4 /* Visualizza tanti rettangoli quanti ne desidera l'utente con caratteri e dimensioni scelti a tempo di esecuzione */ int i, j, y, linee, colonne, volte; char cornice, interno; do printf("\nnumero di linee: "); scanf("%d", &linee); while(linee<1); do printf("\nnumero di colonne: "); scanf("%d", &colonne); while(colonne<1); printf("\ncarattere della cornice: "); scanf("%1s", &cornice); printf("\ncarattere dell'interno: "); scanf("%1s", &interno); do printf("\nnumero di visualizzazioni: "); scanf("%d", &volte); while(colonne<1); for(y=1; y<=volte; y++)
22 for(i=1; i<=linee; i++) for(j=1; j<=colonne; j++) if(i==1 i==linee j==1 j==colonne ) printf("%c", cornice); if(j==colonne) printf("\n"); else printf("%c", interno); 12 int i; for(i=1; i<=99; i=i+2) printf("\n%d", i); 13 int i; for(i=-2; i>=-50; i=i-2) printf("\n%d", i); 14 int i; for(i=-150; i<=-1; i++) if(i%4!=0) printf("\n%d", i); 16 int i, j; int primo; for(i=1; i<=100; i++) primo=1; for(j=2; j<i; j++) if(i%j==0) primo=0; if(primo==1) printf("\nnumero primo: %d", i); 17 int i, j; j=1; for(i=2; j<1000; i++) printf("\n%d", j); j=j+i; 18 int i, j; j=1; for(i=2; j<10000; i++) printf("\n%d", j); j=i*i*i; Oppure con una sola variabile:
23 int i; for(i=1; i*i*i<10000; i++) printf("\n%d", i*i*i);
24 Capitolo 10 1 Il ciclo che effettua la somma deve essere realizzato in modo che l elemento del secondo array sia simmetrico rispetto al primo. for(i=0; i<n; i++) c[i] = a[i] + b[n i 1]; /* Somma incrociata di due vettori */ int n = 4; int a[n], b[n], c[n]; int i; char pausa; printf("\nvettore a\n"); for(i=0; i<n; i++) printf("elemento %d del primo vettore: ", i+1); scanf("%d", &a[i]); printf("\nvettore b\n"); for(i=0; i<n; i++) printf("elemento %d del secondo vettore: ", i+1); scanf("%d", &b[i]); /* Somma incrociata a+b */ for(i=0; i<n; i++) c[i] = a[i] + b[n-i-1]; printf("\nsomma incrociata a+b\n"); for(i=0; i<n; i++) printf("elemento %d della somma incrociata: %d\n", i+1, c[i]); 2 Se l elemento in esame risulta il maggiore if(voti[]>max) è inutile confrontarlo con il minore, altrimenti - else - lo si confronta. (Scegliamo di effettuare ii confronti, gli assegnamenti e i calcoli necessari a determinare il maggiore, il minore e la media all interno di un solo ciclo, per cui la scansione dell array avviene una sola volta.) max = voti[0]; min = voti[0]; media = voti[0]; for(i = 0;i <= 5; i++) if(voti[i]>max) max = voti[i]; else if(voti[i]<min) min = voti[i]; media = media+voti[i];
25 3 Diamo la soluzione per la prima parte dell esercizio lasciando al lettore l onere di completare l esercizio. /* Carica un vettore alternativamente di zeri e uni, visualizza il vettore */ #define MAX_ELE 1000 /* massimo numero di elementi */ int prova[max_ele]; int i, n; char invio; do printf("\nnumero elementi: "); scanf("%d", &n); while(n<1 n>max_ele); /* Si carica il vettori di zeri e uni */ prova[0] = 0; for(i=1; i<n; i++) if(i%2 == 1) prova[i] = 1; else prova[i] = 0; for(i=0; i<n; i++) printf("%d \n", prova[i]); printf("\nqualsiasi tasto per continuare..."); scanf("%c", &invio); scanf("%c", &invio); 4 /* Cerca l elemento del vettore piu prossimo a k */ #include <math.h> #define MAX_ELE 1000 /* massimo numero di elementi */ int v1[max_ele]; int i, n, k, prossimo, indice; char invio; do printf("\nnumero elementi: "); scanf("%d", &n); while(n<1 n>max_ele); printf("immissione ELEMENTI\n"); for(i=0; i<n; i++) printf("valore intero %d: ", i+1); scanf("%d", &v1[i]);
26 printf("immissione di k\n"); printf("valore intero k: "); scanf("%d", &k); /* Ricerca elemento piu' prossimo a k*/ prossimo = fabs(k-v1[0]); indice = 0; for(i=1; i<n; i++) if((fabs(k-v1[i])) < prossimo) prossimo = fabs(k-v1[i]); indice = i; printf("\nvalore piu' prossimo a k nel vettore: %d\n", v1[indice]); for(i=0; i<n; i++) printf("%d \n", v1[i]); printf("\nqualsiasi tasto per continuare..."); scanf("%c", &invio); scanf("%c", &invio); 12 Devono essere definite le dimensioni della matrice. #define N 10 #define P 10 #define M 10 int mat1[n][p]; int mat2[p][m]; int pmat[n][m]; Si devono richiedere all utente le reali dimensioni e si deve controllare che il loro valore non superi le dimensioni delle matrici. I valori da richiedere sono soltanto tre, in quanto le colonne della prima matrice devono essere in numero uguale alle righe della seconda. /* Richiesta delle dimensioni */ do printf("numero di linee I matrice: "); scanf("%d", &n); while((n>=n) (n<1)); do printf("numero colonne I matrice / righe II matrice: "); scanf("%d", &p); while((p>=p) (p<1)); do printf("numero di colonne II matrice: "); scanf("%d", &m); while((m>=m) (m<1)); Anteriormente devono essere state dichiarate le variabili n, m e p. int n, m, p;
27 Sostituire N, M e P con n, m e p nel resto del programma. 14 /* Calcolo media voti per studente e per prova. Nell'esemplificazione utilizziamo 3 studenti e 4 prove */ #define N 4 #define M 5 float voti[n][m]; int i, j, n, m; char pausa; n=n; m=m; printf("\n \n CARICAMENTO DEI VOTI \n \n"); for(i=0; i<n-1; i++) for(j=0; j<m-1; j++) printf("ins. studente %d prova %d: ", i+1, j+1); scanf("%f", &voti[i][j]); ; /* Calcolo medie per studente */ for(i=0; i<n-1; i++) voti[i][m-1] = 0; for(j = 0; j < m-1; j++) voti[i][m-1] = voti[i][m-1] + voti[i][j]; voti[i][m-1] = voti[i][m-1] / (m-1); /* Calcolo medie per prova */ for(j=0; j<m; j++) voti[n-1][j] = 0; for(i=0; i<n-1; i++) voti[n-1][j] = voti[n-1][j] + voti[i][j]; voti[n-1][j] = voti[n-1][j]/(n-1); printf("\n \n VISUALIZZAZIONE DELLA MATRICE \n "); for(i=0; i<n; i++) printf("\n"); for(j=0; j<m; j++) printf("%8.3f", voti[i][j]); Esempio di esecuzione: Ins. studente 1 prova 1: 4 Ins. studente 1 prova 2: 5 Ins. studente 1 prova 3: 4 Ins. studente 1 prova 4: 7 Ins. studente 2 prova 1: 8 Ins. studente 2 prova 2: 10 Ins. studente 2 prova 3: 8 Ins. studente 2 prova 4: 10 Ins. studente 3 prova 1: 6 Ins. studente 3 prova 2: 7 Ins. studente 3 prova 3: 8
28 Ins. studente 3 prova 4: 6 VISUALIZZAZIONE DELLA MATRICE
29 Capitolo 11 1 /* Funzione per il calcolo di una qualsiasi potenza con esponente >= zero */ double pot(double base, int esp) double po; po = 1; if(esp == 0) return(1); else while(esp ) po *= base; return(po); 2 void messaggio (int, int); char messaggio[] = "Ciao, baby"; int riga = 10; int colonna = 20; messaggio (riga, colonna); /* Funzione che visualizza un messaggio a un generica coordinata x,y dello schermo */ void messaggio(int r, int c) while(c ) printf("\n"); while(r ) putchar(' '); printf("%s\n\n", messaggio); 3 char buf[128]; void minmaiusc (void); printf("\ninserisci stringa: "); scanf("%s", buf); minmaiusc(); printf("%s\n", buf); /* Funzione che converte le lettere minuscole in maiuscole */ void minmaiusc(void) int i; for (i = 0; buf[i]!= '\0'; i++)
30 if (buf[i] >= 'a' && buf[i] <= 'z') buf[i] = buf[i] 'a' + 'A'; 4 int numeri = 0; int alfa = 0; char buf[80]; int i; char pausa; void numalfa(void); printf("\ninserisci stringa: "); scanf("%s", buf); numalfa(); printf("ci sono %2d caratteri nmerici\n", numeri); printf("ci sono %2d caratteri alfabetici\n", alfa); /* Funzione che conta il numero di caratteri e cifre */ void numalfa(void) for (i = 0; buf[i]!= '\0'; i++) switch(buf[i]) case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': numeri++; default: alfa++; 5 Esercizio: modificare la funzione realizzata nell esercizio 4 in modo che calcoli il numero di zeri, cifre pari e cifre dispari e il numero di caratteri che non sono cifre numeriche. int zeri = 0, pari = 0, dispari = 0; int alfa = 0; char buf[80]; int i; char pausa; void numalfa(void);
31 printf("\ninserisci stringa: "); scanf("%s", buf); numalfa(); printf("ci sono %2d zeri\n", zeri); printf("ci sono %2d cifre pari\n", pari); printf("ci sono %2d cifre dispari\n", dispari); printf("ci sono %2d caratteri alfabetici\n", alfa); /* Funzione che conta il numero di caratteri e cifre */ void numalfa(void) for (i = 0; buf[i]!= '\0'; i++) switch(buf[i]) case '0': zeri++; case '2': case '4': case '6': case '8': pari++; case '1': case '3': case '5': case '7': case '9': dispari++; default: alfa++; 14 void interipositivi(int); int i; i=50; interipositivi(i); /* Funzione che visualizza i numeri interi positivi da 1 a n */ void interipositivi(int n) int i; for(i=1; i<=n; i=i+2) printf("\n%d", i); 16 void interipositivi2(int, int);
32 int i, j; i=2; j=50; interipositivi2(i,j); /* Funzione che visualizza i numeri interi positivi da n a m con n minore di m */ void interipositivi2(int n, int m) int i; for(i=n; i<=m; i=i+2) printf("\n%d", i);
33 Capitolo 12 1 Qualsiasi soluzione si adotti tra quelle proposte nel testo, l operatore relazionale dell if che controlla lo scambio di valori tra gli elementi deve essere cambiato da > a <. if(vet[i]<vet[i+1]) Non ci sono altre modifiche da effettuare. 2 /* Ricerca di un valore in una matrice */ #define N 10 #define M 10 char alfa[n][m]; int n, m, i, j, k; char ric; /* Richiesta delle dimensioni */ do printf("numero di linee: "); scanf("%d", &n); while((n>=n) (n<1)); do printf("numero di colonne: "); scanf("%d", &m); while((m>=m) (m<1)); printf("\n \n CARICAMENTO DELLA MATRICE \n \n"); for(i=0; i<n; i++) for(j=0; j<m; j++) printf("ins.carattere nella linea %d colonna %d val:", i, j); scanf("%1s", &alfa[i][j]); ; /* Richiesta del carattere da ricercare */ printf("\n \n Carattere da ricercare: "); scanf("%1s", &ric); printf("\n \n VISUALIZZAZIONE DELLA MATRICE \n "); for(i=0; i<n; i++) printf("\n"); for(j = 0; j < m; j++) printf("%3c", alfa[i][j]); printf("\n\n"); /* Ricerca del carattere all'interno della matrice */ k = 0; for(i=0; i<n; i++) for(j=0; j<m; j++) if(alfa[i][j]==ric) printf("%c in linea %d colonna %d\n", ric, i+1, j+1); k = 1; ; if(k==0) printf("%c non presente nella matrice", ric);
34 Esempio di esecuzione: Carattere da ricercare: a VISUALIZZAZIONE DELLA MATRICE t b a m d g a k k d a m v f g a in linea 1 colonna 3 a in linea 3 colonna 1 a in linea 4 colonna 2
35 Caso di Studio I 1 Si deve inserire in gestionesequenza, dopo le dichiarazioni delle variabili e prima dell inizio del ciclo di gestione delle scelte dell utente la chiamata della funzione immissione. n = immissione(); 2 void gestionemenu(void); int gestionemenu(); void gestionemenu() int n; int scelta = 'z'; char invio; int ele, posizione; while(scelta!= 'x') printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); printf("\t\t\t BORRI & BIANCHI SpA"); printf("\n\t\t Sistema per la gestione integrata"); printf("\n\t\t\t OPZIONI DISPONIBILI"); printf("\n\n\n\t\t\t a. Magazzino"); printf("\n\t\t\t b. Clienti"); printf("\n\t\t\t c. Fornitori"); printf("\n\t\t\t x. Fine"); printf("\n\n\n\t\t\t\t Scegliere una opzione: "); scanf("%c", &scelta); scanf("%c", &invio); printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); switch(scelta) case 'a': printf("hai scelto a"); printf("\n\n Premere Invio per continuare..."); scanf("%c", &invio); case 'b': printf("hai scelto b"); printf("\n\n Premere Invio per continuare..."); scanf("%c", &invio); case 'c': printf("hai scelto c"); printf("\n\n Premere Invio per continuare..."); scanf("%c", &invio); printf("hai scelto x"); printf("\n\n Premere Invio per continuare..."); scanf("%c", &invio);
36 3 Vanno effettuate due modifiche nelle funzioni di ordinamento e di ricerca binaria. void ordinamento(int n) int i, p, k, n1; int aux; p = n; n1 = p; do k = 0; for(i = 0; i < n1-1; i++) if(vet[i] < vet[i+1]) aux = vet[i]; vet[i] = vet[i+1]; vet[i+1] = aux; k = 1; p = i + 1; n1 = p; while (k == 1 && n1>1); /* ricerca binaria */ int ricbin(int n, int ele) int i, alto, basso, pos; alto = 0; basso = n - 1; pos = -1; do i = (alto+basso)/2; if(vet[i] == ele) pos = i; else if(vet[i] > ele) alto = i + 1; else basso = i - 1; while(alto <= basso && pos == -1); return(pos); 4 e 5 La funzione di ricerca sequenziale non restituisce la posizione dell elemento e non ha la necessità di prendere in ingresso il valore da ricercare. void ricerca(int); La chiamata alla funzione di ricerca sequenziale diventa: case 3: ricerca(n); La funzione di ricerca sequenziale diventa: /* Ricerca sequenziale */ void ricerca (int n) int i, ele; char invio; i = 0; printf("elemento da ricercare: "); scanf("%d", &ele); scanf("%c", &invio);
37 while (ele!= vet[i] && i < n-1) ++i; if(ele == vet[i]) printf("\nelem. %d presente in posizione %d\n", ele, i); else printf("\nelemento non presente!\n"); printf("\n\n Premere Invio per continuare..."); scanf("%c", &invio); Modifiche analoghe devono essere apportate per la ricerca binaria. 6 #define MAX_ELE 1000 /* massimo numero di elementi */ int vet[max_ele]; /* array che ospita la sequenza */ void gestionesequenza(void); int immissione(void); void ordinamento(void); int ricerca(void); int ricbin(void); void visualizzazione(void); int n, ele; int gestionesequenza(); void gestionesequenza() int scelta = -1; char invio; int posizione; while(scelta!= 0) printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); printf("\t\t\t GESTIONE SEQUENZA"); printf("\n\n\n\t\t\t 1. Immissione"); printf("\n\n\t\t\t 2. Ordinamento"); printf("\n\n\t\t\t 3. Ricerca completa"); printf("\n\n\t\t\t 4. Ricerca binaria"); printf("\n\n\t\t\t 5. Visualizzazione"); printf("\n\n\t\t\t 0. Fine"); printf("\n\n\n\t\t\t\t Scegliere una opzione: "); scanf("%d", &scelta); scanf("%c", &invio); printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); switch(scelta) case 1: n = immissione(); case 2: ordinamento(); case 3: printf("elemento da ricercare: "); scanf("%d", &ele);
38 scanf("%c", &invio); posizione = ricerca(); if(ele == vet[posizione]) printf("\nelem. %d presente in posizione %d\n", ele, posizione); else printf("\nelemento non presente!\n"); printf("\n\n Premere Invio per continuare..."); scanf("%c", &invio); case 4: printf("elemento da ricercare: "); scanf("%d", &ele); scanf("%c", &invio); posizione = ricbin(); if(posizione!= -1) printf("\nelem. %d presente in posizione %d\n", ele, posizione); else printf("\nelemento non presente!\n"); printf("\n\n Premere Invio per continuare..."); scanf("%c", &invio); case 5: visualizzazione(); int immissione() int i, n; do printf("\nnumero elementi: "); scanf("%d", &n); while (n < 1 n > MAX_ELE); for(i = 0; i < n; i++) printf("\nimmettere un intero n.%d: ",i); scanf("%d", &vet[i]); return(n); void ordinamento() int i, p, k, n1; int aux; p = n; n1 = p; do k = 0; for(i = 0; i < n1-1; i++) if(vet[i] > vet[i+1]) aux = vet[i]; vet[i] = vet[i+1]; vet[i+1] = aux; k = 1; p = i + 1;
39 n1 = p; while (k == 1 && n1>1); /* Ricerca sequenziale */ int ricerca () int i; i = 0; while (ele!= vet[i] && i < n-1) ++i; return(i); /* ricerca binaria */ int ricbin() int i, alto, basso, pos; alto = 0; basso = n - 1; pos = -1; do i = (alto+basso)/2; if(vet[i] == ele) pos = i; else if(vet[i] < ele) alto = i + 1; else basso = i - 1; while(alto <= basso && pos == -1); return(pos); void visualizzazione() int i; char invio; for(i = 0; i < n; i++) printf("\n%d", vet[i]); printf("\n\n Premere Invio per continuare..."); scanf("%c", &invio); 8 int immissione() int i, n; do printf("\nnumero elementi (si accettano solo numeri pari): "); scanf("%d", &n); while (n < 1 (n%2)!=0 n > MAX_ELE); for(i = 0; i < n; i++) printf("\nimmettere un intero n: %d: ",i); scanf("%d", &vet[i]);
40 return(n); 9 int immissione() int i, n; do printf("\nnumero elementi: "); scanf("%d", &n); while (n < 1 n > MAX_ELE); for(i = 0; i < n; i++) do printf("\nimmettere un intero n (nell'intervallo ): %d: ",i); scanf("%d", &vet[i]); while(vet[i]<-20 vet[i]>100); return(n);
41 Capitolo 13 3 /* Concatenazione di dei primi n caratteri di una stringa su di un'altra con strcat */ #include <string.h> char frase[160] = "Analisi, requisiti"; char dimmi[80]; int i; for(i=0; ((dimmi[i]=getchar())!='\n') && (i<80); i++) ; dimmi[i] = '\0'; strncat(frase, dimmi, 5); printf("%s \n", frase); 4 /* Confronto dei primi n caratteri di due stringhe con strncmp */ #include <string.h> char prima[160] = "Analisi, requisiti"; char seconda[80]; int i, x; for(i=0; ((seconda[i]=getchar())!='\n') && (i<80); i++) ; seconda[i]='\0'; if((x=(strncmp(prima, seconda, 5)))==0) printf("sono uguali\n"); else if(x>0) printf("la prima e' maggiore della seconda\n"); else printf("la seconda e' maggiore della prima\n");
42 Capitolo 14 1 /* Scansione e visualizzazione di un array di interi */ int a[5] = 1, 2, 3, 4, 5 ; int i, *p; p = a; printf("gli elementi del vettore sono:\n\n"); for (i = 0; i <= 4; i++) printf("a[%d] = %d\n", i, *p++); 2 /* Scansione e visualizzazione di un array di stringhe */ char *vet[] = "Messaggio #1\n", "Messaggio #2\n", "Messaggio #3\n", "Messaggio #4\n", "Messaggio #5\n", NULL ; char **p = vet; while(*p!= NULL) printf("%s", *p++); 3 /* Funzione che ritorna il puntatore alla prima occorrenza della stringa t in s */ char *strinstr(char *s, char *t) char *v; while(*s!= '\0') if(*s == *t) for(v = t; *s == *v;) if(*++v == '\0') return(s (v t)+1); if(*s++ == '\0') return(null); else s++; return(null); 4
43 /* versione 1 che usa gli array*/ strcop( char s[], char t[]) int i=0; while ((s[i] = t[i])!= '\0') i++; /*versione 1.1 che usa i puntatori*/ strcop(char *s, char *t) while ((*s = *t)!= '\0') s++; t++; /* versione 2 */ strcop(char *s, char *t) while ((*s++ = *t++)!= '\0') ; /* versione 3 */ strcop(char *s, char *t) while (*s++ = *t++); La migliore è la versione 3, anche se abbastanza criptica al primo impatto. 5 #include <malloc.h> char *s; int n; printf("inserire dimensione del buffer : "); scanf("%d", &n); s = (char*) malloc(n+1);... 6 /* Esempio di uso di memcpy */ #include <string.h> int main () char cifre[]=" "; char decimali[10]; char pausa; memcpy (decimali, cifre, 4); decimali[4]='\0'; printf ("decimali: %s\n", decimali); scanf("&c", pausa); Se non si inserisce nella giusta posizione il carattere di fine stringa:
44 decimali[4]='\0'; l istruzione printf ("decimali: %s\n", decimali); visualizza ulteriori caratteri dopo Vediamo una soluzione alternativa. /* II Esempio di uso di memcpy */ #include <string.h> int main () char cifre[]=" "; char decimali[10]; char pausa; int i; memcpy (decimali, cifre, 4); printf ("decimali: "); for(i=0;i<4;i++) printf ("%c", decimali[i]); printf ("\n"); scanf("&c", pausa); 7 /* Esempio di uso di memmove */ #include <string.h> int main () char y[100]= " "; char pausa; printf ("Prima: %s\n", y); memmove(y+4, y, 4); printf ("Dopo: %s\n", y); scanf("&c", pausa); 8 /* Esempio di uso di memcmp */ #include <string.h> int main () char uno[]= "santo"; char due[]= "santi"; int r; char pausa; r=memcmp(uno, due, strlen(uno)); if(r>0) printf ("%s maggiore di %s", uno, due); else printf ("%s maggiore di %s", due, uno); scanf("&c", pausa); 9 /* Esempio di uso di memchr */ #include <string.h>
45 int main () char numero[]= "1 2 3"; char cifra = '2'; char pausa; char * p; p = (char*) memchr(numero, cifra, strlen(numero)); if(p!= NULL) printf ("%c presente in %s in posizione %d", cifra, numero, p-numero+1); else printf ("%c non presente in %s", cifra, numero); scanf("&c", pausa); L istruzione: p = (char*) memchr(numero, cifra, strlen(numero)); effttua un cast, cioè una confersione del valore restituito da memchr in un puntatore a char come si vedrà nei capitoli successivi. 10 /* Esempio di uso di memset */ #include <string.h> int main () char cifre[]=" "; char cifra = '9'; char pausa; char * p; printf ("Prima: %s\n", cifre); memset(cifre, cifra, 2); printf ("Dopo: %s", cifre); scanf("&c", pausa);
46 Caso di studio II 1 /* Fusione di due sequenze ordinate */ #define MAX_ELE 1000 int immissione(int *); void ordinamento(int, int *); void visualizzazione(int, int *); void merge(int, int *, int, int *, int *); int vet1[max_ele]; /* prima sequenza */ int vet2[max_ele]; /* seconda sequenza */ int vet3[max_ele*2]; /* merge */ int n; /* lunghezza prima sequenza */ int m; /* lunghezza seconda sequenza */ n = immissione(vet1); m = immissione(vet2); ordinamento(n, vet1); ordinamento(m, vet2); merge(n, vet1, m, vet2, vet3); visualizzazione(n, vet1); visualizzazione(m, vet2); visualizzazione(n+m, vet3); int immissione(int *vet) int i, n; do printf("\nnumero elementi: "); scanf("%d", &n); while (n < 1 n > MAX_ELE); for(i = 0; i < n; i++) printf("\nimmettere un intero n.%d: ",i); scanf("%d", &vet[i]); return(n); void ordinamento(int n, int *vet) int i, p, k, n1; int aux; p = n; n1 = p; do k = 0; for(i = 0; i < n1-1; i++) if(vet[i] > vet[i+1]) aux = vet[i]; vet[i] = vet[i+1]; vet[i+1] = aux;
47 k = 1; p = i + 1; n1 = p; while (k == 1 && n1>1); void visualizzazione( int n, int *vet) int i; char invio; for(i = 0; i < n; i++) printf("\n%d", vet[i]); printf("\n\n Premere Invio per continuare..."); scanf("%c", &invio); /* Fusione delle due sequenze (merge) */ void merge( int n, int *vet1, int m, int *vet2, int *vet3) int i = 0, j = 0, k = 0; do if(vet1[i]<=vet2[j]) vet3[k++] = vet1[i++]; else vet3[k++] = vet2[j++]; while(i<n && j<m); if(i<n) for(; i<n; vet3[k++] = vet1[i++]) ; else for(; j<m; vet3[k++] = vet2[j++]) ; 2 /* Fusione di piu sequenze ordinate */ #define MAX_ELE 1000 int immissione(int *); void ordinamento(int, int *); void visualizzazione(int, int *); void merge(int, int *, int, int *, int *); int vet1[max_ele]; /* prima sequenza */ int vet2[max_ele]; /* seconda sequenza */ int vet3[max_ele*2]; /* altri merge */ int n; /* lunghezza prima sequenza */ int m; /* lunghezza seconda sequenza */ int i, altrovettore; n = immissione(vet1); m = immissione(vet2);
48 ordinamento(n, vet1); ordinamento(m, vet2); merge(n, vet1, m, vet2, vet3); visualizzazione(n, vet1); visualizzazione(m, vet2); visualizzazione(n+m, vet3); do m = n+m; n = immissione(vet1); ordinamento(n, vet1); for(i = 0; i < m; i++) vet2[i] = vet3[i]; merge(n, vet1, m, vet2, vet3); visualizzazione(n, vet1); visualizzazione(m, vet2); visualizzazione(n+m, vet3); printf("\nse vuoi immettere un altro vettore scrivi 1 altrimeni 0: ", altrovettore); scanf("%d", &altrovettore); while (altrovettore > 0); int immissione(int *vet) int i, n; do printf("\nnumero elementi: "); scanf("%d", &n); while (n < 1 n > MAX_ELE); for(i = 0; i < n; i++) printf("\nimmettere un intero n.%d: ",i); scanf("%d", &vet[i]); return(n); void ordinamento(int n, int *vet) int i, p, k, n1; int aux; p = n; n1 = p; do k = 0; for(i = 0; i < n1-1; i++) if(vet[i] > vet[i+1]) aux = vet[i]; vet[i] = vet[i+1]; vet[i+1] = aux; k = 1; p = i + 1; n1 = p; while (k == 1 && n1>1); void visualizzazione( int n, int *vet)
49 int i; char invio; for(i = 0; i < n; i++) printf("\n%d", vet[i]); printf("\n\n Premere Invio per continuare..."); scanf("%c", &invio); /* Fusione delle due sequenze (merge) */ void merge( int n, int *vet1, int m, int *vet2, int *vet3) int i = 0, j = 0, k = 0; do if(vet1[i]<=vet2[j]) vet3[k++] = vet1[i++]; else vet3[k++] = vet2[j++]; while(i<n && j<m); if(i<n) for(; i<n; vet3[k++] = vet1[i++]) ; else for(; j<m; vet3[k++] = vet2[j++]) ; 3 /* Modifica del programma di gestione seguenza del caso di Studio II, per impedire la ricerca binaria nel caso che la sequenza non sia stata ancora ordinata. */ #define MAX_ELE 1000 /* massimo numero di elementi */ void gestionesequenza(void); int immissione(int *); void ordinamento(int, int *); int ricerca(int, int, int *); int ricbin(int, int, int *); void visualizzazione(int, int *); int ordinato = 0; gestionesequenza(); void gestionesequenza() int sequenza[max_ele]; /* array che ospita la sequenza */ int n; int scelta = -1; char invio; int ele, posizione;
50 while(scelta!= 0) printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); printf("\t\t\t GESTIONE SEQUENZA"); printf("\n\n\n\t\t\t 1. Immissione"); printf("\n\n\t\t\t 2. Ordinamento"); printf("\n\n\t\t\t 3. Ricerca completa"); printf("\n\n\t\t\t 4. Ricerca binaria"); printf("\n\n\t\t\t 5. Visualizzazione"); printf("\n\n\t\t\t 0. fine"); printf("\n\n\n\t\t\t\t Scegliere una opzione: "); scanf("%d", &scelta); scanf("%c", &invio); printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); switch(scelta) case 1: n = immissione(sequenza); case 2: ordinamento(n, sequenza); case 3: printf("elemento da ricercare: "); scanf("%d", &ele); scanf("%c", &invio); posizione = ricerca(n, ele, sequenza); if(ele == sequenza[posizione]) printf("\nelem. %d presente in posizione %d\n", ele, posizione); else printf("\nelemento non presente!\n"); printf("\n\n Premere Invio per continuare..."); scanf("%c", &invio); case 4: if (ordinato == 0) printf("\ricerca binaria non applicabile! \n"); printf("\nl arrai deve essere ordinato. \n"); else printf("elemento da ricercare: "); scanf("%d", &ele); scanf("%c", &invio); posizione = ricbin(n, ele, sequenza); if(posizione!= -1) printf("\nelem. %d presente in posizione %d\n", ele, posizione); else printf("\nelemento non presente!\n"); printf("\n\n Premere Invio per continuare..."); scanf("%c", &invio); case 5: visualizzazione(n, sequenza); int immissione(int *vet)
51 int i, n; ordinato = 0; do printf("\nnumero elementi: "); scanf("%d", &n); while (n < 1 n > MAX_ELE); for(i = 0; i < n; i++) printf("\nimmettere un intero n.%d: ",i); scanf("%d", &vet[i]); return(n); void ordinamento(int n, int *vet) int i, p, k, n1; int aux; p = n; n1 = p; do k = 0; for(i = 0; i < n1-1; i++) if(vet[i] > vet[i+1]) aux = vet[i]; vet[i] = vet[i+1]; vet[i+1] = aux; k = 1; p = i + 1; n1 = p; while (k == 1 && n1>1); ordinato = 1; /* Ricerca sequenziale */ int ricerca(int n, int ele, int *vet) int i; i = 0; while (ele!= vet[i] && i < n-1) ++i; return(i); /* ricerca binaria */ int ricbin(int n, int ele, int *vet) int i, alto, basso, pos; alto = 0; basso = n - 1; pos = -1; do i = (alto+basso)/2; if(vet[i] == ele) pos = i; else if(vet[i] < ele) alto = i + 1;
52 else basso = i - 1; while(alto <= basso && pos == -1); return(pos); void visualizzazione( int n, int *vet) int i; char invio; for(i = 0; i < n; i++) printf("\n%d", vet[i]); printf("\n\n Premere Invio per continuare..."); scanf("%c", &invio); 4 La soluzione che diamo esegue quanto richiesto dal problema: creazione e uso delle funzioni di immissione di matrici, calcolo della matrice prodotto e visualizzazione delle matrici. In questo modo si osserva il riuso delle funzioni su matrici diverse e il passaggio del parametro array bidimensionale. La soluzione non è pero completa in quanto non presenta il menu per porter ripetere l immissione delle matrici. La gestione del menu viene presentata in numerosissimi esercizi e soluzioni del libro e in questo caso la lasciamo al lettore. /* Calcolo del prodotto di due matrici con l'uso di funzioni */ #define MAX_ELE 10 #define N MAX_ELE #define P MAX_ELE #define M MAX_ELE void immissionematrice(int, int, int [MAX_ELE][MAX_ELE]); void prodottomatrici(int, int, int, int [MAX_ELE][MAX_ELE], int [MAX_ELE][MAX_ELE], int [MAX_ELE][MAX_ELE]); void visualizzazionematrice(int, int, int [MAX_ELE][MAX_ELE]); int mat1[n][p]; /* prima matrice */ int mat2[p][m]; /* seconda matrice */ int pmat[n][m]; /* matrice prodotto */ int n, m, p; char invio; do printf("\nnumero di righe prima matrice: "); scanf("%d", &n); while (n < 1 n > MAX_ELE); do
53 printf("\nnumero di colonne prima matrice / righe della seconda: "); scanf("%d", &p); while (p < 1 p > MAX_ELE); do printf("\nnumero di colonne della seconda matrice: "); scanf("%d", &m); while (m < 1 m > MAX_ELE); immissionematrice(n, p, mat1); immissionematrice(p, m, mat2); prodottomatrici(n, m, p, mat1, mat2, pmat); visualizzazionematrice(n, p, mat1); visualizzazionematrice(p, m, mat2); visualizzazionematrice(n, m, pmat); printf("\n\n Premere Invio per continuare..."); scanf("%c", &invio); scanf("%c", &invio); void immissionematrice(int righe, int colonne, int mat[max_ele][max_ele]) int i, j; printf("\n \n CARICAMENTO MATRICE \n \n"); for(i=0; i<righe; i++) for(j=0; j<colonne; j++) printf("inserisci linea %d colonna %d val:", i, j); scanf("%d", &mat[i][j]); ; void prodottomatrici(int n, int m, int p, int mat1[max_ele][max_ele], int mat2[max_ele][max_ele], int pmat[max_ele][max_ele]) int i = 0, j = 0, k = 0; for(i=0; i<n; i++) for(j=0; j<m; j++) pmat[i][j] = 0; for(k=0; k<p; k++) pmat[i][j] = pmat[i][j] + mat1[i][k] * mat2[k][j]; ; void visualizzazionematrice(int righe, int colonne, int mat[max_ele][max_ele]) int i, j; printf("\n \n VISUALIZZA MATRICE \n "); for(i=0; i<righe; i++) printf("\n"); for(j=0; j<colonne; j++) printf("%5d", mat[i][j]); 5
54 Come per il precedente esercizio la soluzione che riportiamo non presenta il menu per porter ripetere l immissione della matrice e la ricerca di un elemento che lasciamo al lettore. /* Ricerca di un elemento in una matrice bidimensionale con l'uso di funzioni */ #define MAX_ELE 10 #define N MAX_ELE #define M MAX_ELE void immissionematrice(int, int, int [MAX_ELE][MAX_ELE]); void ricercaelementonellamatrice(int, int, int [MAX_ELE][MAX_ELE]); void visualizzazionematrice(int, int, int [MAX_ELE][MAX_ELE]); int mat1[n][m]; /* prima matrice */ int n, m; char invio; do printf("\nnumero di righe: "); scanf("%d", &n); while (n < 1 n > MAX_ELE); do printf("\nnumero di colonne: "); scanf("%d", &m); while (m < 1 m > MAX_ELE); immissionematrice(n, m, mat1); ricercaelementonellamatrice(n, m, mat1); visualizzazionematrice(n, m, mat1); printf("\n\n Premere Invio per continuare..."); scanf("%c", &invio); scanf("%c", &invio); void immissionematrice(int righe, int colonne, int mat[max_ele][max_ele]) int i, j; printf("\n \n CARICAMENTO MATRICE \n \n"); for(i=0; i<righe; i++) for(j=0; j<colonne; j++) printf("inserisci linea %d colonna %d val:", i, j); scanf("%d", &mat[i][j]); ; void ricercaelementonellamatrice(int n, int m, int mat[max_ele][max_ele]) int i = 0, j = 0, ele, trovato; printf("\nelemento da ricercare: ");
Esempi di algoritmi. Lezione III
Esempi di algoritmi Lezione III Scopo della lezione Implementare da zero algoritmi di media complessità. Verificare la correttezza di un algoritmo eseguendolo a mano. Imparare a valutare le prestazioni
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
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
DettagliDefinire 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
DettagliRicerche, ordinamenti e fusioni. 5.1 Introduzione. 5.2 Ricerca completa
Ricerche, ordinamenti e fusioni 5.1 Introduzione Questo capitolo ci permette di fare pratica di programmazione utilizzando gli strumenti del linguaggio introdotti finora. A una prima lettura possono essere
DettagliCorso di Laurea in Matematica
Corso di Laurea in Matematica Laboratorio di Informatica (a.a. 2002-03) Esercizi 1 Docente: Monica Nesi 1. Scrivere un programma in C che, dati in ingresso due numeri naturali, calcola il loro prodotto
DettagliIntroduzione al MATLAB c Parte 2
Introduzione al MATLAB c Parte 2 Lucia Gastaldi Dipartimento di Matematica, http://dm.ing.unibs.it/gastaldi/ 18 gennaio 2008 Outline 1 M-file di tipo Script e Function Script Function 2 Costrutti di programmazione
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
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
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
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,
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
DettagliBreve riepilogo della puntata precedente:
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
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
DettagliLaboratorio di Fondamenti di Informatica anno accademico 2015-2016. Esercizi proposti il 09-12-2015
Laboratorio di Fondamenti di Informatica anno accademico 2015-2016 Esercizi proposti il 09-12-2015 ESERCIZI GUIDATI Gli esercizi saranno svolti in aula dal docente di laboratorio per illustrare alcuni
DettagliVettori Algoritmi elementari di ordinamento
Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Vettori Algoritmi elementari di ordinamento Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale
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.
Dettaglici sono più problemi che programmi esiste un problema che non si può risolvere con un programma
Calcolabilità problemi facili trovare la media di due numeri stampare le linee di un file che contengono una parola problemi difficili trovare il circuito minimo data una tabella determinare la migliore
DettagliOTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C
CORSO DI LABORATORIO DI INFORMATICA CORSO DI LAUREA IN SDM ANNO ACCADEMICO 2011-2012 Docente: R. Sparvoli Esercitazioni: R. Sparvoli, F. Palma OTTAVA ESPERIENZA DI LABORATORIO L elaborazione dei files
Dettagli3. La sintassi di Java
pag.9 3. La sintassi di Java 3.1 I tipi di dati statici In Java, come in Pascal, esistono tipi di dati statici predefiniti e sono i seguenti: byte 8 bit da -128 a 127 short 16 bit coincide con l integer
Dettagli3) Il seguente numerale A1F0 in base 16 a quale numero in base 10 corrisponde?
Leggete attentamente le domande del test e date la/le vostra/e risposta/e. 1) Per quanto tempo la memoria RAM di un personal computer conserva le informazioni? Finchè lo hard disk funziona in modo corretto
DettagliProgrammazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 2 - Funzioni Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2.
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
DettagliAPPUNTI SUL LINGUAGGIO DI PROGRAMMAZIONE PASCAL
APPUNTI SUL LINGUAGGIO DI PROGRAMMAZIONE PASCAL In informatica il Pascal è un linguaggio di programmazione creato da Niklaus Wirth ed é un linguaggio di programmazione strutturata. I linguaggi di programmazione
DettagliNOZIONI BASE SHELL E SCRIPT LINUX
NOZIONI BASE SHELL E SCRIPT LINUX Aggiornato al 11 gennaio 2006 Ermes ZANNONI (ermes@zannoni.to.it) (http://www.zannoni.to.it) Indice : 1. Introduzione 2. La Shell 2.1 Comandida Shell 2.1.1 File e directory
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
DettagliUso di base delle funzioni in Microsoft Excel
Uso di base delle funzioni in Microsoft Excel Le funzioni Una funzione è un operatore che applicato a uno o più argomenti (valori, siano essi numeri con virgola, numeri interi, stringhe di caratteri) restituisce
DettagliEsercitazione 3. Corso di Fondamenti di Informatica
Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 3 Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti
DettagliLISTE, INSIEMI, ALBERI E RICORSIONE
LISTE, INSIEMI, ALBERI E RICORSIONE Settimo Laboratorio LISTE E RICORSIONE SVUOTALISTA: CONSIDERAZIONI Per svuotare una lista si devono eliminare i singoli nodi allocati con la malloc... Come fare? Per
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
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
DettagliLaboratorio di Informatica
Laboratorio di Informatica Introduzione a Python Dottore Paolo Parisen Toldin - parisent@cs.unibo.it Argomenti trattati Che cosa è python Variabili Assegnazione Condizionale Iterazione in una lista di
DettagliMicrosoft Excel. Il foglio elettronico Microsoft Excel Cartelle, Fogli di lavoro e celle Contenuto delle celle. Numeri, date, formule, testo, funzioni
Microsoft Excel Sommario Il foglio elettronico Microsoft Excel Cartelle, Fogli di lavoro e celle Contenuto delle celle Numeri, date, formule, testo, funzioni Formattazione dei dati Creazione di serie di
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,
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
DettagliEXCEL FUNZIONI PRINCIPALI
EXCEL FUNZIONI PRINCIPALI Funzione SE() Sintassi: SE(VERIFICA, VALORE SE VERO, VALORE SE FALSO): verifica un valore e ritorna una risposta in base al risultato vero/falso Esempio: =SE(A2=15; "OK"; "NO")
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
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
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
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
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.
DettagliUtilizzo delle formule in Excel
Utilizzo delle formule in Excel Excel è dotato di un potente motore di calcolo che può essere utilizzato per elaborare i dati immessi dagli utenti. I calcoli sono definiti mediante formule. Ogni formula
DettagliLaboratorio di programmazione
Laboratorio di programmazione Lezione VI Tatiana Zolo tatiana.zolo@libero.it 1 LE STRUCT Tipo definito dall utente i cui elementi possono essere eterogenei (di tipo diverso). Introduce un nuovo tipo di
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
Dettagli5.3 TABELLE 5.3.1 RECORD 5.3.1.1 Inserire, eliminare record in una tabella Aggiungere record Eliminare record
5.3 TABELLE In un sistema di database relazionali le tabelle rappresentano la struttura di partenza, che resta poi fondamentale per tutte le fasi del lavoro di creazione e di gestione del database. 5.3.1
DettagliNascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti
Nascita di Java L uscita di Java, verso la metà degli anni novanta, fu accolta con molto entusiasmo dalla comunità dei programmatori e dei provider di servizi internet perché permetteva agli utenti del
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
DettagliProf. Nicola Cappuccio ing.nicola.cappuccio@gmail.com
Excel e le sue Funzioni Guida Pratica per la realizzazione di Progetti Prof. Nicola Cappuccio ing.nicola.cappuccio@gmail.com Ing. Nicola Cappuccio 1 Sommario INT (funzione INT)... 3 Descrizione... 3 Sintassi...
DettagliTipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:
Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante
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
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
DettagliIntroduzione a ROOT. 1. Informazioni generali
Introduzione a ROOT 1. Informazioni generali ROOT è un ambiente visualizzazione e trattamento dati interattivo sviluppato al CERN (si veda il sito ufficiale http://root.cern.ch interamente sviluppato in
DettagliLa selezione binaria
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Introduzione L esecuzione di tutte le istruzioni in sequenza può non è sufficiente per
DettagliAutomatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione
Automatizzare i compiti ripetitivi I file batch Anno accademico 2000-01 1 Spesso capita di dover eseguire ripetutatmente una data sequenza di comandi Introdurli uno a uno da tastiera è un processo lento
DettagliTest Excel conoscenze di Base
Test Excel conoscenze di Base 1)Che tipo di barra ha un foglio di calcolo, che un elaboratore testi non ha? a. La barra dei menu b. La barra della formula c. La barra del titolo d. La barra della formattazione
DettagliAppunti del corso di Informatica 1. 6 Introduzione al linguaggio C
Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)
DettagliProf. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:
LA STRUTTURA DI RIPETIZIONE La ripetizione POST-condizionale La ripetizione PRE-condizionale INTRODUZIONE (1/3) Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto
DettagliAppunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C
Università di Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)
DettagliI sistemi di numerazione
I sistemi di numerazione 01-INFORMAZIONE E SUA RAPPRESENTAZIONE Sia dato un insieme finito di caratteri distinti, che chiameremo alfabeto. Utilizzando anche ripetutamente caratteri di un alfabeto, si possono
DettagliL espressione torna invece sempre vera (quindi la soluzione originale) se cambiamo contemporaneamente il verso: 1 < 0.
EQUAZIONI E DISEQUAZIONI Le uguaglianze fra espressioni numeriche si chiamano equazioni. Cercare le soluzioni dell equazione vuol dire cercare quelle combinazioni delle lettere che vi compaiono che la
DettagliFORMULE: Operatori matematici
Formule e funzioni FORMULE Le formule sono necessarie per eseguire calcoli utilizzando i valori presenti nelle celle di un foglio di lavoro. Una formula inizia col segno uguale (=). La formula deve essere
DettagliMatematica in laboratorio
Unità 1 Attività guidate Attività 1 Foglio elettronico Divisibilità tra numeri naturali Costruisci un foglio di lavoro per determinare se a è divisibile per b, essendo a e b due numeri naturali, con a
DettagliDimensione di uno Spazio vettoriale
Capitolo 4 Dimensione di uno Spazio vettoriale 4.1 Introduzione Dedichiamo questo capitolo ad un concetto fondamentale in algebra lineare: la dimensione di uno spazio vettoriale. Daremo una definizione
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
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...
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;
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
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
DettagliAlgoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.
Algoritmo Formalmente, per algoritmo si intende una successione finita di passi o istruzioni che definiscono le operazioni da eseguire su dei dati (=istanza del problema): in generale un algoritmo è definito
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
DettagliAlgebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono
DettagliSISTEMI DI NUMERAZIONE DECIMALE E BINARIO
SISTEMI DI NUMERAZIONE DECIMALE E BINARIO Il sistema di numerazione decimale (o base dieci) possiede dieci possibili valori (0, 1, 2, 3, 4, 5, 6, 7, 8 o 9) utili a rappresentare i numeri. Le cifre possiedono
DettagliLABORATORIO DI MATEMATICA RENDITE, AMMORTAMENTI, LEASING CON EXCEL
LABORATORIO DI MATEMATICA RENDITE, AMMORTAMENTI, LEASING CON EXCEL ESERCITAZIONE GUIDATA: LE RENDITE 1. Il montante di una rendita immediata posticipata Utilizzando Excel, calcoliamo il montante di una
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.
DettagliLezione 8. La macchina universale
Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione
Dettagli+ / operatori di confronto (espressioni logiche/predicati) / + 5 3 9 = > < Pseudo codice. Pseudo codice
Pseudo codice Pseudo codice Paolo Bison Fondamenti di Informatica A.A. 2006/07 Università di Padova linguaggio testuale mix di linguaggio naturale ed elementi linguistici con sintassi ben definita e semantica
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
Dettaglihttp://www.programmiamo.altervista.org/c/oop/o...
PROGRAMMIAMO Programma per la gestione di un conto corrente C++ - Costruttore e distruttore C++ Home Contatti Supponiamo ora di voler scrivere un programma a menu per la gestione di un conto corrente bancario.
DettagliUtilizzo del Terminalino
Utilizzo del Terminalino Tasti: - ENT: funzionano come INVIO - SCAN: per attivare il lettore di barcode - ESC: per uscire dal Menù in cui si è entrati - BKSP: per cancellare l ultimo carattere digitato
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
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" è
DettagliLAVORO ESTIVO DI INFORMATICA CLASSE 2O
LAVORO ESTIVO DI INFORMATICA CLASSE 2O PER COLORO CHE HANNO AVUTO LA SOSPENSIONE DEL GIUDIZIO, GLI ESERCIZI SVOLTI DEVONO ESSERE CONSEGNATI TASSATIVAMENTE IL GIORNO DELL'ESAME SCRITTO. A CHI È STATO ASSEGNATO
DettagliKangourou della Matematica 2014 finale nazionale italiana Mirabilandia, 12 maggio 2014
Kangourou della Matematica 2014 finale nazionale italiana Mirabilandia, 12 maggio 2014 LIVELLO STUDENT K,M N CD BC A S1. (5 punti ) In figura si vede una circonferenza della quale i segmenti AB, BC e CD
DettagliInformatica. Rappresentazione dei numeri Numerazione binaria
Informatica Rappresentazione dei numeri Numerazione binaria Sistemi di numerazione Non posizionali: numerazione romana Posizionali: viene associato un peso a ciascuna posizione all interno della rappresentazione
DettagliRAPPRESENTAZIONE GRAFICA E ANALISI DEI DATI SPERIMENTALI CON EXCEL
RAPPRESENTAZIONE GRAFICA E ANALISI DEI DATI SPERIMENTALI CON EXCEL 1 RAPPRESENTAZIONE GRAFICA Per l analisi dati con Excel si fa riferimento alla versione 2007 di Office, le versioni successive non differiscono
DettagliProva Scritta del 19/07/10
Avvertenze Usare ESCLUSIVAMENTE penne ad inchiostro nero o blu (NO MATITE). Consegnare solo fogli formato A4 scritti da un solo lato. In testa a ciascun foglio scrivere: cognome, nome, numero progressivo
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
DettagliWORD per WINDOWS95. Un word processor e` come una macchina da scrivere ma. con molte più funzioni. Il testo viene battuto sulla tastiera
WORD per WINDOWS95 1.Introduzione Un word processor e` come una macchina da scrivere ma con molte più funzioni. Il testo viene battuto sulla tastiera ed appare sullo schermo. Per scrivere delle maiuscole
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 10 Strutture collegate - 2 A. Miola Febbraio 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Strutture collegate - 2 1 Contenuti!Strutture
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
DettagliEsame del 3 febbraio 2010
Fondamenti di Informatica CdL in Ingegneria Gestionale a.a. 2009/2010 Docente: Andrea Prati Esame del 3 febbraio 2010 Esercizio 1 Vettori Sia data un vettore (array monodimensionale) di interi: int VETT[N];
DettagliStream EDitor (sed) sed NON modifica l'input 2. L'output viene inviato allo standard output e puo' essere rediretto
Sed & Awk Stream EDitor (sed) sed: editor di linea che non richiede l'interazione con l'utente sed può filtrare l'input che riceve da un file o una pipe La sintassi di sed NON definisce un output: L'output
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
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.
DettagliJoker Poker - Regole di Gioco
Joker Poker - Regole di Gioco Come giocare Il gioco Joker Poker utilizza un mazzo da 53 carte composto da 52 carte francesi più una carta Joker(Jolly) che quindi può assumere il valore di ogni altra carta.
DettagliPolitecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B
Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Esercitazione del 22/01/2013 Esercizio 1 Un sistema dispone di 16 pagine di memoria fisica e 64 di memoria virtuale. Sapo che l indirizzo
DettagliRegolamento Casinò Poker Joker Poker
Regolamento Casinò Poker Joker Poker Lo scopo del poker Joker è di ottenere una mano di poker da 5 carte che contenga una combinazione vincente (vedi la tabella dei pagamenti sulla macchina). Migliore
DettagliVerifica della correttezza formale del numero di partita IVA
Verifica della correttezza formale del numero di partita IVA A tutti i soggetti che intraprendono un attività rilevante ai fini Iva (impresa, arte, professione), al momento della presentazione della dichiarazione
DettagliSOFTWARE. È l insieme delle istruzioni che è necessario fornire alla macchina per il suo funzionamento. Vi sono due categorie di software:
1 SOFTWARE È l insieme delle istruzioni che è necessario fornire alla macchina per il suo funzionamento. Vi sono due categorie di software: SOFTWARE DI SISTEMA (o di base), che deve gestire le funzioni
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
Dettagli