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 :

[Problème][Débutant]pointeurs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut [Problème][Débutant]pointeurs
    Bonjour,

    J'ai écrit un petit programme qui additionne 2 matrice avec des pointeurs mais à la sortie il me renvoie en plus de la bonne réponse des chiffres bizarres.

    voilà le code :
    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
     
    #include <stdio.h>
    int main(){
      int a[2][3]={1,2, 0, 1, 2, 2};
      int b[2][3]={1,2, 1, 4, 3, 4};
      int c[2][3]; 
      int *i=&a[0][0];
      int *j=&b[0][0];
      int *k=&c[0][0];
      while(i<&a[2][3]){ 
         	*k=*i+*j;
    	printf("%d\n",*k);
    	i++;
    	j++;
    	k++; 
      } 
    }
    et la sortie :
    arkadin@ARKADY:~/Info/Mission2$ ./ex5b.out
    2
    4
    1
    5
    5
    6
    -1076967483
    -1076967502
    -1076967524

    Merci d'avance,

    Arkadin

    [Balises code et quote mis en place par fearyourself, merci d'y penser la prochaine fois!]


    [Edit]: Tout d'abord, escusez moi pour les balises. Ensuite, j'aurais une autre question à propos des char, comment donne-t-on une valeur à un carractère ? En fait, on me pose une question me demandant de comparer 2 chaines de carractères en renvoyant un nbs nulle négatif positif selon que la chaine de carractère 1 soit égale inférieur ou supérieur lexicographiquement ? j'ai essayé de chercher des infos sur ça ms j'ai rien trouvé de très pertinnent...

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    C'est parce que ton test de while est faux, tu as mis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     while(i<&a[2][3]){
    et il faudrait mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     while(i<&a[2][0]){
    Mais ce code ne sera pas forcément plus rapide que le code suivant:

    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
     
    #include <stdio.h>
    int main(){
      int a[2][3]={1,2, 0, 1, 2, 2};
      int b[2][3]={1,2, 1, 4, 3, 4};
      int i,j,k;
     
      for(i=0;i<2;i++)
        for(j=0;j<3;j++)
         {
          k = a[i]j[j] + b[i][j];
          printf("%d\n",k);
         }
      return 0;
    }
    [EDIT]
    Et j'ai oublié d'ajouter que je trouve mon code plus lisible...
    [/EDIT]
    Jc

  3. #3
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Tout d'abord, escusez moi pour les balises. Ensuite, j'aurais une autre question à propos des char, comment donne-t-on une valeur à un carractère ?
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char c = 'a'; //note que le caractére est entre ''
    En fait, on me pose une question me demandant de comparer 2 chaines de carractères en renvoyant un nbs nulle négatif positif selon que la chaine de carractère 1 soit égale inférieur ou supérieur lexicographiquement ?
    Il faut se tourner vers la fonction strcmp ( string.h) mais je suppose que tu dois recoder cette fonction.

    Il te faut alors comparer caractére par caractère les deux chaines à comparer.C'est plus de l'algo mais bon.

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut
    En fait, ils nous est demandé de travailler avec des pointeurs après avoir fait la méthode classique

    Par contre, je ne vois pas pourquoi le dernier élément est [2][0] :

    [Edit]: à mon avis la question ça doit juste être comparer les longueurs pcq après 2 semaines "d'auto-formation"(en théorie) je crois que ça serait beaucoup demandé

  5. #5
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Pas sûr de comprendre mais pour affecter une valeur à une variable type caractère en passant par pointeur ca donnerait cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char c ='r'; //c contient r
    char * ptr = &c; // ptr contient l'adresse de c
    *ptr ='a'; // on affecte la valeur a sur l'objet pointé par ptr, ici l'objet est bien c

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut
    Citation Envoyé par hegros
    Pas sûr de comprendre mais pour affecter une valeur à une variable type caractère en passant par pointeur ca donnerait cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char c ='r'; //c contient r
    char * ptr = &c; // ptr contient l'adresse de c
    *ptr ='a'; // on affecte la valeur a sur l'objet pointé par ptr, ici l'objet est bien c
    pour cette question c'est résolu(enfin en cours ms je ne bloque plus sur le sens de la question)

    Merci quand m^me ,

    Arkadin

  7. #7
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Autant pour moi. Ton probléme est alors résolu ?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: [Problème][Débutant]pointeurs
    Citation Envoyé par arkadin
    J'ai écrit un petit programme qui additionne 2 matrice avec des pointeurs mais à la sortie il me renvoie en plus de la bonne réponse des chiffres bizarres.
    et la sortie :
    arkadin@ARKADY:~/Info/Mission2$ ./ex5b.out
    2
    4
    1
    5
    5
    6
    -1076967483
    -1076967502
    -1076967524
    Tu vas trop loin. Revoit le cours sur l'arithmétique des pointeurs...
    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
     
    #include <stdio.h>
     
    int main(void)
    {
       int const a[2][3] =
          {
             {
                1, 2, 0
             }
             , {
                1, 2, 2
             }
          };
       int const b[2][3] =
          {
             {
                1, 2, 1
             }
             , {
                4, 3, 4
             }
          };
     
       int c[2][3];
       int const *pi = *a;
       int const *pj = *b;
       int *pk = *c;
     
       while (pk < c[1] + 3)
       {
          *pk = *pi + *pj;
     
          printf("%d\n", *pk);
     
          pi++;
          pj++;
          pk++;
       }
       return 0;
    }
    comment donne-t-on une valeur à un carractère ? En fait, on me pose une question me demandant de comparer 2 chaines de carractères en renvoyant un nbs nulle négatif positif selon que la chaine de carractère 1 soit égale inférieur ou supérieur lexicographiquement ? j'ai essayé de chercher des infos sur ça ms j'ai rien trouvé de très pertinnent...
    Un caractère est une valeur numérique. Par exemple en ASCII, 65 est la valeur de 'A'.

    http://www.lookuptables.com/

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut
    Citation Envoyé par hegros
    Autant pour moi. Ton probléme est alors résolu ?
    Oui ce pmini-programme est fini mais je ne comprends toujours pas pourquoi il faut mettre
    while(i<&a[2][0]) et pas while(i<&a[2][3]) ?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par arkadin
    Citation Envoyé par hegros
    Autant pour moi. Ton probléme est alors résolu ?
    Oui ce pmini-programme est fini mais je ne comprends toujours pas pourquoi il faut mettre
    while(i<&a[2][0]) et pas while(i<&a[2][3]) ?
    Parce que l'adresse de fin est a une case après le tableau. Pas plus.

  11. #11
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par arkadin
    Citation Envoyé par hegros
    Autant pour moi. Ton probléme est alors résolu ?
    Oui ce pmini-programme est fini mais je ne comprends toujours pas pourquoi il faut mettre
    while(i<&a[2][0]) et pas while(i<&a[2][3]) ?
    Parce que l'adresse de fin est a une case après le tableau. Pas plus.
    les éléments du tableau sont classé comme ça alors ?

    a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[2][0]

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par arkadin
    les éléments du tableau sont classé comme ça alors ?
    a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[2][0]
    Oui. Un tableau linéaire à deux dimensions est en fait un tableau a une dimension auquel on accède via 2 index.

Discussions similaires

  1. Problème de pointeurs..embrouillé
    Par Frenchy dans le forum C++
    Réponses: 11
    Dernier message: 10/03/2005, 16h33
  2. Problème de pointeur avec un TQuery
    Par Oluha dans le forum Bases de données
    Réponses: 3
    Dernier message: 25/01/2005, 13h57
  3. Problème de pointeur
    Par toma_lille dans le forum C++
    Réponses: 1
    Dernier message: 07/12/2004, 21h26
  4. [MFC] Problème de pointeur !!
    Par acastor dans le forum MFC
    Réponses: 7
    Dernier message: 19/03/2004, 15h50
  5. TBitmap et problèmes de pointeurs...
    Par benj63 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/07/2003, 13h39

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