250 likes | 398 Views
Programmazione di Calcolatori. I Diagrammi di Flusso Soluzione agli esercizi proposti. I più semplici. Calcolare il massimo di una sequenza non vuota di numeri interi positivi terminata da un intero negativo. Start Nome: MaxOfSeq Variabili: int val, max. max -1. val.
E N D
Programmazione di Calcolatori I Diagrammi di Flusso Soluzione agli esercizi proposti Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
I più semplici Calcolare il massimo di una sequenza non vuota di numeri interi positivi terminata da un intero negativo Start Nome: MaxOfSeq Variabili: int val, max max -1 val Descrizione variabili: val: memorizza il valore corrente della sequenza max: memorizza il massimo corrente true val < 0 max End false false val > max true max val Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
I più semplici Acquisire due valori interi in due variabili e scambiarne il contenuto Start Nome: Scambia Variabili: int A, B, aux A, B aux A A B B aux Descrizione variabili: A: memorizza il primo valore intero B: memorizza il secondo valore intero aux: variabile di appoggio End Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
I più semplici Start Nome: MCM Variabili: int A, B, max, mcm, count A, B Descrizione variabili: A: memorizza il primo intero B: memorizza il secondo intero max: memorizza il massimo tra i due interi mcm: memorizza il candidato corrente a minimo comune multiplo count: moltiplicato per max genera il prossimo candidato a minimo comune multiplo count 2 A > B max A max B true false mcm max mcm % A = 0 and mcm % B = 0 false mcm max*count cont count+1 Calcolare il minimo comune multiplo tra 2 interi positivi true mcm End Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
I più semplici Start Nome: MCM Variabili: int A, B, mcm Calcolare il minimo comune multiplo tra 2 interi positivi A, B mcm A Descrizione variabili: A: memorizza il primo intero B: memorizza il secondo intero mcm: memorizza il candidato corrente a minimo comune multiplo mcm % A = 0 and mcm % B = 0 mcm mcm+1 mcm End Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
I più semplici Start Nome: MCD Variabili: int A, B, min, mcd, count Calcolare il massimo comun divisore tra 2 interi positivi A, B mcd 1 count 1 Descrizione variabili: A: memorizza il primo intero B: memorizza il secondo intero min: memorizza il minimo tra i due interi count: memorizza il candidato corrente a massimo comun divisore mcd: memorizza l’ultimo divisore comune individuato false true A > B min A min B true count > min mcd false End A % count = 0 and B % count = 0 count count+1 false true mcd count Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
Vettori Dato un vettore di n ≥ 1interi, restituirne il contenuto Start Nome: ResVett Variabili: int curs, int vett[N] Descrizione variabili: curs: indice per la scansione del vettore vett[ ]: vettore interessato dal processamento curs 0 curs< N false End curs curs+1 true vett[curs] Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
Vettori Dato un vettore di n ≥ 1interi, determinarne il massimo elemento Start Nome: MaxVett Variabili: int curs, max int vett[N] curs 0 max vett[0] Descrizione variabili: curs: indice per la scansione del vettore vett[ ]: vettore interessato dal processamento max: massimo valore individuato fino alla posizione curs false curs < N max End curs curs+1 true false vett[curs] > max true max vett[curs] Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
Vettori Dato un vettore di n ≥ 1interi, determinarne il massimo elemento e la sua posizione Start Nome: MaxPosVett Variabili: int curs, max, pos int vett[N] curs 0 max vett[0] pos 0 Descrizione variabili: curs: indice per la scansione del vettore vett[ ]: vettore interessato dal processamento max: massimo valore individuato fino alla posizione curs pos: posizione del valore memorizzato in max End false curs < N max, pos curs curs+1 true false vett[curs] > max true max vett[curs] pos curs Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
Vettori Verificare la presenza di un carattere all’interno di un vettore di n ≥ 1caratteri e la sua eventuale posizione Start Nome: PosCarVett Variabili: int curs, car, pos char vett[N] curs 0 pos = -1 Descrizione variabili: curs: indice per la scansione del vettore vett[ ]: vettore interessato dal processamento car: memorizza il carattere di cui verificare la presenza pos: memorizza la posizione di car se presente, -1 altrimenti car End false curs < N curs curs+1 pos true vett[curs] = car false true pos curs Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
Vettori Ordinare, in ordine crescente, un vettore di n ≥ 1 interi: Selection Sort • Algoritmo: per ogni posizione p degli elementi del vettore, ad esclusione dell’ultima: determinare il valore minimo nel vettore a partire dalla posizione p inclusa. Sia q la posizione di tale valore minimo scambiare il valore nella posizione p con quello nella posizione q Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
Vettori Ordinare, in ordine crescente, un vettore di n ≥ 1 interi: Selection Sort • Sottoproblemi: determinare la posizione del valore minimo nel vettore a partire da una posizione data scambiare i valori di due variabili Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
Vettori Start Nome: PosMinVett Variabili: int curs, pos, start int vett[N] Determinare la posizione del valore minimo nel vettore a partire da una posizione data curs start min = vett[start] pos start Descrizione variabili: curs: indice per la scansione del vettore vett[ ]: vettore interessato dal processamento start: posizione dalla quale ha inizio il processamento max: massimo valore individuato fino dalla posizione start alla posizione curs pos: posizione del valore memorizzato in max End true curs = N curs curs+1 pos false false vett[curs] < min true pos curs min vett[curs] Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
Vettori scambiare i valori di due variabili Start Nome: Scambia Variabili: int A, B, aux aux A A B B aux Descrizione variabili: A: memorizza il primo valore intero B: memorizza il secondo valore intero aux: variabile di appoggio End Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
Vettori Ordinare, in ordine crescente, un vettore di n ≥ 1 interi: Selection Sort Start Nome: Selection Sort Variabili: int curs, pos int vett[N] Descrizione variabili: curs: indice per la scansione del vettore vett[ ]: vettore interessato dal processamento pos: posizione del minimo elemento del vettore a partire dalla posizione curs curs 0 true curs = N-1 End false Applica PosMinVett a vett[ ] a partire dalla posizione curs e lascia il risultato in pos curs curs+1 Applica scambia a vett[curs] e vett[pos] Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
Vettori Ordinare, in ordine crescente, un vettore di n ≥ 1 interi: Bubble Sort • Algoritmo: scandire l’intero vettore confrontando elementi adiacenti e scambiando i loro valori se necessario ripetere tale scansione fino al completo ordinamento del vettore, cioè finchè la scansione richiede almeno uno scambio di valori Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
Vettori Ordinare, in ordine crescente, un vettore di n ≥ 1 interi: Bubble Sort • Sottoproblemi: scambiare i valori di due variabili scandire il vettore confrontando elementi adiacenti e scambiando i loro valori se necessario verificare se nella scansione si è verificato almeno uno scambio di valori Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
Vettori Scambiare i valori di due variabili Start Nome: Scambia Variabili: int A, B, aux aux A A B B aux Descrizione variabili: A: memorizza il primo valore intero B: memorizza il secondo valore intero aux: variabile di appoggio End Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
Vettori Confrontare elementi adiacenti scambiando i loro valori se necessario, verificando nel contempo verificato almeno uno scambio di valori Start Nome: BubbleStep Variabili: int curs, flag int vett[N] curs 0 flag false End Descrizione variabili: curs: indice per la scansione del vettore vett[ ]: vettore interessato dal processamento flag: indica l’avvenuto scambio di almeno una coppia di valori curs = N-1 flag curs curs+1 true false false vett[curs] > vett[curs+1] flag true true Applica scambia a vett[curs] e vett[curs+1] Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
Vettori Ordinare, in ordine crescente, un vettore di n ≥ 1 interi: Bubble Sort Start Nome: BubbleSort Variabili: int vett[N] Applica BubbleStep a vett[ ] true Descrizione variabili: vett[ ]: vettore interessato dal processamento false End Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
Matrici Start Nome: ResMat Variabili: int riga, col int mat[P][Q] Data una matrice P x Q interi, P ≥ 1, Q ≥ 1, restituirne il contenuto (per righe) riga 0 col 0 false riga < P Descrizione variabili: riga: indice per la scansione delle righe della matrice col: indice per la scansione delle colonne della matrice mat[ ][ ]: matrice interessata dal processamento End true col < Q false riga riga+1 col 0 true mat[riga][col] col col+1 Programmazione di Calcolatori: I diagrammi di flusso
Matrici Start Nome: AcqMat Variabili: int riga, col int mat[P][Q] Data una matrice P x Q interi, P ≥ 1, Q ≥ 1, restituirne il contenuto (per colonne) riga 0 col 0 Descrizione variabili: riga: indice per la scansione delle righe della matrice col: indice per la scansione delle colonne della matrice mat[ ][ ]: matrice interessata dal processamento col < Q false End true riga < P false riga 0 col col+1 true mat[riga][col] riga riga+1 Programmazione di Calcolatori: I diagrammi di flusso
Matrici Data una matrice quadrata di P x P interi, P ≥ 1, determinarne il massimo elemento sulla diagonale principale e la sua posizione Start Nome: MaxPosMat Variabili: int curs, max, pos int mat[P][P] curs 0 max mat[0][0] pos 0 Descrizione variabili: curs: indice per la scansione della diagonale principale mat[ ][ ]: matrice interessata dal processamento max: massimo valore individuato fino alla posizione [curs][curs] pos: posizione del valore memorizzato in max End false curs < P max, pos curs curs+1 true false mat[curs][curs] > max true max mat[curs][curs] pos curs Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
Matrici Start Nome: AcqMat Variabili: int riga, col, val, count int mat[P][Q] Contare le occorrenze di un intero in una matrice di P x Q interi, P ≥ 1, Q ≥ 1 val riga 0 col 0 count 0 Descrizione variabili: riga: indice per la scansione delle righe della matrice col: indice per la scansione delle colonne della matrice val: memorizza il valore oggetto della ricerca count: memorizza il numero di occorrenze del valore mat[ ][ ]: matrice interessata dal processamento riga 0 col col+1 col < Q false End true riga riga+1 riga < P false true false mat[riga][col] = val true count count+1 Programmazione di Calcolatori: I diagrammi di flusso