Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - problema con matrici..
Forum - C/C++ - problema con matrici..

Avatar
PetraSA (Normal User)
Newbie


Messaggi: 10
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 12:47
Mercoledì, 03/02/2010
salve, ho allegato una traccia di un codice che ho provato a fare, ma nn credo sia esatto perchè in input non mi dà un vettore.. ecco il codice che ho scritto:

Codice sorgente - presumibilmente C

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4.  
  5. #define N 10
  6.  
  7. typedef double vettore[N];
  8. typedef double matrice[N][N];
  9.  
  10. int leggidim();
  11. void creaA(matrice, int);
  12. void calcolap(matrice, vettore, int);
  13.  
  14. main()
  15. {
  16.       int n; matrice A; vettore p;
  17.      
  18.       n=leggidim();
  19.       creaA(A,n);
  20.       calcolap(A,p,n);
  21.      
  22.       system("pause"); return 0;
  23. }
  24.  
  25. int leggidim()
  26. {
  27.     int n;
  28.    
  29.     do
  30.       {
  31.           printf("\n\n Quante componenti ha il vettore p e la matrice A?   n=");
  32.           scanf("%d", &n);    
  33.       }
  34.     while((n<0)||(n>10));
  35.    
  36.     return n;    
  37. }
  38.  
  39.  
  40.  void creaA(matrice A, int n)
  41. {
  42.      for(int i=0; i<n; i++)
  43.                   for(int j=0; j<n; j++)
  44.                                {
  45.                                     printf("\n A[%d][%d]=", i+1, j+1);
  46.                                     scanf("%lf", &A[i][j]);
  47.                                }
  48.      return;    
  49. }    
  50.  
  51. void calcolap(matrice A,vettore p, int n)
  52. {
  53.      int i,j; double mi=0.0, Mi=0.0, max=0.0, min=0.0;
  54.      
  55.      
  56.      for(j=0; j<n; j++){
  57.              for(i=0; i<n; i++){
  58.               mi=fabs(A[i][j]);
  59.               }
  60.      if(mi<min) min=mi;
  61.      }
  62.      
  63.      for(j=0; j<n; j++){
  64.              for(i=0; i<n; i++){
  65.               Mi=fabs(A[i][j]);
  66.               }
  67.      if(Mi>max) max=Mi;
  68.      }
  69.      
  70.      p[i]=mi/Mi;
  71.      printf("p[i]=%lf",p[i]);
  72.     return;
  73. }





PetraSA ha allegato un file: scansione0002.JPG (169707 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da PetraSA il 03/02/2010 alle 12:55
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5983
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:14
Mercoledì, 03/02/2010
Cosa intendi con questo codice

Codice sorgente - presumibilmente Plain Text

  1. p[i]=mi/Mi;
  2.      printf("p[i]=%lf",p[i]);



?

Non ha molto senso ...


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 Quote
Avatar
PetraSA (Normal User)
Newbie


Messaggi: 10
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 13:22
Mercoledì, 03/02/2010
Non so, ho seguito la traccia e credevo si facesse così.. Tu hai visto la traccia che ho allegato?? Credo allora di non aver capito niente..

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 968
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 20:02
Mercoledì, 03/02/2010
Ciao PetraSA!

Ho letto il tuo sorgente, e penso di aver risolto il problema.
Nella funzione "void calcolap(matrice, vettore, int);" , cercavi i massimo e minimo solo per l' ultimo valore della colonna, (in filtro if è fuori dal ciclo).

Inoltre l' istruzione "p[ i ]=mi/Mi;" alla fine dei cicli non ha senso.

Ecco la funzione corretta:
Codice sorgente - presumibilmente C#

  1. void calcolap(matrice A,vettore p, int n)
  2. {
  3.      int i=0,j=0; double mi=0.0, Mi=0.0, max=0.0, min=0.0;
  4.  
  5.  
  6.      for(j=0; j<n; j++)
  7.      {
  8.              max=fabs(A[j][0]);
  9.              min=fabs(A[j][0]);
  10.              for(i=1; i<n; i++)
  11.              {
  12.                mi=fabs(A[j][i]);
  13.                if(mi<min) min=mi;
  14.                Mi=fabs(A[j][i]);
  15.                if(Mi>max) max=Mi;
  16.              }
  17.              p[j]= max==0 ?  -1 : min/max;
  18.      }
  19.  
  20.      int h=0;
  21.       for (h=0; h<n; h++)
  22.       {
  23.           printf("p[ %d ]: %lf \n", h, p[h]);
  24.       }
  25. }




Ultima modifica effettuata da Poggi Marco il 03/02/2010 alle 21:24


Nulla va più veloce della luce, quindi rilassati.
PM Quote
Avatar
PetraSA (Normal User)
Newbie


Messaggi: 10
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 20:52
Mercoledì, 03/02/2010
Ciao Poggi Marco,
sei sempre molto gentile, ti ringrazio tanto..
Però ho una domanda da farti che non ho capito molto bene:

quando scrivi " p[j]= max==0 ?  -1 : min/max; " quel max==0 ? -1 :  cosa significa??

scusami tanto, ma programmo da pochissimo e non l'ho mai incontrato fin'ora!!

grazie ancora..

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 968
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 21:23
Mercoledì, 03/02/2010
Ho utilizzato l' operatore ? per verificare se max è diverso da zero.

In alternativa avrei potuto scrivere:
Codice sorgente - presumibilmente C/C++

  1. if (max==0)  
  2.  {  
  3.    p[j]=-1;
  4.  {
  5.  else
  6.  {
  7.    p[j]=min/max;
  8.  }


Il ? viene definito operatore ternario poichè richiede tre operandi. la sua forma generale è: esp1 ? esp2 : esp3;

Il valore di un' espressione ? viene determinata nel modo seguente: esp1 viene valutata; se è vera, allora esp2 viene valutata e diventa il valore dell' intera espressione ?.
Se esp1 è falsa, allora viene valutata esp3 e diventa il valore dell' espressione.



Nulla va più veloce della luce, quindi rilassati.
PM Quote
Avatar
PetraSA (Normal User)
Newbie


Messaggi: 10
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 22:15
Mercoledì, 03/02/2010
Grazie mille e buona serata..

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 968
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 22:30
Mercoledì, 03/02/2010
Di nulla! :)


Nulla va più veloce della luce, quindi rilassati.
PM Quote