Pointeur en langage C - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 39 sur 39

Pointeur en langage C



  1. #31
    doul11

    Re : Pointeur en langage C


    ------

    contrairement a que semble penser ma fonction marche bien, je ne poste pas un code sur le forum sans l'avoir testé.

    oui elle le copie le premier espace, mais il sera remplacé par un caractère, si ce caractère est aussi un espace il sera remplacé par le caractère suivant, etc ...

    -----
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  2. #32
    invite3d779cae

    Re : Pointeur en langage C

    Effectivement j'ai lu un peu trop vite. J'ai pas fais attention au fait que tu as utilisé "!=" à la place de "==". L'indice du tableau n'est donc incrémenté que lorsque que le caractère n'est pas un espace.

  3. #33
    invitebf26947a

    Re : Pointeur en langage C

    Merci à tous de vos réponses.

    J'ai compris le truc.

    J'ai fait l'examen.
    L'examen était bourré de pointeurs!! vos conseils, et explications m'ont bien servis.

    Après, il y avait un exo asser dur, il me semble:
    Un utilisateur saisi un un nombre:nb, nb1, nb2.
    Il fallait écrire un programme qui si par exemle on lui donne:
    nb=1234
    nb1=3
    nb2=4

    Nous donnes 1243.
    S'il voit nb1, dans le nombre, il le remplace par nb2, et vice versa, il me semble. Mais je n'ai pas réussi à le faire.

    Merci de tous vos posts qui m'ont été très utile.

  4. #34
    doul11

    Re : Pointeur en langage C

    Citation Envoyé par deyni Voir le message
    Après, il y avait un exo asser dur, il me semble:
    Un utilisateur saisi un un nombre:nb, nb1, nb2.
    Il fallait écrire un programme qui si par exemle on lui donne:
    nb=1234
    nb1=3
    nb2=4

    Nous donnes 1243.
    S'il voit nb1, dans le nombre, il le remplace par nb2, et vice versa, il me semble. Mais je n'ai pas réussi à le faire.
    c'est un peut le même principe que la surpression des espaces : tu transforme les nombres en chaîne, tu lit la chaîne nb chiffre après chiffre, si tu trouve nb1 tu le remplace par nb2 et si tu trouve nb2 tu le remplace par nb1.


    Code:
    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
    int i;
    int nb,nb1,nb2;
    char c[128],c1,c2;
    
    
    //***************** lecture depuis la clavier
    printf("entrer : un nombre,un chiffre,un chiffre\n");
    if( scanf("%i,%1i,%1i",&nb,&nb1,&nb2)!=3 ){printf("erreur de saisie !\n");return(0);}
    
    printf("le programme va tranformer %i comme ceci : (%i->%i) (%i->%i)\n",nb,nb1,nb2,nb2,nb1); 
    
    
    //***************** tranforme les int en chaine de caratère
    sprintf(c,"%i",nb);
    c1=nb1+0x30;
    c2=nb2+0x30;
     
    
    //***************** transformation
    for(i=0;i<strlen(c);i++)
    	{
    	if(c[i]==c1){c[i]=c2;}
    	else
    		{ 
    		if(c[i]==c2){c[i]=c1;}
    		}
    	}
    
    printf("resultat : %s\n",c);
    	
    return(0);
    }
    tu aura remarqué le else dans la boucle de transformation : qu'est-ce qui ce passerait si il n'était pas là ?
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  5. #35
    invitebf26947a

    Re : Pointeur en langage C

    Que c'est difficile, je n'aurai jamais trouvé!!

    Je crois, que si le else est manquant, il y a une recopie.
    c'est ça?

  6. #36
    invite895675d5

    Re : Pointeur en langage C

    Vu que, pour ce problème, tu dois travailler avec des chaines de caractères, tu as une solution pour simplifier le code, c'est de lire directement les données saisies par l'utilisateur sous forme de chaine.
    Cela t'évite toute la partie conversion des chiffres en chaine, cette partie ci peut alors être enlevée :
    Code:
    sprintf(c,"%i",nb);
    c1=nb1+0x30;
    c2=nb2+0x30;
    Notamment la conversion de nb1 et nb2 qui n'est pas du tout instinctive et pour lesquelles "il faut le savoir".

    D'ailleurs quand on veut vérifier les saisies utilisateurs, ce qui devrait être fait systématiquement pour éviter pas mal de déboires, il est plus simple de récupérer toutes les saisies sous formes de chaines et de reconvertir au format voulu ensuite. Mais c'est vrai que pour des exercices d'apprentissage, c'est beaucoup de code pour pas grand chose au final.

  7. #37
    doul11

    Re : Pointeur en langage C

    salut,

    Citation Envoyé par deyni Voir le message
    Que c'est difficile, je n'aurai jamais trouvé!!
    c'est pour ça que j'ai mis le code, comme ça tu peut voir une solution possible et j'espère comprendre un peut, n'hésite pas a t'approprier le code, essaye de faire de modification pour voir ce que ça change, n'hésite pas a poser des question.

    Je crois, que si le else est manquant, il y a une recopie.
    c'est ça?
    oui, si il n'était pas là dans le cas ou c[i]=c1 le programme ferais c[i]=c2 puis comme c[i]=c2 a l'étape suivante le programme ferais c[i]=c1 -> bug !
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  8. #38
    doul11

    Re : Pointeur en langage C

    Citation Envoyé par bzh_nicolas Voir le message
    D'ailleurs quand on veut vérifier les saisies utilisateurs, ce qui devrait être fait systématiquement pour éviter pas mal de déboires, il est plus simple de récupérer toutes les saisies sous formes de chaines et de reconvertir au format voulu ensuite. Mais c'est vrai que pour des exercices d'apprentissage, c'est beaucoup de code pour pas grand chose au final.
    c'est pour cela que je dit toujours que mon code est une solution possible, ce qui veut bien dire que ce n'est pas la seule solution et pas forcement la meilleure solution, comme tu le dit ça dépends surtout du niveau de la personne, on ne peut pas trop surcharger le code, néanmoins j'essaye quand même de mettre "un minimum" de vérification.
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  9. #39
    invitebf26947a

    Re : Pointeur en langage C

    Citation Envoyé par Jackyzgood Voir le message
    Alors d'après moi, ce qui va se passer :

    Au premier caractère qui ne sera pas un espace, les instructions dans le "else" vont être exécutés, or dans celle ci il n'y a aucune condition si jamais un des caractère est un espace ... Donc ces instructions vont bêtement recopier le tableau. De plus cette 2eme boucle for va modifier la valeur de i qui est utilisé dans la première boucle et donc gêner son fonctionnement (puisque les 2 sont imbriqués), je dirais même qu'elle ira jusqu'à court-circuiter cette première boucle. Sans parler du fait que "i <= taille_tableau" risque de générer une erreur de segmentation.... Puisqu'à la fin tu vas chercher dans une case mémoire qui ne fait pas parti du tableau.

    En fait ce que Jack voulait dire avec :


    C'est qu'il te faut 2 variables, une pour "tableau" et une autre pour "tableau_tampon"

    Code:
    int i = 0, j = 0;
    //i sera utilisé pour "tableau" et j pour "tableau_tampon"
    //comme on doit parcourir entièrement "tableau" on fera la boucle for avec i
    
    for(i = 0 ; i < taille_tableau ; i++)
    {
       while(tableau[i] == ' ' && i < taille_tableau)
       {
          i++;
       }
    
       tableau_tampon[j] = tableau[i];
       j++;
    }
    Tu peux voir dans ce code que i et j sont incrémentés à chaque fois, puis il y a cette boucle while, si tu ne sais pas comment ça marche c'est simplement une boucle qui tournera tant que la ou les conditions sont respecté. Dans mon cas : tant que le caractère est un espace et tant que i est inférieur à la taille du tableau. Grâce à ça on peut gérer plusieurs espaces à la suite (on ne sait jamais). Une fois que i à une valeur correcte (qui ne va pas mener à un espace) on copie dans le tableau tampon.

    Sinon on peut faire autrement, vu qu'on ne cherche pas à tout copier et qu'on va perdre des informations on peut faire ça sans variable tampon.
    Code:
    for(i = 0 ; i < taille_tableau ; i++)
    {
       while(tableau[i] == ' ' && i < taille_tableau)
       {
          i++;
       }
    
       tableau[j] = tableau[i];
       j++;
    }
    Ce code devrait également fonctionner.
    Bonjour.

    J'ai ressayé de faire l'exo, j'avais compris la 1ere fois, mais maintenant j'y arrive plus.

    Désolé.

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. Pointeur laser
    Par invite376b1ad0 dans le forum Physique
    Réponses: 4
    Dernier message: 04/05/2017, 14h49
  2. pointeur
    Par invitef6dc9c06 dans le forum Électronique
    Réponses: 3
    Dernier message: 15/01/2008, 21h53
  3. Problème Langage C Structure, Pointeur, ...
    Par invite3e43df7f dans le forum Logiciel - Software - Open Source
    Réponses: 17
    Dernier message: 01/04/2006, 21h14
  4. Langage C : pointeur sur une fonction en argument ...
    Par invite1a99f682 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 27/07/2005, 11h29