IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

pourquoi la taille de ma matrice n est pas de (n+1,n+1)


Sujet :

C

  1. #1
    Débutant
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Points : 97
    Points
    97
    Par défaut pourquoi la taille de ma matrice n est pas de (n+1,n+1)
    bonsoir chers Développeurs,
    j'ai fait un petit code pour le calcul des differences devisées .Mes données sont les yk qui dans mon code sont representés par la fonction g,et les xk sont representés par la fonction f.Mon probleme c est que quand j'execute mon programme j'obtiens pas une matrice carrée qui doit normalement etre de taille
    n+1.bref mon code le voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #define Nmax 100
    int f(int l)
    { 
      return l;
    }
    double g(int m)
    {  
    	return cos(m);	
    }
     
    void main()
    {
    	double T[Nmax][Nmax];
    	int i,j,n;
     
    	printf("donner n:\n");
    	scanf("%d",&n);
    	for(i=0;i<=n;i++)
    		T[i][0]=g(i);
     
    		for(j=1;j<=n;j++)
    			for(i=j;i<=n;i++)
    		     T[i][j]=(T[i][j-1]-T[i-1][j-1])/(f(i)-f(i-j));
    	printf("la matrice resultat est :\n");
    		for(i=0;i<=n;i++)
    		{	for(j=0;j<=n;j++)
    		    printf("%40le",T[i][j]);
    		    printf("\n");
    		}
     
     
    }
    j'attends vos commentaires!!
    cordialement,

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 947
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 947
    Points : 5 660
    Points
    5 660
    Par défaut
    Citation Envoyé par s-ehtp Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    		    printf("%40le",T[i][j]);
    ...
    j'attends vos commentaires!!
    cordialement,
    Le résultat est celui attendu, mais en affichant chaque valeur avec 40 caractères de largeur, tu débordes allègrement la largeur d'une fenêtre console dès que n > 1.

    Et quoi qu'il arrive, si tu ne modifies pas ta stratégie d'affichage,tu auras toujours ce problème quand n augmentera, même en affichant chaque valeur avec une largeur minimale.

    Une solution serait d'adapter la largeur de la console en fonction de ce que tu veux faire, mais même ainsi, il y aura sans doute des limites (je ne me suis jamais préoccupé de ce genre de problème).

    ps : une indentation régulière du code + une aération avec des lignes vides le rendent nettement plus lisible:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    int main()
    {
        double T[Nmax][Nmax];
        int i,j,n;
     
        printf("donner n:\n");
        scanf("%d",&n);
        for (i=0;i<=n;i++)
            T[i][0]=g(i);
     
        for (j=1;j<=n;j++)
            for (i=j;i<=n;i++)
                T[i][j]=(T[i][j-1]-T[i-1][j-1])/(f(i)-f(i-j));
     
        printf("la matrice resultat est :\n");
     
        for (i=0;i<=n;i++)
        {
            for (j=0;j<=n;j++)
                printf("%40le",T[i][j]);
            printf("\n");
        }
     
        return EXIT_SUCCESS;
     
    }
    Ah oui, j'allais oublier : main renvoie toujours un int.

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par s-ehtp Voir le message
    j'attends vos commentaires!!
    Déjà, tu peux corriger ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : D:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:15: warning: function declaration isn't a prototype
    main.c:15: warning: return type of 'main' is not `int'
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 0 seconds)
    0 errors, 2 warnings
    Ensuite, ceci :
    fait varier i de 0 à n, soit n+1 fois...
    L'expression idiomatique est
    et ce n'est certainement pas un hasard...

    D'autre part, le format "%40le" est correct mais fantaisiste. Je recommande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             printf ("%8.2f", T[i][j]);
    Ceci fonctionne correctement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
     
    #define Nmax 100
     
    int f (int l)
    {
       return l;
    }
    double g (int m)
    {
       return cos (m);
    }
     
    int main (void)
    {
       double T[Nmax][Nmax];
       int i, j, n;
     
       do
       {
          printf ("donner n:\n");
          scanf ("%d", &n);
       }
       while (!(n <= Nmax));
     
       for (i = 0; i < n; i++)
          T[i][0] = g (i);
     
       for (j = 1; j < n; j++)
          for (i = j; i < n; i++)
             T[i][j] = (T[i][j - 1] - T[i - 1][j - 1]) / (f (i) - f (i - j));
       printf ("la matrice resultat est :\n");
       for (i = 0; i < n; i++)
       {
          for (j = 0; j < n; j++)
             printf ("%8.2f", T[i][j]);
          printf ("\n");
       }
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    donner n:
    6
    la matrice resultat est :
        1.00    0.00    0.00    0.00    0.00    0.00
        0.54   -0.46    0.00    0.00    0.00    0.00
       -0.42   -0.96   -0.25    0.00    0.00    0.00
       -0.99   -0.57    0.19    0.15    0.00    0.00
       -0.65    0.34    0.46    0.09   -0.01    0.00
        0.28    0.94    0.30   -0.05   -0.03   -0.00
     
    Press ENTER to continue.

Discussions similaires

  1. Pourquoi la taille de fonte par défaut est de 8.25 points?
    Par Nico57 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 19/12/2007, 08h55
  2. Réponses: 6
    Dernier message: 17/01/2007, 18h05
  3. Réponses: 1
    Dernier message: 17/10/2006, 15h05
  4. Réponses: 2
    Dernier message: 09/08/2006, 21h56
  5. Réponses: 5
    Dernier message: 07/07/2006, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo