A voir également:
- Probleme dans une fonction recursive
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Fonction somme excel - Guide
- Fonction trier excel - Guide
- Snapchat ils m'ont ajouté par la fonction recherche - Forum Snapchat
2 réponses
Ce n'était pas la peine d'ouvrir une nouvelle question, il suffisait de mettre le code comme jipicy te l'avais demandé.
Ton code ne tient pas la route:
- que fais-tu de la chaîne entrée par l'utilisateur ? Tu penses qu'en mettant le même nom de variable (en l'occurence 'chn'), il s'agira de la même variable que celle déclarée dans le 'main' ? Et bien ce n'est pas le cas, les variables sont locales. Il ne s'agit pas de résoudre le problème en utilisant des variables globales, mais de passer le 'chn' du 'main' à la fonction.
Au travail!
Ton code ne tient pas la route:
- que fais-tu de la chaîne entrée par l'utilisateur ? Tu penses qu'en mettant le même nom de variable (en l'occurence 'chn'), il s'agira de la même variable que celle déclarée dans le 'main' ? Et bien ce n'est pas le cas, les variables sont locales. Il ne s'agit pas de résoudre le problème en utilisant des variables globales, mais de passer le 'chn' du 'main' à la fonction.
Au travail!
alors voici le changement mais ca ne marche pa #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define dim 100
void fct(char[],int,int*);
main()
{
int n,b=9;
char ch[dim];
printf("enter votre chaine de caractere:\t");
scanf("%s",ch);
n=strlen(ch);
fct(ch,n,&b);
printf("%d",b);
system("PAUSE");
return 0;
}
void fct(char ch[],int n,int *b)
{
if(n>0)
{
if(ch[n-1]=='l')
{
*b++;
fct(ch,n-1,b);
}
else
fct(ch,n-1,b);
}
}
#include<stdlib.h>
#include<string.h>
#define dim 100
void fct(char[],int,int*);
main()
{
int n,b=9;
char ch[dim];
printf("enter votre chaine de caractere:\t");
scanf("%s",ch);
n=strlen(ch);
fct(ch,n,&b);
printf("%d",b);
system("PAUSE");
return 0;
}
void fct(char ch[],int n,int *b)
{
if(n>0)
{
if(ch[n-1]=='l')
{
*b++;
fct(ch,n-1,b);
}
else
fct(ch,n-1,b);
}
}
Attention:
*b++ que veux-tu faire ???
*b++ signifie *(b++) car l'incrémentation est prioritaire sur l'indirection, et je ne pense pas que c'est ce que tu veux (si c'est le cas, oublie car ici 'incrémenter le pointeur sur l'entier' n'a aucun sens).
Alors il faut parenthéser (nouveau verbe ;-) ), ce qui donne: (*b)++;
Nota:
- Au lieu de passer l'entier sous forme de pointeur, ne serait-il pas plus judicieux de choisir une fonction qui retourne un entier...
- A quoi sert-il de passer la longueur de la chaîne ? Ne pourrait-on pas, dans la fonction détecter la fin de chaîne ? Je te laisse deviner comment. J'ai comme l'impression que l'on va diminuer par 2 ou 3 le nombre de lignes de la fonction.
Encore un peu de courage!
*b++ que veux-tu faire ???
*b++ signifie *(b++) car l'incrémentation est prioritaire sur l'indirection, et je ne pense pas que c'est ce que tu veux (si c'est le cas, oublie car ici 'incrémenter le pointeur sur l'entier' n'a aucun sens).
Alors il faut parenthéser (nouveau verbe ;-) ), ce qui donne: (*b)++;
Nota:
- Au lieu de passer l'entier sous forme de pointeur, ne serait-il pas plus judicieux de choisir une fonction qui retourne un entier...
- A quoi sert-il de passer la longueur de la chaîne ? Ne pourrait-on pas, dans la fonction détecter la fin de chaîne ? Je te laisse deviner comment. J'ai comme l'impression que l'on va diminuer par 2 ou 3 le nombre de lignes de la fonction.
Encore un peu de courage!
la longueur de la chaine est , je pense, necessaire car dans le cadre de la recursivité c obligatoire.
MAIS MERCCIIIIIIIIIIIIIIII loupius tu m'a été d'une tres grande aide j'ai effectué le changement " (*b)++;" et ca a marcher donc le programme qui suit marche tres bien (il me detecte le nombre de"1" dans la chaine)
(encore une fois merciii loupius)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define dim 100
void fct(char[],int,int*);
main()
{
int n,b=0;
char ch[dim];
printf("enter votre chaine de caractere:\t");
scanf("%s",ch);
n=strlen(ch);
fct(ch,n,&b);
printf("%d",b);
system("PAUSE");
return 0;
}
void fct(char ch[],int n,int *b)
{
if(n>0)
{
if(ch[n-1]=='1')
{
(*b)++;
fct(ch,n-1,b);
}
else
fct(ch,n-1,b);
}
}
MAIS MERCCIIIIIIIIIIIIIIII loupius tu m'a été d'une tres grande aide j'ai effectué le changement " (*b)++;" et ca a marcher donc le programme qui suit marche tres bien (il me detecte le nombre de"1" dans la chaine)
(encore une fois merciii loupius)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define dim 100
void fct(char[],int,int*);
main()
{
int n,b=0;
char ch[dim];
printf("enter votre chaine de caractere:\t");
scanf("%s",ch);
n=strlen(ch);
fct(ch,n,&b);
printf("%d",b);
system("PAUSE");
return 0;
}
void fct(char ch[],int n,int *b)
{
if(n>0)
{
if(ch[n-1]=='1')
{
(*b)++;
fct(ch,n-1,b);
}
else
fct(ch,n-1,b);
}
}
Je crois que la question posée demandait à compter les chiffres de 0 à 9; moi je propose le programme suivant:
Bon, je sais, il y a des chagrineux qui vont pinailler sur l'instruction ternaire, mais elle existe et je trouve que c'est un bon endroit pour l'utiliser.
D'autre part, j'ai laissé le 'scanf', bien que pour moi c'est à proscrire pour saisir une chaîne de caractères, mais disons que pour un exemple ça convient.
A+.
Bon courage.
#include <ctype.h> #include <stdio.h> #define dim 100 int fct(char* ch) { return ( (*ch) ? (isdigit(*ch) ? fct(ch+1)+1 : fct(ch+1)) : (0) ); } int main() { char ch[dim]; printf("Entrez votre chaine de caracteres: "); scanf("%s", ch); printf("Le nombre de chiffre est: %d\n", fct(ch)); //system("PAUSE"); return 0; }Tu vois il n'y a pas besoin de transmettre, ni de calculer d'ailleurs, la longueur de la chaîne.
Bon, je sais, il y a des chagrineux qui vont pinailler sur l'instruction ternaire, mais elle existe et je trouve que c'est un bon endroit pour l'utiliser.
D'autre part, j'ai laissé le 'scanf', bien que pour moi c'est à proscrire pour saisir une chaîne de caractères, mais disons que pour un exemple ça convient.
A+.
Bon courage.