concours de code

concours de code - C - Programmation

Marsh Posté le 02-08-2003 à 17:56:45    

suite au topic du même nom en C++, voici le même pour les inconditionnels du C.
 
sont acceptés: norme ANSI, C9x
 
#1 :le premier défi était: afficher les arguments de la ligne de commande dans l'ordre lexicographique (donné par strcmp par exemple)
 
l'objectif est un code clair, propre, sur (s'il en est) et élégant
 
 
edit: pour ceux qui utilise gcc, le code doit compilé sans Warnings avec
 
gcc -Wall -std=c89 -pedantic
gcc -Wall -ansi -pedantic
 
pour la norme ansi
 
gcc -Wall -std=c99 -pedantic
 
pour C99
 
les autres normes sont mineures


Message édité par Taz le 02-08-2003 à 18:08:32
Reply

Marsh Posté le 02-08-2003 à 17:56:45   

Reply

Marsh Posté le 02-08-2003 à 17:58:43    

est ce que les trucs du genre  

Code :
  1. for (int i=0;i<x;i++)

sont acceptés ou alors faut il un total respect du C sachant que la declaration de i dans la boucle for est du c++ et non du c ?

Reply

Marsh Posté le 02-08-2003 à 18:01:14    

c'est validé C99, donc ça passe sans problème avec un compilateur moderne

Reply

Marsh Posté le 02-08-2003 à 18:16:16    

Code :
  1. // code hrf1.cpp : Defines the entry point for the console application.
  2. //
  3. #include "stdafx.h"
  4. #include <stdlib.h>
  5. #include <string.h>
  6. int compare( const void *arg1, const void *arg2 )
  7. {
  8.    return _stricmp( * ( char** ) arg1, * ( char** ) arg2 );
  9. }
  10. int main(int argc, char* argv[])
  11. {
  12. printf("Affichage des arguments passés\n" );
  13. for (int iterateur=0; iterateur<argc; iterateur++)
  14.  printf("%d : %s\n",iterateur, argv[iterateur]);
  15. qsort((char *)argv, argc, sizeof(char*), compare);
  16. printf("\n\nAffichage des arguments triee\n" );
  17. for( iterateur=0; iterateur<argc; iterateur++)
  18.       printf("%d : %s\n",iterateur, argv[iterateur]);
  19. return 0;
  20. }


 
 
spoiler pour taz uniquement

Spoiler :


En cherchant la syntaxe du qsort dans la msdn j'ai vu un bel exemple tout en bas :/
Mais je savais deja comment faire puisque j'allais voir la syntaxe du qsort.  

Reply

Marsh Posté le 02-08-2003 à 18:20:59    

1) on a dit standard
2) il y a des erreurs
3) ça manque de clareté
( 4) pour des raisons de propretés, j'aimerais qu'on fasse en sorte que argv et argc ne soit pas modifiés)

Reply

Marsh Posté le 02-08-2003 à 18:55:36    

J'ose ?
 
 
Allez, j'ose (c'est du C99) :  
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define INF(a,b) ((!*a?b:(!*b?a:(strcmp (*a, *b) < 0?a:b))))
  4. int main (int argc, char **argv) {
  5.   int again = argc - 1;
  6.   while (again--){
  7.     char **current = argv + 1;
  8.     char **mini = current;
  9.     int pos = argc - 1;
  10.     do {
  11.       mini = INF (current, mini);
  12.       current++;
  13.     } while (--pos);
  14.     printf ("%s%c", *mini, again?' ':'\n');
  15.     *mini = NULL;
  16.   }
  17. }


 
 
[:neowen]


Message édité par kadreg le 02-08-2003 à 19:00:01

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 02-08-2003 à 19:01:47    

