retour sommaire des sujets

IUP 2

Examen d'informatique

Seconde session 1999


Durée : 2h. Cours, correction des TP et documents distribués en cours autorisés.

 

Nous allons continuer à développer certains outils de calcul destinés aux électroniciens débutants. Nous désirons traiter des circuits électroniques, comme celui-ci :

exemple de schéma

Un circuit sera considéré comme un ensemble de "segments". Une segment sera ici un bout de circuit à une entrée (et une seule) et une sortie (et une seule), avec certaines caractéristiques (résistance, inductance, capacité, source de courant ou de tension...). Les segments sont reliés entre eux, en des endroits appelés des "noeuds". Un noeud peut regrouper 2 segments ou plus. La loi des noeuds nous dit qu'en chaque noeud, la somme des intensités est nulle (dit plus clairement : il entre exactement autant de courant qu'il n'en sort). La loi des mailles quand à elle dit que dans toute maille (boucle fermée de segments) la somme des tensions est nulle.

Supposons avoir Ns segments (numérotés de 0 à Ns-1), regroupés dans un tableau appelé segments . Les caractéristiques de chaque segment seront représentées par une structure. Supposons ici que nous nous limitions à deux valeurs réelles : V et R (une pile aura V=1.5 et R=0, alors que pour une résistance V=0). Nous supposons également avoir Nn noeuds (numérotés de 0 à Nn-1). Pour chaque noeud, on connaît le nombre de segments qui y sont reliés, ainsi que la liste de leur numéro (un numéro de segment est sa position dans le tableau de segments, c'est à dire un entier entre 0 et Ns-1). Tous les noeuds sont regroupés dans un tableau appelé noeuds.

Soient les déclarations globales suivantes :


#define SMax 200
typedef struct segment
 {
  float V;
  float R;
 }segment;
typedef segment tabseg[SMax];
#define LMax 10
typedef struct noeud
 {
  int nbseg;
  int numseg[LMax];
 }noeud;
#define NMax 150
typedef noeud tabnoe[NMax];
int Ns,Nn;
tabseg segments;
tabnoe noeuds;

Question 1 : d'après ces déclarations : combien au maximum de segments peuvent aboutir au même noeud ? Combien peut-on avoir au maximum de noeuds et de segments ?

Question 2 : pour le petit schéma proposé en exemple au début du sujet, quelles sont les données qui devraient être introduites dans les variables globales déclarées plus haut ? (représentez graphiquement les différents tableaux)

Question 3 : écrivez une fonction qui affiche à l'écran les caractéristiques (R et V) d'un segment dont on lui donne la position dans le tableau segments. L'entête de cette fonction sera obligatoirement :

void AffSeg(int Position)

Question 4 : écrivez une fonction qui affiche à l'écran les caractéristiques de tous les segments reliés à un noeud dont on lui donne la position dans le tableau noeuds. L'entête de cette fonction sera obligatoirement :

void AffNoe(int Position)

AffNoe doit obligatoirement appeler AffSeg

Question 5 : écrivez une fonction qui reçoit en argument un numéro de segment, et qui affiche à l'écran les numéros de tous les noeuds auxquels est relié ce segment.

Question 6 : L'analyse d'un circuit comme celui donné en exemple plus haut va permettre de mettre en place un système d'équations ressemblant à celui-ci :

lois des mailles :

R1.I1+R2.I2 = E
R2.I2-R3.I3 - R4.I4 = 0

lois des noeuds :

I1 - I2 - I3 = 0
I3 - I4 = 0

Les inconnues sont les intensités Ii, les caractéristiques de résistance et tensions sont supposées connues. On peut représenter ce système d'équations de manière matricielle :

produit de matrices

a) Créez un petit programme (indépendant du reste) qui permette de saisir et d'afficher la matrice R et le vecteur U.

b) Avez vous une idée d'algorithme qui permettrait de résoudre le système d'équations ?

Question "hors compétition" : à l'aide de tout ce qui a été défini jusqu'ici, comment retrouver, dans n'importe quel circuit, toutes les mailles possibles (c'est à dire tous les circuits fermés) ?


retourretour au sommaire des sujets

Patrick TRAU, ULP - IPST 24/6/99