Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    3

    Aiuto Codice C++ 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:

    #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;
    }
    [\CODE]

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Il tag CODE finale deve essere con la barra al contrario, altrimenti non si legge nulla ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    3
    SCUSATE, RIECCO IL MIO CODICE:

    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;
    }

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da maris
    SCUSATE, RIECCO IL MIO CODICE:
    [/CODE]
    Il tag CODE serve a mantere l'indentazione del codice (che, ovviamente, deve essere già indentato ) Così come lo hai scritto te è illeggibile.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    3
    ORA HO FATTO COPIA E INCOLLA DIRETTAMENTE DAL DEV-C++, SI CAPISCE UN Pò DI PIù?? SENNò NON SO COME POSSO FARE..

    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;
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.