Se connecter

Informatique

Programmation

Sujet : [LANGAGE C] besoin d'aide pointeurs urgent, prof ne fait plus de visio
1
NidHelp12
Niveau 8
01 décembre 2020 à 21:16:52

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

dechet_s0cial
Niveau 10
01 décembre 2020 à 21:46:00

donne tout l'énoncé

Suzuka_Nakamoto
Niveau 10
01 décembre 2020 à 21:54:58

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.

cybevil
Niveau 17
01 décembre 2020 à 21:55:14

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);
}
NidHelp12
Niveau 8
01 décembre 2020 à 22:01:26

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

cybevil
Niveau 17
01 décembre 2020 à 22:09:28

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;
}
dechet_s0cial
Niveau 10
01 décembre 2020 à 22:11:33
int longueur(char* str) {
   
     int taille = 0;
     while (*str!= '\0')
     {
          taille++;
          str++;
     }
     return taille;
}
cybevil
Niveau 17
01 décembre 2020 à 22:13:52

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.

NidHelp12
Niveau 8
01 décembre 2020 à 22:14:52

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...

dechet_s0cial
Niveau 10
01 décembre 2020 à 22:16:49
void affiche(char* str) {
    while (*str != '\0')
     {
          printf("%c", *str);
          str++;
     }
     printf("\n");
}
NidHelp12
Niveau 8
01 décembre 2020 à 22:23:24

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* ?

cybevil
Niveau 17
01 décembre 2020 à 22:26:27

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.

NidHelp12
Niveau 8
01 décembre 2020 à 22:26:28

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 :ok: , c'etait plus la question 1 avec l'utilisation des pointeurs et le tableau ou je bloquais mais merci qd meme

NidHelp12
Niveau 8
01 décembre 2020 à 22:27:58

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

ForumDeFou
Niveau 33
03 décembre 2020 à 07:34:45

T'es en quelle filière ?

AtomeDazote
Niveau 8
06 décembre 2020 à 11:23:47

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)

lokilok
Niveau 10
06 décembre 2020 à 12:22:56

[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 ?

AtomeDazote
Niveau 8
23 décembre 2020 à 13:23:09

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)

1
Sujet : [LANGAGE C] besoin d'aide pointeurs urgent, prof ne fait plus de visio
   Retour haut de page
Consulter la version web de cette page