IUP2 : TP informatique 2001/2002

table des matières - accès direct au TP

TP1 : erreur sur les réels

#include<stdio.h>
void main(void)
{
 float somme,vrai,debut=1000,pas=0.001;
 int i,nb=10000;
 somme=debut;
 for(i=0;i<nb;i++) somme+=pas;
 vrai=debut+(pas*nb);
 printf("on trouve %f (au lieu de %f)\n",somme, vrai);
}

TP1 : résolution de ax2 + bx + c dans TOUS les cas

#include <stdio.h>
#include <math.h> /* pour sqrt, la racine carrée */
void main (void)
{
 float a,b,c;
 float delta,r1,r2;
 printf("résolution de ax2 + bx + c \n");
 printf("entrez la valeur de a : ");
 scanf("%f",&a);
 printf("entrez la valeur de b : ");
 scanf("%f",&b);
 printf("entrez la valeur de c : ");
 scanf("%f",&c);
 if (a==0) /* sinon diviser par 2*a risque de poser problème */
  {
   if (b!=0) printf("une racine simple x=%f\n",-c/b);
   else if (c==0) printf("il y a une infinité de solutions à Ox=0\n");
   else printf("aucune solution à l'équation %f=0\n",c);
  }
 else
  {
   delta=b*b-4*a*c; /* b*b : c'est comme cela qu'on calcule un carré */
   if (delta==0) printf("une racine double : %f\n",-b/(2*a));
   else if (delta<0) puts("aucune racine réelle (mais complexes)");
   else
    {
     r1=(-b-sqrt(delta))/(2*a);
     r2=(-b+sqrt(delta))/(2*a);
     printf("il y a 2 racines réelles : x1=%f et x2=%f\n",r1,r2);
    }
  }
}

TP2 : calculette

#include <stdio.h>

void main(void)
{
 float b,resultat;
 char reponse;
 printf("première valeur ? ");
 scanf("%f",&resultat);
 printf("opération ? ");
 scanf(" %c",&reponse);
 do
   {
    printf("valeur ?");
    scanf("%f",&b);
    if (reponse=='/')
     {
      if(b==0) 
         {printf("\nErreur, division par 0 interdite\n");resultat=0;}
      else resultat/=b; 
     }
    else
     {
      if      (reponse=='+') resultat+=b;
      else if (reponse=='-') resultat-=b;
      else if (reponse=='*') resultat*=b;
      else printf("\nOperateur inconnu\n");
     }
    printf("\n %f\n",resultat);
    printf("opération (q pour quitter) ? ");
    scanf(" %c",&reponse);
   }
 while (reponse!='q');
}


TP2 : jeu du plus ou moins

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void main (void)
     {
        int nbatrouver,proposition,compteur=0;
        int min=1,max=100;
        printf("Vous devez deviner un nombre entre %d et %d \n",min,max);
        printf("tapez ENTREE pour commencer\n");
        do
                nbatrouver=(rand()%(max+1))+min;
        while (!kbhit());
        do
             {
                compteur++;
                printf("entrez votre proposition :");
                scanf("%d",&proposition);
                if(proposition<nbatrouver) 
                  if(proposition>min)
                    {
                     puts("trop petit");
                     min=proposition;
                    }
                   else puts("donnée incohérente");
                else if(proposition!=nbatrouver) 
                  if(proposition<max)
                    {
                     puts("trop grand");
                     max=proposition;
                    }
                   else puts("donnée incohérente");
             }
        while (proposition!=nbatrouver);
        printf("gagné en %d essais \n",compteur);
        if (compteur<2)puts("tricheur !");
        else if (compteur<5)puts ("bravo");
        else if (compteur<10) puts("pas mal");
        else puts("espece de gros nul");
     }

TP3 : tableaux et fonctions


#include <stdio.h>
#define DIM 100
typedef float tableau[DIM];

/* protoypes des fonctions (si on ne veut pas mettre main à la fin) */
int saisir(tableau);
void affiche(int,tableau);
float moyenne(int,tableau);
void supval(int*,tableau);
void adval(int*,tableau);
void tri(int,tableau);

void affiche(int nb,tableau tab)
{
 int i;
 for(i=0;i<nb;i++)
   printf("\n%d\t:%f",i+1,tab[i]);
}

int saisir(tableau tab)
{
 int i,nb;
 do
 {
  printf("\nnombre de variables à saisir :");
  scanf("%d",&nb);
  if (nb>DIM) printf("\n choisissez un nombre compris entre 1 et %d : ",DIM);
 }
 while (nb>DIM||nb<0);
 for(i=0;i<nb;i++)
 {
  printf(" valeur %d :",i+1);
  scanf("%f",&tab[i]);
 }
 return (nb);
}

