Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Matrici in c
Forum - C/C++ - Matrici in c

Avatar
gauss01 (Normal User)
Newbie


Messaggi: 1
Iscritto: 19/12/2017

Segnala al moderatore
Postato alle 15:56
Martedì, 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++

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4. #define MAX 3
  5.  
  6.  
  7. void crea_matrice(int A[MAX][MAX]){
  8.     int i, j, n;
  9.     printf("dammi la dimensione della matrice n: \n");
  10.     scanf("%d",&n);
  11.     for(i=0; i<n; i++){
  12.         for(j=0; j<n; j++){
  13.             printf("dammi un elemento: \n");
  14.             scanf("%d",&A[i][j]);
  15.         }
  16.     }
  17.     return;
  18. }
  19.  
  20.  
  21.  
  22. void stampa_matrice(int A[MAX][MAX]) {
  23.     int i, j;
  24.    
  25.     for (i=0; i<MAX; i++) {
  26.         for (j=0; j<MAX; j++)
  27.             printf("%d ", A[i][j]);
  28.         printf("\n");
  29.     }
  30.     return;
  31. }
  32.  
  33. void diagonale_dominante(int A[MAX][MAX]){
  34.     int i,j,s,p;
  35.     p=0;
  36.     for(i=0; i<MAX; i++){
  37.         s=0;
  38.         for(j=0; j<MAX; j++){
  39.             if(i!=j){
  40.                 s=s+A[i][j];
  41.             }
  42.         }
  43.         if((unsigned)A[i][i]>s){
  44.             p=p+1;
  45.         }
  46.     }
  47.     if(p==3){
  48.         printf("La matrice è a diagonale dominante \n");
  49.     }
  50.     else {
  51.         printf("La matrice non è a diagonale dominante \n");
  52.     }
  53.    
  54.     return;
  55. }
  56.  
  57.  
  58. void matriceJ(int A[MAX][MAX]){
  59.     int i,j;
  60.     int B[MAX][MAX];
  61.     for(i=0; i<MAX; i++){
  62.         for(j=0; j<MAX; j++){
  63.             if(i==j){
  64.                 B[i][j]=0;
  65.             }
  66.             else{
  67.                 B[i][j]=(-(A[i][j])/(A[i][i]));
  68.             }
  69.             printf("%d",B[i][j]);
  70.         }
  71.     }
  72.     return;
  73. }
  74.  
  75.  
  76.  
  77. int main (void){
  78.     int A[MAX][MAX],B[MAX][MAX];
  79.     crea_matrice(A);
  80.     stampa_matrice(A);
  81.     diagonale_dominante(A);
  82.     matriceJ(B);
  83.     stampa_matrice(B);
  84.     return(0);
  85. }


PM
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 16:11
Martedì, 19/12/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

PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6379
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:28
Martedì, 19/12/2017

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à.
PM
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 16:45
Martedì, 19/12/2017
Testo quotato

Postato originariamente da nessuno:

Ti hanno risposto in

https://www.iprogrammatori.it/forum-programmazione/cplusplu ...



Dovrei imparare a curiosare anch'io negli altri forum XD


PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6379
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:00
Martedì, 19/12/2017
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à.
PM
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 17:05
Martedì, 19/12/2017
Testo quotato

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.

PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6379
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:35
Martedì, 19/12/2017
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à.
PM
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 17:42
Martedì, 19/12/2017
Dovrei fare un bot per automatizzare l'idenfiticazione del cross posting. :|

PM