Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2011, 01h30   #1
Membre du Club
 
" "
Inscription : janvier 2008
Messages : 204
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 204
Points : 59
Points : 59
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 :
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 :
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
		?>
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 09h53   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour

Quelque chose comme ça :
Code :
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
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/11/2011, 10h00   #3
Membre du Club
 
" "
Inscription : janvier 2008
Messages : 204
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 204
Points : 59
Points : 59
Merci rawsrc pour votre réponse claire, mais on a comme contrainte de ne pas utiliser des fonctions comme array_sum par exemple
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 23/11/2011, 10h05   #4
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
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.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 10h09   #5
Membre du Club
 
" "
Inscription : janvier 2008
Messages : 204
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 204
Points : 59
Points : 59
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,...
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 10h13   #6
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
ça sent le devoir tout ça... J'ai bon ?
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 10h14   #7
Membre du Club
 
" "
Inscription : janvier 2008
Messages : 204
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 204
Points : 59
Points : 59
pas du tout , juste un exo que j'ai envie d'ameliorer tout seul,
mais on n'est au debut avec le cours php
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h31.


 
 
 
 
Partenaires

Hébergement Web