On se donne un quadrillage dont les noeuds sont étiquettés par leurs coordonnées (entières) X,Y. Dans ce quadrillage, on insère des résistances - toutes de 1ohm - entre différents noeuds. Votre objectif est de trouver la résistance équivalente entre les noeuds du circuit de coordonnées (0,0) et (4,4).
Dans les cas de tests, on aura toujours la garantie de pouvoir trouver la résistance entre ces deux noeuds en n'utilisant que les deux règles simples suivantes : si deux tronçons de circuits de résistances équivalentes R1 et R2 sont en série, la résistance équivalente du tronçon global est R1+R2, et s'ils sont en parallèle, la résistance équivalente est (R1.R2)/(R1+R2).
En particulier, il n'y aura jamais de besoin d'utiliser de "transformation triangle-étoile". Les tronçons de circuits qui sont inutiles peuvent être ignorés.
Limites de temps et de mémoire (Python)
- Temps : 1 s sur une machine à 1 GHz.
- Mémoire : 8 000 ko.
Entrée
L'entrée du programme contient d'abord un entier n correspondant au nombre de résistances dans le circuit. Ensuite, elle contient une liste de n lignes de la forme :
xa ya xb yb
où (xa,ya) sont les coordonnées du premier noeud connecté à cette résistance et (xb,yb) sont les coordonnées du second noeud. Ces coordonnées seront toujours comprises entre 0 et 4. Le tout est suivi d'un retour à la ligne.
Sortie
La sortie de votre programme devra contenir la valeur, arrondie à 10−3 près, de la résistance équivalente demandée, cette résistance ne sera jamais infinie. La fonction "affiche_solution" des squelettes effectue elle-même l'arrondi quand elle est appelée, et vous n'avez donc normalement pas à vous en soucier si vous utilisez les squelettes. La réponse sera suivie d'un retour à la ligne.
Exemples
Exemple 1
entrée :
2 0 0 1 0 1 0 4 4
sortie :
2.000
Exemple 2
entrée :
2 0 0 4 4 0 0 4 4
sortie :
0.500
Exemple 3
entrée :
7 0 0 0 1 0 0 1 0 0 1 4 4 0 1 4 4 1 0 4 4 1 0 4 4 0 0 3 3
sortie :
0.750
Commentaires
Squelettes de codes :
(* Ce fichier contient tout ce qu'il faut pour lire les donnees en entree, les mettre dans des variables, et afficher votre resultat final en sortie. *) (* fonction pour separer les elements en entree Il n'est pas necessaire de comprendre cette fonction pour utiliser le programme !*) let split_spaces chaine = let res = ref [] in let temp = ref "" in for i = 0 to String.length chaine - 1 do if chaine.[i]=' ' then begin res := !res @ [!temp]; temp := ""; end else temp := !temp ^ (String.sub chaine i 1); done; res := !res @ [!temp]; !res;; let n = int_of_string (input_line stdin);; (* recuperation du tableau des resistances resistances.(i) contient la i+1eme resistance sous la forme [|xa;ya;xb;yb|] *) let resistances = let resultat = Array.make n [||] in for i = 0 to n-1 do resultat.(i) <- Array.of_list (List.map int_of_string (split_spaces (input_line stdin))); done; resultat;; (* fonction pour afficher votre solution *) let affiche_solution i = Printf.printf "%.3f" i; print_newline();; (* Mettez apres ceci le corps de votre programme *) (* N'oubliez pas de terminer par un appel a affiche_solution !*) (* Debut de votre programme *) (* Fin de votre programme *)
Vous devez être connecté(e) pour résoudre ce problème.
L'inscription ne prendra qu'une minute et vous pourrez alors résoudre les exercices puis faire valider automatiquement vos solutions.
Une fois identifié(e), vous pourrez demander sur cette page des conseils pour résoudre le sujet ou demander de l'aide sur le forum d'entraide.
Lorsque vous serez connecté(e), vous pourrez voir vos actions ici.
Une correction détaillée sera disponible lorsque vous aurez résolu le sujet.