A mon tour :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. static int compare(const void *first, const void *second){
  5.     return strcmp(*(char **)first, *(char **)second) ;
  6. }
  7. int main(int argc, char *argv[]){
  8.  
  9.     if(argc > 1){
  10.         int nbArg = argc - 1 ;
  11.         char **pArg = (char **)malloc(nbArg * sizeof(char *)) ;
  12.         for(int i = 0, j = 1; i < nbArg; ++i, ++j){
  13.             pArg[i] = (char *)malloc(sizeof(char) * (strlen(argv[j]) + 1)) ;
  14.             strcpy(pArg[i], argv[j]) ;
  15.         }
  16.         qsort(pArg, nbArg, sizeof(char *), compare) ;
  17.         for(int i = 0; i < nbArg; ++i){
  18.             printf("%s\n", pArg[i]) ;
  19.             free(pArg[i]) ;
  20.         }
  21.         free(pArg) ;
  22.     }else{
  23.         printf("Aucun paramètre de passé !\n" ) ;
  24.     }
  25. }


Message édité par *syl* le 02-08-2003 à 19:04:49
Reply

Marsh Posté le 02-08-2003 à 19:25:15    

kadreg a écrit :

J'ose ?
 
 
Allez, j'ose (c'est du C99) :  
 

Code :


 
 
[:neowen]

1) ta macro est horrible, et tres mal ecrite
2) c bien mais ça ne fait pas ce qui est demandé

Reply

Marsh Posté le 02-08-2003 à 19:27:57    

Taz a écrit :

1) ta macro est horrible, et tres mal ecrite


 
Je sais, je voulais une macro moche et de l'arithmétique de pointeur à la con.
 

Taz a écrit :


2) c bien mais ça ne fait pas ce qui est demandé


 
 :heink:  
 
exemple ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 02-08-2003 à 19:29:05    

*Syl* a écrit :

A mon tour :


bien! juste y a des allocations dont on aurait pu se passer et personne n'a l'air d'apprécié les const... vos compilaeurs devraient vous avertir il me semble
 
 
ma solution, tres proche de celle de Syl
 

Code :
  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. int lexsort(const void *a, const void *b)
  5. {
  6.   return strcmp(
  7.  *(const char**)a,
  8.  *(const char**)b
  9.  );
  10. }
  11. int main(int argc, char **argv)
  12. {
  13.   int i=0;
  14.   const char * *args=malloc(argc * sizeof *args);
  15.   memcpy(args, argv, argc * sizeof *args);
  16.   qsort(args, argc, sizeof *args, lexsort);
  17.   for(i=0; i<argc; ++i)
  18.     {
  19.       printf("%s ", args[i]);
  20.     }
  21.   putchar('\n');
  22.   free(args);
  23.   return 0;
  24. }


Message édité par Taz le 02-08-2003 à 19:29:59
Reply

Marsh Posté le 02-08-2003 à 19:29:05   

Reply

Marsh Posté le 02-08-2003 à 19:34:31    

kadreg a écrit :


 
Je sais, je voulais une macro moche et de l'arithmétique de pointeur à la con.
 
 
 
 :heink:  
 
exemple ?

1) ben elle est laide comme tout, surtout que tu t'en sert qu'une fois, on avait dit 'programme clair'. elle est illisible. je parie qu'au début t'avais ecrit INF(truc++,) et zou tu t'es vite rattrapé... non [:dawa]
 
2) oops, j'ai lu trop vite... désolé. cela dit, t'aurais pu faire un effort en réutilisant qsort
 
3) on va dire que t'a le programme le plus lent, avec le plus de tests inutiles (comme celui du printf par exemple)

Reply

Marsh Posté le 02-08-2003 à 19:38:23    

Taz a écrit :


1) ben elle est laide comme tout, surtout que tu t'en sert qu'une fois, on avait dit 'programme clair'. elle est illisible. je parie qu'au début t'avais ecrit INF(truc++,) et zou tu t'es vite rattrapé... non [:dawa]


 
[:rotflmao] oui
 
 

Taz a écrit :


3) on va dire que t'a le programme le plus lent, avec le plus de tests inutiles (comme celui du printf par exemple)

 
 
J'avais envie de faire un peu porc :o
 


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 02-08-2003 à 19:40:07    

Syl & kadreg, je retire les bons points.
 
vous pensez pas qu'une fonction déclarée comme retourant un int doit effectivement retourner un int   :D
 
edit: voir plus bas


Message édité par Taz le 02-08-2003 à 20:03:30
Reply

