petit problème en langage c
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

petit problème en langage c



  1. #1
    darkmatter66

    petit problème en langage c


    ------

    Salut tous le monde j'ai un petit soucis en langage c :
    voila mon problème je voudrai annuler la diagonale d'une matrice avec une fonction que je nommerai "annule"
    mais le problème je ne sais pas comment y procéder en pointeur d'un tableau de deux dimensions voila se que j'ai tenté de faire :
    Nom : Capture d’écran (149).png
Affichages : 65
Taille : 30,4 Ko

    et merciiiiii d'avance a vous .

    -----

  2. #2
    Jack
    Modérateur

    Re : petit problème en langage c

    Cette copie d'écran n'est vraiment pas une bonne idée. Colle ton code entre les balises code, ce sera bien mieux.

    Sinon, pour ton problème, il faut choisir: tu utilises la notation pointeur (*) ou tableau ([]) mais pas les 2 en même temps sur la même variable.
    Dernière modification par Jack ; 01/05/2016 à 21h15.

  3. #3
    Sawken

    Re : petit problème en langage c

    Salut darkmatter66,

    Tu t'y prends mal avec ton tableau à 2 dimensions, il faut savoir que quand tu as par exemple un "int *M" si tu veux accéder à l'index 0 de ton tableau d'entier tu as deux possibilités qui sont équivalentes, soit tu y accèdes en faisant M[0] ou bien en faisant *M <--- les deux notations sont équivalentes, sauf que toi tu as utilisé les deux notations en même temps, c'est comme si tu faisais *M[0], ce qui ne veut pas dire la même chose du coup.

  4. #4
    darkmatter66

    Re : petit problème en langage c

    merci pour vos réponses
    mais mon problème c'est que je ne veux pas accéder a l'index zéro , mais au tableau en entier , pour pouvoir annuler la diagonal , j'ai fait se que vous m'avez demandé mais c'est juste le T[0][0] qui prend la valeur zero ...

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : petit problème en langage c

    C'était un exemple qui te donnait la syntaxe à adopter pour accéder à un élément du tableau. Il suffit de faire une boucle et indexant les éléments de la diagonale à la place [0][0] pour mettre celle-ci à 0.

  7. #6
    Sawken

    Re : petit problème en langage c

    C'est sur que si tu fais T[0][0] tu seras à l'index {0, 0}.

    Un tableau à deux dimensions ça fonctionne comme un graphe avec un X pour les abscisses et un Y pour les ordonnées {Y, X} (en C quand on accède aux valeurs des adresses dans un double tableau c'est les Y qui sont en premiers, ex: T[Y][X]) sachant que ton tableau à 2 dimensions tu dois l'imaginer sans négatif donc ton point [0][0] se trouverait en haut à gauche de ton écran, si tu avances de 1 en Y tu descends d'une ligne et si tu avances de 1 en X tu avances vers la droite.

    Ex: Si je veux descendre de 3 en Y et avance de 1 en X ça donne T[3][1]

    J'espère t'avoir ouvert l'esprit mais je ne peux pas aller plus loin ce serait te donner la réponse,
    Tu as tout ce qu'il te faut pour finir ton exo.

  8. #7
    darkmatter66

    Re : petit problème en langage c

    Salut et encore merci ,
    je ne veux pas la solution de l'exo mais je veux comprendre comment en passe une matrice en argument d'une fonction
    pour le cas d'un entier on fait par exemple
    void echange (int *A, int *B)
    { int c
    c=*A;*A=*B;*B=c; }

    et quand on l'appel dans notre programme on l'appel comme se qui suit
    void echange(&X,&Y);

    donc se que je n'arrive pas a faire c'est de faire se genre de manup pour des tableau a deux dimensions
    et merci encore a vous

  9. #8
    Sawken

    Re : petit problème en langage c

    En fait je vois exactement ce que tu ne comprends pas, c'est les pointeurs en fait, je vais te faire un petit cours ci-dessous.

    Il faut savoir une chose, dans une fonction si tu fais ça :

    void fonction_lambda(int a)
    {
    a = 50;
    }

    int main(void)
    {
    int a;

    a = 40;
    fonction_lambda(a);
    // a = ?
    }

    À ton avis quelle valeur aura 'a' ?
    Il aura toujours la même valeur qu'avant d'entrer dans la fonction parce-que par défaut en C quand tu n'envois pas l'adresse d'une variable à une fonction il va
    automatiquement en faire un copie
    donc du coup la variable 'a' de fonction_lambda n'a absolument rien à voir avec la variable 'a' dans le main, leurs adresses sont différentes en mémoire, maintenant si tu veux que le 'a' de la fonction_lambda soit le même que le 'a' du main il faut envoyer l'adresse de la variable et ça donne ça :

    void function_lambda(int *a)
    {
    *a = 50;
    }

    int main(void)
    {
    int a;

    a = 40;
    fonction_lambda(&a);
    // a = ?
    }

    Dans ce cas la, en sortant de la fonction_lambda a = 50 dans le cas précèdent a = 40 en sortant de la fonction_lambda

    Par contre, et je pense que c'est ici que je vais te donner le déclic', quand tu as ce cas la :

    void fonction_lambda(int *a)
    {
    *a = 50;
    }

    int main(void)
    {
    int *a;

    a = malloc(sizeof(int)); // Ne fait pas attention à cette ligne si tu ne la comprends pas
    *a = 40;
    fonction_lambda(a) // ICI IL NE FAUT PAS ENVOYER &a !!! sinon ça voudrait dire que fonction_lamda reçoit en paramètre l'adresse d'un pointeur sur int donc en gros un int **a (De toute manière tu devrais avoir un Warning à la compilation) !!!

    // a = ?
    }

    Du coup ici a = l'adresse du début de ton tableau et *a = 50 (a[0] c'est la même chose que *a pour rappel) à la sortie de la fonction_lambda

    En gros quand tes variables ont déjà des étoiles avant de les envoyer dans une fonction, n'envoie pas l'adresse de la variable en paramètre (Pour ton cas bien sur), c'est déjà un pointeur et quand tu modifies un pointeur peut importe dans quelle fonction, il est modifié partout.

  10. #9
    Jack
    Modérateur

    Re : petit problème en langage c

    Préfère les balises code aux coupeurs, c'est plus lisible.

    Pour le reste, tes explications sont très bien. Tu peux poursuivre si tu veux avec les tableaux à 2 dimensions car ça devient un poil plus compliqué.

  11. #10
    darkmatter66

    Re : petit problème en langage c

    merci infiniment pour votre aide là je comprend bien plus qu'avant .

Discussions similaires

  1. Petit problème de langage
    Par olympiquega dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 02/09/2014, 19h40
  2. Problème avec un petit langage C
    Par lordchameau dans le forum Programmation et langages, Algorithmique
    Réponses: 12
    Dernier message: 16/09/2011, 06h21
  3. petit exo en langage C plutot algorithmique
    Par invite175953cf dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 12/05/2009, 20h54
  4. Petit problème en langage C. Please Help!
    Par invite00a39544 dans le forum Électronique
    Réponses: 4
    Dernier message: 25/03/2007, 17h33