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] besoin d'aide pour réaliser un algorithme


Sujet :

Algorithmes et structures de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    546
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 546
    Points : 75
    Points
    75
    Par défaut [AIDE] besoin d'aide pour réaliser un algorithme
    Bonjour à tous,
    je suis en BTS IG, et j'aurai besoin de votre aide pour réaliser l'algorithme suivant : ficher PDF

    J'ai du mal a comprendre les constantes, et le fonctionnement des tableaux.
    Merci bcppour votre aide

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Il y a 2 tableaux :
    TEmp est un tableau contenant MaxEmp employés
    La structure d'un employé est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Type Employe : structure
    Num_Emp : Chaine
    NomEmp : Chaine
    Nb_Enfants : Entier
    Fin
    Et la valeur de MaxEmp est 100, c'est à dire qu'au maximum 100 employés sont gérés.

    TEnfEmp est un tableau contenant MaxEnfEmp d'enfants d'employés
    La structure d'un enfant d'employé est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Type EnfEmploye : structure
    numEmp:Chaine
    Prenom:Chaine
    Age:Entier
    Fin
    Et la valeur de MaxEnfEmp est 1000, c'est à dire qu'au maximum 1000 enfants d'employés sont gérés.

    Ces 2 tableaux sont indépendants donc il faut établir un lien entre les 2 tableaux afin de pouvoir :
    - trouver les enfants d'un employé particulier
    - trouver l'employé à qui appartient un enfant particulier
    - eventuellement faire d'autre recherches
    Dans une base de données, on parlera de "clé" pour lier ces 2 tableaux. Dans ce cas particulier, la clé est le champs numEmp que l'on retrouve à la fois dans la structure EnfEmploye et aussi dans la structure Employe. A ce propos, le nom du champs n'est pas tout à fait le même (Num_Emp et numEmp), donc j'espère que je ne me trompe pas dans mes suppositions.

    A partir de là, pour répondre à la question du cours, il suffit de parcourir la table des enfants d'employés, regarder si le numero d'employé de cet enfant est égal au numéro d'employé recherché, si oui, on regarde si l'age de l'enfant est inférieur à 18 ans et si oui encore, on compte cet enfant dans la liste des cadeaux à faire. Si le numéro d'employé n'est pas trouvé dans la liste des enfants, on affiche un message d'erreur.

    A mon avis maintenant, je pense que c'est un exercice à tiroir et qu'il y aura d'autres question avec ce contexte car la table des employés n'est pas du tout utilisée (pour l'instant)

  3. #3
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    Citation Envoyé par ram_0000 Voir le message
    A partir de là, pour répondre à la question du cours, il suffit de parcourir la table des enfants d'employés, regarder si le numero d'employé de cet enfant est égal au numéro d'employé recherché, si oui, on regarde si l'age de l'enfant est inférieur à 18 ans et si oui encore, on compte cet enfant dans la liste des cadeaux à faire. Si le numéro d'employé n'est pas trouvé dans la liste des enfants, on affiche un message d'erreur.
    Je suis presque entièrement d'accord avec ram_0000.
    D'après ce que je lis, il faut saisir le numéro de l'employé au clavier, donc il est préférable de parcourir en premier le tableau des employés afin de savoir s'il existe.
    Ensuite, TANT QUE tu n'as pas trouver tous les enfants de l'employé, tu continues à chercher dans la liste des enfants.
    Le faire dans cet ordre, va te permettre de ne pas parcourir toutes la listes des employés et des enfants, mais juste ce qui est nécessaire.

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    D'après ce que je lis, il faut saisir le numéro de l'employé au clavier, donc il est préférable de parcourir en premier le tableau des employés afin de savoir s'il existe.
    Ensuite, TANT QUE tu n'as pas trouver tous les enfants de l'employé, tu continues à chercher dans la liste des enfants.
    Le faire dans cet ordre, va te permettre de ne pas parcourir toutes la listes des employés et des enfants, mais juste ce qui est nécessaire.
    Je suis d'accord, je n'avais pas vu qu'il y avait le champs Nb_Enfants dans la structure employés.

    Par contre ce champs me fait dire qu'il y a risque d'incohérence dans les tableaux. En effet, pour ajouter un enfant à un employé (naissance) ou supprimer un enfant à un employé (enfant décédé ou majeur), il faut modifier la table TEnfEmp (c'est normal) mais aussi la table TEmp afin de mettre à jour le champs Nb_Enfants. Je trouve que c'est dommage.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    546
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 546
    Points : 75
    Points
    75
    Par défaut
    Merci pour vos réponses.
    Cependant pourriez-vous me donner un debut de l'algo pour voir comment commencer ?

  6. #6
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    on t'a donné la trame de l'algorithme dans nos phrases.
    Le but de l'algorithmique est de traduire en pseudocode tes pensées, ici nos phrases, par exemple :
    -> On cherche dans le tableau => parcourir le tableau => pour i := 1 à TailleTableau.

    Marque un début de pseudocode et on le corrigera ensemble en t'orientant.
    Ce sera beaucoup plus pédagogique.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    546
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 546
    Points : 75
    Points
    75
    Par défaut
    Salut,
    voici un debut de ce que j'ai fait. Ce n'est pas du tout complet, mais c'est pour vous doner un debut. Je dois rendre la taff demain...
    Pourriez-vous md'aider ? merci

    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
    Algo       cadeaux
    var TEmp : TABLEAU[1..MaxEmp] de Employe
         TEnf : TABLEAU[1..MaxEnfEmp] de EnfEmploye
    i, j, NbreKdos, NumSalarie, NbreEnfSalarie : ENTIER
     
    DEBUT
    AFFICHER("Veuillez saisir le numéro du salarié");
    SAISIR(NumSalarie);
    i:=0;
    j:=0;
    NbreEnfSalarie:=0;
    TANT QUE (TEmp[i].NumEmp<>NumSalarie ET i<100) FAIRE
    i:=i+1;
    SI(TEmp[i].NumEmp=NumSalarie ET TEmp[i].Nb_enfants<>0 ET TEnfEmp[j].Age<18) ALORS
    NbreEnfSalarie:=NbreEnfSalarie+TEmp[i].Nb_enfants;
    AFFICHER(NbreEnfSalarie);
    SINON
    AFFICHER("ce salarié n'a pas d'enfant");
    FIN SI
    FIN TANT QUE
    AFFICHER("ce salarié n'existe pas");
    FIN
    MERCIIIIIIIIIIIII

  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 081
    Points
    16 081
    Par défaut
    avec un peu d'indentation c'est plus lisible... ca permet meme de voir des fautes:

    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
     
    Algo       cadeaux
    var TEmp : TABLEAU[1..MaxEmp] de Employe
         TEnf : TABLEAU[1..MaxEnfEmp] de EnfEmploye
    i, j, NbreKdos, NumSalarie, NbreEnfSalarie : ENTIER
     
    DEBUT
    	AFFICHER("Veuillez saisir le numéro du salarié");
    	SAISIR(NumSalarie);
    	i:=0;
    	j:=0;
    	NbreEnfSalarie:=0;
    	TANT QUE (TEmp[i].NumEmp<>NumSalarie ET i<100) FAIRE
    		i:=i+1;
    		SI(TEmp[i].NumEmp=NumSalarie ET TEmp[i].Nb_enfants<>0 ET TEnfEmp[j].Age<18) ALORS
    			NbreEnfSalarie:=NbreEnfSalarie+TEmp[i].Nb_enfants;
    			AFFICHER(NbreEnfSalarie);
    		SINON
    			AFFICHER("ce salarié n'a pas d'enfant");
    		FIN SI
    	FIN TANT QUE
    	AFFICHER("ce salarié n'existe pas");
    FIN

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    546
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 546
    Points : 75
    Points
    75
    Par défaut
    Et donc vous en pensez quoi pour le moment ?

  10. #10
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par quaresma Voir le message
    Et donc vous en pensez quoi pour le moment ?
    1/ i et j, c'est pas très parlant comme nom de variable. IndexEmploye et IndexEnfant c'est peut être mieux

    2/ Incrementation de la variable i mal placé (mettre en fin de boucle et pas en début de boucle)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    TANT QUE (TEmp[i].NumEmp<>NumSalarie ET i<100) FAIRE
       SI(TEmp[i].NumEmp=NumSalarie ET TEmp[i].Nb_enfants<>0 ET TEnfEmp[j].Age<18)
       ALORS
          NbreEnfSalarie:=NbreEnfSalarie+TEmp[i].Nb_enfants;
          AFFICHER(NbreEnfSalarie);
       SINON
          AFFICHER("ce salarié n'a pas d'enfant");
       FIN SI
       i:=i+1;
    FIN TANT QUE
    3/ Le traitement dans le bloc SINON n'est pas correct (ou du moins je ne pense pas que cela soit ce que tu veuilles) car:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
       SI(TEmp[i].NumEmp=NumSalarie ET TEmp[i].Nb_enfants<>0 ET TEnfEmp[j].Age<18)
       ALORS
          // ici, le numero de salarie est celui recherché ET
          // ce salarié a des enfants ET
          // ces enfants sont mineurs
       SINON
          // ici, le numero de salarie n'est pas celui recherché OU
          // ce salarie n'a pas d'enfants OU
          // ces enfants (ou 1 de ces enfants, je ne suis pas sûr) sont majeurs
       FINSI
    4/ La variable 'j' est intialisée à 0 mais jamais modifiée, c'est l'index du tableaux des enfants (du moins c'est ce que je comprends) donc on utilise toujours le même enfant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SI(TEmp[i].NumEmp=NumSalarie ET
        TEmp[i].Nb_enfants<>0 ET
        TEnfEmp[j].Age<18)    // ici 'j' vaut toujours 0
    Voilà pour un début mais continue, tu es sur la bonne voie

  11. #11
    Membre habitué Avatar de zintelix3d
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Points : 137
    Points
    137
    Par défaut
    Slt, le meilleur moyen de verifier ton algo et de le dérouler soit même t'aurrais la su la grosse erreur que t'a fait (à quel moment tu incrémente ton j ?!!), (a tu penser à parcourir la list des enfants non!!!)
    voilà pour toi

    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
     
    Algo       cadeaux
    const
         MaxEmp=100;
         MaxEnfEmp=1000;
    var TEmp : TABLEAU[1..MaxEmp] de Employe
         TEnf : TABLEAU[1..MaxEnfEmp] de EnfEmploye
    i, j, NbreKdos, NumSalarie, NbreEnfSalarie : ENTIER
     
    DEBUT
    	AFFICHER("Veuillez saisir le numéro du salarié");
    	SAISIR(NumSalarie);
    	i:=1;
    	NbreEnfSalarie:=0;
    	TANT QUE (TEmp[i].NumEmp<>NumSalarie ET i<=MaxEmp) FAIRE
    		i:=i+1;
    	FIN TANT QUE
     
    	SI(i>MaxEmp)Alors 
                    AFFICHER("ce salarié n'existe pas");
            SINON
                    i=1;
    	        TANT QUE ( i<=MaxEnfEmp) FAIRE
                       SI(TEnf[i].numEmp=NumSalarie ET TEnf[i].Age<18)Alors
    		        NbreEnfSalarie:=NbreEnfSalarie+1;
                        FIN SI
                        i:=i+1;
    	        FIN TANT QUE                
                   AFFICHER(NbreEnfSalarie);
            FIN SI
     
    FIN

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    546
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 546
    Points : 75
    Points
    75
    Par défaut
    1/ i et j, c'est pas très parlant comme nom de variable. IndexEmploye et IndexEnfant c'est peut être mieux
    En effet c'est plus parlant.

    2/ Incrementation de la variable i mal placé (mettre en fin de boucle et pas en début de boucle)
    non, je pense que mon incrementation est bien placée.
    Il faut bien ajouté 1 à la variable i afin de parcourir le second élément du tableau et ainsi de suite jusqu'a trouver ou non l'employé

    3/ Le traitement dans le bloc SINON n'est pas correct (ou du moins je ne pense pas que cela soit ce que tu veuilles) car:
    SINON
    // ici, le numero de salarie n'est pas celui recherché OU
    // ce salarie n'a pas d'enfants OU
    // ces enfants (ou 1 de ces enfants, je ne suis pas sûr) sont majeurs
    FINSI
    Pas besoin de mettre ces conditions, car tout est dit dans le 1er SI

    4/ La variable 'j' est intialisée à 0 mais jamais modifiée, c'est l'index du tableaux des enfants (du moins c'est ce que je comprends) donc on utilise toujours le même enfant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SI(TEmp[i].NumEmp=NumSalarie ET
        TEmp[i].Nb_enfants<>0 ET
        TEnfEmp[j].Age<18)    // ici 'j' vaut toujours 0
    Voilà pour un début mais continue, tu es sur la bonne voie
    En effet...

  13. #13
    Membre habitué Avatar de zintelix3d
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Points : 137
    Points
    137
    Par défaut
    Citation Envoyé par quaresma Voir le message
    En effet c'est plus parlant.
    ...
    En effet...
    Mon vieu la j vais te dir tes complètement à coté de la plaque

    Complètement à coté de la plaque!!!

    La variable 'j' est intialisée à 0 mais jamais modifiée, c'est l'index du tableaux des enfants (du moins c'est ce que je comprends) donc on utilise toujours le même enfant
    TEnf : TABLEAU[1..MaxEnfEmp] de EnfEmploye

    Regarde bien car TEnf(0) n'existe pas car TEnf va de [1..MaxEnfEmp]

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    546
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 546
    Points : 75
    Points
    75
    Par défaut
    voici mon algo :

    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
    Algo       cadeaux
    var TEmp : TABLEAU[1..MaxEmp] de Employe
        TEnf : TABLEAU[1..MaxEnfEmp] de EnfEmploye
        IndexEmploye, IndexEnfant, NbreKdos, NumSalarie, NbreEnfSalarie : ENTIER
     
    DEBUT
        AFFICHER("Veuillez saisir le numéro du salarié");
        //saisi du numéro du salarié//
    	SAISIR(NumSalarie);
        //initialisation des variables//
        IndexEmploye:=0;
    	IndexEnfant:=0;
    	NbreEnfSalarie:=0;
        Nom:=TEmp[IndexEmploye].NomEmp;
        //On parcourt le tableau des employés afin de voir si le numero saisi est présent//
    	TANT QUE (TEmp[IndexEmploye].NumEmp<>NumSalarie ET IndexEmploye<100) FAIRE
         IndexEmploye:=IndexEmploye+1;
            //Si le numero du salarié est présent dans le tableau on poursuit//
    		SI(TEmp[IndexEmploye].NumEmp=NumSalarie) ALORS
             IndexEmploye=IndexEnfant;
            FIN SI
            //si le salarié a des enfants de moins de 18 ans on incrémente//
            Si(TEmp[IndexEmploye].NumEmp=NumSalarie ET TEmp[IndexEmploye].Nb_enfants<>0 ET TEnfEmp[IndexEnfant].Age<18) ALORS
    		 NbreEnfSalarie:=NbreEnfSalarie+TEmp[IndexEmploye].Nb_enfants;
             NbreKdos:=NbreEnfSalarie;
             AFFICHER("Pour Mr ou Mme","",Nom,"","il faut","",NbreKdos,"","cadeaux");
    		SINON
             //Si le numero du salarié est présent dans le tableau et que celui-ci a des enfants, mais qu'ils ont plus de 18 ans on n'affiche un message pour l'indiquer//
            SI(TEmp[IndexEmploye].NumEmp=NumSalarie ET TEmp[IndexEmploye].Nb_enfants<>0 et TEnfEmp[IndexEnfant].Age>=18) ALORS
    			AFFICHER("ce salarié a un ou plusieurs enfant(s) mais ils ont plus de 18 ans");
            SINON
             //Si le numero du salarié est présent mais que celui-ci n'a pas d'enfant on n'affiche un message pour l'indiquer//
            SI(TEmp[IndexEmploye].NumEmp=NumSalarie ET TEmp[IndexEmploye].Nb_enfants=0) ALORS
    			AFFICHER("ce salarié n'a pas d'enfants");
             //Si le numero du salarié n'est pas dans le tableau, on n'affiche un message d'erreur//
    		FIN SI
            FIN SI
            FIN SI
        FIN TANT QUE
    	AFFICHER("ce salarié n'existe pas");
    FIN

  15. #15
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonsoir,

    puisque tu dois rendre ça aujourd'hui, on va aller un peu plus vite. Je te donne juste l'algorithme, à toi de rajouter les déclarations :

    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
    Algo cadeaux
    DEBUT
    	//saisi du numéro du salarié//
    	Saisir(NumSalarie);
     
    	//On parcourt le tableau des employés afin de voir si le numero saisi est présent//
    	IndexEmploye:=0;
    	Tant Que TEmp[IndexEmploye].NumEmp<>NumSalarie ET IndexEmploye<100 Faire
    		IndexEmploye:=IndexEmploye+1;
    	Fin Tant Que // On a le numero, inutile de continuer.
     
     
    	//Si le numéro du salarié N'est PAS présent dans le tableau on génère une erreur.
    	Si ( IndexEmploye >= 100) Alors
    		Générer une erreur.
    		Quitter le programme.
    	Fin Si
     
     
    	// Si on arrive là, c'est que l'on a trouvé l'employé.
    	NumEmp:=TEmp[IndexEmploye].NumEmp;
    	NbreEnfSalarie := TEmp[IndexEmploye].Nb_Enfants;
     
     
    	//Maintenant que l'on a le numéro de l'employé et son nombre d'enfant, on peut chercher dans la liste des enfants.
    	IndexEnfant:=0;
    	Tant que NbreEnfSalari > 0 Faire
    		Si TEnfEmp[IndexEnfant].NumEmp = NumEmp Alors
    			NbreEnfSalarie := NbreEnfSalarie - 1 ; // On a trouvé un enfant donc on décrémente le compteur.
    			Si TEnfEmp[IndexEnfant].Age < 18 Alors
    				NbCadeau := NbCadeau + 1 ; // L'enfant est mineur, donc on ajoute un cadeau.
    			Fin Si
    		Fin Si
    		IndexEnfant := IndexEnfant + 1 ;
    	Fin Tant Que
    Voilà, inutile de faire plus compliqué
    D'une manière générale, efforce toi de traduire en phrase simples ce que tu ferais si tu devais le faire à la main.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    546
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 546
    Points : 75
    Points
    75
    Par défaut
    Salut,
    merci pour ta reponse.
    Donc, ca donne ceci :

    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
    Algo         cadeaux
    var TEmp : TABLEAU[1..MaxEmp] de Employe
        TEnf : TABLEAU[1..MaxEnfEmp] de EnfEmploye
        NumEmp, IndexEmploye, IndexEnfant, NbCadeau, NumSalarie, NbreEnfSalarie : ENTIER
     
    DEBUT
        AFFICHER("Veuillez saisir le numéro du salarié");
    	//saisi du numéro du salarié//
    	Saisir(NumSalarie);
     
    	//On parcourt le tableau des employés afin de voir si le numero saisi est présent//
    	IndexEmploye:=0;
    	Tant Que TEmp[IndexEmploye].NumEmp<>NumSalarie ET IndexEmploye<100 Faire
    		IndexEmploye:=IndexEmploye+1;
    	Fin Tant Que // On a le numero, inutile de continuer.
     
     
    	//Si le numéro du salarié N'est PAS présent dans le tableau on génère une erreur.
    	Si ( IndexEmploye >= MaxEmp) Alors
    		AFFICHER("ce numéro de salarié n'existe pas");
    	Fin Si
     
     
    	// Si on arrive là, c'est que l'on a trouvé l'employé.
    	NumEmp:=TEmp[IndexEmploye].NumEmp;
    	NbreEnfSalarie := TEmp[IndexEmploye].Nb_Enfants;
     
     
    	//Maintenant que l'on a le numéro de l'employé et son nombre d'enfant, on peut chercher dans la liste des enfants.
    	IndexEnfant:=0;
    	Tant que NbreEnfSalarie > 0 Faire
    		Si TEnfEmp[IndexEnfant].NumEmp = NumEmp Alors
    			NbreEnfSalarie := NbreEnfSalarie - 1 ; // On a trouvé un enfant donc on décrémente le compteur.
    			Si TEnfEmp[IndexEnfant].Age < 18 Alors
    				NbCadeau := NbCadeau + 1 ; // L'enfant est mineur, donc on ajoute un cadeau.
    			Fin Si
    		Fin Si
    		IndexEnfant := IndexEnfant + 1 ;
    	Fin Tant Que
        AFFICHER("Il faut","",NbCadeau,"","cadeaux pour les salariés");
    FIN

  17. #17
    Membre habitué Avatar de zintelix3d
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Points : 137
    Points
    137
    Par défaut
    Je vous signale que c'est presque l'algorithme que j'ai donnée en haut, mais la vous avez une erreur très grave!!!

    S'il y a une incohérence dans ta base de donnée genre nombre d'enfant mal enregistrée chez un employé

    exemple:
    nbenfant=5

    et il n'y a que 4 enfant pour cette employé dans la liste t'aura une boucle infini
    Tanque nbenfant>0 faire t'aura toujour nbenfant>0

    Ajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tant que NbreEnfSalarie > 0  et  IndexEnfant<maxenfemp Faire

  18. #18
    Membre habitué Avatar de zintelix3d
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Points : 137
    Points
    137
    Par défaut
    J'oublie une autre erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IndexEmploye:=0;
    	Tant Que TEmp[IndexEmploye].NumEmp<>NumSalarie ET IndexEmploye<100 Faire
    TEmp[0].NumEmp n'existe pas t'aurra une erreur lors de l'execution:
    car
    TEmp : TABLEAU[1..MaxEmp] de Employe
    commence de 1 à MaxEmp

    Mais sa à la place

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IndexEmploye:=1;
    	Tant Que TEmp[IndexEmploye].NumEmp<>NumSalarie ET IndexEmploye<=100 Faire
    IndexEmploye:=IndexEmploye+1;
    Fin Tant Que

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    546
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 546
    Points : 75
    Points
    75
    Par défaut
    Voilou donc d'après-vous l'algo juste ? Comme ca je pourrai mettre la lention resolu

    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
     
    Algo         cadeaux
    var TEmp : TABLEAU[1..MaxEmp] de Employe
        TEnf : TABLEAU[1..MaxEnfEmp] de EnfEmploye
        NumEmp, IndexEmploye, IndexEnfant, NbCadeau, NumSalarie, NbreEnfSalarie : ENTIER
     
    DEBUT
        AFFICHER("Veuillez saisir le numéro du salarié");
    	//saisi du numéro du salarié//
    	Saisir(NumSalarie);
     
    	//On parcourt le tableau des employés afin de voir si le numero saisi est présent//
    	IndexEmploye:=1;
    	Tant Que TEmp[IndexEmploye].NumEmp<>NumSalarie ET IndexEmploye<100 Faire
    		IndexEmploye:=IndexEmploye+1;
    	Fin Tant Que // On a le numero, inutile de continuer.
     
     
    	//Si le numéro du salarié N'est PAS présent dans le tableau on génère une erreur.
    	Si ( IndexEmploye >= MaxEmp) Alors
    		AFFICHER("ce numéro de salarié n'existe pas");
    	Fin Si
     
     
    	// Si on arrive là, c'est que l'on a trouvé l'employé.
    	NumEmp:=TEmp[IndexEmploye].NumEmp;
    	NbreEnfSalarie := TEmp[IndexEmploye].Nb_Enfants;
     
     
    	//Maintenant que l'on a le numéro de l'employé et son nombre d'enfant, on peut chercher dans la liste des enfants.
    	IndexEnfant:=0;
    	Tant que NbreEnfSalarie > 0 Faire
    		Si TEnfEmp[IndexEnfant].NumEmp = NumEmp Alors
    			NbreEnfSalarie := NbreEnfSalarie - 1 ; // On a trouvé un enfant donc on décrémente le compteur.
    			Si TEnfEmp[IndexEnfant].Age < 18 Alors
    				NbCadeau := NbCadeau + 1 ; // L'enfant est mineur, donc on ajoute un cadeau.
    			Fin Si
    		Fin Si
    		IndexEnfant := IndexEnfant + 1 ;
    	Fin Tant Que
        AFFICHER("Il faut","",NbCadeau,"","cadeaux pour les salariés");
    FIN

  20. #20
    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
    voici quelques modifs que je ferai...

    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
    Algo cadeaux
    var TEmp : TABLEAU[1..MaxEmp] de Employe
        TEnf : TABLEAU[1..MaxEnfEmp] de EnfEmploye
        NumEmp, IndexEmploye, IndexEnfant, NbCadeau, NumSalarie, NbreEnfSalarie : ENTIER
    
    DEBUT
    	AFFICHER("Veuillez saisir le numéro du salarié");
    	
    	//saisi du numéro du salarié//
    	Saisir(NumSalarie);
    
    	//On parcourt le tableau des employés afin de voir si le numero saisi est présent//
    	IndexEmploye:=1;
    	Tant Que TEmp[IndexEmploye].NumEmp<>NumSalarie ET IndexEmploye<=MaxEmp Faire
    		IndexEmploye:=IndexEmploye+1;
    	Fin Tant Que // On a le numero, inutile de continuer.
    
    
    	//Si le numéro du salarié N'est PAS présent dans le tableau on génère une erreur.
    	Si ( IndexEmploye > MaxEmp) Alors
    		AFFICHER("ce numéro de salarié n'existe pas");
    		FIN
    	Fin Si
    
    
    	// Si on arrive là, c'est que l'on a trouvé l'employé.
    	NumEmp:=TEmp[IndexEmploye].NumEmp;
    	NbreEnfSalarie := TEmp[IndexEmploye].Nb_Enfants;
    	
    
    	//Maintenant que l'on a le numéro de l'employé et son nombre d'enfant, on peut chercher dans la liste des enfants.
    	IndexEnfant:=1;
    	Tant que NbreEnfSalarie > 0 ET IndexEnfant<=MaxEnfEmp  Faire
    		Si TEnfEmp[IndexEnfant].NumEmp = NumEmp Alors
    			NbreEnfSalarie := NbreEnfSalarie - 1 ; // On a trouvé un enfant donc on décrémente le compteur.
    			Si TEnfEmp[IndexEnfant].Age < 18 Alors
    				NbCadeau := NbCadeau + 1 ; // L'enfant est mineur, donc on ajoute un cadeau.
    			Fin Si
    		Fin Si
    		IndexEnfant := IndexEnfant + 1 ;
    	Fin Tant Que
    	
    	AFFICHER("Il faut","",NbCadeau,"","cadeaux pour les salariés");
    FIN

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Besoin d'aide, quel livre choisir pour mon mari ?
    Par Chatonronron dans le forum ASP.NET
    Réponses: 22
    Dernier message: 15/12/2009, 17h21
  2. Besoin d'aide avec une requete pour récupérer des hyperliens
    Par scaleo dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 21/12/2007, 12h56
  3. [SQL] Besoin d'aide sur les attributs pour une requete
    Par bobobobo01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/11/2006, 21h39
  4. besoin d'aide et de conseils pour un noob
    Par benouille69 dans le forum Flash
    Réponses: 1
    Dernier message: 27/10/2006, 13h06

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