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 :

remplacer une partie d'un tableau par un autre


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2019
    Messages : 10
    Par défaut remplacer une partie d'un tableau par un autre
    j'ai 2 tableau tab1[6]={0,2,5,1,4,3} et tab2[6]={0,5,3,2,1,4} , je dois prendre la partie {5,1,4} du tab1 extraire l'ordre de ces element {3eme, 1er,2eme} {3,1,2} , faire la méme chose pour les elemnts {3,2,1} du tab2 est avoir l'ordre correspondant qui est :{3,2,1} , puis echanger la partie l'order du {5,1,4} par selon l'ordre qu'on a extrait du tab2 : {3,2,1} : echanger {5,1,4} d'ordre {3,1,2} par l'ordre {3,2,1} ===> {5,4,1} and get tab1[6] ={0,2,5,4,1,3} , et la méme chose pour tab2. actuelement j'ai pu faire la fonction qui extrait l'ordre des 3 element et celle qui fait l'échange des elements , mais ça marche que pour les 3 elements du tableau pas le tableau tous entier :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    #include <stdio.h>
    #define swap(a, b) {(a)^=(b); (b)^=(a); (a)^=(b);}
     
    void getOrder(int tab[], int n, int pos[]) {
        for (int i = 0; i < n; i++) {
            int count = 0;
            for (int j = 0; j < n; j++)
                count += (tab[j] < tab[i]);
            pos[i] = count;
        }
    }
     
     
    void exchange(int *A,int *I,int n){
     
    	 int i, j, k;
    	    for(i = 0; i < n ; i++){
    		if(i != I[i]){
    		    j = i;
    		    while(i != (k = I[j])){
    		        swap(A[j], A[k]);
    		        I[j] = j;
    		        j = k;
    		    }
    		    I[j] = j;
    		}
    	    }
     
    }
     
     
    int main() {
        int tab[3] = { 5, 1, 4 };
     
        int tab2[3] = { 3, 2, 1 };
     
        int pos1[3];
        int pos2[3];
        int n = sizeof(tab) / sizeof(tab[0]);
     
        getOrder(tab, n, pos1);
        for (int i = 0; i < n; i++)
            printf("%d ", pos1[i]);
        printf("\n");
     
        getOrder(tab2, n, pos2);
        for (int i = 0; i < n; i++)
            printf("%d ", pos2[i]);
        printf("\n");
     
        exchange(tab,pos2,n);
     
       for (int i = 0; i < n; i++){
            printf("%d ", tab[i]);
     
    	}
     
     
     
        return 0;
    }

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    À propos de la forme :

    • Tu présentes ton sujet de manière assez indigeste. Relis-toi : c'est non seulement une marque de respect envers tes interlocuteurs, mais cela concoure aussi à réorganiser les idées dans ton esprit et mieux appréhender le problème.
    • Soigne la mise en page de ton code source : constance et cohérence dans l'indentation et le nommage des variables, utilisation du mot-clef const et des types adéquats (size_t pour les tailles et l'adressage) lorsque c'est nécessaire.
    • Modularise ton code, même pour de simples tests. Par exemple l'affichage de tableau que tu répètes trois fois ci-avant peut déjà être confié à des fonctions utilitaires :
      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
      void idump(FILE *out, const int *buf, size_t num) {
          fprintf(out, "[ ");
          while (num-- > 0)
              fprintf(out, "%d ", *buf++);
          fprintf(out, "]");
      }
       
      void idumpln(FILE *out, const int *buf, size_t num) {
          idump(out, buf, num);
          fprintf(out, "\n");
      }
       
      #define idumplna(out, array) idumpln((out), (array), sizeof (array) / sizeof (array)[0])
       
      ..
       
      int t[] = { 5, -2 .. 18 };
       
      ..
       
      idumplna(stdout, t);


    À propos du fond :

    • le Xor-swap et autres tricks du style, c'est le mal. Que crois-tu qu'il se passe lorsque tu exécutes swap(tab[0], tab[0]) ? Le seul vrai value swap, c'est celui-ci : #define swap(type, a, b) { const type t = a; a = b; b = t; } .
    • Un seul niveau de boucle suffit pour la fonction exchange (qui devrait plutôt être baptisée reorder, IMHO), la solution est vraiment beaucoup plus simple. Repose ton algo au clair sur papier pour bien comprendre.

  3. #3
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2019
    Messages : 10
    Par défaut
    Merci pour vos remarques , mais je tiens a vous informer que l'algorithme demandé n'est pas un simple remplacement , j'ai besoin de passer par ces étapes

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Matt_Houston Voir le message
    la solution est vraiment beaucoup plus simple. Repose ton algo au clair sur papier pour bien comprendre.
    Sans déconner, t'as vraiment compris ce qu'il veut faire ? Hier je suis resté 10mn à lire et à relire son... "truc" sans rien paner.

    Exemple "j'ai 2 tableau tab1[6]={0,2,5,1,4,3} et tab2[6]={0,5,3,2,1,4} , je dois prendre la partie {5,1,4} du tab1 extraire l'ordre de ces element {3eme, 1er,2eme} {3,1,2}". Bon, déjà "5" c'est bien le 3° item de tab1, mais "1" n'est pas le 1er, c'est le 4° !!! Et "4" ce n'est pas le 2° mais le 5°
    Ou alors à partir de {5, 1, 4} tu récupères les items [5], [1] et [4] pour arriver à {3, 1, 2}. Alors effectivement tab1[5] vaut bien 3 et tab1[1] vaut 2 (à un moment il écrit {3, 2, 1}) mais tab1[4] ne vaut ni 1 ni 2 mais 4.

    A partir de là, j'ai un peu abandonné l'espoir de comprendre...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2019
    Messages : 10
    Par défaut
    Bon le probleme est compliqué et je pense que je l'est mal presenter , sans entrer dans les détails voila le prb ,

    supposons que j'ai 2 tableaux :tab1[]={0,2,5,1,4,3} et tab2[]={0,5,3,4,2,1}

    je souhaite réordonner une partie du tab1 qui est {5,1,4} selon la position des elements (position et non les elements) correspondant du tab2 {3,4,2}

    dans cet exemple : {5,1,4} correspond à {3,1,2} (3th,1st,2nd) et {3,4,2} correspond à { 3,2,1}

    donc si on change l'ordre {3,1,2} de {5,1,4} par {3,2,1} ça donne ==> {5,4,1}


    c'est une partie d'un travail ,ou j'aurai besoin de garder les positions , j'espere que c'etait un peu plus claire , vos propositions sont les bienvenus !!

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 151
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par saraHij Voir le message
    dans cet exemple : {5,1,4} correspond à {3,1,2} (3th,1st,2nd) et {3,4,2} correspond à { 3,2,1}
    Avec quelles règles et substances trouve-t-on ces correspondances ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. [Débutant] Remplacer une sélection avec des caractères "*" par un autre
    Par canardav77 dans le forum VB.NET
    Réponses: 6
    Dernier message: 26/10/2012, 16h29
  2. Remplacer une partie d'un mot par une autre
    Par darkman19320 dans le forum Linux
    Réponses: 3
    Dernier message: 22/06/2012, 10h47
  3. copier une partie d'un tableau dans un autre
    Par yasminacha dans le forum Android
    Réponses: 2
    Dernier message: 18/03/2011, 17h30
  4. Remplacer une partie de l'image par 0
    Par code_source dans le forum Images
    Réponses: 2
    Dernier message: 11/01/2011, 16h11
  5. Réponses: 1
    Dernier message: 24/05/2007, 21h20

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