GÉNIE ÉLECTRIQUE

 

Dernière mise à jour 
19 août 2006

SOMMAIRE

CORRECTION DES EXERCICES

 Correction exercice 1

Bonjour

#include <stdio.h>

#include <conio.h>

char nom[10],c;

main()

{

puts("Quel est votre nom ? ");

scanf("%s",nom);

printf("/nBonjour/t%s",nom);

c=getch();

return (0);

}

Correction exercice 2

Périmètre

#include <stdio.h>

float perim_rect (float lon, float larg)  /* ici pas de ; !! */

{

            float perimetre;                /* variable locale … la fonction */

            perimetre = 2*(lon + larg);

            return perimetre;               /* c'est ainsi que l'on renvoi le résultat de la fonction.*/

}

 

float alt_perim_rect (float lon, float lar)

{

            return 2*(lon+lar);

}

main()

{

            float L,l;                                               /* déclaration de 2 variables globales dans main */

            printf ("/n Entrer la longueur ");

            scanf ("%f", &L);

            printf ("/n Entrer la largeur ");

            scanf ("%f", &l);

            printf ("/n/t Le p‚rimetre est : %f ", perim_rect (L,l));

            /* C'est dans la fonction printf, comme paramètre que l'on appelle la

            perim_rect */

}

Correction exercice 5

RC

#include <stdio.h>   

#include <conio.h>    

#include <math.h>      

float r,c,vf,tau,t;            

main()                                       

{                      

puts("/nCalcul de vs=vi*(1-e-(t/tau)) lors de la charge de R dans R  avec vs(t0)=0");_

puts("pour 20 valeurs de t comprises entre 0 et 5*tau");    

puts("Entez R C et vf (tension finale) séparer les entrées par un espace: ");

scanf("%f %f %f",&r,&c,&vf);   

tau=r*c;      

for(t=0;t<=5*tau;t+=tau/4) printf("/nà t= %2f s -> vs= %f V",t,vf*(1-exp(-t/tau))); 

puts("/ntapez une touche pour continuer");   

c=getch();                                                             

return (0);                                                             

}                                                                             

Correction exercice 6

Jeux

#include <stdio.h>

#include <stdlib.h> /* pour rand() */

#include <time.h>   /* pour trouver l'heure pour srand */

void main(void)

 {

  int solution,reponse,nb_essais=0;

  {time_t t;srand((unsigned) time(&t)); } /* initialiser le générateur à partir du compteur de temps, pour qu'il soit plus aléatoire */

  solution=rand()%11;    /* reste sera toujours entre 0 et 10 */

  do

   {

    nb_essais++;

    puts("prOpésez votre nombre entre 0 et 10");

    scanf("%d",&reponse);

   }

  while (reponse!=solution);

  printf("trouvé en %d essais/n",nb_essais);

 }

 

Correction exercice 7

Moyenne

#include <stdio.h>

void main(void)

 {

  int i,N;

  float note,somme=0,moyenne;

  puts("nombre de notes ? ");

  scanf("%d",&N);

  for(i=0;i<N;i++)

   {

    printf("entrez votre %dième note",i+1);

    scanf("%f",&note);

    somme+=note;

   }

  moyenne=somme/N;

  printf("moyenne calculée :%5.2f/n",moyenne);

 }

Correction exercice 8

Puissance

#include <stdio.h>

void main(void)

 {

  int puissance=1,max;

  puts("nombre maximal désiré (ne pas dépasser 16000) ?");

  scanf("%d",&max);

  while (puissance<max) printf("%d/n",puissance*=2);

 }

Correction exercice 9

Calculatrice

 

#include <stdio.h>

void main(void)

 {

  float val1,val2,res;

  char Opéval2

  int fin=0;

  do

   {

    puts("calcul à effectuer (par ex 5*2), ou 1=1 pour finir ? ");

    scanf("%f%c%f",&val1,&Opé&val2);

    switch (Opé

     {

      case '*':res=val1*val2;break;

      case '/':res=val1/val2;break;

      case '+':res=val1+val2;break;

      case '-':res=val1-val2;break;

      case '=':fin++; /* pas besoin de break, je suis déjà au } */

     }

    if (!fin) printf("%f%c%f=%f/n",val1,Opéval2,res);

   }

  while (!fin);

 }

Correction exercice 10

Nombres premiers (voir document annexe)

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>   /* pour div*/

 

void touche(void)     /* attend une touche */

{

 char c;

 puts("/ntapez sur une touche");

 c=getch();

}

 

 

void main()

{

div_t x;

int i,j,max;

char nonprem;

 

puts("Nombre max du calcul : ");

scanf("%i",&max);

printf("/nCalcul des %i premiers nombres premiers/n 1",max);

for(i=3;i<max;i++)

{       nonprem=0;

        for(j=2;j<i;j++)

        {

                x=div(i,j);

                if (x.rem==0)   /* voir fonction div dans stdlib */

                {

                nonprem++;

                break;

                }

        }

        if (nonprem==0) printf("%7.i ",i);

}

touche();

return (0);

}

Correction exercice 11

Jeux des allumettes

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>   /* pour div*/

 

int nbal,max;

char couppc;

 

void touche(void)     /* attend une touche */

{

 char c;

 puts("/ntapez sur une touche");

 c=getch();

}

 

void affiche()  /* affiche en semi graphique le nombre d'allumettes restant*/

{

int i;

for(i=1;i<=nbal;i++)

                {

                putchar(178);

                putchar(' ');

                }

putchar('/n');

for(i=1;i<=nbal;i++)

                {

                putchar(177);

                putchar(' ');

                }

putchar('/n');

for(i=1;i<=nbal;i++)

                {

                putchar(177);

                putchar(' ');

                }

putchar('/n');

}

 

int pc()        /* c'est au PC de jouer*/

{

int ote,m;

affiche();

m=max+1;

ote=nbal-(((nbal-1)/m)*m+1);   /* tout se joue ici !!!!! */

if (ote<=0) ote=1;

printf("J ôte %i allumette",ote);

if (ote>1) puts("s");

nbal-=ote;

touche();

couppc=1;

return(nbal);

}

 

int joueur()  /* c'est au joueur de jouer*/

{

int ote;

affiche();

do

{

puts("combien ôtez vous d'allumettes ? ");

scanf("%i",&ote);

}

while (ote>max);

nbal-=ote;

couppc=0;

return(nbal);

}

 

void resultat() /* on affiche le vainqueur*/

{

affiche();

if (couppc==1) puts("j'ai gagné"); else puts("t'as gagné");

}

 

main()

{

clrscr();

puts("/nJeu des allumettes, il ne faut pas prendre la dernière mais au mois une/n) ;

puts("Combien d'allumettes au départ");

scanf("%i",&nbal);

puts("combien d'allumettes peut on prendre au maximum à chaque tour");

scanf("%i",&max);

while((joueur()>1)&&(pc()>1)) ;

resultat();

touche();

return(0);

}

 

 

 Genelaix - IUFM - Académie d'Aix-Marseille-août 2006