Marsh Posté le 02-08-2003 à 19:40:18    

Taz a écrit :

1) on a dit standard
2) il y a des erreurs
3) ça manque de clareté
( 4) pour des raisons de propretés, j'aimerais qu'on fasse en sorte que argv et argc ne soit pas modifiés)


 - qu'est ce qui n'est pas standard?
 - quelles sont mes erreurs?
 - ok
 - ok aussi

Reply

Marsh Posté le 02-08-2003 à 19:41:26    

je suis physiquement [:rofl] (j'ai de la moquette)

Reply

Marsh Posté le 02-08-2003 à 19:42:10    

Taz a écrit :


bien! juste y a des allocations dont on aurait pu se passer

Pas con d'avoir réutilisé les pointeurs vers les arguments, j'y avais pas pensé d'où mes malloc et strcpy :/

Reply

Marsh Posté le 02-08-2003 à 19:42:16    

Taz a écrit :

Syl & kadreg, je retire les bons points.
 
vous pensez pas qu'une fonction déclarée comme retourant un int doit effectivement retourner un int   :D  


 
http://forum.hardware.fr/forum2.ph [...] 54#t475470
 
C'est pas pareil en C99 ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 02-08-2003 à 19:43:24    

polo021 a écrit :


 - qu'est ce qui n'est pas standard?
 - quelles sont mes erreurs?
 - ok
 - ok aussi


1) st truc afx, _stricmp (en plus j'avais dit strcmp)
2) sort((char *)argv ...

Reply

Marsh Posté le 02-08-2003 à 19:45:23    

non, mais la pluspart des compilos sont laxistes.
d'ailleurs, le C99 a suivi le C++, le prototype de main doit etre int
la moralité, c'est que beaucoup de compilos sont faillibles, il faut toujours jeter un oeil

Reply

Marsh Posté le 02-08-2003 à 19:48:13    

Taz a écrit :

Syl & kadreg, je retire les bons points.
 
vous pensez pas qu'une fonction déclarée comme retourant un int doit effectivement retourner un int   :D  

http://www.comeaucomputing.com/techtalk/c99/#return0
http://www.comeaucomputing.com/techtalk/#voidmain

Reply

Marsh Posté le 02-08-2003 à 19:52:30    

je suis entrain de lire un draf C99 pour m'en assurer. c'est une doc de compilo que t'as la, donc prudence

Reply

Marsh Posté le 02-08-2003 à 19:54:41    

et ben voilà, on a appris quelque chose
 

Citation :

5.1.2.2.3 Program termination 1 If the return type of the main function is a type compatible with int, a return from the initial call to the main function is equivalent to calling the exit function with the value returned by the main function as its argument;9) reaching the } that terminates the main function returns a value of 0. If the return type is not compatible with int, the termination status returned to the host environment is unspecified.


 
edit: je m'étais jamais trop posé la question puisque les exemples du draf sont plein de return 0


Message édité par Taz le 02-08-2003 à 20:00:57
Reply

Marsh Posté le 02-08-2003 à 19:56:05    

Taz a écrit :

je suis entrain de lire un draf C99 pour m'en assurer. c'est une doc de compilo que t'as la, donc prudence

Ouep c'est vrai mais d'après ce qu'ils marquent, ils parlent que de la norme et pas de leur compilo (The intent of this page is to address questions about C99), enfin confirme comme ça on est sûr :)

Reply

Marsh Posté le 02-08-2003 à 20:51:33    

voici mon code plus standard, j'ai eu la flemme de copier les param dans un nouveau tableau mais le principe est là.

Code :
  1. #include "stdafx.h"
  2. #include <string.h>
  3. int main(int argc, char* argv[])
  4. {
  5. char* temp;
  6. for (int iterateur =0; iterateur<argc;iterateur++)
  7. {
  8.  for ( int sub_iterateur = iterateur; sub_iterateur<argc ; sub_iterateur++)
  9.  {
  10.   if (strcmp(argv[iterateur],argv[sub_iterateur]) > 0)
  11.   {
  12.    temp = strdup(argv[iterateur]);
  13.    argv[iterateur] = argv[sub_iterateur];
  14.    argv[sub_iterateur] = temp;
  15.   }
  16.  }
  17. }
  18. for (iterateur =0; iterateur<argc;iterateur++)
  19.  printf("%d : %s\n",iterateur,argv[iterateur]);
  20. return 0;
  21. }


 
