IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

fonctions et tableaux


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 6
    Par défaut fonctions et tableaux
    Bonjour,
    je dois créer 3 fonctions avec un tableau en paramètre, une qui affiche la liste des nombres inférieurs à 15, une qui affiche les nombres d'indice impair et une qui affiche la liste des nombres en ordre inverse de leur saisie. J'arrive seulement a afficher les listes comme je les ai entrée. Help?
    Voici ce que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    /*Fonction des nombres inférieurs à 15 */
    void inferieur (int t[], int n)
        {
    	   int j; /*position courante */
     
           for (j=0; t[j]<15; j++);
           	   for (j = 0 ; j < n ; j++)
    		   	   printf("%d ", t[j]);
    			   printf("\n");
        }
     
    /*Fonction des nombres d'indice impair */
    void impair (int t[], int n)
        {
    	 	int j;
     
            if (j%2!=0){
                for (j = 0 ; j < n ; j++)
    		   		printf("%d ", t[j]);
    		   		printf("\n");
    			}
       }
     
    /*Fonction des nombres dans l'ordre inverse de leur saisie */
    void inverse (int t[], int n)
        {
            int j, a; // a permet de stocker une valeur temporairement
     
            for (j=0; j<(n/2); j++);
            {
                a=t[j];
                t[j]=t[n-1-j];
                t[n-1-j]=a;
            }
              for (j = 0 ; j < n ; j++)
    		   printf("%d ", t[j]);
    		   printf("\n");         
        }

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 179
    Par défaut
    Essaye de réfléchir à ce que tu dois faire en Français avant de coder (n'hésites pas à le mettre sur papier si ça peut t'aider), parce que pour l'instant la logique même de tes fonction n'est pas au point.
    Par exemple :
    pour chaque case du tableau :
    si sa valeur est < 15 alors :
    l'afficher

    La ligne 6 n'influe en rien sur ce qui va suivre (dans le meilleur des cas elle ne fait rien)

    La 17 teste la valeur d'une variable qui n'a pas encore été affectée

  3. #3
    Invité
    Invité(e)
    Par défaut
    Pour la fonction inverse, une seule boucle suffit, il faut juste partir de l'indice n-1 et de décrémenter ta variable j

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(int j=n-1; j>=0; j--)
    {
          // Affichage de t[j]
    }

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    La logique de construction des fonctions est..... absente, effectivement. Il faut écrire l'algorithme de chaque fonction en français (ou plus exactement, en pseudo-code), comme dit par pythéas.

    J'ai l'impression aussi que tu ne maitrises pas tout à fait la boucle FOR. Prenons un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(i=0;i<15;i++)
    {
        // faire quelque chose
    }
    On a :
    1. i=0; : action qui sera exécutée avant le début de la boucle. C'est l'initialisation.
    2. i<15; : condition pour continuer la boucle. Tant qu'elle n'est pas vraie, la boucle continue.
    3. i++ : action réalisée à la fin de chaque itération de la boucle, avant d'évaluer à nouveau la condition.

      On peut réécrire cela avec un WHILE, plus proche de la logique en pseudo-code :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      i=0;
      while(i<15)
      {
          // faire quelque chose
          i++;
      }
      Application à tes fonctions : tu dois parcourir tout le tableau, donc la boucle FOR à pour condition que l'indice de parcours aille de 0 à "tailleDuTableau-1", comme tu l'as fait ici :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      for (j = 0 ; j < n ; j++)
      Toutes les actions devront se faire dans la boucle ("// faire quelque chose"), que ce soit vérifier si le nombre contenu est impair, inférieur à 15, coloré en rouge, etc.

      Note : si ta fonction inverse consiste à afficher les nombres dans l'ordre inverse, tu n'as pas besoin de la variable temporaire "a" ; si elle doit inverser l'ordre dans le tableau, ce n'est pas la bonne méthode (il faut utiliser des pointeurs sur tableau).

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    @Bktero Erreur d'inattention :

    i<15; : condition pour continuer la boucle. Tant qu'elle n' est pas vraie, la boucle continue.

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    @Diogene :
    Merci, j'ai édité le message.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 6
    Par défaut
    Merci pour votre aide! Je n'ai pas vu les pointeurs en cours alors je pense que le prof ne s'attend pas a ce qu'on les utilise... Pour la première fonction je crois que j'arrive à la réponse!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /*Fonction des nombres inférieurs à 15 */
    void inferieur (int t[], int n)
        {
    	   int j; /*position courante */
     
     	   for (j = 0 ; j < n ; j++)
    	       if (t[j]<15)
    		   	   printf("%d ", t[j]);
    			   printf("\n");
    	 }
    Je continue à travailler pour les deux autres...

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 179
    Par défaut
    Effectivement c'est beaucoup mieux comme ça.

    Juste un conseil de vieux : n'hésite pas à mettre des accolades ou au moins fais attention à l'indentation, parce que sur des programmes plus long tu risques de finir par te perdre.
    edit -> conseil écrit après avoir lu seulement la première fonction, visiblement tu as corrigé par toi-même

  9. #9
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /*Fonction des nombres inférieurs à 15 */
    void inferieur (int t[], int n)
        {
    	   int j; /*position courante */
     
     	   for (j = 0 ; j < n ; j++)
    	       if (t[j]<15)
    		   	   printf("%d ", t[j]);
    			   printf("\n");
    	 }
    Je ne sais pas ce que tu as corrigé mais il y a encore un problème d'accolades dans ce code : il fait ce que tu veux ?

    Il est équivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /*Fonction des nombres inférieurs à 15 */
    void inferieur (int t[], int n)
    {
       int j; /*position courante */
     
        for (j = 0 ; j < n ; j++)
        {
            if (t[j]<15)
            {
                printf("%d ", t[j]);
            }
        }
        printf("\n"); // pas dans le FOR. C'est voulu ?
    }

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 6
    Par défaut
    Il me manquait juste un petit coup de pouce on dirait... pour la deuxième fonction j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /*Fonction des nombres d'indice impair */
    void impair (int t[], int n)
        {
    	 	int j;
     
    		for (j = 0 ; j < n ; j++){
                          if (j%2!=0){
    		   	printf("%d ", t[j]);
    			}
    		}
    		printf("\n");
       }

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 6
    Par défaut
    @pythéas oui j'ai corrigé! Mais je prend volontiers les conseils de vieux, c'est souvent les meilleurs

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 6
    Par défaut
    oui oui je l'ai corrigé aussi! J'obtiens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /*Fonction des nombres inférieurs à 15 */
    void inferieur (int t[], int n)
        {
    	   int j; /*position courante */
     
     	   for (j = 0 ; j < n ; j++){
    	       if (t[j]<15){
    		   	   printf("%d ", t[j]);
    			   }
    		   }
    	    printf("\n");
     
    	 }
    Je veux afficher les résultats sur une seule ligne, c'est pour ça que printf("\n"); n'est pas dans le for!

  13. #13
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Le premier code faisait donc ce que tu voulais

    Certains IDE comme CodeBlocks écrivent le caractère fermant automatiquement quand tu fais le caractère ouvrant (parenthèse, accolade, crochet, guillemets). C'est parfois saoulant mais ça a des avantages.

Discussions similaires

  1. Exercice de programmation C : fonctions et tableaux
    Par Celialita11 dans le forum Débuter
    Réponses: 7
    Dernier message: 31/03/2010, 01h10
  2. Fonction et tableaux
    Par Nemesis007 dans le forum Langage
    Réponses: 4
    Dernier message: 16/12/2008, 15h54
  3. Réponses: 2
    Dernier message: 01/12/2008, 14h18
  4. Problème de fonctions et tableaux
    Par sebdu94 dans le forum C
    Réponses: 2
    Dernier message: 05/04/2007, 11h12
  5. [Conception] Utiliser les fonctions des tableaux ou plusieurs requêtes ?
    Par Derik dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 01/02/2006, 09h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo