Fondamenti di Programmazione

Documenti analoghi
Cicli annidati e matrici di variabili

Università degli Studi di Brescia. Vettori di variabili. ! Sono variabili aggregate in grado di memorizzare una collezione (organizzata) di oggetti

Introduzione al C. Esercitazione 6. Raffaele Nicolussi. Corso di Fondamenti di Informatica Ingegneria Clinica

Esercitazione 2. Corso di Fondamenti di Informatica

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

3 Costrutti while, for e switch

Programmazione I - Laboratorio

ESERCIZI DI PROGRAMMAZIONE. - condizionali e cicli -

Alcuni esercizi. 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Esercitazione 6. Array

Fondamenti di Informatica T-1 Modulo 2

Esercizio 1. Esercizio 1 Soluzione

sum = 0; positivenumbers = 0; /* Passo 1 */ printf("introduci i numeri (0 per finire): "); scanf("%d", &number);

Fondamenti di Informatica T-1 Modulo 2

Cicli annidati ed Array multidimensionali

Istruzioni iterative (o cicliche)

Esercitazione 7. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008

- Dispensa III - PROGRAMMAZIONE C (Parte I)

PROGRAMMAZIONE: ESERCITAZIONE N. 6

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

Fondamenti di Programmazione

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

ESERCIZI DI PROGRAMMAZIONE DA SVOLGERE INDIVIDUALMENTE - parte 1 -

Esercizio 1: calcolo insieme intersezione

ESERCIZI DI PROGRAMMAZIONE DA TEMI D ESAME - vettori -

Gli Operatori. Università degli Studi di Brescia

Corso di Informatica 1 Esercitazione n. 4

Istruzioni iterative. Istruzioni iterative

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

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

Input / Output, Espressioni Condizionali e Cicli

giapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL

Gli Operatori. Linguaggio C. Gli Operatori. Esempi sull uso dell Operatore di Assegnamento. L Operatore di Assegnamento

while Istruzione while Cicli ed iterazioni Istruzioni di ripetizione in C Comportamento del while

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media.

Scelte ed alternative. Esercizi risolti

Programmi su più moduli - Esempio

Linguaggio C. Condizioni composte (operatori logici)

Esercizio 1. Esercizio 1 - Soluzione

INFORMATICA. Strutture iterative

Esercitazione 5. Corso di Fondamenti di Informatica. Laurea in Ingegneria Informatica

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

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

Strutture di iterazione

Esercizi di programmazione in C

Esercizio 1 - cicli. Esercizio 1 cicli - Soluzione

Esercizi di MatLab. Sommario Esercizi di introduzione a MatLab per il corso di Calcolo Numerico e Laboratorio, A.A

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

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

Laboratorio di Programmazione Laurea in Bioinformatica

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Corso di Fondamenti di Programmazione canale E-O ... Un esempio per iniziare. printf) Altri cenni su printf() Esercizi 8. (printf(

Programmazione di base

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

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

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

Elementi di Informatica e Programmazione

Funzioni di libreria. KP pp , , , 589, DD pp , , ,

Le funzioni, e le istruzioni di input/output

Esercitazione 11. Liste semplici

Introduzione a. Funzioni di Ingresso e Uscita. Compilazione

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

Esercizi di programmazione in linguaggio C - Costrutto iterazione

Funzioni. Unità 1. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Fondamenti di Programmazione

Alcuni esercizi. 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli

Programmazione di base

Linguaggio C - Array. Array: tipo nome_array[num_elementi]

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

LIA. LIA - DEIS - Facoltà di Ingegneria - Università di Bologna Elementi di informatica L

- Esercitazione IV Programmazione C Funzioni Alessandro Saetti

Esercitazione 3. Corso di Fondamenti di Informatica

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

Problemi e algoritmi. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05 (da U. de' Liguoro - Alg. & Spe. 03/04)

Strutture di iterazione

Problemi e algoritmi. Il che cosa ed il come. Il che cosa ed il come. Il che cosa e il come

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi

Lab 10 Passaggio per riferimento

il precedente programma dichiara un vettore di interi di dimensione 10 e successivamente inserisce il valore 4 nel secondo elemento del vettore.

a.a Codice corso: 21012, HOMEWORKS

Laboratorio 1. 2) All interno della directory c:\temp\cognome\codici creare il file sorgente hello.c contenente il seguente codice:

Esercizi Programmazione I

Primo programma in C

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Problemi, algoritmi e oggetti

A lezione sono stati presentati i seguenti passi per risolvere un problema:

Stringhe di caratteri

PROGRAMMAZIONE: Le strutture di controllo

Esercitazione 8. Array multidimensionali

acquisizione numero elementi del primo insieme e del secondo insieme, finché elprimoinsieme oppure elsecondoinsieme > EL_INS

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

Elementi di C++ di base

Esercizio 1 - Soluzione

Esercitazione 3. Espressioni booleane I comandi if-else e while

Fondamenti di Informatica

Laboratorio di Programmazione: Linguaggio C Lezione 9 del 27 novembre 2013

Transcript:

Fondamenti di Programmazione Ingegneria dell Automazione Industriale Ingegneria Elettronica e delle Comunicazioni Alessandro Saetti Marco Sechi e Andrea Bonisoli (email: {alessandro.saetti,marco.sechi,andrea.bonisoli@unibs.it) Università degli Studi di Brescia 1

Esercizi sui cicli (1º parte) 1. Acquisisca da tastiera numeri interi fintantoché i numeri immessi sono positivi. Determini (stampando a video un messaggio) se i numeri immessi sono pari oppure dispari 2. Acquisisca da tastiera date fintantoché la data immessa è diversa da 0/0/0 Stampi a video la data che viene prima nel calendario 3. Acquisisca da tastiera 2 frazioni Stampi a video la somma delle frazioni ridotta ai minimi termini. (Suggerimento: Per ridurre una frazione ai minimi termini per prima cosa calcolare il MCD.) 2

Esercizio 1.1 Acquisisca da tastiera numeri interi fintantoché i numeri immessi sono positivi. Determini (stampando a video un messaggio) se i numeri immessi sono pari oppure dispari 3

Esercizi sui vettori 1 parte Esercizio 1.1 Acquisisca da tastiera numeri interi fintantoché i numeri immessi sono positivi. Determini (stampando a video un messaggio) se i numeri immessi sono pari oppure dispari Impostiamo la struttura iniziale del nostro programma C inserendo eventuali commenti Acquisisca da tastiera numeri interi fintantochéi numeri immessi sono positivi. Determini (stampando a video un messaggio) se i numeri immessi sono pari oppure dispari // Dichiarazione delle variabili... int n; #include <stdio.h> #include <stdlib.h> /* Nome: main * Scopo: Stampa numeri pari e dispari * Input: -- * Output: 0 se il programma termina correttamente */ int main() {... system("pause"); return(0); La funzione system esegue il comando passato come argomento. system()richiede <stdlib.h>. Implementiamo la prima parte della consegna printf(" DETERMINA I NUMERI PARI/DISPARI - \n"); // Titolo printf("inserisci numeri interi positivi (negativo o 0 per terminare):\n"); do { printf("==> "); scanf("%d", &n); // istruzioni per determinare se e pari o dispari... while(n > 0); Dichiariamo le variabili necessarie 4

Esercizi sui vettori 1 parte Esercizio 1.1 Verifichiamo la correttezza della parte appena scritta provando a compilarla ed eseguirla Proseguiamo con lo sviluppo, sicuri di ripartire da una situazione sintatticamente e semanticamente corretta. Acquisisca da tastiera numeri interi fintantochéi numeri immessi sono positivi. Determini (stampando a video un messaggio) se i numeri immessi sono pari oppure dispari... // se n <= 0 non valuto se pari o dispari if (n > 0) if (n % 2 == 0) printf("%d e' pari!\n", n); else printf("%d e' dispari!\n", n);... L espressione a % b fornisce il resto della divisione (quindi un intero!) tra a e b. Ad esempio 7 % 3 restituisce 1 Adesso compiliamo ed eseguiamo il nostro programma. Un esempio di output potrebbe essere il seguente: 5

Esercizi sui cicli 1 parte Esercizio 1.1 Soluzione completa: /************************************************************************** * Nome: lab1-pari_dispari.c * * Autore: Alessandro Saetti * * Data: 16/2/10 * **************************************************************************/ #include <stdio.h> #include <stdlib.h> /* Nome: main * Scopo: Stampa numeri pari e dispari * Input: -- * Output: 0 se il programma termina correttamente */ int main() { int n; printf(" DETERMINA I NUMERI PARI/DISPARI - \n"); printf("inserisci numeri interi positivi (negativoo 0 per terminare):\n"); do { printf("==> "); scanf("%d", &n); if (n > 0) if(n % 2 == 0) printf("%d e' pari!\n", n); else printf("%d e' dispari!\n", n); while(n > 0); INPUT VALUTO SE PARI OUTPUT system("pause"); return(0); 6

Esercizio 1.2 Acquisisca da tastiera date fintantoché la data immessa è diversa da 0/0/0 Stampi a video la data che viene prima nel calendario 7

Esercizi sui cicli 1 parte -Acquisisca da tastiera date fintantochéla data immessa è diversa da 0/0/0 -Stampi a video la data che viene prima nel calendario (quella più vecchia) Impostiamo la struttura di partenza del nostro programma C - Acquisisca da tastiera date fintantoché la data immessa è diversa da 0/0/0 -Stampi a video la data che viene prima nel calendario (quella piùvecchia) // Dichiarazione delle variabili... int aa,mm,gg; printf("immetti date (gg/mm/aa):\n"); do { printf("-->"); scanf("%d/%d/%d",&g,&m,&a); #include <stdio.h> #include <stdlib.h> /* Nome: main * Scopo: Calcola e stampa la data minima * Input: -- * Output: 0 se il programma termina correttamente */ int main() {... system("pause"); return(0); Dichiaro via via le variabili necessarie Spiego come immettere le date Leggo la data usando il carattere / come separatore Esercizio 1.2 // Determino se è la data minima while (gg!= 0 mm!= 0 aa!= 0); Lascio in sospeso la parte relativa alla determinazione della data minima Se non corrisponde alla data di stop 0/0/0 ripeto l operazione di lettura 8

Esercizi sui cicli 1 parte Esercizio 1.2 - Acquisisca da tastiera date fintantoché la data immessa è diversa da 0/0/0 -Stampi a video la data che viene prima nel calendario (quella piùvecchia) // Dichiarazione delle variabili... int aa,mm,gg; // Variabili per la data minima printf("immetti date (gg/mm/aa):\n"); do { printf("-->"); scanf("%d/%d/%d",&g,&m,&a); // Determino se è la minima Dichiaro ed inizializzo le variabili usate per memorizzare la data minima corrente L inizializzazione delle variabili relative alla data minima può essere fatta utilizzando i valori massimi che tali variabili possono assumere. // Dichiarazione variabili... int min_aa=100,min_mm=13, min_gg=32; while (gg!= 0 mm!= 0 aa!= 0); // OUTPUT Determinazione della data minima corrente if (aa > 0 && mm > 0 && gg > 0) { if (aa < min_aa) { min_aa = aa; min_mm = mm; min_gg = gg; else if (aa == min_aa && mm < min_mm) { min_mm = mm; min_gg = gg; else if (aa == min_aa && mm == min_mm && gg < min_gg) min_gg = gg; Mentre procediamo con la lettura valutiamo se la data appena letta gg/mm/aa (che deve essere diversa da 0/0/0!) risulta minore rispetto a quella minima attuale min_gg/min_mm/min_aa. Se così è aggiorno la data minima attuale con gg/mm/aa. printf("%d/%d/%d\n",min_gg,min_mm,min_aa); Stampo la data minima della sequenza letta 9

Esercizi sui cicli 1 parte Esercizio 1.2 Soluzione completa: /************************************************************************** * Nome: lab2-date.c * * Autore: Alessandro Saetti * * Data: 16/2/10 * **************************************************************************/ #include <stdio.h> #include <stdlib.h> /* Nome: main * Scopo: Calcola e stampa la data minima * Input: -- * Output: 0 se il programma termina correttamente */ int main() { int gg, mm, aa, min_aa = 100, min_mm = 13, min_gg= 32; printf("immetti date (gg/mm/aa):\n"); do { printf("-> "); scanf("%d/%d/%d", &gg, &mm, &aa); if (aa > 0 && mm > 0 && gg > 0) { if (aa < min_aa) { min_aa = aa; min_mm = mm; min_gg = gg; else if (aa == min_aa && mm < min_mm) { min_mm = mm; min_gg = gg; else if (aa == min_aa && mm == min_mm && gg < min_gg) min_gg = gg; while(gg!= 0 mm!= 0 aa!= 0); INPUT VALUTO LA DATA MINIMA printf("la data minima e': %d/%d/%d\n", min_gg, min_mm, min_aa); OUTPUT system("pause"); return(0); 10

Esercizio 1.3 Acquisisca da tastiera 2 frazioni Stampi a video la somma delle frazioni ridotta ai minimi termini. (Suggerimento: Per ridurre una frazione ai minimi termini per prima cosa calcolare il MCD.) 11

Esercizi sui cicli 1 parte Esercizio 1.3 - Acquisisca da tastiera 2 frazioni -Stampi a video la somma delle frazioni ridotta ai minimi termini. (Suggerimento: Per ridurre una frazione ai minimi termini per prima cosa calcolare il MCD.) Impostiamo la solita struttura di partenza di un programma C #include <stdio.h> #include <stdlib.h> /* * Nome : main * Scopo : Stampa la frazione somma * ridotta ai minimi termini * Input : -- * Output: 0 se il programma termina * correttamente */ int main() {... system("pause"); return(0); Implementiamo la prima parte della consegna (INPUT) - Acquisisca da tastiera 2 frazioni -Stampi a video la somma delle frazioni ridotta ai minimi termini. (Suggerimento: Per ridurre una frazione ai minimi termini per prima cosa calcolare il MCD.) Imposto le istruzioni di input... printf("digita la 1^ frazione (A/B): "); scanf("%d/%d", &num1, &den1); printf("digita la 2^ frazione (C/D): "); scanf("%d/%d", &num2, &den2); e dichiaro le variabili necessarie. // Dichiarazione delle variabili... int num1, num2, den1, den2; 12

Esercizi sui cicli 1 parte - Acquisisca da tastiera 2 frazioni - Stampi a video la somma delle frazioni ridotta ai minimi termini. (Suggerimento: Per ridurre una frazione ai minimi termini per prima cosa calcolare il MCD.) num 1 + den 1 num 2 den 2 num 1* den 2 + num 2 * den1 = = den1* den 2 num den - Acquisisca da tastiera 2 frazioni - Stampi a video la somma delle frazioni ridotta ai minimi termini. (Suggerimento: Per ridurre una frazione ai minimi termini per prima cosa calcolare il MCD.) Per determinare il MCD tra num e den posso seguire questa procedura: Memorizzo nella variabile min il valore più basso tra il numeratore e denominatore della frazione somma. Partendo da 1 fino a minestraggo tutti i divisori sia di numche di den. L ultimo divisoretrovatoèil MCD. ALGORITMO ALTERNATIVO PER DETERMINARE IL MCD: a) imposto mcd=minimo(num,den) b) Se mcd==1 allora termino saltando allo step d) c) Se num e den sono divisibili per mcd allora mcd è il MCD e termino saltando a d) altrimenti decremento mcd e ripeto lo step corrente c) d) Fine. Calcolo la frazione somma... num = num1 * den2 + num2 * den1; den = den1 * den2; e aggiungo le nuove variabili utilizzate. // Dichiarazione delle variabili... int num, den; Per ridurre ai minimi termini basta dividere il numeratore e il denominatore per il massimo comune divisore tra num e den. if (num > den) min = den; else min = num; for (i = 1; i <= min ; i++) if ( num % i == 0 && den %i == 0) mcd = i; Esercizio 1.3 Quindi aggiungo le variabili appena utilizzate. // Dichiarazione delle variabili... int min, mcd, i; printf ("Frazione somma ridotta: %d/%d\n\n", num/mcd, den/mcd); Stampo la frazione somma ridotta 13

