PetraSA (Normal User)
Newbie
Messaggi: 10
Iscritto: 31/01/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 |
#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; return; }
|
Ultima modifica effettuata da PetraSA il 03/02/2010 alle 12:55 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6384
Iscritto: 03/01/2010
|
Cosa intendi con questo codice
Codice sorgente - presumibilmente Plain Text |
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à. |
|
PetraSA (Normal User)
Newbie
Messaggi: 10
Iscritto: 31/01/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..
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/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# |
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 il 03/02/2010 alle 21:24 |
|
PetraSA (Normal User)
Newbie
Messaggi: 10
Iscritto: 31/01/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..
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Ho utilizzato l' operatore ? per verificare se max è diverso da zero.
In alternativa avrei potuto scrivere:
Codice sorgente - presumibilmente C/C++ |
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.
|
|
PetraSA (Normal User)
Newbie
Messaggi: 10
Iscritto: 31/01/2010
|
Grazie mille e buona serata..
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Di nulla!
|
|