C'est bon?

Reply

Marsh Posté le 02-08-2003 à 20:53:24    

#include "stdafx.h" :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 02-08-2003 à 20:55:06    

kadreg a écrit :

#include "stdafx.h" :o

Citation :

unexpected end of file while looking for precompiled header directive

 :o

Reply

Marsh Posté le 02-08-2003 à 20:55:26    

1) t'es pas tres doué quand tu decides de réinventer le tri
2) iterateur, c'est quoi ce nom de variable à la con
3) peut etre qu'il te faut ton bordlaxfx.h pour compiler, mais c'est pas un entete standard
4) strdup est pas standard
5) manque un milliard de free
6) déclare temp au moment de son initialisation

Reply

Marsh Posté le 02-08-2003 à 20:59:23    

Taz a écrit :

1) t'es pas tres doué quand tu decides de réinventer le tri
2) iterateur, c'est quoi ce nom de variable à la con
3) peut etre qu'il te faut ton bordlaxfx.h pour compiler, mais c'est pas un entete standard
4) strdup est pas standard
5) manque un milliard de free
6) déclare temp au moment de son initialisation


1) mon tri est tres simple et fonctionne :o
2) on s'en bat les couilles avec un batteur electrique :o
3) ranafout faut quand meme bien que je etste pour voir si ca marche non? :o
4) comment on sait que c'est pas standard?  
5) ou ca?
6) ouais pourquoi pas mais bon [:sinclaire]

Reply

Marsh Posté le 02-08-2003 à 21:01:35    

polo021 a écrit :


1) mon tri est tres simple et fonctionne :o
2) on s'en bat les couilles avec un batteur electrique :o
3) ranafout faut quand meme bien que je etste pour voir si ca marche non? :o
4) comment on sait que c'est pas standard?  
5) ou ca?
6) ouais pourquoi pas mais bon [:sinclaire]

1) tu peux faire la meme chose en mieux en une ligne
2) non, voir le sujet du topic
3) idem
4) ça l'est pas, voir ta documentation
5) idem
6) idem

Reply

Marsh Posté le 02-08-2003 à 22:01:49    

kadreg a écrit :

J'ose ?
 
 
Allez, j'ose (c'est du C99)

au fait, au lieu de nous pondre des macros, le C99 dispose du mot-clef 'inline' 'as fast as macro'
 
fais en bon usage

Reply

Marsh Posté le 02-08-2003 à 22:47:29    

Code :
  1. /***********************************************/
  2. /*Prog de tri tout simple, algo du tri a bulles*/
  3. /***********************************************/
  4. #include <stdio.h>
  5. #include <string.h>
  6. /*Tri a bulles; pas le + efficace ms de loin le + simple*/
  7. void tribulle(char **tab, int felem, int nbelem){
  8.   int i, j;
  9.   char *tmp;
  10.  
  11.   for(i=felem; i<felem+nbelem; i++)
  12.     for(j=felem+nbelem-1; j>felem; j--){
  13.       if( strcmp(tab[j], tab[j-1])<0 ){
  14. tmp=tab[j-1];
  15. tab[j-1]=tab[j];
  16. tab[j]=tmp;
  17.       }
  18.     }
  19.  
  20. }
  21. int main(int argc, char **argv) {
  22.   int i;
  23.  
  24.   if( argc>1 ){  /*a priori jamais plus grand k'1 int, faut esperer en tt k*/
  25.     tribulle(argv, 1, argc-1);
  26.    
  27.     printf("Arguments tries:\n" );
  28.    
  29.     for(i=1; i<argc; i++)
  30.       printf("%s\n", argv[i]);
  31.   }else {
  32.     printf("Ce pti prog classe skon lui passe alors si on lui passe rien !\nUsage: defi arg1 arg2 ... argn\n" );
  33.     return 1;
  34.   }
  35.  
  36.   return 0;
  37. }


 
 
