Tableau en Langage C

Bonjour,

J'aimerais bien un peu d'aide de votre part à un exo que j'ai à réaliser :

Ecrire un programme qui, étant donné 50 entiers lus au clavier entre 0 et 10 :

-calcule le nombre de 0 tirés
-indique le rang du 1er élément NON NUL
-affiche la suite des entiers


Je débute dans les tableaux donc j'ai pas encore bien bien compris comme ça marche exactement

Pour l'instant on va dire que j'ai fait que ça :

#include <stdio.h>
#include <stdlib.h>

int main ()

{

 int t[50],i,n;
 
 i=0;
  

 printf("Veuillez rentrer les 50 nombres : \n");

 while(i<50){
   scanf("%d",&t[i]);
   i=i+1;
   }




system("PAUSE");

return;
}




Maintenant je bloque...depuis maintenant 2h j'arrive pas à enchainer quelque chose :-( si vous pouviez m'aider svp

4 réponses

Résumé de la discussion

Le sujet porte sur l’écriture d’un programme en C qui lit 50 entiers entre 0 et 10, compte le nombre de zéros, détermine le premier élément non nul et affiche la suite des valeurs. Des réponses proposent d’incrémenter l’indice après lecture et de tester les zéros immédiatement, puis de consigner le premier indice où t[i] est différent de zéro afin d’obtenir le rang du premier élément non nul. Certains échanges soulignent aussi que l’existence d’un cas où tous les éléments sont zéro nécessite une gestion explicite de l’indice premier_non_nul et une confirmation que i est bien dans les limites 0..49.

Bobot (l’IA à votre service)
  1. Contributeur
    Bonjour,

    Pourquoi ne pas faire une simple boucle for ?
    Par exemple :
    for(i=0;i<50;i++) 
       scanf(...) 
    

    Sinon, pour le return; il manque le 0. Il s'agit de return 0;

    Ensuite pour les points que vous devez faire, je vous recommande les fonctions.

    Ce qui pourra donner :

    #include <stdio.h> 
    #include <stdlib.h> 
    
    int nbZero(int *t, const size_t sz) { 
      ... 
    } 
    
    int premier EltNonNul(int *t, const size_t sz) { 
    ... 
    } 
    
    int main (void) { 
    
     int t[50],i,n; 
      
     printf("Veuillez rentrer les 50 nombres : \n"); 
    
     for (i=0;i<50;i++) { 
       scanf("%d",&t[i]); 
     } 
    
    printf("%d éléments nuls\n",nbZero(t,50); 
    printf("%d ...\n",premierEltNonNul(t,50); 
    ... 
    
    
    system("PAUSE"); 
    
    return 0; 
    } 
    
    


    Pour compter le nombre d'éléments non nuls, une simple boucle, une condition (if) et un compteur fera l'affaire.
    Pour trouver le premier indice non nul, une simple boucle avec une condition (if) fera l'affaire.
    Et pour l'affichage, une simple boucle avec un printf fera l'affaire.

    Cdlt,
    1. Bè le reste des questions

      Déjà premièrement comment calculer le nombre de 0 tirés...

      j'ai essayer de rajouter un if :

      if (t[i]==0){
      ...

      mais là je sais plus quoi faire.

      Et en même temps avec une boucle WHILE je vois pas non plus
      1. Contributeur
        Lis mon commentaire ci-dessus.
        En gros :
        int cpt=0;
        for(i=0;i<50;i++) {
        if (t[i]==0)
        cpt++;
        }
      2. Merci mais je n'utilise pas le FOR...

        je dois utiliser while ou if

        j'ai essayer ça :

        #include <stdio.h>
        #include <stdlib.h>
        
        int main ()
        
        {
        
         int t[5],i,n,trouve;
         
         i=0;
         trouve=0;
        
         printf("Veuillez rentrer les 5 nombres : \n");
        
         while(i<5){
           scanf("%d",&t[i]);
           i=i+1;
           if(t[i]==0){
             trouve=trouve+1;
             printf("Nombre de zero est de : %d\n",trouve);
           }
        
          
           }
        
        
        
        system("PAUSE");
        
        return;
        }


        Mais ça me marque toujours 1 que j'en mette 0 ou 5
        (j'ai remplacé 50 par 5 histoire que je puisse rapidement tester le programme)
      3. le probleme est dans:
        i=i+1;
        if(t[i]==0){
        trouve=trouve+1;
        printf("Nombre de zero est de : %d\n",trouve);
        }
        //
        car tu incrémente avant de tester. remplace le par:
        if(t[i]==0){
        trouve=trouve+1;
        }
        i=i+1;
      4. oui j'allais répondre merci bien Mr.D@RK

        j'ai trouvé :

        #include <stdio.h> 
        #include <stdlib.h> 
        
        int main () 
        
        { 
        
         int t[5],i,n,trouve; 
          
         i=0; 
         trouve=0; 
        
         printf("Veuillez rentrer les 5 nombres : \n"); 
        
        
         while(i<5){ 
            scanf("%d",&t[i]); 
           if(t[i]==0){ 
             trouve=trouve+1; 
              
           } 
            i=i+1; 
            } 
          printf("Nombre de zero est de : %d\n",trouve); 
        
        
        system("PAUSE"); 
        
        return; 
        }


        Maintenant je vais tester la suite je vous dis
      5. Contributeur
        Et tu ne peux pas faire de fonction non plus ?
        Car c'est une très mauvaise façon de procéder ainsi (mettre tout dans le main).
    2. Ah oui d'accords merci

      J'avais pas vu que lorsque je met un nombre>10 ça rajoute la même ligne en dessous et tant que je remet pas un nombre<10 ça accepte pas

      C'est vraiment bien merci beaucoup :-)

      juste le t[i]=-1 ??? pourquoi ? lol
      1. pour entrer dans la boucle:
        while(t[i]<0 || t[i]>10)
        (! remarque -1<0 :p ...héé je rigole seulement looool)
      2. LOL ok merci bien pour tout alors
      3. avec plaisir =)
        et n'oublie pas de marquer "sujet resolu"

        Cdlt,