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++ - 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: 6384
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: 969
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
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: 969
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.


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: 969
Iscritto: 05/01/2010

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

PM Quote