Esercizi sui cicli 1 parte Soluzione completa: /************************************************************************** * Nome: lab4-frazioni.c * * Autore: Alessandro Saetti * * Data: 16/2/10 * **************************************************************************/ #include <stdio.h> #include <stdlib.h> /* * Nome: main * Scopo: Stampa la frazione somma ridotta ai minimi termini * Input: -- * Output: 0 se il programma termina correttamente */ int main() { int num1, num2, den1, den2, num, den, min, mcd, i; printf("digita la 1^ frazione (A/B): "); scanf("%d/%d", &num1, &den1); printf("digita la 2^ frazione (C/D): "); scanf("%d/%d", &num2, &den2); num = num1 * den2 + num2 * den1; den = den1 * den2; if (num > den) min = den; else min = num; for (i = 1; i <= min ; i++) if ( num % i == 0 && den %i == 0) mcd = i; INPUT CALCOLO LA FRAZIONE SOMMA E LA RIDUCO AI MINIMI TERMINI printf ("Frazione somma ridotta: %d/%d\n\n", num/mcd, den/mcd); system("pause"); return(0); OUTPUT Esercizio 1.3 14

Esercizi sui vettori (2º parte) 4. Inizializzi un vettore di 1000 elementi con numeri casuali compresi tra 1 e 100 (estremi inclusi). Calcoli la media dei numeri presenti nel vettore. 5. Acquisisca da tastiera un numero intero positivo n, ripetendo l acquisizione qualora il numero fosse negativo o superiore a 1023. Stampi a video la conversione di n in base 2. (Suggerimento: Utilizzare un vettore per memorizzare i resti delle divisioni.) 6. Inizializzi e stampi a video una matrice M di 10 righe e 20 colonne con numeri casuali interi compresi tra 0 ed 1; Inizializzi e stampi un vettore di 10 elementi con i numeri interi corrispondenti alla rappresentazione decimale dei numeri binari che compaiono (con notazione posizionale) sulle righe della matrice M. 15

