Exercice PHP besoin d'aide.

lepere
Invité n'ayant pas de compte PHPfrance

10 mai 2007, 11:35

2
3
4, 4
, 8 1
, , 2
, 8
7
3, 4
, 2, 3
, , 3
, 9, 2
, 7
9
12, 2
, 3
, 2, 1
, , 8, 1
, , , 2
, , 7
6, 12
9, 11
, 9
, 4
1
---------------------
ceci est la representation d'un arbre
les noeuds de premier niveau sont au début de chaque ligne,
ici on trouve 2 3 4 7 3 9 12 6 9 et 1
le noeud 4 a un sous-arbre 4 8 et 8 ( 2eme niveau) dont le premier 8 a aussi un sous arbre 1 et 2, et ainsi de suite.
Les virgules sont là pour bien montrer les 'cases vides' et ne pas se tromper sur le niveau où se trouve un noeud de l'arbre.
Ecrire un programme qui représente cet arbre, et calculer la somme de ses éléments.
Ecrire ensuite une fonction qui calcule la somme pondérée des élements de l'arbre avec les poids suivants :
niveau 1 : poids 2
niveau 2 : poids 3
niveau 3 : poids 1
niveau 4 : poids 2
(ca fait 2*2 + 3*2 + 4*2 + 4*3 + 8*3 + 1*1 + ... )
langages possibles : PHP Perl etc... à votre choix
Ecrire ce programme en comprenant que la "représentation de l'arbre" demandée soit une représentation "en mémoire" sous forme de tableau, structure et/ou classes à votre choix.
Le calcul des sommes devant alors se faire en utilisant cette structure/tableau/classe et permet de juger de sa facilité d'utilisation.

j'ai fait ça le tableau et la représentation mais incapable de calculer les sommes !
$arraytree=array(	
			"2",
			"3",
			"4"=>array("4",array("8"=>"1","8"=>"2"),"8"),
			"7",
			"3"=>array("4",array("2"=>"3","2"=>"3"),array("9"=>"2"),"7"),
			"9",
			"12"=>array("2","3",array("2"=>"1",array("8"=>"1","8"=>"2") ),"7"),
			"6"=>"12",
			"9"=>array("11","9","4"),
			"1",
		)

merci d'avance pour votre aide.

Mammouth du PHP | 19672 Messages

10 mai 2007, 13:45

Piste de solution :
Il te faut créer une fonction récursive qui va ajouter les valeurs dans une variable globale. Ta fonction doit tester si la valeur est scalaire ou tabulaire : dans ce dernier cas, il faut faire une récursion et ainsi de suite.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 5924 Messages

10 mai 2007, 13:50

Ton tableau n'est pas bon déjà. Tu as des trucs comme ca :
array("8"=>"1", "8"=>"2");
Ce n'est pas correct, les tableaux associatifs ne peuvent pas avoir plusieurs clés identiques (ici "8"). Je te conseille de trouver une autre modélisation pour ton arbre.

Je te conseille d'utiliser des objets pour représenter ton arbre.