logo ULP

retour sommaire des sujets

IUP 2

Examen d'informatique

Première session 1999

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

Nous allons cette année tenter de mettre en place un certain nombre d'outils de calcul destinés aux électroniciens débutants (étudiants en TP par exemple). Dans une première partie nous allons faire un programme traitant le code de couleurs des résistances, et l'association de plusieurs résistances. Puis nous analyserons des circuits plus complexes.

Les questions ci dessous ne tenteront pas de résoudre la globalité du problème, mais chacune traitera un point particulier. Les questions sont indépendantes et peuvent être traitées dans l'ordre qui vous convient.


Première Partie


Soient les déclarations globales suivantes :

   typedef char couleur[7];
   couleur tab_coul[10]={"noir","brun","rouge","orange","jaune",
                         "vert","bleu","violet","gris","blanc"};

tab_coul est donc un tableau de dix chaînes de caractères, directement initialisé dès sa déclaration (tab_coul[0] vaut "noir", tab_coul[1] vaut "brun",...)

Question 1 : écrire une fonction appelée dem_coul, qui ne reçoit aucun paramètre en entrée, qui affiche le nom des dix couleurs, demande à l'utilisateur laquelle il choisit (entier entre 0 et 9) et retourne cet entier.

Question 2 : 2a) écrire une fonction appelée multiplicateur qui reçoit en entrée un entier n (entre 0 et 9) et retourne un flottant valant 10n. Vu la faible valeur de n, on calculera cette puissance en faisant des multiplications par 10 dans une boucle. 2b) N'aurait-il pas été plus précis de retourner un entier plutôt qu'un flottant ?

Question 3 : écrire un programme principal, utilisant les fonctions précédentes, demandant à l'utilisateur les trois couleurs correspondant aux trois chiffres significatifs, puis la couleur du multiplicateur, et affichant la valeur de la résistance, en W (Ohms).
Exemple : Orange - Noir - Rouge donne 3 - 0 - 2 donc 30*102 =3000 W).

Question 4 : écrire un autre programme, demandant une valeur en Ohms (W) et affichant les 4 couleurs de la résistance à choisir. On suppose que l'utilisateur ne donne que des valeurs "censées".

Question 5 : De temps en temps, on ne dispose pas de la résistance dont on a besoin. Si l'on ne veut pas attendre l'ouverture du magasin d'électronique, on peut utiliser plusieurs autres résistances correctement disposées (en série : Req= R1+R2 , en parallèle 1/Req=1/R1+1/R2 ). Nous supposons disposer d'un tableau contenant toutes les valeurs de résistances actuellement disponibles. Sans entrer dans les détails, proposez un algorithme permettant de trouver une association de résistances disponibles, la plus proche possible d'une valeur désirée. Vous vous contenterez d'explications en français, schémas, voire organigrammes mais il ne faut pas me donner le programme en C. Si vous êtes à court de temps, faites d'abord la seconde partie


Seconde Partie


On désire désormais traiter des circuits complexes. 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)

Supposons avoir N segments (numérotés de 0 à N-1), avec N<200. 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)

Question 1 : supposons que les segments soient définis à l'aide d'un tableau (statique) de structures : faites les déclarations nécessaires, puis écrivez une fonction de saisie et une fonction d'affichage de ce tableau

Question 2 : Ayant encore besoin de mémoire pour la suite (loi des mailles...) on préfère utiliser un tableau dynamique, limité au nombre réel de segments à traiter. Que faut-il changer à la question précédente ?

Question 3 : Pour représenter désormais tout le circuit (il reste à gérer les noeuds) nous pourrions utiliser des pointeurs. Comme vous préférez les tableaux, nous utiliserons une "matrice de connexion" : supposons avoir M noeuds. Créons une matrice [MxN], ou chaque ligne (entre 0 et M-1) correspond à un noeud. Dans cette ligne, il y a N valeurs : 1 pour les segments reliés à ce noeud, 0 pour les autres. Faites les déclarations nécessaires, puis écrivez une fonction de saisie et une fonction d'affichage de cette table de connexions (j'accepte les tableaux statiques et que l'utilisateur ait à répondre à MxN questions).

Question 4 : Ecrivez un petit programme principal qui saisit les données détaillées dans les questions précédentes, puis pour chaque noeud affiche le nombre de segments qui y sont reliés, ainsi que les caractéristiques de ces segments. Vous afficherez une ligne par noeud, qui pourrait ressembler à ceci :

Noeud 7 : 3 segments : R=500 V=0 / R=130 V=0 / R=0 V=5

Question "hors compétition" : à partir de ces données, comment retrouver toutes les mailles possibles (c'est à dire tous les circuits fermés) ?


pour voir une correction, cliquez ici
pour voir l'histogramme des notes obtenues à cet examen, cliquez ici
pour retourner au sommaire des sujets d'examen, cliquez ici


Patrick TRAU, ULP - IPST 6/5/99