Partage
  • Partager sur Facebook
  • Partager sur Twitter

encore un problème de pointeur?

    11 mai 2019 à 14:41:27

    malgré l'aide d'une personne sur le fofo pour un précédent algo j'ai il me semble un probleme recurent.

    Mes programme se compile mais ne ressorte pas la valeur désiré et tourne en boucle une explication?

    #include <stdio.h>
    #include <stdlib.h>
    
    void suite( int n)
    {
    	int u,i;
    	u = 0;
    	for (i = 0; i = n;i++);
    		u = 2*u +3;
    			
    	
    }
    int main()
    {
    	int u,n;
    	printf(" donner le n \n");
    	scanf("%d",&n);
    	suite(n);
    	printf("le n terme de la suite est %d",u);
    	
    }



    • Partager sur Facebook
    • Partager sur Twitter
      11 mai 2019 à 14:55:47

      Bonjour, voici des explications:

      Lignes 4 à 12, la fonction suite ne retourne rien et n'a aucun effet de bord (elle ne modifie rien à l'extérieur d'elle-même). En bref, elle n'a aucun effet observable, et ne sert absolument à rien. Il se peut même qu'un compilateur malin la supprime totalement.

      Ligne 7, u=0, et ligne 8, u=0. Celui de la ligne 7 est inutile, même s'il ne cause pas de problème.

      Ligne 8, la condition d'arrêt i = n est certainement une erreur, car elle cause une boucle infinie pour toute valeur de n non nulle.

      Ligne 19, affichage de u alors que u n'est pas initialisée, d'où résultat indéterminé.

      Ligne 19 toujours, une phrase prend une majuscule au début et un point à la fin. Ce n'est que de l'orthographe, mais c'est très négligé.

      Ligne 19 enfin, il est techniquement préférable de terminer l'affichage par un retour à la ligne '\n'.

      -
      Edité par Marc Mongenet 11 mai 2019 à 15:09:57

      • Partager sur Facebook
      • Partager sur Twitter
        11 mai 2019 à 15:05:20

        Marc Mongenet a écrit:

        Bonjour, voici des explications:

        Lignes 4 à 12, la fonction suite ne retourne rien et n'a aucun effet de bord (elle ne modifie rien à l'extérieur d'elle-même). En bref, elle n'a aucun effet observable, et ne sert absolument à rien. Il se peut même qu'un compilateur malin la supprime totalement.

        Ligne 7, u=0, et ligne 8, u=0. Celui de la ligne 7 est inutile, même s'il ne cause pas de problème.

        Ligne 8, la condition d'arrêt i = n est certainement une erreur, car elle cause une boucle infinie pour toute valeur de n non nulle.

        Ligne 19, affichage de u alors que u n'est pas initialisée, d'où résultat non indéterminé.

        Ligne 19 toujours, une phrase prend une majuscule au début et un point à la fin. Ce n'est que de l'orthographe, mais c'est très négligé.

        Ligne 19 enfin, il est techniquement préférable de terminer l'affichage par un retour à la ligne '\n'.

        -
        Edité par Marc Mongenet il y a moins de 30s

        Tout d'arbord merci de votre aide .J'ai résolu certain problème,il me reste la fonction vide et la condition d'arrêt n.

        Je souhaite grace a celle ci calculer le n ieme terme d'une suite d'ou la condition d'arrêt n . Une idée de modification?

        #include <stdio.h>
        #include <stdlib.h>
        
        int suite( int n)
        {
        	int u,i;
        	u = 0;
        	for (i = 1; i = n;i++);
        		u = 2*u +3;
        	return u;
        			
        	
        }
        int main()
        {
        	int u,n;
        	printf(" donner le n \n");
        	scanf("%d",&n);
        	suite(n);
        	printf("Le n terme de la suite est %d . \n",u);
        	
        }





        • Partager sur Facebook
        • Partager sur Twitter
          11 mai 2019 à 15:11:03

          Bonjour,

          Il y a une variable u dans main(), elle n'est pas initialisée mais affichée.
          Il y une autre variable qui s'appelle u dans suite(), aucune liaison avec le u du main().
          Il est où le pointeur? Il est où?
          Bon de toute façon pas besoin de pointeur. Une fonction peut tout à fait retourner une valeur (par exemple u) qui sera récupérée dans le main() en sortie de fonction, on pourrait mettre ce résultat dans le u du main().

          • Partager sur Facebook
          • Partager sur Twitter

          En recherche d'emploi.

            11 mai 2019 à 15:13:46

            Bonjour, ça progresse effectivement.

            Il faut savoir que ce qu'on appelle condition d'arrêt interrompt la boucle dès que sa valeur est nulle.

            Essayez avec l'expression i < n, qui vaut 1 quand i est plus petit que n, et 0 quand i est égal ou supérieur à n.

            Il faudra encore corriger l'erreur majeure dans le corps de main.

            • Partager sur Facebook
            • Partager sur Twitter
              14 mai 2019 à 18:10:22

              dans le main , n'oublie pas de recuperer la valeur de retour de suite(n) ..
              • Partager sur Facebook
              • Partager sur Twitter

              encore un problème de pointeur?

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown