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 :

Tableau , Pointeurs ?


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 11
    Par défaut Tableau , Pointeurs ?
    Bonjour voilà j'ai besoin d'aide & de quelques explications

    En réalité ce que je souhaite faire c'est avoir ma deuxième ligne du tableau qui varie en fonction de la première ligne !
    Ici la deuxième doit permuter de 2 par rapport à la ligne 1.

    Bien que là sa marche,je comprends bien pourquoi sa fait pas ce que je veut exactement ici, mais j'aimerais avoir une piste sur comment faire.
    En effet, par la suite cette première ligne est aléatoire ( déjà réalisé ).
    J'espère que vous avez comprit mon problème !?

    Doit-je utiliser des pointeurs ?

    Merçi de vos réponses

  2. #2
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 082
    Par défaut
    J'avoue ne pas avoir compris clairement : Tu souhaite avoir la deuxieme ligne qui varie en fonction de la premiere ?
    c'est donc un tableau a deux dimension ?

    Quelle est la fonction pour calculer la deuxieme ligne par rapport a la premiere ?
    (style la deuxime doit etre deux fois plus grande, ou avoir une case de plus que la precedente ...)

    Sinon, oui, il va falloir te diriger vers l'allocation dynamique je pense.

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 11
    Par défaut
    Je souhaite avoir la deuxième ligne qui varie en fonction de la première, oui en effet.

    Avec pour effet : la deuxième ligne est une permutation circulaire de 2 rangs de la première.

    Donc par exemple quand j'ai :
    1 2 3 4 /* Ligne 1*/
    3 4 1 2 /* Ligne 2, ne dépassant jamais le chiffre 4 d'où ma condition*/

    J'ai ligne 3 et 4 a faire après, mais bon sa sera la même chose que la ligne 2 donc quand j'aurais compris sa seront bon ^^

  4. #4
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 082
    Par défaut
    Donc ce n'est pas la longueur du tableau qui varie .....

    Il s'agit de tout simplement faire un permutation circulaire, aucun besoins de faire de l'allocation dynamique et encore moins des pointeurs.

    Je te conseille de revoir tes permutation circulaire, elle ne sont pas bonne du tout. Au pire, si tu bloque post ton code.

    Un simple tableau Tab[4][4] devrait suffire (si les ligne 3 et 4 sont de meme longueur).

  5. #5
    Membre habitué
    Inscrit en
    Novembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 11
    Par défaut
    Bon une heure vient de passer et je ne comprend pas vraiment comment bidouiller sa dans un tableau 2D

    A vrai je n'est encore jamais utiliser un tableau [4][4]

    J'ai fait un truc du genre :

    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
    int i;
    int j;
    int tab[4][4];
     
     
    int main ()
    {
    	/* 1er LIGNE*/
     
    	for (i=1; i<= 4 ; i++)
    	{
    		for (j=1; j <= 4; j++)
    		{
    			tab[i][j] = i,j ;
     
    				{
    				printf("%d\t",tab[i][j]);
    				}	
    		}
    		system("PAUSE");
    	}
    return 0; /*retourne la valeur 0 et sort de la fonction*/
    }
    Mais voilà j'ai

    1111
    2222
    3333
    4444

    Je comprend pas comment je doit faire

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Pourquoi mettre une virgule ?

  7. #7
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 082
    Par défaut
    On va deja commencer par faire ceci :


    1234
    3412


    Puisque les tableau a deux dimension te gene, on va prendre deux simple tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    int main(void)
    {
        int Premier[4] = {1,2,3,4};
        int Deuxieme[4];
     
        return EXIT_SUCCESS;
    }
    Ensuite, tu dis vouloiur faire deux permutation circulaire :

    une entr 1 et 3 et l'autre entre 2 et 4. On a donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int main(void)
    {
        int Premier[4] = {1,2,3,4};
        int Deuxieme[4];
     
        int i;
        for(i=0 ; i<2 ; i++)
        {
            /* Permutation circulaire ici */
        }
     
        return EXIT_SUCCESS;
    }
    une fois la permutation faite, tu va vouloir afficher tes tableau :

    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
     
    int main(void)
    {
        int Premier[4] = {1,2,3,4};
        int Deuxieme[4];
     
        int i;
        for(i=0 ; i<2 ; i++)
        {
            /* Permutation circulaire ici */
        }
     
        for(i=0 ; i<4 ; i++)
            printf("%d ",Premier[i]);
        printf("\n\n");
     
        for(i=0 ; i<4 ; i++)
            printf("%d ",Deuxieme[i]);
        printf("\n\n");
     
        return EXIT_SUCCESS;
    }
    Voila, il ne te reste plus qu'a realiser une permutation circulaire, je te laisse ceci. En faisant une recherche sur le forum, tu trouvera rapidement.

  8. #8
    Membre habitué
    Inscrit en
    Novembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 11
    Par défaut
    En faite j'ai fait sa a partir de ton CODE, d'ailleurs je te remercie

    J'ai juste remplacer i<2 par i<4 ;

    Est-ce correct ou existe t-il plus simple ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        for(i=0 ; i<4 ; i++)
        {
    		Deuxieme[i]=Premier[i]+2;					
    		if (Deuxieme[i]>4)
    		{
    			Deuxieme[i]=Premier[i]-2;								
    		}
    		else
    		{
    			Deuxieme[i]=Premier[i]+2;
    		}
        }
    Sa donne bien
    1234
    3412

    ^^

    Et un problème résolut entraine toujours un nouveau problème
    ... on verra plus tard pour sa Faut que j'y travaille avant !

    J'essayerais aussi de faire tab[4][4] , peut être plus simple tu penses ?

  9. #9
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Ton code ne réalise pas une permutation circulaire de 2 cases du tableau : il ajoute 2 (modulo(4)) aux éléments du tableau.
    La permutation circulaire correspondrait à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Deuxieme[i] = Premier[(i+2)%4];
    Alors que ton code correspond à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Deuxieme[i] = (Premier[i]+2)%4;

  10. #10
    Membre habitué
    Inscrit en
    Novembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 11
    Par défaut
    Ok , sa vient de faire TILT dans ma tête ^^
    Depuis le début je m'en tête a faire quelques choses qui ne correspond pas a une permutation circulaire :X

    Mci les gens :-)
    Vais essayer de faire la bonne modif !

    EDIT : Merci beaucoup je crois que j'ai maintenant bien comprit

  11. #11
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 082
    Par défaut
    Citation Envoyé par diogene Voir le message
    Ton code ne réalise pas une permutation circulaire de 2 cases du tableau : il ajoute 2 (modulo(4)) aux éléments du tableau.
    La permutation circulaire correspondrait à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Deuxieme[i] = Premier[(i+2)%4];
    Alors que ton code correspond à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Deuxieme[i] = (Premier[i]+2)%4;


    J'ai du mal a voir la permutation circulaire ici. En fait, en reflechissant mieux, il n'y a pas de permutation circulaire a faire, juste des reaffectation.

    Ici, tu tire plus partie du fait que les element ont "miraculeusement" ((+2) %4) de difference a chaque fois.

    Si la serie est

    3720
    2037

    Je vois mal ton algo marcher, surtout qu'il va devoir l'appliquer a un autre tableau.


    J'aurais plus pencher pour ceci :


    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
     
    int main(void)
    {
        int Premier[4] = {1,2,3,4};
        int Deuxieme[4];
     
        int i;
        for(i=0 ; i<2 ; i++)
        {
            /* On reaffecte les valeurs en permutant */
            Deuxieme[i] = Premier[i+2]
            Deuxieme[i+2] = Premier[i]
        }
     
        for(i=0 ; i<4 ; i++)
            printf("%d ",Premier[i]);
        printf("\n\n");
     
        for(i=0 ; i<4 ; i++)
            printf("%d ",Deuxieme[i]);
        printf("\n\n");
     
        return EXIT_SUCCESS;
    }

  12. #12
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    SofEvans :
    J'ai du mal a voir la permutation circulaire ici. En fait, en reflechissant mieux, il n'y a pas de permutation circulaire a faire, juste des reaffectation.
    Si, c'est la règle posée par le PO.

    Ici, tu tire plus partie du fait que les element ont "miraculeusement" ((+2) %4) de difference a chaque fois
    Ici, ce sont les nouveaux indices qui sont pris modulo 4 :
    L'élément en 0 est mis à l'indice (0+2) mod4 = 2
    L'élément en 1 est mis à l'indice (1+2) mod4 = 3
    L'élément en 2 est mis à l'indice (2+2) mod4 = 0
    L'élément en 3 est mis à l'indice (3+2) mod4 = 1

    C'est indépendant du contenu du tableau. Pour d'autres valeurs que 2 et 4, disons n et m, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Deuxieme[i] = Premier[(i+n)%m];

  13. #13
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 082
    Par défaut
    Oui, maintenant que tu le dis, je vois mieux. Enfin bon, tout ceci pour gagner une ligne ... Quand a la permutation circulaire, c'est l'idée qui etait donné, mais ce n'est pas vraiment une permutation circulaire (enfin, je pense car elle requiert l'usage d'une variable temporaire).

    Je manque encore d'experience.
    Désolé Diogene.

  14. #14
    Membre habitué
    Inscrit en
    Novembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 11
    Par défaut
    Vos deux solutions fonctionnent ^^

    Et j'ai réussi a faire les deux lignes suivantes, elles marchent parfaitement aussi


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Wrapping WinRT: Tableau, pointeur, "hat"
    Par math281 dans le forum Développement Windows
    Réponses: 1
    Dernier message: 07/05/2015, 09h47
  2. [débutant] problème création tableau (pointeurs and Cie)
    Par olivier1209 dans le forum Débuter
    Réponses: 13
    Dernier message: 08/03/2009, 15h54
  3. [tableau] pointeur de fonction
    Par ZaaN dans le forum C++
    Réponses: 7
    Dernier message: 27/03/2007, 08h27
  4. Réponses: 6
    Dernier message: 12/10/2003, 14h57
  5. Pointeur vers un tableau
    Par Nikos dans le forum C
    Réponses: 3
    Dernier message: 09/12/2002, 00h43

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