float moyenne(int nb,tableau tab)
{
 int i=0;
 float res=0;
 for (i=0;i<nb;i++) res+=tab[i];
 if(nb>0)res=res/nb;
 return (res);
}

void supval (int *nb,tableau tab)
 {
   if(*nb<1)puts ("il ne reste rien à supprimer");
   else
    {
    int valsup,nbs;
    puts("quelle valeur voulez vous supprimer ?");
    scanf("%d",&valsup);
    for(nbs=valsup;nbs<*nb;nbs++) tab[nbs-1]=tab[nbs];
    (*nb)--;
    }
 }

void adval (int *nb,tableau tab)
{
 int nba,i;
 if (*nb>DIM)puts ("il ne reste plus de place dans le tableau");
 else
  {
   (*nb)++;
   puts("\nentrez l'emplacement de la valeur:");
   scanf("%d",&nba);
   for (i=*nb-1;i>nba;i--)tab[i]=tab[i-1];
   puts("\entrez la nouvelle valeur :");
   scanf("%f",&tab[nba]);
  }
}

void tri(int nb,tableau tab)
{
 int i,QuelqueChoseChange;
 float interm;
 do
  {
  QuelqueChoseChange=0;
  for(i=1;i<nb;i++)
    if (tab[i]<tab[i-1])
     {
      QuelqueChoseChange=1;
      interm=tab[i-1];tab[i-1]=tab[i];tab[i]=interm;
     }
  }
 while(QuelqueChoseChange);
}

void main (void)
{
 tableau tab;
 int nb;char choix;
 nb=saisir(tab);
 do
 {
  printf("\n que voulez vous faire ?\n");
  printf("\nn :nouveau tableau\na :afficher tableau\nm :calculer moyenne\ns :");
  printf("supprimer une valeur\ni :inserer une valeur\nt :trier\nq :quitter");

  scanf(" %c",&choix);
  if      (choix=='n') nb=saisir(tab);
  else if (choix=='a') affiche(nb,tab);
  else if (choix=='m') printf("\n moyenne des valeurs : %f",moyenne(nb,tab));
  else if (choix=='s') supval(&nb,tab);
  else if (choix=='i') adval(&nb,tab);
  else if (choix=='t') tri(nb,tab);
 }
 while(choix!='q');
 printf("\nau revoir\n");
}

TP4 :


#include<stdio.h>
#include<string.h>

#define LNG 80
typedef char ligne [LNG];

void saisie(ligne);
void affiche(ligne);
void compare(ligne,ligne);
int inclus (ligne,ligne,int);
void cherche(ligne,ligne);

//pour la dernière question
typedef ligne texte [20];

void main(void)
	{
        int i,n;
        ligne mot;
        texte t;
        printf("combien de lignes ? ");
        scanf("%d",&n);
        fflush(stdin); //pour ne pas être gêné par le caractère ENTREE par la suite
        for(i=0;i<n;i++) saisie(t[i]);
        for(i=0;i<n;i++) affiche(t[i]);
        printf("mot à chercher : ");
        saisie(mot);
        for(i=0;i<n;i++) cherche(t[i],mot);
	}

void saisie(ligne lgn)
	{
        printf("entrez votre ligne : ");
        gets(lng);
        }
void affiche(ligne lig)
	{
        printf("la ligne vaut: %s\n",lig);
        }
void compare(ligne lng1,ligne lng2)
	{
        if(strlen(lng1)==strlen(lng2))printf("les deux ont même longueur\n");
        else if(strlen(lng1)<strlen(lng2))printf("la 2eme est la plus longue\n");
        else printf("la 1ere est la plus longue\n");
        if(strcmp(lng1,lng2)==0) printf("égaux devant Dieu\n");
        else if(strcmp(lng1,lng2)<0) printf("le 1er d'abord.(par ordre alphabétique)\n");
        else printf("les derniers seront les premiers...(par ordre alphabétique)\n");
	}
int inclus (ligne l,ligne c,int pos)
        {
        int i=0;
        while(c[i]&&l[i+pos]==c[i])i++;
        if (c[i])return(0);
          else return (1);
        }
void cherche(ligne l,ligne c)
	{
        int i,n;
        for(i=0;i<strlen(l);i++)
          if(inclus(l,c,i))printf("trouvé en position %d\n",i);
        }


Patrick TRAU,ULP - IPST novembre 2001. Cliquez pour retourner vers le sommaire programmation.