je précise juste que ce n'est pas de moi mais d'un copain de promo !


Message édité par tchoupinette le 02-08-2003 à 22:50:36

---------------
http://membres.lycos.fr/axelfa
Reply

Marsh Posté le 02-08-2003 à 22:51:34    

Tchoupinette a écrit :


je précise juste que ce n'est pas de moi mais d'un copain de promo !  

alors ça va.
pourquoi tout le monde fais du tri par bulles à gogo: y a pasplus mauvais, alos que le tri par sélection est aussi simple    [:spamafote] et déjà meilleur. encore la palme des bons noms de variables felem, il m'a fallu un moment pour penser que ct peut être first-element :sweat:

Reply

Marsh Posté le 02-08-2003 à 22:55:55    

Taz a écrit :

alors ça va.
pourquoi tout le monde fais du tri par bulles à gogo: y a pasplus mauvais, alos que le tri par sélection est aussi simple    [:spamafote] et déjà meilleur. encore la palme des bons noms de variables felem, il m'a fallu un moment pour penser que ct peut être first-element :sweat:  


 
Alors il te dit que son tri à bulles marche tres bien, que ses noms de variable sont tres bien et que oui c'est first element.
 
 :kaola: ( c lui qui a choisi le smiley pas moi)


---------------
http://membres.lycos.fr/axelfa
Reply

Marsh Posté le 02-08-2003 à 23:31:14    

1/ Le tri à bulle c'est mal
2/

Citation :

pour des raisons de propretés, j'aimerais qu'on fasse en sorte que argv et argc ne soit pas modifiés


 
:D

Reply

Marsh Posté le 02-08-2003 à 23:47:19    

un autre prog de la meme personne :
 
 

Code :
  1. /**********************************************************/
  2. /*Prog de tri tout simple, algo du tri rapide (quick sort)*/
  3. /*Ce prog respecte toutes les normes du C, il est propre et*/
  4. /*efficace et n'effectue aucune copie de chaines*/
  5. /**********************************************************/
  6. #include <stdio.h>
  7. #include <string.h>
  8. /*tri rapide: Le plus efficace de tous !!*/
  9. int partition(char **tableau, int deb, int fin) {
  10.     int compt=deb;
  11.     char *pivot=tableau[deb];
  12.     int i;
  13. char *tmp;
  14.     for(i=deb+1;i<=fin;i++) {
  15.         if(strcmp(tableau[i], pivot)<0) {
  16.             compt++;
  17.   tmp=tableau[compt];
  18.   tableau[compt]=tableau[i];
  19.   tableau[i]=tmp;
  20.         }
  21.     }
  22. tmp=tableau[compt];
  23. tableau[compt]=tableau[deb];
  24. tableau[deb]=tmp;
  25.     return(compt);
  26. }
  27. void tri_rapide_bis(char **tableau,int debut,int fin) {
  28.     if(debut<fin) {
  29.         int pivot=partition(tableau,debut,fin);
  30.         tri_rapide_bis(tableau,debut,pivot-1);
  31.         tri_rapide_bis(tableau,pivot+1,fin);
  32.     }
  33. }
  34. void tri_rapide(char **tableau, int deb, int longueur) {
  35.      tri_rapide_bis(tableau, deb, deb+longueur-1);
  36. }
  37. /*******************************************/
  38. int main(int argc, char **argv) {
  39.   int i;
  40.  
  41.   if( argc>1 ){  /*a priori jamais plus grand k'1 int, faut esperer en tt k*/
  42.      tri_rapide(argv, 1, argc-1);
  43.     printf("Arguments tries:\n" );
  44.    
  45.     for(i=1; i<argc; i++)
  46.       printf("%s\n", argv[i]);
  47.   }else {
  48.     printf("Ce pti prog classe skon lui passe alors si on lui passe rien !\nUsage: defi arg1 arg2 ... argn\n" );
  49.     return 1;
  50.   }
  51.  
  52.   return 0;
  53. }


 
 il me dit de dire que ni argc ni argv ne sont modifiés.²


Message édité par tchoupinette le 02-08-2003 à 23:49:33

