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

Algorithmes et structures de données Discussion :

Exercice sur les tableaux


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    IDE
    IDE est déconnecté
    Membre éclairé Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Par défaut Exercice sur les tableaux
    Bonjour à tous, voici un exercice que je dois réaliser :

    Un tableau à une dimension contient des entiers égaux à 0, 1 ou 2. Ecrire un algorithme qui range les éléments de ce tableau dans un deuxième tableau de manière que les 0 soient rangés en tête, puis les 1 puis les 2. Le premier tableau ne sera parcouru qu'une seule fois. Il sera initialisé à sa déclaration et affiché

    Et voici ma solution, mais je ne sais pas si c'est une bonne chose de l'avoir fait de cette manière, merci pour vos remarques.

    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
     
    Constante MAX = 6
    Tableau entier iTableau taille MAX
    <* = {0,0,2,1,2,1} *>
    Tableau entier iEchange taille MAX
    Variable indice iI
     
    Début du traitement
     
       /* Boucle : */
       Initialisation
       Compter avec iI de 0 à 5
     
          Afficher iTableau[iI] Tab
     
       Fin de compter
     
       Fin de ligne
       Fin de ligne
     
       /* Boucle : */
       Initialisation
       Compter avec iI de 0 à 5
     
          /* Alternative : */
          Si iTableau[iI] == 0 Alors
     
    	 iEchange[0] <- 0
    	 iEchange[1] <- 0 
     
    	 /* */
          Sinon
     
    	 si iTableau[iI] == 1 Alors
     
    	    iEchange[2] <- 1
    	    iEchange[3] <- 1 
     
    	 Sinon
     
    	    si iTableau[iI] == 2 Alors
     
    	       iEchange[4] <- 2
    	       iEchange[5] <- 2 
     
    	    Fin de si
    	    Fin de si
          Fin de si
     
       Fin de compter
     
       /* Boucle : */
       Initialisation
       Compter  avec iI de 0 à 5
     
          Afficher iEchange[iI] Tab
     
       Fin de compter
     
      Attente 
     
    Fin du traitement

    Merci pour votre aide.

    Michael

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 192
    Par défaut
    Ton algo ne marche que si tu as deux 0, deux 1 et deux 2. Dans les autres cas, il ne fonctionne pas.

    Essaie simplement de faire un programme qui commence par compter le nombre de 0, le nombre de 1, le nombre de 2, puis remplit le tableau de résultat sachant ces nombres.

  3. #3
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Un algorithme de tri résoud le problème : http://fr.wikipedia.org/wiki/Algorithme_de_tri
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par Hephaistos007
    Un algorithme de tri résoud le problème : http://fr.wikipedia.org/wiki/Algorithme_de_tri
    IDE demande explicitement que la complexité soit en O(n). Et non en O(n ln n) ou O(n²) tel un algorithme de tri classique. Par contre, un algorithme de tri comptage fonctionne (mais cela revient à ce que borisd disait)

  5. #5
    Membre émérite
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Par défaut
    en O(n) par exemple :
    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
     
     
    const n = 25;
    var T_initial, T_final : array[0..n-1] of byte;
    procedure ordone;
    var i : integer; n1, n2 : integer;
       begin
       for i:=0  to n-1 do T_Initial[i]:=Random(3); // ou mettre les data en question
       n1:=-1; 
       n2:=n;
       for i:=0 to n-1 do
       if T_initial[i]=0 then 
          begin 
          inc(n1); 
          T_final[n1]:=0 
          end
       else
       if T_initial[i]=2 then 
          begin 
          dec(n2); 
          T_final[n2]:=2 
          end;
       if n1 < n2-1 then for i:=n1+1 to n2-1 do 
          T_final[i]:=1;
       end;

  6. #6
    IDE
    IDE est déconnecté
    Membre éclairé Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Par défaut Suite
    Merci pour toutes ces réponses, je suis allé sur le suite suivant :

    http://fr.wikipedia.org/wiki/Tri_comptage

    qui explique se que je voudrais faire mais je ne comprend pas bien l'algorithme, si quelqu'un pourrait me l'expliquer se serait super sympa, merci

    Michael

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

Discussions similaires

  1. Exercice sur les tableaux
    Par haha1 dans le forum Pascal
    Réponses: 5
    Dernier message: 27/12/2008, 20h13
  2. Exercice sur les tableaux
    Par sayari7 dans le forum Pascal
    Réponses: 2
    Dernier message: 06/12/2008, 15h23
  3. aide pour un exercice sur les tableaux
    Par mimiif dans le forum Caml
    Réponses: 9
    Dernier message: 30/05/2008, 15h49
  4. Réponses: 11
    Dernier message: 04/02/2008, 20h37

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