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 :

Algorithmique et principe programmation


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Algorithmique et principe programmation
    Bonjour, je dois faire un algorithme en me basant sur ceci et je sais vraiment pas le faire, j'espere que vous pourrez m'aider

    Rédiger une version affichant toutes les occurrences du plus grand écart par la position des nombres concernés dans le tableau.

    On souhaite un affichage comme celui-ci, p.ex. pour le tableau ci-dessous

    Le plus grand écart est 42 entre les valeurs aux indices (1, 3), (1, 9), (3, 4), (4, 9)

    45 21 3 45 12 30 11 41 3 39 15


    Voici un algorithme que j'ai su faire pour afficher le premier plus grand écart
    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
     
    Algorithme plus_grand_ecart ; 
     
      constante tSup = 100 ; 
     
      variable t : tableau[1 .. tSup] de entier ; 
     
      variable bSup : 0 .. tSup ; 
     
      variable iMin, iMax : 0 .. tSup ; 
     
     procedure chargerTableau ; 
     
     debut 
     
      ... 
     
     fin ; # ici bSup est défini et le tableau chargé de 1 à bSup 
     
    procedure calculEcart ; 
     
    variable indice : 1 .. tSup ; 
     
    debut 
     
      si bSup > 0 alors 
     
        iMin <- 1 ; 
     
        iMax <- 1 ; 
     
        pour indice de 2 a bSup 
     
          si t[indice] > t[iMax] alors iMax <- indice finSi ; 
     
          si t[indice] < t[iMin] alors iMin <- indice finSi ; 
     
        finPour ; 
     
      finSi 
     
    fin ; 
     
    debut 
     
      chargerTableau ; 
     
      calculEcart ; 
     
      écrire(abs(t[iMax] - t[iMin])) 
     
    fin.
    Je vous remercie d'avance si vous savez m'aider.

    ps:Je ne peux utiliser que des tantque, des repeter, des conditions, des tableaux, des conditions et des affectations.

  2. #2
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    Le plus grand écart est forcement la différence entre l'élément le plus grand
    de ton tableau et l'élément le plus petit. Donc pour commencer il faut trouver
    la valeur du plus petit et du plus grand, pour ça, utilise un tri de tableau et
    extrait les élément aux extrémités avec asort

    ensuite tu cherches dans le tableau toutes les positions de l'élément le plus grand avec array_keys avec l'option $search_value

    Idem pour les position de l'élément le plus petit.

    puis tu met en forme les combinsaisons:

    voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $tableau = explode(' ', '45 21 3 45 12 30 11 41 3 39 15');
    $tri = $tableau;
    asort($tri);
    $petit = array_shift($tri);
    $grand = array_pop($tri);
    $grand_pos = array_keys($tableau, $grand);
    $petit_pos = array_keys($tableau, $petit);
    foreach($grand_pos as $gp) foreach($petit_pos as $pp) $pairs[] = '('.($gp+1).', '.($pp+1).')';
    echo implode(' ', $pairs);
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Algorithme et programmation
    Pardon mais je dois utiliser un langage du même type que ce qui est indiqué dans l'énoncé, je peux pas me permettre d'en sortir, je sais que je peux réussir avec ca mais ca ne m'est pas permis...

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par KnightofEmpire Voir le message
    Pardon mais je dois utiliser un langage du même type que ce qui est indiqué dans l'énoncé, je peux pas me permettre d'en sortir, je sais que je peux réussir avec ca mais ca ne m'est pas permis...
    il n'empeche que la proposition de marcha est pertinente.

    Le plus grand écart est la différence entre l'élément le plus grand et l'élément le plus petit. Ca implique de commencer par chercher le 'min' et le 'max' dans un tableau.

    Ensuite tu peux parcourir ton tableau avec une double boucle pour tester les couples de valeurs (x,y) et les afficher si |x-y|=(max-min)
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Mais comment et à quel niveau, je peux imbriquer ca svp, je suis désolé je sais que je suis vraiment nul en programmation avec les tableaux

    A partir de l'algorithme de l'énoncé en fait

  6. #6
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Ensuite tu peux parcourir ton tableau avec une double boucle pour tester les couples de valeurs (x,y) et les afficher si |x-y|=(max-min)
    Pas nécessaire en début de boucle tu poses
    Max=Min=T[0]
    Puis tu parcours ton tableau une fois
    Si T[i] > Max alors Max=T[i]
    Si T[i]<Min alors Min=T[i]
    En fin de boucle retourner Max-Min
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  7. #7
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Algorithme et programmation
    Je vous remercie beaucoup, j'aurai bien eu du mal à réussir sans vous

  8. #8
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Algorithme et programmation
    Pardon qqun peut me dire comment je peux insérer ca dans la boucle en se servant de l'énoncé merci


    Max=Min=T[0]
    puis je dois parcourir le tableau 1 fois mais je sais pas comment faire et comment ca doit se mettre puis je dois mettre
    Si T[i] > Max alors Max=T[i]
    Si T[i]<Min alors Min=T[i]
    En fin de boucle retourner Max-Min
    mais je sais pas ou je dois mettre ca

  9. #9
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Zavonen Voir le message
    Pas nécessaire en début de boucle tu poses


    Comment tu fais l'affichage de tous les couples possibles ?

    Citation Envoyé par PostOriginal
    Rédiger une version affichant toutes les occurrences du plus grand écart (...)
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  10. #10
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Algorithme et programmation
    Mais c'est ca en fait que je dois trouver je dois partir de l'énoncé et chercher toutes les occurences et un du forum m'a donné cette solution mais ca ne fonctionne pas

  11. #11
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par KnightofEmpire Voir le message
    Mais c'est ca en fait que je dois trouver je dois partir de l'énoncé et chercher toutes les occurences et un du forum m'a donné cette solution mais ca ne fonctionne pas
    Dans ton 1er post tu as déjà réussi à calculer l'ecart

    ecartmax = t[iMax] - t[iMin];

    Il te reste a tester tous les couples possibles:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    pour i de 1 a (bSup-1)
        pour j de (i+1) a bSup
          si  ( abs(t[j]-t[i]) =  ecartmax ) alors écrire(i,j) ; 
        finPour;
    finPour;
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  12. #12
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Comment tu fais l'affichage de tous les couples possibles ?
    Excuse, je n'avais lu que le début. trop pressé.
    Je propose: un peu lourdingue. Tu ne fais qu'un seul passage mais tu utilises deux tableaux de booléens pour marquer les maxi et mini.
    A chaque fois que tu trouves une inégalité stricte T[i] > Max tu démarques tout et tu marques i, Si tu trouves T[i]=Max alors tu marques i, idem pour les Min
    A la fin tu n'a plus qu'a afficher les T[i] pour i marqué dans le tableau des Max et les T[j] pour j marqué dans le tableau des Min. Les démarquages risquent d'être longs (plus que la double boucle).
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

Discussions similaires

  1. probleme d'algorithmique depuis un programme VB6
    Par lol88 dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 07/05/2007, 14h15
  2. Réponses: 12
    Dernier message: 06/06/2006, 18h22
  3. l'algorithmique dans la programmation.
    Par Saddek dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 03/06/2006, 11h18
  4. Réponses: 2
    Dernier message: 02/06/2006, 12h59
  5. logiciel de programmation en Algorithmique
    Par Thomas Lebrun dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 08/11/2002, 22h18

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