Programme en c++

Fermé
noussa44 Messages postés 48 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 18 avril 2011 - 22 mars 2011 à 18:35
noussa44 Messages postés 48 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 18 avril 2011 - 23 mars 2011 à 17:03
Bonjour,
J'ai fai un petit programme pour calculer le nombre de répétition (les éléments égaux) mais avec une marge d'erreur (0.1) après le tri , j'ai utilisé une boucle "for" afin de parcourir le tableau puis j'ai utilisé une condition si (t[i]==t[i+1]) || (t[i+1])-t[i]=0.1) alors on incrémente la valeur de "rép" (c'est une variable pour le nombre de répétition).
Je veux savoir si ma méthode est juste ou non car il m'affiche que le tableau après le tri donc j'ai des erreurs pour cela je me suis fait recours sur votre aide et j'esper que j 'aurai des reponses svp et merci!! . Voici mon code.

#include <stdio.h>

void Trier(float tab[],int size)
{
   int i,j,max,fin;
   float swap;

   max = size - 1;
   while (1)
   {
      fin = 1;
      for (i=0,j=1 ; i<max ; ++i,++j)
      {
         if (tab[i] > tab[j])
         {
            swap   = tab[i];
            tab[i] = tab[j];
            tab[j] = swap;
            fin    = 0;
         }
      }
      if (fin == 1) return;
      --max; 
   }
}

int main(void)
{
   float tab[50];
   int size;
   int i;
   printf("Choisir le nombre de valeur du tableau : ");
   scanf("%d",&size);
   if (size > 50) size = 50;
   for(i=0 ; i<size ; ++i)
   {
      printf("Rentrer la valeur %d : ",i + 1);
      scanf("%f",&tab[i]);
   }
   printf("\nTableau saisi : \n");
   for(i=0 ; i<size ; ++i)
      printf("- %f \n",tab[i]);
   Trier(tab,size);
   printf("\nTableau trie : \n");
   for(i=0 ; i<size ; ++i){
	   printf("- %f \n",tab[i]);}
   int rep=0;
   for(i=0; i<size;++i)
   {
	   if ((tab[i]==tab[i+1]) || (tab[i+1]-tab[i]))
		   rep+=1;}
	   printf("- %d \n",rep);
   return 0;
}
<code>

2 réponses

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
23 mars 2011 à 13:02
if ((tab[i]==tab[i+1]) || (tab[i+1]-tab[i]))
1) En supposant que les éléments de 'tab' sont des entiers, alors :
- ou les deux éléments sont égaux et 'tab[i]==tab[i+1]' est vrai,
- ou les deux éléments ne sont pas égaux et 'tab[i+1]-tab[i]' est vrai !
2) S'il s'agit de float, deux éléments sont déclarés 'égaux' s'ils ne diffèrent que d'une quantité 'epsilon'; ce qui nécessite d'évaluer la quantité: '|a-b| < epsilon'.

D'autre part la fonction 'Trier' peut s'écrire plus simplement:
void Trier(float tab[], int size)
{
  int i, boucle;

  do
  {
    boucle = 0;
    for (i=1; i<size; i++)
      if (tab[i-1] > tab[i])
      {
        float swap = tab[i-1];
        tab[i-1] = tab[i];
        tab[i] = swap;
        boucle = 1;
      }
    } while (boucle);
}
Bonne continuation.
1
noussa44 Messages postés 48 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 18 avril 2011
23 mars 2011 à 17:03
Merci loupius
0