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 :

Problème Algo et langage C


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 44
    Points : 25
    Points
    25
    Par défaut Problème Algo et langage C
    Bonjour,

    Donc j'ai un exercice d'algo, et je suis assez bidon dans ce domaine..

    Soient 2 entiers n1 et n2. On souhaite calculer la somme des nombres pairs compris entre n1 et n2, sans n1 et n2.

    Exemple : n1=5 et n2=8
    somme des nombres pairs = 6

    1/ Donner l'algorithme et le programme C permettant de calculer cette somme
    2/ Modifier votre solution pour que ce programme calcule également la moyenne de ces nombres pairs.



    Avec mon niveau très bas en algorithme, j'ai essayé de faire ça

    variables :
    n1 de type nombre
    n2 de type nombre
    N de type nombre

    Debut :
    Lire n1
    Lire n2
    Lire n1<N<n2
    TANT QUE n1<N<n2,
    Faire N+(N+2)

    AFFICHIER RESULTAT
    FIN

    JE SAIS C'EST BIDON, MAIS JE SAIS PAS FAIRE AUTREMENT

    Pouvez vous au moins me donner le bon algorithme, ensuite je vais essayer de faire le programme en C.

    Merci..

  2. #2
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Bonjour,

    comme souvent l'algorithmique c'est pas de la magie, ce n'est que la description de ce que toi même tu fais en utilisant une feuille de papier et un crayon.
    Si tu me demandes de calculer la somme des nombres pairs compris entre deux bornes n1 et n2, bornes exclues voilà ce que je fais :
    • sur un coin de la feuille je note 0, ce coin va contenir la somme des nombres pairs que je vais parcourir (appelons ce coin S)
    • j'écris n1 et n2 dans un autre coin
    • ensuite je me mets au boulot : je commence par écrire le nombre suivant n1 dans un coin que j'appelle i
    • tant que i est strictement plus petit que n2 je vais faire :
      si i est pair alors j'ajoute i au nombre écrit dans le coin S
      j'ajoute 1 à i
    • ici on a dépassé ou atteint n2 -> le résultat attendu se trouve écrit dans le coin S


    Toujours essayer de résoudre le problème à la main, faire des tests à la main puis transcrire tout ce que tu as fait dans un langage plus «formel»/algorithmique. Seulement après avoir fait tout ça tu passes au codage en C par exemple.
    Les tests sont importants ... que se passe-t-il par exemple si n2 est plus petit que n1 ... ou s'ils sont égaux ... etc ....

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Merci de ta réponse kwariz.
    Donc à l'aide de tes explications et d'un modèle j'ai pu essayé de faire quelques choses, bien que j'ai besoin de sèrieuses corrections dans mon algorithme car il manque des étapes

    Variables
    entier = i ( peut être faut il ajouter S ?? )
    Constantes : n1 et n2
    DEBUT
    i > n1
    TANT QUE i < n2
    afficher i
    i <= i+1 ( je ne suis pas sur pour les signes )
    Si i Nb paire ( je ne sais pas comment exprimer sa avec une écriture mathématique )
    Alors faire
    i = i + ... ( S doit intervenir, mais je ne sais pas comment le rentrer dans l'algo )
    FIN TANT QUE
    FIN

    C'est tout ce que j'ai pu trouver pour le moment
    Merci

  4. #4
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Le plus dur est d'arriver à décrire en français normal ce qui doit être fait. Ça c'est la partie
    • sur un coin de la feuille je note 0, ce coin va contenir la somme des nombres pairs que je vais parcourir (appelons ce coin S)
    • j'écris n1 et n2 dans un autre coin et sont déjà donnés au départ
    • ensuite je me mets au boulot : je commence par écrire le nombre suivant n1 dans un coin que j'appelle i
    • tant que i est strictement plus petit que n2 je vais faire :
      si i est pair alors j'ajoute i au nombre écrit dans le coin S
      j'ajoute 1 à i
    • ici on a dépassé ou atteint n2 -> le résultat attendu se trouve écrit dans le coin S


    J'ai souligné les variables dont tu vas avoir besoin ainsi que les paramètres (vois ça comme des variables que l'on te donne au départ). Cela permet de commencer à écrire l'algorithme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fonction SommePairs( n1,n2 : entier ) : entier
    Variables
      i : entier
      S : entier
    Ensuite en lisant les instructions que j'ai dégagées, on voit qu'on doit initialiser i à l'entier qui suit n1 et S à 0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Début
      i ← n1+1
      S ← 0
    On arrive ensuite à une boucle tant que. Mathématiquement un entier est pair si le reste de sa division entière par 2 vaut 0, en général les langages fournissent l'opérateur modulo (% en C). Par exemple 17 % 2 = 1 car 17=2*8+1 ... Je vais noter cet opérateur comme en c :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      tant que i < n2 faire
        si i % 2 = 0 alors
          S ← S + i
        fin si
        i ← i + 1
      fin tant que
    À l'issue de la boucle, la variable S contient le résultat que l'on cherche. Pour communiquer ce résultat on renvoie à l'appelant cette valeur, puis c'est tout :
    C'est une version possible qui peut évidemment s'améliorer (par exemple pourquoi passer tous les entiers en revue alors que parcourir seulement les entiers pairs serait plus rapide = optimisation ... voire même essaye de trouver une formule close qui ne nécessiterait pas de boucle du tout = changement d'approche ...).

    Construire un algorithme suit toujours un peu le même chemin : comprendre le problème (en l'écrivant autrement, en faisant des dessins, ...), le réécrire en français (en commençant à y mettre des touches d'algo ... repérer les variables, les boucles, les structures de donnée ...), écrire l'algo en pseudo code (c'est un peu plus formalisé et facilitera la transcription en code) et finalement le pissage du code.
    Un phase importante est de toujours vérifier qu'on n'écrit pas de bêtises (faire des tests en imaginant certains cas limites comme que se passe-t-il si n2<n1 ou si n1=n2 ?).

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    Merci encore de ta réponse, très complète d'ailleurs.

    Je comprend mieux le principe de l'algorithmique maintenant, bien qu'il doit en exister des beaucoup plus complexes, pour celui si ça jouait beaucoup sur les changements de variables et il faut être habitué à les manier.

    Maintenant je vais essayé de le coder en langage C, et je te fais par de mon travail

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    J'ai essayé de commencer le programme en C, mais à partir de la boucle " tant que " je n'arrive pas a intégrer le reste de l'algo...

    # include <stdio.h>
    # include <stdlib.h>

    main( )
    {

    int i, S

    float n1, n2

    S=0
    i = n1+1

    printf ("\n saisissez le premier nombre : ")
    scanf ("%d, &i)

    tant que.... ( je ne sais pas coder a partir de là... )

  7. #7
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Citation Envoyé par naspy Voir le message
    J'ai essayé de commencer le programme en C, mais à partir de la boucle " tant que " je n'arrive pas a intégrer le reste de l'algo...

    # include <stdio.h>
    # include <stdlib.h>

    main( )
    {

    int i, S

    float n1, n2

    S=0
    i = n1+1

    printf ("\n saisissez le premier nombre : ")
    scanf ("%d, &i)

    tant que.... ( je ne sais pas coder a partir de là... )
    Quand tu postes du code il faut impérativement utiliser les balises code ou sélectionner ton texte et cliquer sur le bouton #, sinon c'est illisible.
    Ne jamais oublier d'utiliser int main() qui est le prototype de main.
    Ensuite, pourquoi déclarer n1 et n2 en float (réels) ?
    Il faut demander les valeurs des bornes avant de les utiliser, et ce sont les bornes dont tu vas demander les valeurs, par ta variable qui va parcourir les entiers ...
    Quant à traduire une boucle tant que en c ... il faut juste revoir un peu tes cours, tu devrais y trouver toutes les structures dont tu auras besoin comme while, if, ...

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    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
    # include <stdio.h>
    # include <stdlib.h>
     
    int main( )
    {
    int n1, n2
    float i, S
    S=0
    i = n1+1
     
    printf ("\n saisissez le premier nombre : ")
    scanf ("%d, &n1)
    printf ("\n saisissez le second nombre : ")
    scanf ("%d, &n2)
    while (i<n2)
    {
    printf("\n i=i+1)
    i++
    }
    if (i%2=0)
    {
    printf("\n S=S+i)
     
    return 0

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

Discussions similaires

  1. Besoin d'aide pour passage d'un algo au langage JAVA
    Par Spinoza23 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 16/02/2007, 15h33
  2. [Tableaux] Problème algo récursif
    Par Invité dans le forum Langage
    Réponses: 38
    Dernier message: 03/10/2006, 15h49
  3. problème algo
    Par petitgato dans le forum C
    Réponses: 1
    Dernier message: 17/03/2006, 12h32
  4. Problème algo de parcour de graphe
    Par goblin dans le forum Langage
    Réponses: 1
    Dernier message: 11/12/2005, 15h04

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