---------------
http://membres.lycos.fr/axelfa
Reply

Marsh Posté le 02-08-2003 à 23:51:40    

un ajout de sa part :
 

Code :
  1. copie=(char **)malloc(sizeof(char *)*argc);
  2. for(i=0; i<argc; i++)
  3.  copie[i]=argv[i];
  4. /*C mieu la ? :)*/
  5. tri_rapide(copie, 1, argc-1);


---------------
http://membres.lycos.fr/axelfa
Reply

Marsh Posté le 02-08-2003 à 23:54:27    

alors maitre taz, jvois bien que ton code est clair et quand meme très simple
 
tu peux m'expliquer l'utilisation du qsort, comment ca fonctionne et pk c'est plus rapide comme tri que le tri à bulle (voir meme me le montrer en mathématique)


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 02-08-2003 à 23:55:04    

Tchoupinette a écrit :

il me dit de dire que ni argc ni argv ne sont modifiés.²

Code :
  1. printf("Arguments tries:\n" );
  2. for(i=1; i<argc; i++) printf("%s\n", argv[i]);

Il en est sûr ? :whistle:

Reply

Marsh Posté le 02-08-2003 à 23:55:15    

Tchoupinette a écrit :

un autre prog de la meme personne :
 
 

Code :
  1. /**********************************************************/
  2. /*Prog de tri tout simple, algo du tri rapide (quick sort)*/
  3. /*Ce prog respecte toutes les normes du C, il est propre et*/
  4. /*efficace et n'effectue aucune copie de chaines*/
  5. /**********************************************************/
  6. #include <stdio.h>
  7. #include <string.h>
  8. /*tri rapide: Le plus efficace de tous !!*/
  9. int partition(char **tableau, int deb, int fin) {
  10.     int compt=deb;
  11.     char *pivot=tableau[deb];
  12.     int i;
  13. char *tmp;
  14.     for(i=deb+1;i<=fin;i++) {
  15.         if(strcmp(tableau[i], pivot)<0) {
  16.             compt++;
  17.   tmp=tableau[compt];
  18.   tableau[compt]=tableau[i];
  19.   tableau[i]=tmp;
  20.         }
  21.     }
  22. tmp=tableau[compt];
  23. tableau[compt]=tableau[deb];
  24. tableau[deb]=tmp;
  25.     return(compt);
  26. }
  27. void tri_rapide_bis(char **tableau,int debut,int fin) {
  28.     if(debut<fin) {
  29.         int pivot=partition(tableau,debut,fin);
  30.         tri_rapide_bis(tableau,debut,pivot-1);
  31.         tri_rapide_bis(tableau,pivot+1,fin);
  32.     }
  33. }
  34. void tri_rapide(char **tableau, int deb, int longueur) {
  35.      tri_rapide_bis(tableau, deb, deb+longueur-1);
  36. }
  37. /*******************************************/
  38. int main(int argc, char **argv) {
  39.   int i;
  40.  
  41.   if( argc>1 ){  /*a priori jamais plus grand k'1 int, faut esperer en tt k*/
  42.      tri_rapide(argv, 1, argc-1);
  43.     printf("Arguments tries:\n" );
  44.    
  45.     for(i=1; i<argc; i++)
  46.       printf("%s\n", argv[i]);
  47.   }else {
  48.     printf("Ce pti prog classe skon lui passe alors si on lui passe rien !\nUsage: defi arg1 arg2 ... argn\n" );
  49.     return 1;
  50.   }
  51.  
  52.   return 0;
  53. }


 
 il me dit de dire que ni argc ni argv ne sont modifiés.²


 
ouais mais la regarde la longueur du code comparé celui de taz, et ca doit etre plus lent


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 02-08-2003 à 23:56:50    

burgergold a écrit :

alors maitre taz, jvois bien que ton code est clair et quand meme très simple
 
tu peux m'expliquer l'utilisation du qsort, comment ca fonctionne et pk c'est plus rapide comme tri que le tri à bulle (voir meme me le montrer en mathématique)

[:google]  
http://www.cs.princeton.edu/~ah/al [...] kSort.html

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed