gauss01 (Normal User)
Newbie
Messaggi: 1
Iscritto: 19/12/2017
|
Questo topic è stato chiuso dal moderatore Salve a tutti,
ho iniziato da poco a programmare in c, quindi il mio livello di programmazione è elementare.
Ho riscontrato il seguente problema:
ho scritto un programma il quale presa una matrice A, ne crea un'altra B contente per elementi la divisione intera degli elementi presenti in A, ad esempio:
A= 3 1 0
0 2 1
1 2 4
gli elementi della matrice B sono dati dall'operazione B[j]=-A[j]/A, con i diverso da j, mentre per i=j ho che B[j]=0, in questo modo dovrei avere:
B= 0 -1/3 0
0 0 -1/2
-1/4 -1/2 0
Il problema è che quando vado a compilare mi da come errore "Thread 1: EXC_ARITHMETIC (code=EXC_I386_DIV, subcode=0x0)" nella riga dell'operazione che ho scritto sopra e si interrompe il programma!
Dov'è che sbaglio?
Grazie in anticipo
Codice sorgente - presumibilmente C++ |
#include<stdio.h> #include<stdlib.h> #include<math.h> #define MAX 3 void crea_matrice(int A[MAX][MAX]){ int i, j, n; printf("dammi la dimensione della matrice n: \n"); scanf("%d",&n); for(i=0; i<n; i++){ for(j=0; j<n; j++){ printf("dammi un elemento: \n"); scanf("%d",&A[i][j]); } } return; } void stampa_matrice(int A[MAX][MAX]) { int i, j; for (i=0; i<MAX; i++) { for (j=0; j<MAX; j++) printf("%d ", A[i][j]); printf("\n"); } return; } void diagonale_dominante(int A[MAX][MAX]){ int i,j,s,p; p=0; for(i=0; i<MAX; i++){ s=0; for(j=0; j<MAX; j++){ if(i!=j){ s=s+A[i][j]; } } if((unsigned)A[i][i]>s){ p=p+1; } } if(p==3){ printf("La matrice è a diagonale dominante \n"); } else { printf("La matrice non è a diagonale dominante \n"); } return; } void matriceJ(int A[MAX][MAX]){ int i,j; int B[MAX][MAX]; for(i=0; i<MAX; i++){ for(j=0; j<MAX; j++){ if(i==j){ B[i][j]=0; } else{ B[i][j]=(-(A[i][j])/(A[i][i])); } printf("%d",B[i][j]); } } return; } int main (void){ int A[MAX][MAX],B[MAX][MAX]; crea_matrice(A); stampa_matrice(A); diagonale_dominante(A); matriceJ(B); stampa_matrice(B); return(0); }
|
|
|
Mikelius (Member)
Expert
Messaggi: 525
Iscritto: 14/04/2017
|
Usando VisualStudio 2017 il codice compila. (Compilato come codice C)
Che compilatore usi?
Forse sta ad indicare che il denominatore non deve essere 0 , prova a far fare un check del valore prima della divisione
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6379
Iscritto: 03/01/2010
|
Ultima modifica effettuata da nessuno il 19/12/2017 alle 16:30
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Mikelius (Member)
Expert
Messaggi: 525
Iscritto: 14/04/2017
|
Dovrei imparare a curiosare anch'io negli altri forum XD
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6379
Iscritto: 03/01/2010
|
Non è questione di curiosare ma essere iscritti e trovare gli stessi quesiti delle stesse persone...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Mikelius (Member)
Expert
Messaggi: 525
Iscritto: 14/04/2017
|
Postato originariamente da nessuno:
Non è questione di curiosare ma essere iscritti e trovare gli stessi quesiti delle stesse persone... |
Non voleva essere un offesa, anzi colgo l'occasione per ringraziare chi come te, si districa tra più forum.
Io sono iscritto a diversi forum, ma per questioni mie, ne seguo solo uno ormai. |
|
nessuno (Normal User)
Guru^2
Messaggi: 6379
Iscritto: 03/01/2010
|
Non mi sono mica offeso... Era solo per spiegare...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
lumo (Member)
Expert
Messaggi: 449
Iscritto: 18/04/2010
|
Dovrei fare un bot per automatizzare l'idenfiticazione del cross posting. :|
|
|