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");
}
A voir également:

4 réponses

jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   934
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
sawnet007 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour vos avis et vos conseils
0
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