MasterDrive.it   
Vai indietro   MasterDrive.it > Software Development > C/C++



Rispondi
 
Strumenti della discussione Modalità di visualizzazione
Vecchio 30-01-2010, 16:43   #1 (permalink)
Nuovo della community

 
1 Messaggi

stella.p novizio della comunita' ( + 10 )
Aiuto codice per esame..

Salve, io ho un problema a capire dei punti di questo programma che mi serve per un esame univesitario.. vi posto la traccia:
Scrivere un programma C++ che svolga le seguenti operazioni:
1. Richiede in input una matrice A^(0) = (aij ) € R^nxn, 0 < n <= 10; ed un numero reale
positivo tol.
2. Calcola il vettore w^(0) = (w^(0)j ) €Rn, dove w^(0)j =sommatora con i da 1 a n di |aij|. Calcola e stampa wmax,
dove wmax = max j=1,...,n w^(0)j.
3. Se wmax < tol stampa un opportuno messaggio, altrimenti calcola la matrice A =A^(0)/10wmax e, a partire da B^(0) = A, esegue le seguenti operazioni in sequenza (per k >= 1)
- B^(k) = B^(k-1) A
- m^(k) = max j=1,...,n della sommatoria con i da 1 a n del |b^(k)ji|
- A^(k+1)=s^(k+1) A^(k)
- w^(k+1)=A^(k+1) w^(k)
- w^(K+1)=B w^(k)+w^(k-1)
4. Stampa m(k) ad ogni iterazione.
5. Quando m^(k)<=tol oppure k=100 arresta il calcolo e stampa il numero k delle iterazioni.

Io ho provato a scrivere il programma solo che dalle operazioni in sequenza del punto tre mi sono bloccata, non so più andare avanti, ho solo calcolato mk, e per il punto 4 e 5 non sono molto sicura.. Spero che qualcuno con tanta pazienza possa darmi una mano o qualche suggerimento.. grazie mille a tutti.. QUESTO E' IL CODICE CHE HO SCRITTO:

codice:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
 
const int size=10;
typedef double vettore[size];
typedef double matrice[size][size];
 
int leggidim();
double leggitol();
void leggimatrice(matrice, int);
void calcolaw(matrice, vettore, int);
int calcola_wmax(vettore, int);
 
double calcola_mk(matrice, int);
 
main()
{
      int n,i,j, k=1; double tol, wmax, mk; matrice A0,A ,B; vettore w;
 
      n=leggidim();
      tol=leggitol();
      leggimatrice(A0,n);
      calcolaw(A0,w,n);
      wmax=calcola_wmax(w,n);
      if(wmax<tol){
      printf("attenzione, wmax minore della tolleranza");}
      else
      {  for(int i=0; i<n; i++)
                  for(int j=0; j<n; j++)
         A[i][j]=(A0[i][j])/(10*wmax);}
 
      for(int i=0; i<n; i++)
                  for(int j=0; j<n; j++)
       B[i][j]=A[i][j];
 
      do {
            mk=calcola_mk(B,n);
            printf("mk=%lf",mk);}
      while((mk<=tol)||(k==100));
 
      k++;
      printf("k=%d",k);
 
      system("pause");
      return 0;
}
 
 
int leggidim()
{
    int n;
 
    do
      {
          printf("\n\n Quante componenti ha il vettore w e la matrice A?   n=");
          scanf("%d", &n);    
      }
    while((n<0)&&(n>10));
 
    return n;    
}
 
 
double leggitol()
{
       double tol;
 
       printf("\n\n Inserire un numero reale positivo  eps=");
       scanf("%lf", &tol);
 
       return tol;
}      
 
void leggimatrice(matrice A0, int n)
{
     for(int i=0; i<n; i++)
                  for(int j=0; j<n; j++)
                               {
                                    printf("\n A0[%d][%d]=", i+1, j+1);
                                    scanf("%lf", & A0[i][j]);
                               }
     return;     
}
 
void calcolaw(matrice A0,vettore w,int n)
{
     int i,j;
 
     for(i=0; i<n; i++){
             w[i]=0;
             for(j=0; j<n; j++)
              w[i]+=A0[i][j];}
    return;
}
 
int calcola_wmax(vettore w, int n)
{
       double max=w[1];
       int i;
       for(i=2; i<n; i++){
                if(w[i]<max){max=w[i];}
       }
       printf("wmax=%d",max);
       return 0;
}
 
double calcola_mk (matrice B, int n)
{
       int i, j; double sum=0, norma=0;
       for(i=0; i<n; i++){
           for(j=0; j<n; j++){
                    sum+=B[i][j];
                    norma=sqrt(sum*2);}}
       return 0;
}

stella.p non è in linea   Bookmark and Share Rispondi quotando
Rispondi

Strumenti della discussione
Modalità di visualizzazione

Regole d'invio
Non puoi inserire discussioni
Non puoi inserire repliche
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è attivo
Le smilies sono attive
Il codice IMG è attivo
il codice HTML è disattivato
Trackbacks are attivo
Pingbacks are attivo
Refbacks are disattivato

Salto del forum


Tutti gli orari sono GMT +1. Attualmente sono le 04:37.


Powered by vBulletin versione 3.8.0
Copyright © 2000 - 2010, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.2.0

Valid XHTML 1.0 Transitional  Creative Commons License

Eccetto dove diversamente specificato, i contenuti pubblicati in questa comunità sono rilasciati sotto Licenza
Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo 2.5 Italia License.
La comunita' di MasterDrive.it non e' responsabile di eventuali imprecisioni presenti nelle pagine.