retour au sujet

Examen Informatique IUP 2

Exemple de solution

Question 1


#include "ent-sort.h"
int main(void)
{
 eteindre_sortie(1);
 eteindre_sortie(2);
 do;while(!etat_entree(1));
 allumer_sortie(2);
 do;while(!etat_entree(2) || !etat_entree(3));
 eteindre_sortie(2);
 allumer_sortie(1);
 do;while(etat_entree(2) || etat_entree(3));
 eteindre_sortie(2);
}

Question 2


#include "ent-sort.h"
#define DIM 100
typedef int tableau[DIM];

int saisie(tableau ac, tableau tr)
{
 int i,nb;
 printf("combien d'étapes (<%d) ?",DIM);
 scanf("%d",&nb);
 for(i=0;i<nb;i++)
  {
   printf("étape n° %d, sortie correspondante (-1 si aucune) ?",i);
   scanf("%d",ac+i);
   printf("entrée déclenchant l'étape suivante (négatif si inversée) ?");
   scanf("%d',tr+i);
  }
 return nb;
}

void init_sorties(void)
 { 
  int i;
  for(i=1;i<=16;i++) eteindre_sortie(i);
 }

void attendre(int capteur)
{
 if(capteur>0) do;while(!etat_entree(capteur));
 else do;while(etat_entree(-capteur));
}

void execution(tableau ac, tableau tr, int nb)
{
 int etape;
 for(etape=0;etape<nb;etape++)
  {
   if(etape>0) if(ac[etape-1]>0) eteindre_sortie(ac[etape-1]);
   if(ac[etape]>0) allumer_sortie(ac[etape]);
   attendre(tr[etape]);
  }
 if(ac[nb-1]>0) eteindre_sortie(ac[nb-1]);
}

int main(void)
{
 tableau action, transition;
 int nb;
 init_sorties();
 nb=saisie(action, transition);
 execution(action, transition, nb);
}

Question 3


#include "ent-sort.h"
#define DIM 100
typedef struct etape
 {
  int sortie;
  int etat;
 }etape;
typedef etape tab_etapes[DIM];

typedef struct transition 
 {
  int entree;
  int lien[10];
  int nbliens;
 }transition;
typedef transition tab_transitions[DIM];

//il faut également déclarer aux endroits où l'on en a besoin :
tab_etapes et;
tab_transitions tr;
int nbet,nbtr; /*nb d'étapes et de transtions (<100) */

printf("%d",tr[0].lien[tr[0].nbliens-1]);
//ou plus clair :
int dern;
dern=tr[0].nbliens-1;
printf("%d",tr[0].lien[dern]);

void cherche_transitions(int numetap, tab_transitions tr, int nbtr)
{
 int i,j;
 for(i=0;i<nbtr;i++)
   for(j=0;j<tr[i].nbliens;j++)
     if(tr[i].lien[j]==numetap)printf("lié à la transition %d\n",i);
}


retour au sujet Patrick TRAU, ULP - IPST mars 03