[1] i e j sono variabili, pertanto non possono essere definiti come costanti! Nel ciclo scrivere i valori estratti, ma poi non li usate per riempire la matrice. Ci sono invece istruzioni per inserire gli elementi della matrice a mano. [2] ASSENTI [3] Un po' di disordine. Non controllate che l'ordine della matrice sia positivo e minore del massimo. Non controllate nemmeno che a <= b. Ottime le soluzioni. [4] Un po' disordinato. La variabile r si puo' omettere nel ciclo. L'if e' proprio inutile. All'interno del ciclo i basta mettere un ciclo j che va da 0 a i-1 e un altro che va da j a N. L'if non fa altro che rallentare. Peraltro la prima condizione e' proprio quella che si verifica con minor frequenza. Il formato di output non tiene conto dei numeri negativi. [5] La matrice e' quadrata! Molte variabili inutili (come st). Nel calcolo delle matrici triangolari le somme su k si calcolano inutilmente due volte. Disordine. L'algoritmo non e' ben scritto (infatti il risultato non e' corretto) perche' si assegnano gli elementi di U e di L prima che sia stato assegnato il valore degli elementi sulla diagonale di L. [6] ASSENTI [7] Disordine. Le variabili si dichiarano sempre all'inizio di un blocco. l[i][i]=(float)1; si puo' scrivere piu' semplicemente come l[i][i]=1.;. L'algoritmo e' sbagliato. Non si puo' calcolare tutta U se prima non si calcolano gli elementi di L che servono. U e L vanno costruite insieme. [8] Sarebbe meglio usare una costante per rappresentare l'ordine massimo delle matrici. Non fate controlli sui valori di a, b e ordine. Gli if per la stampa ordinata dei numeri sono inutili. Basta usare il formato giusto %+10.6f. 1/ non va bene: 1./. Il determinante di U e' il determinante di M. [9] A che serve MAX? Le matrici L e U non sono indipendenti percio' non si puo' ricavarne una prima dell'altra. Le due matrici vanno costruite insieme, nello stesso ciclo. [10] Disordine. Perche' non usate la costante N quando dovete scrivere 100? Orrore: un ciclo i, j in cui c'e' l'if per fare l[i][j]=1!!! Nel primo ciclo per il calcolo di U c'e' un termine in piu'. Non dovrebbe dare fastidio, ma e' inopportuno. [11] Il reinserimento dell'ordine della matrice si puo' fare solo una volta. Siccome b e a sono intere, lo e' l'espressione (b - a)*rand() che, diviso per l'intero RAND_MAX, da' 0 come risultato. [12] Non so da che parte cominciare: mi sa che e' meglio se ci vediamo nel mio ufficio...:-( [13] ASSENTI [14] La matrice e' un po' piccola e comunque e' meglio usare delle costanti per definirne le dimensioni. Bisognerebbe anche controllare che n sia positivo, e che a sia minore di b. [15] Un po' poco per dare un giudizio. MAX e' un po' inutile. [16] Definite le costanti per indicare le dimensioni massime degli array. Non ci sono controlli sui valori in input. Visto che la matrice e' quadrata non serve la variabile j. Disordine. Non state usando una riga e una colonna visto che gli indici partono da 1. Non c'e' altro :-( [17] C'e' solo la generazione della matrice. Non ci sono controlli sull'input. Inutile la variabile n. [18] Manca il controllo N>0 (o meglio di 1). Si contenga mi piace; e' una citazione colta :-) . La matrice e' quadrata!!! Se prima non assegnate i valori della diagonale di L non potete calcolare gli altri elementi. I valori delle variabili somma vanno riazzerati appena si comincia a risommare se no le somme non sono giuste. [19] Non avete usato alcuna costante. Non ci sono controlli sull'input. Non avete azzerato alpha e beta. If (i=j)!!!!!!!!! Licenziati. E poi non serve un if per fare quel lavoro: basta mettere alpha[i][i]=1 fuori dal ciclo j. beta[i][j] non si calcola nel ciclo. Idem per alpha. 1/beta non va mai scritto: 1./beta. [20] Non ci sono controlli in input. If (i=j) procura il licenziamento in tronco. E poi che c'entra un if? Gli elementi della diagonale vanno assegnati prima tutti. La struttura degli else e' di una complicazione incredibile. Disordine. [21] Le variabili si dichiarano all'inizio dei blocchi. La dichiarazione di L e U mi fa intorcinare le budella :-(... L'if non va bene, perche' non rispetta la sequenza delle operazioni (prima si devono assegnare gli elementi sulla diagonale e poi fare il resto). Inoltre e' inutilmente complicato. [22] Non ci sono controlli in input. Perche' i cicli partono da 1? E' uno spreco. C'e' solo la generazione della matrice. [23] Le dichiarazioni si fanno prima di ogni istruzione. La condizione di controllo sull'ordine della matrice non e' corretta. L'algoritmo di triangolarizzazione e' inesistente. [24] Le dichiarazioni si fanno prima di ogni istruzione. Disordine. Nel ciclo di riempimento della matrice usa due diverse variabili come limite delle variabili di ciclo, ma una di esse e' un array!!! Sbagliato il formato del printf. Sbagliata l'assegnazione degli elementi sulla diagonale (non sta in un ciclo; il ciclo c'e' ma e' vuoto). Non c'e' altro. [25] Un po' di disordine. Controllare che b > a. Se pero' non azzerate le variabili di somma all'inizio dei cicli, le somme non sono corrette! [26] ASSENTI [27] ASSENTI [28] ASSENTI [29] ASSENTI [30] ASSENTI [31] Non ci sono controlli in input. La generazione va bene. C'e' un accenno di algoritmo, ma non e' corretto. Due sono gli errori fondamentali: si devono assegnare prima gli elementi della diagonale di L e si devono azzerare le variabili di somma prima di cominciare a calcolarle. [32] E' presente solo la generazione casuale degli elementi della matrice. Non fate controlli sui valori in input. [33] La matrice e' quadrata!! Non ci sono controlli sull'input. I valori agli elementi della matrice si assegnano in modo casuale, non con la tastiera. E poi cosi' ne assegnate uno solo (peraltro fuori dall'intervallo permesso). [34] ASSENTI [35] Le variabili si dichiarano sempre a inizio blocco. Le variabili che contengono le sommatorie devono essere azzerate all'inizio del ciclo di somma. Il ciclo per assegnare i valori di L deve essere eseguito all'interno del ciclo sulle righe, subito dopo aver assegnato i valori degli elementi di U che stanno su una data riga, altrimenti al passo successivo non sono disponibili i valori necessari per il calcolo.