Bonsoir, j'ai un tp langage c a faire jusque demain cependant le prof ne fait plus cours en visio(plus de tp non plus), tout seul j'arrive pas a grand chose je bloque a la question : "Écrire une fonction longueur qui calcule et retourne le nombre de caractères contenus dans une chaîne de caractères donnée". Ca a l'air simple mais je dois utiliser des pointeurs : " les chaînes doivent être manipulées directement via la notation pointeur (utilisation de l’* et non des [ ])". SVP si quelqun a le temps pour m'aider c'est plutot urgent
donne tout l'énoncé
Si je comprend bien il te faut créer une fonction qui compte le nombre de caractère d'une chaine (tableau de caractère) sans passer par copie (c'est à dire sans prendre la chaine en paramètre).
Tu devrai avoir un main comme ça :
#include <stdio.h>
void main(){
Char myString[] = "coucou";
int n = sizeOfString():
}
Il ne te reste plus qu'à faire la fonction en question, qui ne prend pas de paramètre.
Est-ce que ça répond à ton énoncé ou bien j'ai mal compris ?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main() {
int longueur(char*);
char text[] = "Hello";
printf("%d", longueur(text));
}
int longueur(char* text) {
return strlen(text);
}
Le 01 décembre 2020 à 21:46:00 dechet_s0cial a écrit :
donne tout l'énoncé
On s’intéresse dans cet exercice à la manipulation de chaînes de caractères et on s’interdit l’utilisation
des fonctions prédéfinies dans string.h. De plus, la longueur d’une chaîne de caractères ne doit pas être
utilisée comme paramètre des sous-programmes et les chaînes doivent être manipulées directement via la
notation pointeur (utilisation de l’* et non des [ ]).
1. Écrire une fonction longueur qui calcule et retourne le nombre de caractères contenus dans une chaîne
de caractères donnée.
2. Écrire une fonction affiche qui affiche à l’écran un à un les caractères d’une chaîne de caractère
donnée, et termine par un retour à la ligne.
3. Écrire une fonction rech qui détermine si un caractère donné est dans une chaîne de caractères donnée.
4. Écrire une fonction recop qui recopie une chaîne donnée dans une autre.
5. Écrire une fonction concat qui recopie une chaîne donnée à la suite d’une autre chaîne donnée.
6. Écrire une fonction compare qui compare le contenu de deux chaînes de caractères données. Le sousprogramme retournera 0 si les deux chaînes sont identiques, 1 (respectivement -1) si la première chaîne
vient après (resp. avant) la seconde, selon l’ordre alphabétique.
7. Écrire une fonction contient qui retourne true si une chaîne donnée est contenue dans une autre
(donnée également), false sinon.
8. Écrire un programme pour tester ces différents sous-programmes
en gros je bloque pour tour, enfin je sais utiliser des pointeurs pour des variables mais avec des tableaux bof, mais le prof qui fait plus de cours depuis 1 mois y compris les tp comment tu veux faire tt seul
Pour te passer de string.h, tu peux simplement parcourire ta chaine jusqu'au caractère \0.
Qu'est-ce qui te pose problème dans tes exercices, c'est l'algorithmie ou juste l'utilisation des pointeurs ?
Tu devrais faire un cours ou 2 dessus pour te familiariser, ça se trouve facilement sur internet(openclassroom, developez.com).
Apprendre la programmation c'est aussi savoir chercher des ressources, si ton prof ne t'aide pas, faut peut-être chercher des solutions t'aurais pu bosser de ton coté depuis 1mois
main() {
int longueur(char*);
char text[] = "Hello";
printf("%d", longueur(text));
}
int longueur(char* text) {
int i=0;
char a='0';
while(a != '\0') {
a = text[i];
i++;
}
return i-1;
}
int longueur(char* str) {
int taille = 0;
while (*str!= '\0')
{
taille++;
str++;
}
return taille;
}
Par contre t'attends pas a ce qu'on fasse tout les exercices, faut que tu poses des questions précises, le but d'un forum c'est l'entraide pas d'être un solveur de td.
Le 01 décembre 2020 à 21:54:58 Suzuka_Nakamoto a écrit :
Si je comprend bien il te faut créer une fonction qui compte le nombre de caractère d'une chaine (tableau de caractère) sans passer par copie (c'est à dire sans prendre la chaine en paramètre).
Tu devrai avoir un main comme ça :#include <stdio.h> void main(){ Char myString[] = "coucou"; int n = sizeOfString(): }
Il ne te reste plus qu'à faire la fonction en question, qui ne prend pas de paramètre.
oui faut pas passer directement par un tableau, mais pour la fonction je sais pas trop utiliser les pointeurs pour calculer ça,
j'aurais fais ça moi :
int longeur(char t)
{ int i ;
i = 0 ;
while(t[i] != '\0')
i++ ;
return(i) ;
}
mais sans les pointeurs...
void affiche(char* str) {
while (*str != '\0')
{
printf("%c", *str);
str++;
}
printf("\n");
}
Le 01 décembre 2020 à 22:09:28 cybevil a écrit :
Pour te passer de string.h, tu peux simplement parcourire ta chaine jusqu'au caractère \0.
Qu'est-ce qui te pose problème dans tes exercices, c'est l'algorithmie ou juste l'utilisation des pointeurs ?Tu devrais faire un cours ou 2 dessus pour te familiariser, ça se trouve facilement sur internet(openclassroom, developez.com).
Apprendre la programmation c'est aussi savoir chercher des ressources, si ton prof ne t'aide pas, faut peut-être chercher des solutions t'aurais pu bosser de ton coté depuis 1mois
main() { int longueur(char*); char text[] = "Hello"; printf("%d", longueur(text)); } int longueur(char* text) { int i=0; char a='0'; while(a != '\0') { a = text[i]; i++; } return i-1; }
bah le cours d'info est sans evaluation ecrite + prof qui fait pas de visio ca m'a vrmt pas motivé, j'ai relus vite fait des cours sur internet mais sans plus. Et merci je crois que t'as répondu a la question, c'est les pointeurs et les tableaux dynamiques ou j'ai du mal si tu veux. Mais dans le main pourquoi tu declares la fonction char* ?
Le 01 décembre 2020 à 22:23:24 NIDHelp12 a écrit :
Le 01 décembre 2020 à 22:09:28 cybevil a écrit :
Pour te passer de string.h, tu peux simplement parcourire ta chaine jusqu'au caractère \0.
Qu'est-ce qui te pose problème dans tes exercices, c'est l'algorithmie ou juste l'utilisation des pointeurs ?Tu devrais faire un cours ou 2 dessus pour te familiariser, ça se trouve facilement sur internet(openclassroom, developez.com).
Apprendre la programmation c'est aussi savoir chercher des ressources, si ton prof ne t'aide pas, faut peut-être chercher des solutions t'aurais pu bosser de ton coté depuis 1mois
main() { int longueur(char*); char text[] = "Hello"; printf("%d", longueur(text)); } int longueur(char* text) { int i=0; char a='0'; while(a != '\0') { a = text[i]; i++; } return i-1; }
bah le cours d'info est sans evaluation ecrite + prof qui fait pas de visio ca m'a vrmt pas motivé, j'ai relus vite fait des cours sur internet mais sans plus. Et merci je crois que t'as répondu a la question, c'est les pointeurs et les tableaux dynamiques ou j'ai du mal si tu veux. Mais dans le main pourquoi tu declares la fonction char* ?
C'est une habitude de mon prof de C. Normalement c'est mieux de faire ainsi si tu ne déclare pas ta fonction dans un autre fichier. Après j'imagine que ça fonctionne sans.
Le 01 décembre 2020 à 22:16:49 dechet_s0cial a écrit :
void affiche(char* str) { while (*str != '\0') { printf("%c", *str); str++; } printf("\n"); }
ok merci gros , c'etait plus la question 1 avec l'utilisation des pointeurs et le tableau ou je bloquais mais merci qd meme
Le 01 décembre 2020 à 22:26:27 cybevil a écrit :
Le 01 décembre 2020 à 22:23:24 NIDHelp12 a écrit :
Le 01 décembre 2020 à 22:09:28 cybevil a écrit :
Pour te passer de string.h, tu peux simplement parcourire ta chaine jusqu'au caractère \0.
Qu'est-ce qui te pose problème dans tes exercices, c'est l'algorithmie ou juste l'utilisation des pointeurs ?Tu devrais faire un cours ou 2 dessus pour te familiariser, ça se trouve facilement sur internet(openclassroom, developez.com).
Apprendre la programmation c'est aussi savoir chercher des ressources, si ton prof ne t'aide pas, faut peut-être chercher des solutions t'aurais pu bosser de ton coté depuis 1mois
main() { int longueur(char*); char text[] = "Hello"; printf("%d", longueur(text)); } int longueur(char* text) { int i=0; char a='0'; while(a != '\0') { a = text[i]; i++; } return i-1; }
bah le cours d'info est sans evaluation ecrite + prof qui fait pas de visio ca m'a vrmt pas motivé, j'ai relus vite fait des cours sur internet mais sans plus. Et merci je crois que t'as répondu a la question, c'est les pointeurs et les tableaux dynamiques ou j'ai du mal si tu veux. Mais dans le main pourquoi tu declares la fonction char* ?
C'est une habitude de mon prof de C. Normalement c'est mieux de faire ainsi si tu ne déclare pas ta fonction dans un autre fichier. Après j'imagine que ça fonctionne sans.
ok ca marche merci
T'es en quelle filière ?
Les codes présentés ci dessus ne sont clairement pas très optimisés. Une chaine de caractère en C n'est pas forcément un tableau de caractère (loin de là d'ailleurs).
Voici un code plus adéquat :
#include <stdio.h>
#include <stdlib.h>
int main()
{
int longueur(char*);
char* texteExemple = "Bonjour";
printf("%d", longueur(texteExemple));
}
int longueur(char* texte)
{
int i = 0;
while(*(texte+i) != NULL)
i++;
return i;
}
De plus, pour ce qui est du NULL
tu aurais pu utiliser le caractère '\0'
qui est tout aussi viable (mais lorsqu'il s'agit de pointeurs, je préfère favoriser le NULL tandis que pour les tableaux de caractères, le \0 est à favoriser)
[11:23:47] <AtomeDazote>
Les codes présentés ci dessus ne sont clairement pas très optimisés. Une chaine de caractère en C n'est pas forcément un tableau de caractère (loin de là d'ailleurs).
Bah qu'est ce que ça peut être d'autre alors ?
Le 06 décembre 2020 à 12:22:56 lokilok a écrit :
[11:23:47] <AtomeDazote>
Les codes présentés ci dessus ne sont clairement pas très optimisés. Une chaine de caractère en C n'est pas forcément un tableau de caractère (loin de là d'ailleurs).Bah qu'est ce que ça peut être d'autre alors ?
Je me suis mal exprimé, je voulais dire qu'on est pas obligé d'utiliser la notarion avec des crochets [ ] pour représenter un tableau (et celle-ci est moins intuitive pour ma part)