Esercizio 1.4 Inizializzi un vettore di 1000 elementi con numeri casuali compresi tra 1 e 100 (estremi inclusi). Calcoli la media dei numeri presenti nel vettore. 16

Esercizi sui vettori 2 parte -Inizializzi un vettore di 1000 elementi con numeri casuali compresi tra 1 e 100 (estremi inclusi). -Calcoli la media dei numeri presenti nel vettore. Impostiamo la solita struttura di partenza di un programma C - Inizializzi un vettore di 1000 elementi con numeri casuali compresi tra 1 e 100 (estremi inclusi). - Calcoli la media dei numeri presenti nel vettore. Ricordiamoci di dichiarare le variabili utilizzate // Dichiarazione delle variabili... #define DIM 1000; int i, vet[dim]; Aggiungiamo a S in successione i valori che vengono via generati Esercizio 1.4 #include <stdio.h> #include <stdlib.h> /* * Nome: main * Scopo: Stampa la media dei numeri in un vettore * Input: -- * Output: 0 se il programma termina correttamente */ int main() {... system("pause"); return(0); Per generare i numeri casuali sfruttiamo la funzione rand() for (i=0; i < DIM; i++) vet[i] = rand() % 100+1; 17

Esercizi sui vettori 2 parte -Inizializzi un vettore di 1000 elementi con numeri casuali compresi tra 1 e 100 (estremi inclusi). - Calcoli la media dei numeri presenti nel vettore. Calcoliamo la somma totale dei valori generati casualmente. Per ottenere la media divido la somma totale per il numero DIM di valori generati. Dichiariamo le variabili #include <stdio.h>... // Dichiarazione variabili... int somma; float media;... Nel ciclo for aggiungiamo le istruzioni che ci consentono di calcolare la somma totale dei valori generati somma=0; for (i=0; i < DIM; i++) { vet[i] = rand() % 100 + 1; somma += vet[i]; Poiché la variabile somma è un int, per evitare di perdere nella divisione tra interi la parte decimale, effettuo un cast (conversione di tipo) a float della variabile somma media = (float)somma / DIM; printf("media: %.2f\n\n", media); Esercizio 1.4 Per evitare che rand() generi sempre la stessa sequenza inizializzo il generatore dei numeri casuali con la funzione srand() #include <time.h> srand(time(null)); 18

