Quel est le rapport entre les pointeurs et les tableaux ? - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 58 sur 58

Quel est le rapport entre les pointeurs et les tableaux ?



  1. #31
    invite7a96054d

    Re : Quel est le rapport entre les pointeurs et les tableaux ?


    ------

    Bonjour,

    je pense que ça ne va tarder, car on ne peut pas ne pas voir sizeof quand on commence à manipuler les pointeurs. En gros, sizeofof donne la taille du paramètre en octets. Par exemple sur ma plateforme (linux 64bit), et mon compilo (gcc 4.7) les long sont des entiers 64bit donc un long va prendre 8 octets de mémoire pour son stockage en mémoire : sizeof(long) va donc renvoyer 8, de même un char fait un octet de large, donc sizeof(char) renvoie 1.

    -----

  2. #32
    Jack
    Modérateur

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    merci pour ces précisions kwariz

    @frequi1: sizeof est un opérateur très important permettant de connaitre le nombre d'octets permettant de mémoriser un type de données. Mais il est vrai qu'on s'est un peu écarté de ton problème de départ.

    A+

  3. #33
    frequi1

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    j'apprends le langage C sur le "site du zéro" et on ne m'a pas parler encore de "sizeof".
    Je trouve le site super facile a comprendre mais peut être qu'on en parleras plus tard.
    En tout cas merci pour toutes ces précisions.

  4. #34
    invite936c567e

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    En C, l'utilisation des pointeurs rend indispensable l'acquisition de quelques notions de base sur la façon dont la mémoire est gérée par le matériel et par le langage, et la manière dont les objets y sont rangés.

    Il faut notamment s'accoutumer avec les notions de taille de variables, d'alignement mémoire, de pile, de tas (heap), de segmentation, etc. .

    Sur certains détails, on trouvera des différences en fonction de la plateforme, du compilateur et des options de compilation mis en oeuvre. Il faut par conséquent connaître les éléments du langage et des outils de développement qui permettent de traiter ces différences, afin de générer un exécutable correct en toutes circonstances à partir du code rédigé. sizeof() en fait partie, mais c'est loin d'être le seul.

    Même si c'est une tâche longue et fastidieuse, je ne saurais trop te conseiller une lecture exhaustive de la documentation de référence de ton outil de développement (langage C + chaîne de compilation). C'est un moyen très efficace de progresser sur toutes ces questions.

  5. #35
    frequi1

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    je ne saurais trop te conseiller une lecture exhaustive de la documentation de référence de ton outil de développement
    code:block et en englais, mon anglais et moyen alors je vous parle pas des termes techniques

  6. #36
    invite936c567e

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    Citation Envoyé par frequi1 Voir le message
    code:block et en englais, mon anglais et moyen alors je vous parle pas des termes techniques
    J'allais te répondre qu'il existe un manuel de Code:Blocks en français, mais cet outil ne semble finalement être qu'un IDE (environnement de développement).

    Ce dont je parlais était le langage et la chaîne de compilation (préprocesseur, compilateur, éditeur de liens, etc.). Il est probable que, dans ton cas, il s'agisse alors de GCC, dont les manuels de référence (en anglais) sont par ici.

    Malheureusement, je n'ai pas trouvé de traduction complète de ces manuels en français, seulement des versions courtes, car incomplètes, tronquées ou résumées... voir par exemple ce manuel de GCC en français (dix fois plus court que l'original), cette introduction au langage C Ansi, et ce TP de cours sur le C. On doit certainement pouvoir en trouver d'autres, mais à défaut de mieux ce peut être déjà une bonne entrée en matière.


    Je ne te cache pas que quelques notions d'anglais technique (et nul besoin de bien savoir lire l'anglais littéraire) seraient bien utiles (sinon indispensables) pour profiter des connaissances informatiques dispensées dans les livres, dans les manuels numériques et sur Internet, puisque c'est la première langue véhiculaire dans les domaines techniques, et que les technologies informatiques sont principalement entre les mains des Américains.

    Si tu comptes faire de l'informatique sur le long terme, je pense que tu gagnerais beaucoup à passer du temps à déchiffrer des manuels en anglais. Cela te permettrait d'apprendre et/ou de réviser cette langue dans ce cadre particulier, et t'apporterait à la longue la capacité de lire (ou au moins de comprendre suffisamment) le contenu d'autres manuels et ouvrages techniques en VO.

  7. #37
    frequi1

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    il existe un manuel de Code:Blocks en français
    Deja merci pour ce lien.


    Ensuite est ce que ce morceau de code /

    Code:
    int sommeTableau(int tableau[], int tailleTableau)
     {
    
            int somme = 0;
    
               somme = tableau[0]+ tableau[1]+ tableau[2]+ tableau[3];
               return somme;
    Celui la fonctionne mais j'imagine si je devais calculer la somme d'un tableau de 100 cases
    donc j'ai essayer de coder celui ci dessous mais ca ne donne rien et il ne plante pas non plus


    Code:
    int sommeTableau(int tableau[], int tailleTableau)
     {
    
            int somme = 0, i;
            for (i=0;i<tailleTableau;i++)
            {
                    while (i = tailleTableau)
                    {
                        somme += tableau[i];
                    }
            }
            return somme;
    
     }
    voici mon main()
    Code:
     #include <stdio.h>
    #include <stdlib.h>
    #include "tableau.h"
    
    
    
    int main()
    {
    
        double resultat,moyenne;
        int bouc[4] ={12,3,5,30};
        int i;
    
        affiche (bouc,4);
    
    
        resultat = sommeTableau(bouc,4);
        printf ("\nLa somme de toutes les valeurs du tableau = %lf",resultat);// il n'affiche rien avec le 2eme code
    
    
    // ca c'est pour plus tard
        moyenne = moyenneTableau (bouc,4);
        printf ("\nLa moyenne est de %lf", moyenne);
    
    
    
    
        return 0;
    }

  8. #38
    invite936c567e

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    Code:
    int sommeTableau(int tableau[], int tailleTableau)
     {
            int somme = 0, i;
            for (i=0;i<tailleTableau;i++)
            {
                    while (i = tailleTableau)
                    {
                        somme += tableau[i];
                    }
            }
            return somme;
     }
    Il y a des erreurs.

    D'une part le « i = tailleTableau » ne correspond pas à un test mais à une assignation : tu mets la valeur tailleTableau dans i au lieu de tester l'égalité.

    D'autre part la boucle while() n'a rien à faire là.

    Pour faire la somme, le code devrait être simplement :
    Code:
    int sommeTableau(int tableau[], int tailleTableau)
    {
        int somme = 0, i;
    
        for( i=0 ; i<tailleTableau ; i++ )
            somme += tableau[i];
    
        return somme;
    }

  9. #39
    frequi1

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    D'une part le « i = tailleTableau » ne correspond pas à un test mais à une assignation : tu mets la valeur tailleTableau dans i au lieu de tester l'égalité.
    il aurait fallu le double "==", c'est ca ?

    Code:
    while (i == taille tableau)
    comme dans un "if"

    Pour le reste c'est bon j'ai compris.
    Je sais pas pourquoi j'ai voulu ajouter un boucle a cet endroit.

    Merci, pas facile ces tableaux........je ne suis pas encore au bout de mes peines.
    Encore 3 fonctions a faire
    1. copie tableau
    2. Maximun tableau (remettre a 0 toutes les cases du tableau ayant une valeur supérieure à un maximun)
    3. ordonner tableau (classer dans l'ordre croissant les valeurs d'un tableau)
    Ce dernier je ne vois pas par ou commencer mais j'en suis pas encore la........
    Encore un grand merci...

  10. #40
    Jack
    Modérateur

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    Ce dernier je ne vois pas par ou commencer mais j'en suis pas encore la........
    Les algorithmes les plus simples à mettre en oeuvre sont ceux des tris à sélection, à bulle et à insertion. Tout ceci est très bien expliqué sur wikipedia par exemple.

    A+

  11. #41
    frequi1

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    Bon ben ca y est j'en suis au dernier, et j'ai toujours pas d'idee pour commencer

    je n'ai que le header pour m'aider a commencer :
    Code:
    void ordonnerTableau (int tableau[],int tailleTableau);
    Si vous aviez juste une petite piste pour démarrer. (je ne veux bien sur pas la réponse ça n'a aucun intérêt)

  12. #42
    invite7a96054d

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    Bonjour,

    Je ne peux que te conseiller d'essayer de lire et de pratiquer des tutos sur les algorithmes. Cela te permettra de savoir comment résoudre ou approcher certains problèmes sans te préoccuper du langage de programmation. Une fois que tu comprends un algorithme il est relativement aisé de le traduire en c par exemple. De plus pour faire de l'algorithmique il te suffit d'un problème (trier un tableau par exemple), du papier et un crayon ...
    Par exemple, comment expliquerais-tu à un enfant comment il doit s'y prendre pour trier 5 nombres écris sur des cartes ?

  13. #43
    frequi1

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    Les algorithmes les plus simples à mettre en oeuvre sont ceux des tris à sélection, à bulle et à insertion. Tout ceci est très bien expliqué sur wikipedia par exemple.
    Je suis en train de lire les lignes de wikipédia, mais bon encore il y a du brouillard dans ma tête.

  14. #44
    invite936c567e

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    Tant que le tri ne nécessite pas d'optimisation particulière du fait du volume à traiter ou de la rapidité à atteindre, on peut très bien se contenter d'utiliser la fonction de tri qsort() de la bibliothèque standard (inclure stdlib.h).

    Il suffit d'écrire une petite fonction de comparaison entre deux éléments du type qu'on veut traiter, et de passer son adresse en argument de la fonction qsort() .

    La déclaration de qsort() est la suivante :
    Code:
    void qsort( void * tableau,
                size_t nombre_elements,
                size_t taille_element,
                int (* fonction_comparaison)(const void *, const void *)
              );
    Et voici un exemple d'utilisation :
    Code:
    #include <stdlib.h> 
    
    /*
     * Ma fonction de comparaison pour qsort()
     * Retourne une valeur négative si b > a et une valeur positive si a > b
     */
    int ma_fonction_comparaison(const void *a, const void *b) 
    { 
        return *(const int *)a  - *(const int *)b; 
    } 
    
    
    ...
    
    #define NOMBRE_ELEMENTS 1024
    
    int tableau[NOMBRE_ELEMENTS];
    
    ...
    
        qsort( tableau, NOMBRE_ELEMENTS, sizeof(int), ma_fonction_comparaison );

  15. #45
    frequi1

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    Wahou tu est aller beaucoup trop loin pour mon niveau la
    je suis sensé faire cet exercice avec : les conditions, les boucles et les tableaux bien sur.

  16. #46
    Jack
    Modérateur

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    Je suis en train de lire les lignes de wikipédia, mais bon encore il y a du brouillard dans ma tête.
    la meilleure solution pour comprendre: prendre un crayon et une gomme, dessiner le tableau et son contenu au fur et à mesure du déroulement de l'lgorithme.

    Tant que le tri ne nécessite pas d'optimisation particulière du fait du volume à traiter ou de la rapidité à atteindre, on peut très bien se contenter d'utiliser la fonction de tri qsort() de la bibliothèque standard (inclure stdlib.h).

    Il suffit d'écrire une petite fonction de comparaison entre deux éléments du type qu'on veut traiter, et de passer son adresse en argument de la fonction qsort() .
    Pas très formateur par contre pour s'initier à la manipulation des tableaux et aux algo de tri.

    A+

  17. #47
    frequi1

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    voila mon crayon et ma gomme m'ont amener ici
    tab[0] = 12
    tab[1] = 3
    tab[2] = 5
    tab[3] = 30
    on compare si tab[0] > tab[1] (oui) donc tab[0] doit prendre la valeur de tab[1] ET tab[1] celle de tab[0) (comment ca se code pour intervertir de valeurs de tableau )
    ainsi de suite pour mes 4 cases avec case 1 et 2 puis case 2 et 3. Tous ça dans une boucle jusqu’à ce que mon tableau soit dans l'ordre.

    comment je fais pour savoir QUAND il est dans l'ordre. Pour l'afficher a l'écran ca devrais pas poser problème.

  18. #48
    invite7a96054d

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    Comment trierais-tu le tableau {8,5,2,6,9,3,1,4,0,7} à la main ?

    EDIT: oublie ce message, tu as été plus rapide et on va prendre ton exemple.

  19. #49
    invite936c567e

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    Citation Envoyé par Jack Voir le message
    Pas très formateur par contre pour s'initier à la manipulation des tableaux et aux algo de tri.
    Certes, ce n'est pas très formateur pour ce qui concerne l'algorithmie.

    Mais en revanche, cela permet de découvrir d'autres fonctions des librairies standards du langage C, et pousse à apprendre l'organisation des tableaux et la manipulation des pointeurs (d'élément de tableaux et de fonction).

  20. #50
    frequi1

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    Ben je part de la valeur la plus petite jusqu'a la plus grande

  21. #51
    frequi1

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    est ce que je suis sur la bonne voix ?

    si tab[0] > tab[1]
    alors copie tab[1] dans une variable
    copie tab[1] sur tab[0]
    copie variable sur tab[1],


    et ainsi de suite avec les autre cases du tableau avec une boucle for(i=.........donc le code sera plutot if(tab[i] > tab[i+1])


    Code:
    if (tab[i] > tab[i+1])
       {
          tab[i] = variable;
          tab[i] = tab[i+1];
          tab[i+1] = variable;
       }
    else 
      comment on lui dit ben ne fais rien
    avec ca je vais faire une boucle infini
    ou alors il me faudra une autre boucle for qui verifiera les valeurs des cases du tableau.

  22. #52
    invite936c567e

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    Citation Envoyé par frequi1 Voir le message
    Code:
    if (tab[i] > tab[i+1])
       {
          tab[i] = variable;
          tab[i] = tab[i+1];
          tab[i+1] = variable;
       }
    else 
      comment on lui dit ben ne fais rien
    • Il faut commencer par garder la valeur de « tab[i] » dans « variable ». Par conséquent, il faut plutôt écrire :
    Code:
            variable = tab[i];
    • Pour ne rien faire si le test du « if » est faux, il suffit de ne pas mettre de « else ». Si toutefois tu souhaitais garder le « else » (c'est parfois utile lorsqu'on fait du débogage) tu pourrais mettre « ; » ou « {} » à la suite.

    Citation Envoyé par frequi1 Voir le message
    avec ca je vais faire une boucle infini
    ou alors il me faudra une autre boucle for qui verifiera les valeurs des cases du tableau.
    Il faudra faire une boucle « for() » sur « i » afin de balayer tout le tableau, en gardant dans le même temps en mémoire si on a dû ou non pratiquer une permutation entre un « tab[i] » et un « tab[i+1] ». Si aucune permutation n'est survenue, c'est que le tableau est correctement trié. Dans le cas contraire on doit recommencer la boucle « for() », pour faire d'autres permutations ou pour vérifier que le tableau était finalement correctement trié. La boucle « for() » doit donc être insérée dans une autre boucle dont la condition de sortie est l'absence de permutation au terme du balayage du tableau.

  23. #53
    Deedee81

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    Bonjour,

    Un petit commentaire en passant : cette méthode s'appelle le tri à bulles. Et c'est la plus mauvaise. Je conseille le tri par insertion qui est nettement plus rapide (même s'il existe beaucoup mieux) et est tout aussi simple à implémenter et à comprendre (c'est la méthode intuitive quand on trie un paquet de cartes à la main).
    "Il ne suffit pas d'être persécuté pour être Galilée, encore faut-il avoir raison." (Gould)

  24. #54
    invited1c1a33e

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    Citation Envoyé par frequi1 Voir le message
    est ce que je suis sur la bonne voix ?

    tab[i] = variable;
    Bonjour, une astuce consiste à nommer ses variables de manière à illustrer leur rôle.

    Je vous propose par exemple tab[i] = boitedeconserve; ou tab[i] = frigo; ou encore tab[i] = garage;

    Ou plus simplement tab[i] = temp;

    L'avantage est que ça évite les commentaires superflus.

  25. #55
    frequi1

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    en cherchant des articles sur le tri par insertion, je suis tomber sur ce code tout prêt qui est censé faire ce dont j'ai besoin, je ne le voyais pas du tout comme ca......
    Code:
    void tri_insertion(int tab[], int taille)
    {
       int i, j;
       for (i = 1; i < taille; ++i) 
         {
           int elem = tab[i];
           for (j = i; j > 0 && tab[j-1] > elem; j--)
           tab[j] = tab[j-1];
           tab[j] = elem;
          }
    voila je ne l'ai pas testez parce que je n'aime pas ne pas comprendre ce que ce code va faire.
    Est ce qu'il ne manque pas des accolade pour le 2eme for ?
    on est bien d'accord tab[j] par exemple et un pointeur donc l'adresse de j dans le tableau. c'est a dire
    Code:
    tab[j] = tab[j-1]
    valeur de l'adresse 2566897 = valeur de l'adresse 2566896 (par exemple)

  26. #56
    invite936c567e

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    Le code est bon, mais mal indenté. Il faut lire :
    Code:
    void tri_insertion(int tab[], int taille)
    {
    	int i, j;
    
    	for( i=1; i<taille; i++ ) 
    	{
    		int elem = tab[i];
    
    		for( j=i; j>0 && tab[j-1]>elem; j-- )
    			tab[j] = tab[j-1];
    
    		tab[j] = elem;
    	}
    }
    « tab[j] » n'est pas un pointeur, mais la valeur entière contenue dans la case numéro « j » du tableau « tab ». Ici il n'y a aucune référence aux adresses.

    « tab[j] = tab[j-1]; » signifie : copier le contenu de la case numéro « j-1 » dans la case numéro « j ».

  27. #57
    frequi1

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    OK et merci a tous pour m'avoir fais avancer.

    Je change de chapitre :"Les chaines de caractères" j'ouvrirai une autre discussion si j'ai des soucis.

    Encore un grand MERCI a tous ce qui ont participer a cette discussion.

  28. #58
    invite1a308282

    Re : Quel est le rapport entre les pointeurs et les tableaux ?

    hum il ne faut pas oublier que scanf attends un pointeur donc une adresse
    et aura un autre comportement vis à vis de printf qui bien souvent attends une valeur

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. Quel est le logiciel permettant de fournir un rapport sur les firewall utilisés?
    Par invite30adb7b4 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 5
    Dernier message: 14/05/2011, 15h11
  2. ?les pointeurs & les structures()
    Par invite5c6a01fc dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 08/12/2009, 23h14
  3. Réponses: 7
    Dernier message: 29/09/2008, 16h35
  4. Quel est le rapport entre Google et l'astro...
    Par invitea802224d dans le forum Astronautique
    Réponses: 0
    Dernier message: 14/09/2007, 16h10
  5. Réponses: 2
    Dernier message: 19/01/2007, 09h49