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 :

Manipuler un tableau


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 147
    Points : 61
    Points
    61
    Par défaut Manipuler un tableau
    Bonjour,

    Je viens d'entrer en licence Informatique et je suis donc débutante. J'ai un exercice à résoudre et dont je n'y arrive pas très bien. Quelqu'un pourraot-il m'aider ?

    Voila mon problème:
    Je dois écrire un programme qui commence par saisir 10 nombres entiers au clavier, et les placer dans un tableau puis modifier le tableau :
    – en remplancant les valeurs impaires par 0
    – en remplancant le contenu de toutes les cases d’indices impairs par 0
    On affichera le tableau après chacune des 2 etapes et le nombre de cases non nulles `a la fin.

    J'ai commencé mais je suis bloquée:
    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
     
    #include <stdio.h>
    int main ()
    {
      int t[10];
      int i,n;
     
      for (i = 0; i <= 9; i++)
      {
        printf("Entrez un entier : ");
        scanf("%t", &t);
      }
     
      if (t[i] % 2 != 0)
        t[i]= 0;
     
      if (i % 2 != 0)
        t[i]= 0;
     
      return (0);
    }

  2. #2
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (i = 0; i <= 9; i++)
      {
        printf("Entrez un entier : ");
        scanf("%t", &t);
      }
    Il faut entrer les valeurs dans les éléments du tableau explicitement. Le format %t n'est pas un format correct. Prendre, par exemple %d pour des entiers en décimal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        scanf("%d", t+i);
    // ou ce qui est équivalent
        scanf("%d", &t[i]);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      if (t[i] % 2 != 0)
        t[i]= 0;
    A mettre dans un boucle for pour explorer tous les éléments du tableau et ajouter l'affichage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      if (i % 2 != 0)
        t[i]= 0;
    idem

    Il reste à calculer le nombre de cases non nulles
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Bon, allons y par etapes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Je dois écrire un programme qui commence par saisir 10 nombres entiers au clavier, et les placer dans un tableau
    On peut mettre un define afin de mieux gerer la lisibilité.
    #define TAILLE_TABLEAU 10
    cela veut dire qu'a chaque fois que tu verra TAILLE_TABLEAU dans ton code, il vaut 10. L'avantage et que maintenant, on lis TAILLE_TABLEAU et on sait directement que c'est la taille de ton tableau, alors qu'avec 10, on n'est pas sur. Considere le define comme une espece de constante global (mais ce n'est pas le cas).

    Pour ton scanf, je ne pense pas qu'il fonctionne. Je ne sais pas a quelle type se refere %t, mais pour un int, on utilise %d. Attention aussi, il faut mettre l'indice du tableau dans lequelle tu vas stocker la valeur.


    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
    #define TAILLE_TABLEAU 10
    
    #include <stdio.h>
    int main ()
    {
      /* On definie le tableau */
      int t[TAILLE_TABLEAU];
    
      /* On saisie les informations */
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
      {
        printf("Entrez un entier : ");
        scanf("%d", &t[i]);
      }
      return (0);
    }
    Voila, ce code rentre des chiffre entiers dans un tableau de dimension TAILLE_TABLEAU.


    – en remplancant les valeurs impaires par 0
    – en remplancant le contenu de toutes les cases d’indices impairs par 0
    On affichera le tableau après chacune des 2 etapes et le nombre de cases non nulles `a la fin.

    On continuer par l'affichage. Le mieux serait de faire une fonctin car elle va etre appelé plusieurs fois, mais pour ne pas t'embrouiller, je vais le faire a la suite.

    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
    #define TAILLE_TABLEAU 10
    
    #include <stdio.h>
    int main ()
    {
      /* On definie le tableau */
      int t[TAILLE_TABLEAU];
    
      /* On saisie les informations */
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
      {
        printf("Entrez un entier : ");
        scanf("%d", &t[i]);
      }
    
    
      /* On va afficher le contenue du tableau sous forme d'une ligne */
      printf("Voici le tableau que vous avez saisie :\n");
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
         printf("%d  "t[i]);
    
      printf("\n");
    
    
      return (0);
    }
    Le bloc de contrôle (en l'occurrence la boucle for) n'ayant qu'une seule instruction (le printf() ) les accolade sont facultative.



    – en remplancant les valeurs impaires par 0
    On va donc parcourir le tableau, et agir en fonction :


    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
    #define TAILLE_TABLEAU 10
    
    #include <stdio.h>
    int main ()
    {
      /* On definie le tableau */
      int t[TAILLE_TABLEAU];
    
      /* On saisie les informations */
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
      {
        printf("Entrez un entier : ");
        scanf("%d", &t[i]);
      }
    
    
      /* On va afficher le contenue du tableau sous forme d'une ligne */
      printf("Voici le tableau que vous avez saisie :\n");
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
         printf("%d  "t[i]);
    
      printf("\n");
    
      /* On parcours le tableau  et on remplace les valeur impaire par 0 */
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
        if (t[i]%2 == 1)
          t[i] = 0;
            
      /* On va afficher le contenue du tableau sous forme d'une ligne */
      printf("Voici le tableau apres premiere modification :\n");
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
         printf("%d  "t[i]);
    
      printf("\n");
    
      return (0);
    }
    La ligne "if (t[i]%2 == 1)" est peut etre pas claire pour toi.
    t[i] correspond a la valeur presente a la case 'i', c'est donc une valeur entrer par l'utilisateur la premiere fois.

    % est l'operateur modulo. Il s'agit du reste de la division entiere (division Eucidienne). Donc, si on prend le resultat de la division Euclidienne de t[i] par deux, on obtient soit 1 (nombre impaire), soit 0 (nombre pair).
    (t[i]%2 == 1) exprime ce que je viens d'expliquer plus haut.


    – en remplancant le contenu de toutes les cases d’indices impairs par 0
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #define TAILLE_TABLEAU 10
    
    #include <stdio.h>
    int main ()
    {
      /* On definie le tableau */
      int t[TAILLE_TABLEAU];
    
      /* On saisie les informations */
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
      {
        printf("Entrez un entier : ");
        scanf("%d", &t[i]);
      }
    
    
      /* On va afficher le contenue du tableau sous forme d'une ligne */
      printf("Voici le tableau que vous avez saisie :\n");
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
         printf("%d  "t[i]);
    
      printf("\n");
    
      /* On parcours le tableau  et on remplace les valeur impaire par 0 */
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
        if (t[i]%2 == 1)
          t[i] = 0;
            
      /* On va afficher le contenue du tableau sous forme d'une ligne */
      printf("Voici le tableau apres premiere modification :\n");
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
         printf("%d  "t[i]);
    
      /* On parcours le tableau  et on remplace les indice impaire par 0 */
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
        if (i%2 == 1)
          t[i] = 0;
            
      /* On va afficher le contenue du tableau sous forme d'une ligne */
      printf("Voici le tableau apres derniere modification :\n");
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
         printf("%d  "t[i]);
    
      printf("\n");
    
      return (0);
    }

    Maintenant, il ne reste plus qu'a compter le nombre de ligne non null.
    On va declarer une variable 'compteur' de type int pour cela (initialiser a 0 !)


    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #define TAILLE_TABLEAU 10
    
    #include <stdio.h>
    int main ()
    {
      /* On definie le tableau */
      int t[TAILLE_TABLEAU];
    
      /* Le compteur */
      int compteur = 0;
    
      /* On saisie les informations */
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
      {
        printf("Entrez un entier : ");
        scanf("%d", &t[i]);
      }
    
    
      /* On va afficher le contenue du tableau sous forme d'une ligne */
      printf("Voici le tableau que vous avez saisie :\n");
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
         printf("%d  "t[i]);
    
      printf("\n");
    
      /* On parcours le tableau  et on remplace les valeur impaire par 0 */
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
        if (t[i]%2 == 1)
          t[i] = 0;
            
      /* On va afficher le contenue du tableau sous forme d'une ligne */
      printf("Voici le tableau apres premiere modification :\n");
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
         printf("%d  "t[i]);
    
      /* On parcours le tableau  et on remplace les indice impaire par 0 */
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
        if (i%2 == 1)
          t[i] = 0;
            
      /* On va afficher le contenue du tableau sous forme d'une ligne */
      printf("Voici le tableau apres derniere modification :\n");
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
         printf("%d  "t[i]);
    
      printf("\n");
    
      /* Dernier parcours du tableau */
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
        if (t[i] != 0)
          compteur++;
    
      printf ("Il reste %d nombres.", compteur);
    
      return (0);
    }

    Voici, normalement, ce code fais ce que tu veux. Si tu n'as pas compris un point, demande nous.
    Il est possible qu'il y ai des erreurs de syntaxe, mais la logique est la meme.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 147
    Points : 61
    Points
    61
    Par défaut
    Merci beaucoup, c'est super gentil.
    Vous n'étiez pas obligé de tout faire, c'était juste des éclaircissements.
    je vous remercie encore.

  5. #5
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Bonjour,

    Je viens de me rendre compte que j'avais fait quelque chose d'absurde.

    En fait, on doit remplacer le contenu de toutes les cases d’indices impairs par 0.

    J'avais proposer ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      /* On parcours le tableau  et on remplace les indice impaire par 0 */
      for (i=0 ; i<TAILLE_TABLEAU ; i++)
        if (i%2 == 1)
          t[i] = 0;
    En realité, on peut faire ceci, et cela est largement mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      /* On parcours le tableau  et on remplace les indice impaire par 0 */
      for (i=1 ; i<TAILLE_TABLEAU ; i+=2)
          t[i] = 0;
    Voila, c'était la petite astuce du jour

Discussions similaires

  1. Manipulation de tableau
    Par fifi87 dans le forum Assembleur
    Réponses: 1
    Dernier message: 13/12/2006, 17h17
  2. [Tableaux] Manipulation de tableau
    Par Diss dans le forum Langage
    Réponses: 5
    Dernier message: 29/08/2006, 18h08
  3. manipuler un tableau <table> </table>
    Par faico dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/08/2006, 09h51
  4. [Tableaux] Manipulation de tableau
    Par BenoitDenis dans le forum Langage
    Réponses: 3
    Dernier message: 04/04/2006, 09h49
  5. Manipulation de tableau
    Par BoBy9 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 22/01/2006, 10h34

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