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 :

Algorithme sur les imprimantes les plus sollicitées


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2011
    Messages : 14
    Par défaut Algorithme sur les imprimantes les plus sollicitées
    Bonjour à tous, je suis actuellement étudiant et c'est mon premier message.
    Je bloque vraiment pour la suite, si quelqu'un pourrait m'aider ça serait super ( pas forcement me pondre l'algo modifié mais me donner des pistes... je sais que c'est simple mais je débute vraiment en algo)
    Donc, je réalise un algorithme permettant de faire les statistiques d'un nombre d'imprimantes et du nombre de pages respectivement imprimées par celle ci.

    La ou je bloque, c'est que je voudrais maintenant pouvoir afficher le ou les imprimantes les plus sollicitées ( si elles ont le même nombre d'impressions) avec le nombre d'impression respectives juste après, du type:

    les imprimantes les plus sollicitées sont: imprimante1(200)
    imprimante9(200)

    Merci d'avance à ceux qui pourront me filer un coup de main!
    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:		Stat				//nom de l'algo 
    CONST		nbenreg = 100			//on supose que le fichier contient 100 lignes
    TYPE		UneImprimante = STRUCTURE
    			NomImprimante:	CHAINE[30]
    			CodeImprimante:	ENTIER
    			CodeUtilisateur:	ENTIER
    			date:			DATE
    			heure:			HEURE
    			nbPages:		ENTIER
    		Fin
    
    VAR		Timp: 	TABLEAU[nbenreg] DE UneImprimante	//on defini la structure du tableau
    		i:	ENTIER
    		nbpagesparImprimante: 	ENTIER
    		nomImprimanteCourante:	CHAINE[30]
    		nbpagestotal:			ENTIER		//Cumul des pages imprimées sur toutes les imprimantes
    
    DEBUT
    nbpagesparImprimante 		<--- 0
    nbpagestotal 		<--- 0
    i 		<--- 0					//on se positionne sur le 1er enregistrement
    
    TANTQUE ( i <= nbenreg ) FAIRE 
    nomImprimanteCourante <--- Timp[i].NomImprimante
    	
    	TANTQUE ( i <= nbenreg ET nomImprimanteCourante = Timp[i].NomImprimante ) 	FAIRE 
    	nbPagesParImprimante <--- nbPagesParImprimante + Timp[i].nbpages
    	i <--- i + 1
    	FIN TANTQUE
    
    nbPagesTotal <--- nbPagesTotal + nbPagesParImprimante
    Afficher ("Nb pages imprimées sur", nomImprimanteCourange, "=", nbpagesParImprimante)
    nbPagesParImprimante <--- 0
    
    FIN TANTQUE
    
    Afficher ("Le total de pages imprimées est:", nbpagestotal)
    
    
    FIN ALGO

  2. #2
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2011
    Messages : 14
    Par défaut MISE A JOUR - AIDE TJRS DEMANDEE :cry:
    J'ai un peu avancé donc je poste le code que j'ai fait, en rouge les modifications.( je suis toujours bloqué )

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    
    ALGO:		Stat				//nom de l'algo 
    CONST		nbenreg = 100			//on supose que le fichier contient 100 lignes
    		nbstat = 100 			// on suppose que au maximum il y a 100 imprimantes ( 1 par impression )
    TYPE		UneImprimante = STRUCTURE
    			NomImprimante:	CHAINE[30]
    			CodeImprimante:	ENTIER
    			CodeUtilisateur:	ENTIER
    			date:			DATE
    			heure:			HEURE
    			nbPages:		ENTIER
    		Fin
    TYPE		StatImp = STRUCTURE
    			nomImp:		CHAINE[30]
    			nbImp:			ENTIER
    			RangImp:		ENTIER
    		Fin
    
    
    VAR		Timp: 	TABLEAU[nbenreg] DE UneImprimante	//on defini la structure du tableau
    		i:	ENTIER
    		Stats: TABLEAU[nbstat] DE StatImp
    		j:	ENTIER
    		nbpagesparImprimante: 	ENTIER
    		nomImprimanteCourante:	CHAINE[30]
    		nbpagestotal:			ENTIER		//Cumul des pages imprimées sur toutes les imprimantes
    
    DEBUT
    nbpagesparImprimante 		<--- 0
    nbpagestotal 		<--- 0
    i 		<--- 1					//on se positionne sur le 1er enregistrement
    j		<--- 1
    TANTQUE ( i <= nbenreg ) FAIRE 
    nomImprimanteCourante <--- Timp[i].NomImprimante
    	
    	TANTQUE ( i <= nbenreg ET nomImprimanteCourante = Timp[i].NomImprimante ) 	FAIRE 
    	nbPagesParImprimante <--- nbPagesParImprimante + Timp[i].nbpages
    	i <--- i + 1
    	FIN TANTQUE
    // On sort de la boucle interne car l'imprimante a changé ou on a dépassé nbenreg.
    // On affiche le nombre de pages imprimées sur l'imprimante courante et on met à jour le nombre de pages totales et réinitialise le nombre de page par imprimante
    
    Stats[j].nomImp <--- nomImprimanteCourante
    Stats[j].nbImp <--- nbPagesParImprimante
    
    Si Stats[j].nbImp >= Stats[j-1].nbImp	ALORS	Stats[j].rangImp <--- 1 
    					 	Stats[J-1].rangImp <--- 0
    					SINON	Stats[J].rangImp <--- 0
    FinSi
    
    j <--- j+1
    
    nbPagesTotal <--- nbPagesTotal + nbPagesParImprimante
    Afficher ("Nb pages imprimées sur", nomImprimanteCourante, "=", nbpagesParImprimante)
    nbPagesParImprimante <--- 0
    
    FIN TANTQUE
    
    Afficher ("Le total de pages imprimées est:", nbpagestotal)
    Afficher ( "la / les imprimantes les plus utilisées sont:",)  	// on affichera ici toutes les imprimantes pour lesquelles Stats[J].rangImp = 1  mais comment ?
    
    FIN ALGO

  3. #3
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2011
    Messages : 14
    Par défaut MISE A JOUR2 - AIDE TJRS DEMANDEE :cry:
    J'ai rajouté le bout de code suivant pour remplir la 1ère ligne du tableau Stats.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DEBUT
    nbpagesparImprimante 		<--- 0
    nbpagestotal 		<--- 0
    i 		<--- 1					//on se positionne sur le 1er enregistrement
    j 		<--- 1
    Stats[j].nomImp	<--- vide
    Stats[j].nbImp		<--- 0
    Stats[j].RangImp	<--- 0
    j		<--- 2

  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 : 52
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Tu m'as l'air d'avoir un problème de conception plus qu'un problème d'algorithmique au sens propre du terme.

    Comme tu t'en es aperçu, tu dois créer une structure qui modélise une imprimante (nom, nombre de page, ..), puis créer autant d'instance de cette structure qu'il y a d'imprimantes. Au final, il faut extraire les imprimantes qui ont imprimés le plus grand nombre de page.

    1. Définir les structures
       1.1 Définir la structure Imprimante
       1.2 Définir la liste/tableau  d'imprimantes
    
    
    2. Parcourir les enregistrements
       2.1 Identifier l'mprimante
       2.2 Trouver ou Creer l'instance correspondante dans la liste/tableau
       2.3 mettre à jour les champs de l'instance
       
       
    3. Extraire les imprimantes les plus sollicitées
       3.1 Trier la liste/tableau par nmb de page décroissant
       3.2 Parcourir la liste/tableau et afficher les informations
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2011
    Messages : 14
    Par défaut
    Merci de la réponse.

    Je vais donc ajouter un tableau que je vais nommer "stats" qui contiendra le nom de l'imprimante et le nombre d'impression qu'elle a réalisée. Ce tableau dependra de la nouvelle structure que j'ai crée aussi, nommée "StatImp"

    Si je suit tes indications je dois donc faire un tri décroissant dans les valeurs du tableau mais ensuite comment afficher l'imprimante qui possède la plus grande valeur d'impressions réalisées?? ( surtout que si 2 imprimantes ont imprimées le meme nombre il faudra les afficher les 2)

    Bref comme je débute (et que je suis surement pas une lumière) j'ai vraiment pas réussi a réaliser le tri du tableau et j'ai pondu ce code désormais:

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    ALGO:		Stat				//nom de l'algo 
    CONST		nbenreg = 100			//on suppose que le fichier contient 100 lignes
    		TYPE		UneImprimante = STRUCTURE
    			NomImprimante:	CHAINE[30]
    			CodeImprimante:	ENTIER
    			CodeUtilisateur:	ENTIER
    			date:			DATE
    			heure:			HEURE
    			nbPages:		ENTIER
    		Fin
    
    		TYPE		StatImp = STRUCTURE
    			NomImp:	CHAINE[30]
    			nbImp:		ENTIER
    			rangImp:	ENTIER
    			
    		Fin
    
    VAR		Timp: 	TABLEAU[nbenreg] DE UneImprimante	//on defini la structure du tableau
    i:	ENTIER
    Stats :	TABLEAU[nbenreg] DE StatImp
    		j :	ENTIER
    		nbpagesparImprimante: 	ENTIER
    		nomImprimanteCourante:	CHAINE[30]
    		nbpagestotal:			ENTIER		//Cumul des pages imprimées sur toutes les imprimantes
    
    DEBUT
    nbpagesparImprimante 		<--- 0
    nbpagestotal 		<--- 0
    i 		<--- 1          //on se positionne sur le 1er enregistrement
    j		<--- 1		
    Stats[j].nomImp		<--- Vide
    Stats[j].nbImp 		<--- 0
    Stats[j].rangImp 		<--- 0
    
    J 		<--- 2
    
    TANTQUE ( i <= nbenreg ) FAIRE 
    nomImprimanteCourante <--- Timp[i].NomImprimante
    	
    	TANTQUE ( i <= nbenreg ET nomImprimanteCourante = Timp[i].NomImprimante ) 	FAIRE 
    	nbPagesParImprimante <--- nbPagesParImprimante + Timp[i].nbpages
    	i <--- i + 1
    	FIN TANTQUE
    // On sort de la boucle interne car l'imprimante a changé ou on a dépassé nbenreg.
    // On affiche le nombre de pages imprimées sur l'imprimante courante et on met à jour le nombre de pages totales et réinitialise le nombre de page par imprimante
    
    Stats[j].nomImp <--- NomImprimanteCourante
    Stats[j].nbImp <--- nbPagesParImprimante
    
    j<--- j+1
    
    nbPagesTotal <--- nbPagesTotal + nbPagesParImprimante
    Afficher ("Nb pages imprimées sur", nomImprimanteCourante, "=", nbpagesParImprimante)
    nbPagesParImprimante <--- 0
    
    FIN TANTQUE
    
    Afficher ("Le total de pages imprimées est:", nbpagestotal)
    
    POUR j <--- 1 A nbenreg PAS 1 FAIRE
    
    Si 	Stats[j].nbimp < Stats[j+1].nbimp
    	
    ALORS		stats[j].rangimp <--- 0				//opération de comparaison
    			Stats[j+1].rangimp <--- 1			// et attribution du rang
    	SINON								
    Si	Stats[j].nbimp = Stats[j+1].nbimp
    	Stats[j].rangImp <--- 1
    	Stats[j+1].rangImp <--- 1
    SINON
    	Stats[j].rangImp <--- 1
    	Stats[J+1].rangImp <--- 0
    J <--- J+1 					
    		FIN Si
    FINSi	
    
    Afficher ("Les imprimantes les plus utilisées sont")
    
    POUR J <--- 1 A nbenreg PAS 1 FAIRE
    	SI Stats[j].rangImp = 1 FAIRE afficher(" : ", stats[j].nomImp, "(", stats[j].nbImp, ")") 
    	FINSi
    FINPOUR
    
    FIN ALGO
    Je sait qu'il n'est pas correct mais je vois vraiment pas comment faire....

  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 : 52
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Si je suit tes indications je dois donc faire un tri décroissant dans les valeurs du tableau mais ensuite comment afficher l'imprimante qui possède la plus grande valeur d'impressions réalisées?? ( surtout que si 2 imprimantes ont imprimées le meme nombre il faudra les afficher les 2)
    Et bien, il m'apparait comme logique qu'une fois le tableau trié l'imprimante avec la plus grande valeur d'impressions sera la première du tableau.

    Et en cas d'ex-aequo, les suivantes dans le tableau auront la même valeur que la première.

    Ce qu'on peut résoudre algorithmiquement ainsi:
    // Afficher la première imprimante stats[0]
    afficher(stats[0].nomImp, "(", stats[0].nbImp, ")") 
     
    // Afficher les eventuels ex-aequo : stats[1], stats[2], ...
    j <-- 1
    TANTQUE j<NmbImprimantes ET stats[j].nbImp=stats[0].nbImp
      afficher(" ", stats[j].nomImp, "(", stats[j].nbImp, ")") 
    FIN TANQUE

    Bref comme je débute (et que je suis surement pas une lumière) j'ai vraiment pas réussi a réaliser le tri du tableau et j'ai pondu ce code désormais
    Le tri de tableau est un problème fondamental qui a été longuement étudié. Il existe plein d'algorithmes de tri, du plus simple/lent au plus complexe/rapide. Plutot que d'en inventer un nouveau, il vaut mieux réutiliser l'un de ces algorithmes.

    Je sait qu'il n'est pas correct mais je vois vraiment pas comment faire....
    Première remarque en lisant rapidement le code :
    1. Mets des commentaires pour séparer (et expliquer) les différentes étapes. C'est plus simple pour relire le code

    2. Il y a peu de chance que le nombre d'imprimantes soir "nbenreg". Comme a priori on ne sait pas combien il y a d'imprimantes, il faudrait faire un premier parcours des enregistrements pour déterminer ce nombre.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/11/2011, 11h30
  2. Réponses: 0
    Dernier message: 04/11/2011, 10h58
  3. Réponses: 4
    Dernier message: 13/07/2007, 11h12
  4. [Tableaux] Aide pour un algorithme sur les tableaux
    Par sara21 dans le forum Langage
    Réponses: 7
    Dernier message: 20/05/2007, 10h28

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