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

Langage PHP Discussion :

Parcours d'une table associatif


Sujet :

Langage PHP

  1. #1
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Par défaut Parcours d'une table associatif
    Bonjour,
    Dans le code ci-desous, je vous voudrai changer l'initialisation de la table $note en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $note=array(
    		  "Paul"  => array("STAT"  => 14.5,"GDI" => 15, "BD" => 12),
    		   "Aly"   => array("STAT" => 10,"GDI" => 15, "BD" => 17),
    		   "Sidi"  => array("STAT" => 12, "GDI" => 13, "BD" => 16),
    		   "Lucie" => array("STAT" => 14, "GDI" => 14, "BD" =>13.5)
    		);
    et calculer la moyenne par etudiant, par matiere et la moyenne du groupe.


    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
     
     
    		<?php
     
    			   # declaration et initialisation de la table note
    				$note=array(
    								"Paul"  => array(14.5, 15, 12),
    								"Aly"   => array(10, 15, 17),
    								"Sidi"  => array(12, 13, 16),
    								"Lucie" => array(14, 14, 13.5)
    					   );  
    			    # declaration de la fonction moyenne
    				function moyenne ($resultat=array()){
    					reset($resultat);
    					$noteSTAT=0;
    					$noteGDI=0;
    					$noteBD=0;
     
    					while(list($cle,$valeur)=each($resultat)) # on parcours la table d'entrée par paire (clef,valeur)
    					{
    						#$moy_etud [$cle]= ($valeur[1]+$valeur[2]+$valeur[3])/3;
    						$somnote=0;
    						for($i=0 ; $i<count($valeur) ; $i++) {$somnote=$somnote+$valeur[$i];} #on parcours la table valeur et on somme les notes
    						$moy_etud [$cle]= sprintf("%.3f",$somnote/count($valeur)); // sprintf pour arrondir la note moyenne 
    						$noteSTAT=$noteSTAT+$valeur[0]; # on recupre la note de la matiere stat et idem pour les deux autres matieres
    						$noteGDI=$noteGDI+$valeur[1];
    						$noteBD=$noteBD+$valeur[2];		
    					}
     
    					$moy_mat['STAT']=sprintf("%.3f",$noteSTAT/count($resultat)); # calcul de la moyenne de la matiere stat
    					$moy_mat['GDI']=sprintf("%.3f",$noteGDI/count($resultat));
    					$moy_mat['BG']=sprintf("%.3f",$noteBD/count($resultat));
     
    				$note_groupe=0; # somme de toutes les moyennes
     
    				echo ' <h2> Moyenne par etudiant </h2>';
    				while(list($etudiant,$moyenne)=each($moy_etud)) 
    					{  echo' <B> '.$etudiant.' : </B>  '.$moyenne.' <br/> ';
    					   $note_groupe=$note_groupe + $moyenne ;
    					}
    				$moy_groupe = sprintf("%.3f",$note_groupe/count($moy_etud));
    				echo ' <h2> Moyenne du groupe </h2>';
    				echo ' <B> M : </B> '.$moy_groupe.' <br/>';
     
    				echo '<h2> Moyenne par matiere </h2>';
    				while(list($matiere,$moyenne)=each($moy_mat))
    					{ echo ' <B> '.$matiere.' : </B> '.$moyenne.' <br/>';}
    				}  # fin de la fonction moyenne
     
    			moyenne($note); # appel de la fonction moyenne
    		?>

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour

    Quelque chose comme ça :
    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
    <?php
     
    // declaration et initialisation de la table note
    $note = array(
       'Paul'  => array(14.5, 15, 12),
       'Aly'   => array(10, 15, 17),
       'Sidi'  => array(12, 13, 16),
       'Lucie' => array(14, 14, 13.5)
    );
     
    $matieres = array('STAT', 'GDI', 'BD'); // liste ordonnée des matières
    $nbMat    = count($matieres);
    $nbEleves = count($note);
    $totMat   = array(); // sommes des notes par matière
     
    // conversion du tableau et calcul de la moyenne par élève
    $note = array_map(function($v) use ($matieres, $nbMat) {
       $data = array_combine($matieres, $v);
       $data['MOYENNE'] = array_sum($v) / $nbMat;
       return $data;
    }, $note);
     
    // total des notes par matière
    array_map(function($v) use (&$totMat) {
       foreach($v as $mat => $note) {
          $totMat[$mat] += $note;
       }
    }, $note);
     
    // moyenne des notes par matière
    $moyMat = array_map(function($v) use ($nbEleves) {
       return $v / $nbEleves;
    }, $totMat);
     
    ?>
    Après il n'y a plus qu'à faire la mise en forme pour le rendu final

  3. #3
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Par défaut
    Merci rawsrc pour votre réponse claire, mais on a comme contrainte de ne pas utiliser des fonctions comme array_sum par exemple

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par arm3366 Voir le message
    mais on a comme contrainte de ne pas utiliser des fonctions comme array_sum
    Euh quoi ?!???!?? C'est une blague ?
    Et array_map() non plus je parie.

  5. #5
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Par défaut
    tout a fait, mais n'empeche que je vais continuer sur ton idée.
    En effet, on devait le faire qu'avec des boucles while, for,...

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    ça sent le devoir tout ça... J'ai bon ?

  7. #7
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Par défaut
    pas du tout , juste un exo que j'ai envie d'ameliorer tout seul,
    mais on n'est au debut avec le cours php

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

Discussions similaires

  1. Parcours d'une table à partir d'une liste déroulante
    Par mystikgirl30 dans le forum IHM
    Réponses: 4
    Dernier message: 12/04/2007, 12h02
  2. Probléme de parcour d'une table
    Par rootdaoud dans le forum Langage
    Réponses: 3
    Dernier message: 25/12/2006, 14h24
  3. parcour d'une table et calcul date?
    Par dj_techno dans le forum Bases de données
    Réponses: 4
    Dernier message: 25/08/2006, 10h02
  4. [JSP]erreur dans parcours d'une table
    Par lcoder dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/07/2006, 10h52
  5. D7/firebird 1.5 - parcours d'une table
    Par jer64 dans le forum Bases de données
    Réponses: 8
    Dernier message: 22/03/2006, 23h27

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