/*@ requires valid_string(argv); @ ensures \result==string_len(argv); */ int countOne(char* argv) { int r=0; if(argv[0]==0) return 0; r++; r+=countOne(argv+1); return r; }
/* Calcul de la longueur d'une chaine */ int countOne(char* argv) { int r=0; switch (argv[0]) { case 0: return 0; case 1: case 2: case 3: default: r++; r+=countOne(argv+1); } return r; }
int countTransfer(int a,int b){ int x = a^b; return countOne(x); }
/*@ requires argc>0 && \valid(argv) && \valid_range(argv,0,argc) && (\forall integer i; 0<=i<argc ==> valid_string(argv[i])); @ ensures \result>=0; */ int count(int argc, char** argv) { // printf(" --> '%s'\n",argv[0]); int s=countOne(argv[0]); if (argc>1) s+=count(argc-1,argv+1); return s; }
/* Somme de chacune des longueurs */ int count(int argc, char** argv) { if (argc>0) return countOne(argv[0])+count(argc-1,argv+1); return 0; }