Oppure

Loading
03/02/10 11:47
PetraSA
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:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define N 10

typedef double vettore[N];
typedef double matrice[N][N];

int leggidim();
void creaA(matrice, int);
void calcolap(matrice, vettore, int);

main()
{
      int n; matrice A; vettore p;
      
      n=leggidim();
      creaA(A,n);
      calcolap(A,p,n);
      
      system("pause"); return 0;
}

int leggidim()
{
    int n;
    
    do
      {
          printf("\n\n Quante componenti ha il vettore p e la matrice A?   n=");
          scanf("%d", &n);    
      }
    while((n<0)||(n>10));
    
    return n;    
}


 void creaA(matrice A, int n)
{
     for(int i=0; i<n; i++)
                  for(int j=0; j<n; j++)
                               {
                                    printf("\n A[%d][%d]=", i+1, j+1);
                                    scanf("%lf", &A[i][j]);
                               }
     return;     
}     

void calcolap(matrice A,vettore p, int n)
{
     int i,j; double mi=0.0, Mi=0.0, max=0.0, min=0.0;
     
     
     for(j=0; j<n; j++){
             for(i=0; i<n; i++){
              mi=fabs(A[i][j]);
              }
     if(mi<min) min=mi;
     }
     
     for(j=0; j<n; j++){
             for(i=0; i<n; i++){
              Mi=fabs(A[i][j]);
              }
     if(Mi>max) max=Mi;
     }
     
     p[i]=mi/Mi;
     printf("p[i]=%lf",p[i]);
    return;
}


Ultima modifica effettuata da PetraSA 03/02/10 11:55
aaa
03/02/10 12:14
nessuno
Cosa intendi con questo codice

     p[i]=mi/Mi; 
     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à.
03/02/10 12:22
PetraSA
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..
aaa
03/02/10 19:02
Poggi Marco
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:
 
void calcolap(matrice A,vettore p, int n)
{
     int i=0,j=0; double mi=0.0, Mi=0.0, max=0.0, min=0.0;


     for(j=0; j<n; j++)
     {
	     max=fabs(A[j][0]);
             min=fabs(A[j][0]);
             for(i=1; i<n; i++)
             {
               mi=fabs(A[j][i]);
               if(mi<min) min=mi;
               Mi=fabs(A[j][i]);
               if(Mi>max) max=Mi;
             }
             p[j]= max==0 ?  -1 : min/max;
     }

     int h=0;
      for (h=0; h<n; h++)
      {
          printf("p[ %d ]: %lf \n", h, p[h]);
      }
}



Ultima modifica effettuata da Poggi Marco 03/02/10 20:24
aaa
03/02/10 19:52
PetraSA
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..
aaa
03/02/10 20:23
Poggi Marco
Ho utilizzato l' operatore ? per verificare se max è diverso da zero.

In alternativa avrei potuto scrivere:
 if (max==0)   
 {  
   p[j]=-1;
 {
 else
 {
   p[j]=min/max;
 } 

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.

aaa
03/02/10 21:15
PetraSA
Grazie mille e buona serata..
aaa
03/02/10 21:30
Poggi Marco
Di nulla! :)
aaa