[Algoritmi] [C] Flow-chart
Buonasera a tutti!
Avrei bisogno di un aiuto: un problema mi chiede di scrivere un flow-chart per il prodotto di due generiche matrici date in input.
Come posso impostarlo? Sicuramente ci sarà il controllo riguardo l'uguaglianza tra le colonne della prima e le righe della seconda matrice. Conosco anche la formula per il prodotto. Ma non riesco a scrivere il flow-chart. Potreste aiutarmi?
Per realizzare questo algoritmo in C, è necessario utilizzare gli array, vero?
Avrei bisogno di un aiuto: un problema mi chiede di scrivere un flow-chart per il prodotto di due generiche matrici date in input.
Come posso impostarlo? Sicuramente ci sarà il controllo riguardo l'uguaglianza tra le colonne della prima e le righe della seconda matrice. Conosco anche la formula per il prodotto. Ma non riesco a scrivere il flow-chart. Potreste aiutarmi?
Per realizzare questo algoritmo in C, è necessario utilizzare gli array, vero?
Risposte
Sinceramente non ho mai capito il senso di far scrivere i flow-chart quando il codice è praticamente allo stesso livello di astrazione. Per memorizzare le tre matrici devi ovviamente utilizzare degli array in C.
Nella formula del prodotto hai il valore di ogni singolo elemento della matrice finale per cui devi per prima cosa senza dubbio fare un ciclo su questi elementi. Per calcolare questo valore devi quindi fare un ciclo per calcolare la sommatoria. In totale dovrai quindi fare 3 cicli annidati e quindi usare tre contatori.
Nella formula del prodotto hai il valore di ogni singolo elemento della matrice finale per cui devi per prima cosa senza dubbio fare un ciclo su questi elementi. Per calcolare questo valore devi quindi fare un ciclo per calcolare la sommatoria. In totale dovrai quindi fare 3 cicli annidati e quindi usare tre contatori.
Io, purtroppo, devo realizzare anche il flow-chart (
).... Posso farlo così?
INIZIO
|
INPUT: $(a_i)^j , (b_x)^y$ matrici
|
CONTROLLO: $i = y$ ? -----> F ------> OUTPUT :"Prodotto non esiste" ------> FINE
|
T
|
$(c_x)^j$ = sommatoria per k da 1 a i di $(a_k)^j * (b_x)^k$
|
OUTPUT: $(c_x)^j$ ------> FINE
Inoltre, noi a lezione non abbiamo introdotto gli array. Infatti, la traccia dell'esercizio ci chiede se possiamo realizzare in C tale algoritmo.
Devo quindi rispondere di no, perché non ho strutture che conservino numeri per righe e colonne?

INIZIO
|
INPUT: $(a_i)^j , (b_x)^y$ matrici
|
CONTROLLO: $i = y$ ? -----> F ------> OUTPUT :"Prodotto non esiste" ------> FINE
|
T
|
$(c_x)^j$ = sommatoria per k da 1 a i di $(a_k)^j * (b_x)^k$
|
OUTPUT: $(c_x)^j$ ------> FINE
Inoltre, noi a lezione non abbiamo introdotto gli array. Infatti, la traccia dell'esercizio ci chiede se possiamo realizzare in C tale algoritmo.
Devo quindi rispondere di no, perché non ho strutture che conservino numeri per righe e colonne?
Non mi è del tutto chiaro come dovrebbe essere il flowchart.
In realtà è possibile fare a meno di usare degli array usando un numero sufficienti di variabili ed eliminando la comodità dei cicli. Supponendo per esempio che le matrici siano 2x2 puoi scrivere qualcosa come (sperando di non aver fatto errori che ho scritto di fretta facendo diversi copia e incolla):
E' quindi probabilmente possibile scrivere il programma (a patto di limitare la dimensione delle matrici a valori costanti). Anche se decisamente scomodo (soprattutto se si vogliono supportare diverse dimensioni per le matrici).
In realtà è possibile fare a meno di usare degli array usando un numero sufficienti di variabili ed eliminando la comodità dei cicli. Supponendo per esempio che le matrici siano 2x2 puoi scrivere qualcosa come (sperando di non aver fatto errori che ho scritto di fretta facendo diversi copia e incolla):
double a11, a12, a21, a22; double b11, b12, b21, b22; double c11, c12, c21, c22; /* ... */ /* Calcolo C = A*B */ c11 = a11*b11 + a12*b21; c12 = a11*b12 + a12*b22; c21 = a21*b11 + a22*b21; c22 = a21*b12 + a22*b22;
E' quindi probabilmente possibile scrivere il programma (a patto di limitare la dimensione delle matrici a valori costanti). Anche se decisamente scomodo (soprattutto se si vogliono supportare diverse dimensioni per le matrici).
No?
Ma della moltiplicazione non lo fai il flow chart? Non mi è chiaro il senso di farlo se fai solo la parte di controllo esterno..
Non è sufficiente inserire nel blocco di calcolo la sommatoria dei prodotti?
Non so.. dipende da quello che il tuo professore intende con flow chart e quando dettagliato debba effettivamente essere. Di sicuro il flow chart che hai scritto riguarda una parte molto piccola di quello che sarà il codice finale in C.