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 :

Programme de tri


Sujet :

C

  1. #81
    Invité
    Invité(e)
    Par défaut
    Ok merci je comprends. En fait nous parlons depuis plusieurs jours du fait de changer des valeurs et les remettre dans un sens, j ai pris contact avec mon prof parce que dans mon support de cours je n ai pas du tout vu toutes ces regles et je pense que ce n est pas sur quoi il veut que je bosse...maintenant je ne dit pas que c est faut, vos arguments sont très claires et je vais essayer de coder ça mais j ai comme même l impression qu' on s éloigne un peu de ce que je dois faire, selon ce que je suis sensé connaitre en langage C...bon, c est pas une critique mais une remarque que je voulais vous souligner mais merci

  2. #82
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 866
    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 866
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par morror Voir le message
    mais j ai comme même l impression qu' on s éloigne un peu de ce que je dois faire, selon ce que je suis sensé connaitre en langage C
    Ben oui, on te l'a déjà dit. Utiliser une fonction pour modifier une variable qui ne lui appartient pas (donc à fortiori les échanger) nécessite de connaitre les pointeurs. Si tu n'as pas appris les pointeurs, alors tu ne peux pas passer par une fonction pour échanger deux variables.
    Ce qui ne t'interdit toutefois pas de les échanger sans passer par une fonction. En effet, rien ne t'interdit, dans ton main, de reproduire les 3 lignes de code montrées par ternel et ce, autant de fois que nécessaire. Là, pas de fonction donc pas besoin de pointeur. Et même (astuce mathématique), pas besoin de variable intermédiaire...
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int a=5; b=12
    a^=b;
    b^=a;
    a^=b;
    printf("a=%d, b=%d\n", a, b);
    (je te laisse chercher tout seul la démonstration mathématique)


    Maintenant perso je suis un peu perdu parce que tu changes tout le temps de directives. Au départ il était juste question d'afficher les nombres dans l'ordre. Maintenant il faut en plus qu'ils soient triés. Et puis enfin tu dis que tu ne sais pas ce qu'il faut faire. Tu l'as le sujet ? C'est écrit quoi dessus ???
    Je suis d'ailleurs étonné que tu sois encore sur ce TP 3 semaines après l'avoir commencé. Parce que ça, c'est un TP qui se fait en général en 1h. Au pire on te le donne à faire le soir pour le lendemain et le lendemain tu as le corrigé. Alors je reste un peu dubitatif sur la qualité de ton enseignement.

    Accessoirement je n'ai pas du tout apprécié que tu ignores purement mon post du 9/8 et que tu reposes le lendemain la même question à laquelle ce post avait répondu. Merci à ternel qui l'a bien fait remarquer.
    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]

  3. #83
    Invité
    Invité(e)
    Par défaut
    Bah peut être que j ai sauté des étapes dans mon apprentissage: la question est de remettre dans l ordre croissant 3 nombres entier c est tout. Quant a mon apprentissage il est tres bien sauf que j ai oris un exercice peut être un peu loin car les pointeurs nous sommes séance les apprendre en septembre. Sinon ton poste je l ai consulté, je l ai même essaye mais je n ai pas compris. Alors effectivement, je ne t ai pas posé la question et est pense que éternel donnait une autre solution. Rien de plus.
    Finalement même si tu avais raison, j ai pas compris donc finalement sa change rien.
    Il faut à ce moment là que je regarde mes cours sur les pointeurs car j ai reçu tout les exercices de l année en une fois il me semble et j en suis arrivé à cette exercice après avoir passé du temps sur les autres. Après que vous ayez l impression que je vais dans tout les sens c est aussi peut être parce que je demande à tout le monde et que à quelque exception (la votre), tout le monde post quelque chose de différent mais je vais m accrocher...merci en tout cas ! Je suis newbe !

  4. #84
    Invité
    Invité(e)
    Par défaut
    Et c est les vacances...les cours ne sont pas donné. C est moi qui prends l initiative de faire ce que bon me semble. L exercice dit entrer val1, val2, val3, échanger val1 <val2 <val3. Je vais tester ce que tu dis et je reposte, merci.

  5. #85
    Invité
    Invité(e)
    Par défaut
    comme je ne comprends pas les pointeur je vais reprendre mon code dès le début...et je trouverai bien la solution, car je me suis rendu compte que peut être vous avez l'impression que je vais dans tout les sens parce qu'on me dit quoi faire et je suis d'accord, je ne m'affirme pas. Donc, aussi, j'ai un problème avec les terme utiliser pour le codage. Merci

  6. #86
    Invité
    Invité(e)
    Par défaut
    Bon j'ai relis les posts depuis le début...je comprends très bien que vous ayez pensé que je n'avais aucune objectivité mais c'était la vérité. C'est juste que j'avais pas tout suivis.
    Alors j'ai écouté là et je me permet de vous transmettre le code, et sve@r désolé, je n'ai pas voulu te manquer de respect. En gros j'ai mélanger ton code avec celui de ternel mais dans la théorie j'ai compris alors j'ai osé réfléchir et voila le code : Bon bah que des solutions, pas de balises alors je poste comme même !

    #include<stdio.h>
    void echanger_entiers(int * premier, int * deuxieme) {
    // cette fonction échange la valeur des entiers désignés par premier et deuxieme
    // c'est-à-dire, les nombres *premier et *deuxieme.


    }

    int main () {

    int a = 0, b = 0, c = 0;
    //obtenir les trois nombres
    printf("Veuillez saisir trois nombres entiers:");
    scanf("%d %d %d", &a, &b, &c);

    printf("Vos trois nombres sont: %d %d %d\n", a, b, c);

    //trier les trois nombres en utilisant la fonction echanger_entiers
    // par exemple, pour échanger a et b, utiliser echanger_entiers(&a, &b);
    // ... à toi de coder ça correctement

    a^=b;
    b^=a;
    a^=b;
    printf("a=%d, b=%d\n", a, b);

    b^=c;
    c^=b;
    b^=c;
    printf("b=%d, c=%d\n", b, c);
    // comme on les a triés, on a maintenant a < b et b < c;
    //afficher les nombres triés
    printf("Et dans l'ordre croissant: %d %d %d\n", a, b, c);

    return 0;
    }

  7. #87
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 515
    Par défaut
    Bonjour,

    Je ne sais pas quelle démarche de raisonnement tu utilises pour programmer, mais elle ne fonctionne pas.

    Voici une démarche qui fonctionne :

    D'abord, il faut mettre en place un algorithme général et simple, par exemple le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Étape 1 : Récupérer 3 entiers saisis par l'utilisateur.
    Étape 2 : Trier ces 3 entiers dans l'ordre croissant.
    Étape 3 : Afficher ces 3 entiers.
    Tu peux alors en déduire que ton code sera de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int main()
    {
    	// Étape 1 : Récupérer 3 entiers saisis par l'utilisateur.
    	// CODE A ÉCRIRE.
     
    	// Étape 2 : Trier ces 3 entiers dans l'ordre croissant.
    	// CODE A ÉCRIRE.
     
    	// Étape 3 : Afficher ces 3 entiers.
    	// CODE A ÉCRIRE.
     
    	return 0;
    }
    Ensuite, il faut remplacer les commentaires // CODE A ÉCRIRE. par du vrai code.
    Les étapes 1 et 3, tu sais les traduire directement en code. Donc tu peux compléter le code existant, ce qui donne :
    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
    #include <stdio.h> // On en a besoin pour pouvoir utiliser printf et scanf.
     
    int main()
    {
    	// Étape 1 : Récupérer 3 entiers saisis par l'utilisateur.
    	int a = 0, b = 0, c = 0;
    	printf("Veuillez saisir trois nombres entiers : ");
    	scanf("%d %d %d", &a, &b, &c);
     
    	// Étape 2 : Trier ces 3 entiers dans l'ordre croissant.
    	// CODE A ÉCRIRE.
     
    	// Étape 3 : Afficher ces 3 entiers.
    	printf("Voici vos nombres dans l'ordre croissant : %d %d %d\n", a, b, c);
     
    	return 0;
    }
    L'étape 2, tu ne sais pas encore la traduire en code directement, donc il faut réfléchir et essayer de la décomposer en sous-étapes décrites en français.

    Il existe plusieurs moyens de trier 3 entiers. En voici un, qui correspond au tri à bulles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Si a est plus grand que b
        Échanger a et b.
    FinSi
    Si b est plus grand que c
        Échanger b et c.
    FinSi
    Si a est plus grand que b
        Échanger a et b.
    FinSi
    "Si a est plus grand que b", tu sais le traduire directement en code.
    Complétons davantage le code :
    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
    #include <stdio.h> // On en a besoin pour pouvoir utiliser printf et scanf.
     
    int main()
    {
    	// Étape 1 : Récupérer 3 entiers saisis par l'utilisateur.
    	int a = 0, b = 0, c = 0;
    	printf("Veuillez saisir trois nombres entiers : ");
    	scanf("%d %d %d", &a, &b, &c);
     
    	// Étape 2 : Trier ces 3 entiers dans l'ordre croissant.
    	if(a > b) {
    		// Échanger a et b.
    		// CODE A ÉCRIRE.
    	}
    	if(b > c) {
    		// Échanger b et c.
    		// CODE A ÉCRIRE.
    	}
    	if(a > b) {
    		// Échanger a et b.
    		// CODE A ÉCRIRE.
    	}
     
    	// Étape 3 : Afficher ces 3 entiers.
    	printf("Voici vos nombres dans l'ordre croissant : %d %d %d\n", a, b, c);
     
    	return 0;
    }
    A présent, tout ce qu'il reste à faire, c'est remplacer les commentaires // CODE A ÉCRIRE. par du code qui échange les deux entiers en question. Remarque importante : Il faut que ce soit du code que tu comprennes.

    Le code final est 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include <stdio.h> // On en a besoin pour pouvoir utiliser printf et scanf.
     
    int main()
    {
    	// Étape 1 : Récupérer 3 entiers saisis par l'utilisateur.
    	int a = 0, b = 0, c = 0;
    	printf("Veuillez saisir trois nombres entiers : ");
    	scanf("%d %d %d", &a, &b, &c);
     
    	// Étape 2 : Trier ces 3 entiers dans l'ordre croissant.
    	if(a > b) {
    		// Échanger a et b.
    		int tmp = a;
    		a = b;
    		b = tmp;
    	}
    	if(b > c) {
    		// Échanger b et c.
    		int tmp = b;
    		b = c;
    		c = tmp;
    	}
    	if(a > b) {
    		// Échanger a et b.
    		int tmp = a;
    		a = b;
    		b = tmp;
    	}
     
    	// Étape 3 : Afficher ces 3 entiers.
    	printf("Voici vos nombres dans l'ordre croissant : %d %d %d\n", a, b, c);
     
    	return 0;
    }
    A présent, si tu relis mon poste depuis le début, tu constateras que je suis parti d'un algorithme très général et très simple (les 3 étapes). Ensuite, petit à petit, j'ai décomposé des étapes en sous-étapes jusqu'à ce que l'on puisse traduire directement en code.
    C'est comme ça qu'on écrit un programme qui marche. Ce n'est pas en concaténant au hasard des bouts de code récupérés à droite et à gauche, surtout s'il s'agit de bouts de code que l'on ne comprend pas.

    Ensuite, plus tard, quand tu maîtriseras les pointeurs et les fonctions, au lieu d'écrire plusieurs fois le même code comme je viens de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Échanger a et b.
    int tmp = a;
    a = b;
    b = tmp;
    tu pourras définir une fonction void echanger_entiers(int * premier, int * deuxieme) et l'appeler directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echanger_entiers(&a, &b);
    Ensuite, encore plus tard, quand tu auras des connaissances encore plus poussées en C, tu pourras écrire un code comme celui de sambia39 dans la première page de ce fil.

  8. #88
    Invité
    Invité(e)
    Par défaut
    Ok j ai compris la méthode car j ai loupé les cours d algorythmie de la première année.
    Maintenant je ne perds pas espoir mais qu' en sais tu que je n ai pas compris en reprenant les bouts de code ??? Car au final tu n es pas le premier a me parler d echanger des entier et j ai recu un tres bon exemple de svear et de ternel. J admire très sérieusement ton poste, je pense serieusent qu il est très utile à mon apprentissage mais vu que je pense soit reprendre l algorithme en septembre soit l oublié pour toujours....ce qui ne serait pas nécessairement un bien. Merci pour la remarque

+ Répondre à la discussion
Cette discussion est résolue.
Page 5 sur 5 PremièrePremière 12345

Discussions similaires

  1. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 16h38
  2. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 20h01
  3. [Kylix] besoin d'aide pour installer kylix3
    Par Sph@x dans le forum EDI
    Réponses: 3
    Dernier message: 11/02/2004, 14h53
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 11h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 18h05

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