Esercizi sui vettori 2 parte Soluzione completa: /************************************************************************** * Nome: lab1-media.c * * Autore: Alessandro Saetti * * Data: 23/2/10 * **************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <time.h> #define DIM 1000 /* * Nome: main * Scopo: Stampa la media dei numeri in un vettore * Input: -- * Output: 0 se il programma termina correttamente */ int main() { int i, vet[dim], somma = 0; float media; srand(time(null)); for (i=0; i < DIM; i++) { vet[i] = rand() % 100 + 1; somma += vet[i]; media = (float)somma / DIM; printf("media: %.2f\n\n", media); Esercizio 1.4 system("pause"); return 0; 19

Esercizio 1.5 Acquisisca da tastiera un numero intero positivo n, ripetendo l acquisizione qualora il numero fosse negativo o superiore a 1023. Stampi a video la conversione di n in base 2. (Suggerimento: Utilizzare un vettore per memorizzare i resti delle divisioni.) 20

Esercizi sui vettori 2 parte -Acquisisca da tastiera un numero intero positivo n, ripetendo l acquisizione qualora il numero fosse negativo o superiore a 1023. -Stampi a video la conversione di n in base 2. (Suggerimento: Utilizzare un vettore per memorizzare i resti delle divisioni.). Impostiamo la struttura di partenza di un programma C Esercizio 1.5 #include <stdio.h> #include <stdlib.h> /* * Nome: main * Scopo: Stampa conversione base 2 * Input: -- * Output: 0 se il programma termina correttamente */ int main() {... system("pause"); return(0); - Acquisisca da tastiera un numero intero positivo n, ripetendo l acquisizione qualora il numero fosse negativo o superiore a 1023. - Stampi a video la conversione di n in base 2. (Suggerimento: Utilizzare un vettore per memorizzare i resti delle divisioni.). Ripeto finché i valori digitati sono fuori dall intervallo [0,1023] // Dichiarazione variabili... int dec; printf("immetti un intero (<1024 e >=0)):\n"); do { printf("-> "); scanf("%d", &dec); while (dec<0 dec>1023); Dichiarazione variabili Spiego cosa voglio Leggo il numero Se non appartiene a [0,1023] ripeto la lettura 21

Esercizi sui vettori 2 parte Esercizio 1.5 - Acquisisca da tastiera un numero intero positivo n, ripetendo l acquisizione qualora il numero fosse negativo o superiore a 1023. - Stampi a video la conversione di n in base 2. (Suggerimento: Utilizzare un vettore per memorizzare i resti delle divisioni.). Per ottenere la rappresentazione in base 2 estraggo la sequenza dei resti della divisione per 2 e li memorizzo in un array. Stampo poi in ordine inverso tale sequenza. Dichiarazione e inizializzazione variabili -Calcolo il resto della divisione per 2 e lo aggiungo nell array bin - Determino il nuovo quoziente dec Se il nuovo quoziente decnon èzero calcolo il resto successivo Stampo in ordine inverso la sequenza dei resti int n=0, bin[10], i; printf("conversione in base 2 di %d: ", dec); do { bin[n] = dec % 2; dec = dec /2; n++; while (dec!= 0); for (i = n-1; i >=0; i--) printf("%d", bin[i]); printf("\n\n"); 22

Esercizi sui vettori 2 parte Soluzione completa: /************************************************************************** * Nome: lab2-dectobin.c * * Autore: Alessandro Saetti * * Data: 23/2/10 * **************************************************************************/ #include <stdio.h> #include <stdlib.h> /* * Nome: main * Scopo: Stampa conversione base 2 * Input: -- * Output: 0 se il programma termina correttamente */ int main() { int dec, bin[10], i, n = 0; printf("immetti un intero (positivo minore di 1024):\n"); do { printf("-> "); scanf("%d", &dec); while(dec < 0 dec > 1023); printf("conversione in base 2 di %d: ", dec); do { bin[n] = dec % 2; dec = dec /2; n++; while (dec!= 0); for (i = n-1; i >=0; i--) printf("%d", bin[i]); printf("\n\n"); Esercizio 1.5 system("pause"); return 0; 23

Esercizio 1.6 Inizializzi e stampi a video una matrice M di 10 righe e 20 colonne con numeri casuali interi compresi tra 0 ed 1; Inizializzi e stampi un vettore di 10 elementi con i numeri interi corrispondenti alla rappresentazione decimale dei numeri binari che compaiono (con notazione posizionale) sulle righe della matrice M. 24

Esercizi sui vettori 2 parte -Inizializzi e stampi a video una matrice M di 10 righe e 20 colonne con numeri casuali interi compresi tra 0 ed 1; -Inizializzi e stampi un vettore di 10 elementi con i numeri interi corrispondenti alla rappresentazione decimale dei numeri binari che compaiono (con notazione posizionale) sulle righe della matrice M Impostiamo la struttura di partenza del nostro programma -Inizializzi e stampi a video una matrice M di 10 righe e 20 colonne con numeri casuali interi compresi tra 0 ed 1; -Inizializzi e stampi un vettore di 10 elementi con i numeri interi corrispondenti alla rappresentazione decimale dei numeri binari che compaiono (con notazione posizionale) sulle righe della matrice M Genero dei numeri casuali 0 o 1, li stampo per controllo e li memorizzo nella matrice M. Se inizializzo la sequenza casuale con srand(time(null)) posso ottenere, per ogni esecuzione, delle sequenze di bit sempre differenti. Esercizio 1.6 #include <stdio.h> #include <stdlib.h> /* Nome : main * Scopo : Stampa conversioni in base 10 di numeri * binari su righe di matrice * Input : -- * Output: 0 se il programma termina correttamente */ int main() {... system("pause"); return(0); #define DIM1 10 #define DIM2 20 Ricordiamoci di dichiarare le variabili utilizzate int M[DIM1][DIM2], i, j; Memorizziamo i valori generati in una matrice DIM1xDIM2 for (i=0; i < DIM1; i++) { for (j=0; j < DIM2; j++) { M[i][j]=rand()%2; printf("%2d",m[i][j]); printf("\n"); 25

Esercizi sui vettori 2 parte Esercizio 1.6 -Inizializzi e stampi a video una matrice M di 10 righe e 20 colonne con numeri casuali interi compresi tra 0 ed 1; -Inizializzi e stampi un vettore di 10 elementi con i numeri interi corrispondenti alla rappresentazione decimale dei numeri binari che compaiono (con notazione posizionale) sulle righe della matrice M float powf(float b, float x) => richiede #include <math.h> #include <math.h>... for (i=0; i < DIM1; i++) { for (j=0; j < DIM2; j++) V[i]+=M[i][j]*powf(2,DIM2-j-1); printf("conversione decimale per riga #%d: %d\n", i+1, V[i]); Per evitare che durante la compilazione appaia l avvertimento: [Warning] converting to `int' from `float mettiamo un cast a int prima della funzione powf() Per ogni riga i-esima della matrice M calcolo la somma di potenze (decrescente!) di 2 dove i coefficienti sono costituiti dagli elementi sulla riga i-esima della matrice. Tale valore viene poi memorizzato in V[i]. 26

Esercizi sui vettori 2 parte Soluzione completa: /************************************************************************** * Nome: lab4-bintodec.c * * Autore: Alessandro Saetti * * Data: 23/2/10 * **************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <math.h> #define DIM1 10 #define DIM2 20 /* Nome: main * Scopo: Stampa conversioni in base 10 di numeri binari su righe di matrice * Input: -- * Output: 0 se il programma termina correttamente */ int main() { int M[DIM1][DIM2], i, j, V[DIM1]={0; for (i=0; i < DIM1; i++) { for (j=0; j < DIM2; j++) { M[i][j]=rand()%2; printf("%2d",m[i][j]); printf("\n"); for (i=0; i < DIM1; i++) { for (j=0; j < DIM2; j++) { V[i]+=M[i][j]*powf(2,DIM2-j-1); printf("conversione decimale per riga #%d: %d\n", i+1, V[i]); system("pause"); return(0); Esercizio 1.6 27

Esercizi sui cicli (per casa) 1. : Acquisisca da tastiera numeri interi fintantoché il numero immesso è negativo. Stampi a video i primi 5 anni bisestili superiori al numero acquisito. (Suggerimento: Un anno è bisestile se è divisibile per 4 ma non per 100 eccetto per quegli anni divisibili per 400). 2. : Acquisire da tastiera la lunghezza dei tre lati di un triangolo fintantoché le lunghezze acquisite non sono positive e non soddisfano la disuguaglianza triangolare (la somma del lato maggiore è inferiore alla somma degli altri lati) Stampi il perimetro del triangolo. (Suggerimento: Ad ogni iterazione calcolare il massimo lato acquisito e la somma degli altri due dati) 28

Esercizi sui cicli (per casa) 3. Acquisire da tastiera un numero intero n (ripetendo l acquisizione finché vengono immessi numeri negativi) Acquisire successivamente da tastiera n numeri interi Stampare a video la media degli n numeri acquisiti 4. Acquisisca da tastiera due numeri interi corrispondenti al numero di giorni in un mese ed al giorno della settimana in cui il mese inizia. Stampi a video il calendario del mese. Ad esempio: Inserire il numero di giorni del mese: 31 Inserire il giorno della settimana in cui il mese inizia (1=Domenica, 7=Sabato): 3 D L M M G V S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 29

Esercizi sui vettori (per casa) 5. : Inizializzi un vettore di 100 elementi con numeri casuali compresi tra -50 e 50 Stampi a video il minimo numero n nel vettore per il quale esista un solo numero nel vettore più piccolo di n 6. Acquisisca da tastiera un numero intero n maggiore di 10 e minore di 100, ripetendo l acquisizione qualora il numero non rispettasse i requisiti richiesti. Inizializzi un vettore di 20 elementi con numeri casuali compresi tra 10 ed n. Stampi a video il numero contenuto nel vettore con il maggior numero di divisori. 30

Esercizi sui vettori (per casa) 7. Inizializzi e stampi a video una matrice M di 4 righe e 3 colonne con numeri casuali interi compresi tra 1 e 9; Stampi a video la somma delle righe e la somma delle colonne di M 8. Inizializzi e stampi a video una matrice M di 4 righe e 5 colonne con numeri casuali interi compresi tra 1 e 9; Inizializzi un vettore V con 5 numeri interi acquisiti da tastiera; Stampi a video il prodotto (righe per colonne) tra la matrice M e il vettore V. 31