/*@ 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;
}
Exemplo n.º 3
0
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;
}