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 :

Aide en algo


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Aide en algo
    Bonjour tout le monde, tout d'abord je me présente puisque c'est mon tout premier post. Je m'appelle Calude,j'ai 26ans et j'habite en France, plus précisément à Bordeaux

    Je dois effectuer des exercices d'algo ... et j'ai un peu de peine ...

    Je viens donc solliciter l'aide de quelqu'un qui pourrait m'éclairer dans mes petits soucis ...

    Il s'agit donc des sujets suivants :

    - Quicksort
    - Récursivité terminale
    - Charge du stack

    C'est environ 10 petits exercices ...

    Merci beaucoup à ceux qui prendront un peu le temps de me répondre ...

  2. #2
    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 084
    Points
    16 084
    Par défaut
    Nous avons pour politique de ne pas faire les exercices à la place des gens.

    Cependant nous répondrons à toute question précise que tu formuleras (dans la limite de nos connaissances ).

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Pour commencer, je dois transformer une procédure identique à celle ci-postée, sans utiliser de formant de boucle. Je ne dois également pas, emploier aucune entité globale du module qui la contient.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	PROCEDURE Iteration (n : INTEGER) : INTEGER;
    	VAR
    		k, s: INTEGER;
    	BEGIN (*Iter*)
    		k:= n; s:=0;
    		WHILE k > 0 DO
    			REPEAT s:=s+k UNTIL s > n;
    			k:=k-2
    		END;
    		RETURN s
    	END Iter;
     
    ....
    Voici ce que j'ai fais .... mais j'obtiens pas le bon résultat :
    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
     
    	PROCEDURE Iteration2 (n : INTEGER) : INTEGER;
    	VAR
    		k, s: INTEGER;
     
    		PROCEDURE Rep (n : INTEGER) : INTEGER;
    		BEGIN (*Rep*)
    			s := s+k;			
    			IF ~(s > n) THEN 	
    				s := Rep(n);
    			END;
    			k := k -2;
    			RETURN s
    		END Rep;
     
    		PROCEDURE Whi (n : INTEGER) : INTEGER;
    		BEGIN (*Whi*)
    			IF k > 0 THEN n := Rep(n); n := Whi(n) END;
    			RETURN n
    		END Whi;
     
    	BEGIN (*Iter2*)		
    		k:= n; s:=0;
    		s := Whi(k);
    		RETURN s;
    	END Iter2;
     
    	PROCEDURE Do*;
    	BEGIN (*Do*)
    		Out.Int(Iteration(3), 5); 
    		Out.Ln; 
    		Out.Int(Iteration2(3), 5); 
    	END Do;
     
    ....
    Ce n'est pas la mort .... mais je suis coincé ... si quelqu'un pouvait m'éclairer sur ca, ce serais super ...

    merci

  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 084
    Points
    16 084
    Par défaut
    Citation Envoyé par haribooo Voir le message
    Pour commencer, je dois transformer une procédure identique à celle ci-postée, sans utiliser de formant de boucle.
    Sans utiliser aucune boucle ? .

    Ton idée c'est visiblement de remplacer la boucle "while" par un appel récursif. Est-ce vraiment le but de l'exercice ? Le code final sera plus complexe que l'énoncé.

    L'alternative c'est de décortiquer l'algo pour comprendre ce qu'il calcule (mathématiquement). C'est plus compliqué a faire, mais le code final sera simple.

    Bref, est-ce que le but de l'exercice c'est de faire du triturage de "code" ou du triturage de "math" ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Tu as tout compris .... c'est bien dans la transformer en récursif ... donc, triturage de code ...
    (Ce que j'ai essayé de faire dans la code que j'ai donné en 2e) ...

    Mais celui-ci ne fonctionne pas .... Je ne trouve pas mon erreur ...

  6. #6
    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 084
    Points
    16 084
    Par défaut
    Citation Envoyé par haribooo Voir le message
    Tu as tout compris .... c'est bien dans la transformer en récursif ... donc, triturage de code ...
    (Ce que j'ai essayé de faire dans la code que j'ai donné en 2e) ...

    Mais celui-ci ne fonctionne pas .... Je ne trouve pas mon erreur ...
    Ton instruction "k := k - 2;" devrait être dans la boucle WHILE, donc dans la procedure "Whi()".

    Tel que tu l'as codé, tu vas exécuter cette instruction autant de fois que tu fais des boucles REPEAT.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Ton instruction "k := k - 2;" devrait être dans la boucle WHILE, donc dans la procedure "Whi()".
    Je viens de le tester .... mais ça ne fonctionne pas. Le résultat obtenu ne correspond toujours pas au résultat obtenu avec la procédure de l'énoncé.

  8. #8
    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 084
    Points
    16 084
    Par défaut
    Citation Envoyé par haribooo Voir le message
    Je viens de le tester .... mais ça ne fonctionne pas. Le résultat obtenu ne correspond toujours pas au résultat obtenu avec la procédure de l'énoncé.
    Il y aussi des écrasements curieux de la variable "n" dans ton code, genre "n := Rep(n);". Normalement "n" est une constante dans l'énoncé, donc tu n'as pas de raison de la modifier.

    En java, j'obtiens ceci:
    Code java : 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
    int k,s;
     
    int iter(int n) {
    	k=n; s=0;
    	whileloop(n);
    	return s;
    }
     
    void whileloop(int n) {
    	if (k>0) {
    		repeatloop(n);
    		k=k-2;
    		whileloop(n);
    	}
    }
     
    void repeatloop(int n) {
    	s=s+k;
    	if (!(s>n)) repeatloop(n);
    }

    ce qui me donne bien les mêmes resultats que:
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int iter(int n) {
    	int k,s;
    	k=n;s=0;
    	while (k>0) {
    		do {s=s+k;} while(!(s>n));
    		k=k-2;
    	}
    	return s;
    }

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Merci ...

    Je vais jeter un coup d'oeil à ton code ... et voir si j'arrive à le refaire en pascal ...

    je te tiens au courant dans les minutes qui suivent ...

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    AIE AIE AIE .... merci ... tu avais raison dès le début .... je devais bouger le k := k -2; dans la procédure whi() .....

    mais il fallait que le le place entre l'appel des 2 procédures comme tu l'as fais dans ton code ...

    Moi je l'ai mise après, pensant que c'était égal ....

    Bref .... merci .... c'était vraiment une erreur toute ........

  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 084
    Points
    16 084
    Par défaut
    Citation Envoyé par haribooo Voir le message
    AIE AIE AIE .... merci ... tu avais raison dès le début .... je devais bouger le k := k -2; dans la procédure whi() .....

    mais il fallait que le le place entre l'appel des 2 procédures comme tu l'as fais dans ton code ...

    Moi je l'ai mise après, pensant que c'était égal ....

    Bref .... merci .... c'était vraiment une erreur toute ........
    Sinon, pour le fun, l'algo se résume a une formule de math : s = 2*n + Somme jusqu'a n-2 des nombre pairs ou impairs (suivant la parité de n)

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    excellent .... (j'ai quand même du tester ca sur une feuille avec mon stylo ... )

    tu vas me dire que t'as vu ca comme ca ?

    joli joli ....

  13. #13
    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 084
    Points
    16 084
    Par défaut
    Citation Envoyé par haribooo Voir le message
    tu vas me dire que t'as vu ca comme ca ?
    J'ai surtout remarqué que la boucle "REPEAT/UNTIL" n'est pas franchement utile.
    - La première fois (quand k=n), on va passer 2 fois dedans => s=2*n
    - Les fois suivantes, on passe une fois et on sort (car s restera toujours plus grand que n)

    Ce qu'on peut doncc réécrire comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    BEGIN (*Iter*)
    	k:= n; s:=0;
     
    	s:=s+k
    	s:=s+k
    	k:=k-2
     
    	WHILE k > 0 DO
    		s:=s+k;
    		k:=k-2
    	END;
    	RETURN s
    END Iter;

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

Discussions similaires

  1. [HLSL XNA]aide pour algo d'ombres temps réel
    Par Acropole dans le forum XNA/Monogame
    Réponses: 3
    Dernier message: 31/07/2008, 15h49
  2. cherche aide en algo
    Par chihade dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 14/03/2007, 16h34
  3. demande aide en algo
    Par luwela dans le forum Algorithmes et structures de données
    Réponses: 20
    Dernier message: 14/12/2006, 22h59
  4. Besoin d'aide pour algo
    Par vodevil dans le forum Langage
    Réponses: 8
    Dernier message: 08/03/2006, 13h45
  5. Aide pour algo voyelle
    Par wareq dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 21/11/2005, 20h49

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