Votre avis pour ce code

Résolu
sawnet007 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
sawnet007 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je veux inverser les élément d'un tableau de N cases

voilà le code (mais il ne marche pas comme je veux)


#include<stdio.h>
#include<stdlib.h>

int t[100];
int n,temp,i,j;

void main()
{
system("cls");
printf("Entrer la longueur du tableau\n(Ne dépassé pas 99 éléments)\n");
scanf("%d",&n);
for(i=0;i<=n-1;i++)
{
printf("Entrer l'élément N°%d\n",i+1);
scanf("%d",&t[i]);
}
j=n-1;
for(i=0;i<=n-1;i++)
{
temp=t[i];
t[i]=t[j];
t[j]=temp;
j--;
}
printf("Votre suite devient\n");
for(i=0;i<=n-1;i++)
{
printf("%d ",t[i]);
}
printf("\n");
system("pause");
}

4 réponses

  1. jisisv Messages postés 3678 Statut Modérateur 936
     
    Je diminuerais la boucle de moitié et introduirais quelques tests et macros:
    johand@osiris: ~/src/CCM/C $ cat reverse.c ;gcc -Wall -o reverse reverse.c ;gcc -Wall -DWITH_J -o reverse_withj reverse.c  
    #include<stdio.h>  
    #include<stdlib.h>  
    
    #define MAX 10000  
    #define min(a,b) (a) < (b) ? (a) : (b)  
    #define max(a,b) (a) > (b) ? (a) : (b)  
    int t[MAX];  
    int n, temp, i, j;  
    
    int  main(int argc, char* argv[])  
    {  
      /*  
      system("cls");  
      */  
      printf("Entrer la longueur du tableau\n(Ne dépassé pas %d éléments)\n", MAX);  
      scanf("%d", &n);  
      n = min(MAX, n);  
      n = max(0, n);  
    
      for(i=0; i < n; i++)  
        {  
          printf("Entrer l'élément N°%d\n", i+1);  
          scanf("%d", &t[i]);  
        }  
    #ifdef WITH_J  
      j= n-1;  
      for(i=0; i< n/2 ; i++, j--)  
        {  
          temp = t[i];  
          t[i] = t[j];  
          t[j] =temp;  
        }  
    #else  
      for(i=0; i< n/2 ; i++)  
        {  
          temp = t[i];  
          t[i] = t[n - 1 - i];  
          t[n - 1 - i] =temp;  
        }  
    #endif  
      printf("Votre suite devient:\n");  
      for(i=0; i < n; i++)  
        {  
          printf("%d ",t[i]);  
        }  
      printf("\n");  
      return EXIT_SUCCESS;  
      /*  
      system("pause");  
      */  
    }
    johand@osiris: ~/src/CCM/C $ echo  7   10 11 12 13 14 15 16 | ./reverse 
    Entrer la longueur du tableau
    (Ne dépassé pas 10000 éléments)
    Entrer l'élément N°1
    Entrer l'élément N°2
    Entrer l'élément N°3
    Entrer l'élément N°4
    Entrer l'élément N°5
    Entrer l'élément N°6
    Entrer l'élément N°7
    Votre suite devient:
    16 15 14 13 12 11 10 
    johand@osiris: ~/src/CCM/C $ wc -l data.reverse 
    100001 data.reverse  
    johand@osiris: ~/src/CCM/C $ time ./reverse < data.reverse > /dev/null   
    
    real 0m0.012s  
    user 0m0.008s  
    sys 0m0.004s  
    johand@osiris: ~/src/CCM/C $ time ./reverse_withj < data.reverse > /dev/null   
    
    real 0m0.012s  
    user 0m0.008s  
    sys 0m0.000s  
    


    Tu pourrais éventuellemnt maintenir la variable j, Mais sur un vecteur de 100000 éléments, il n'y a pas de différence sensible dans la durée de traitement.

    Gates gave ^W sold you the windows.
    GNU gave us the whole house.(Alexandrin)
    1
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    Mon avis sur le code :
    Ce n'est pas void main() mais : int main(void) ou int main(int argc, char **argv) : avec un return 0; en fin.
    Evite le system("cls");
    Evite les variables globales.
    Plutôt que : <= n-1 on met plutôt en C : < n (c'est pareil, mais c'est d'usage).
    Vérifie la valeur n pour t'assurer qu'elle est bien inférieure à 100 : sinon ça bugguera.
    1
  3. sawnet007 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
     
    Merci pour vos avis et vos conseils
    0
  4. Utilisateur anonyme
     
    Salut,

    Je l'aurais vu comme ça (Affichage uniquement) :
    Le principe est le même dans la 3ème boucle si on veut enregistrer le résultat.

    #include<stdio.h>   
    #include<stdlib.h>   
    
    int t[100];   
    int n   
    
    void main()   
    {   
    system("cls");   
    printf("Entrez la longueur du tableau\n(Ne dépassez pas 99 éléments)\n");   
    scanf("%d",&n);   
    system("cls");   
    for(i=0;i<=n-1;i++)   
    {   
    printf("Entrez l'élément N°%d\n",i+1);   
    scanf("%d",&t[i]);   
    system("cls");   
    }   
    printf("Votre suite devient :\n");   
    for(i=n-1;i>=0;i--)   
    {   
    printf("%d ",t[i]);    
    }   
    printf("\n");   
    system("pause");    
    }


    Musicalement,
    DJ Fire-Bl@ck.
    -1