Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercices pour débutants en C (suite)

Venez vous entrainer!

    7 avril 2011 à 10:26:54

    Citation : Tosh

    Et j'aimerais bien savoir, quel compilateur ne calcul pas lui même toutes les valeurs constantes...


    C'est pas faux, mais sait-on jamais. :D
    Pour les flags, je suis d'accord parce qu'il y a une utilité, là je n'en vois aucune. :-°
    • Partager sur Facebook
    • Partager sur Twitter
      8 avril 2011 à 22:47:30

      Citation : Lithrein

      je les ai trouvé conjointement dans un livre sérieux sur le C




      Le livre de Mathieu Nebra ;) ?

      Citation : Pouet_forever


      Ca dépend, si ton compilateur remplace 1<<8 par 256 ça n'aura pas d'influences, par contre s'il laisse 1<<8, ça fait des calculs inutiles




      D'après la Norme, il n'y a pas d'obligation à remplacer par 256, et pire, le calcul 1<<8 peut même se faire à l'exécution, cf. fclc.
      • Partager sur Facebook
      • Partager sur Twitter
        9 avril 2011 à 0:36:15

        Citation : candide

        Le livre de Mathieu Nebra ;) ?


        Ah ah ! <3

        Sympa ton lien. :)
        • Partager sur Facebook
        • Partager sur Twitter
          9 avril 2011 à 16:02:58

          Citation : candide

          Citation : Lithrein

          je les ai trouvé conjointement dans un livre sérieux sur le C




          Le livre de Mathieu Nebra ;) ?


          Je me demande comment tu as trouvé ? o_O
          En réalité je les ai pris dans le livre Méthodologie de la programmation en C page 403, en fait je dis une bêtise, il n'y a que le nom des constantes dans ce livre (honte à moi). (Conclusion : je l'ai prises dans le header errno-base.h) :honte:

          Je vais en profiter pour corriger tout ce que j'ai dit et je vais virer les définitions de constantes.
          • Partager sur Facebook
          • Partager sur Twitter
            6 mai 2011 à 17:47:46

            Bonjour ^^ , j'ai fait quelques exercices, et je suppose que c'est bien ici qu'il faut poster les réponses...
            Alors voila:

            Exo 1:


            # include <stdio.h>
            # include <stdlib.h>
            
            int main(int argc,char argv[])
            {
            	int choix, choixSecond, nomFichier[10], extension[5], i = 0;
            	char caractere = 0;
            	FILE* fichier = NULL;
            
            	do
            	{
            		printf(«1.Lire un fichier\n»);
            		printf(«2.Creer un fichier\n»);
            		printf(«3.Ecrire dans un fichier\n»);
            		scanf(« %d », &choix);
            	}
            	while(choix > 0 && choix > 4);
            
            	if(choix == 1)
            	{
            		do
            		{
            			printf(«\nQuel fichier voulez vous lire ?\n»
            			          «1.Le petit chaperon rouge\n»
            			          «2.Harry Potter\n»                // On suppose l'existence de ces 2 fichiers
            			scanf(«%d» &choixSecond);
            		}
            		while(choixSecond > 3 && choixSecond < 0);
            
            		if(choixSecond == 1)
            		{
            			fichier = fopen(« Chaperon_rouge.txt », « r »);
            
            			if(fichier != NULL)
            			{
            				while(caractere != EOF)
            				{
            					caractere = fgetc(fichier);
            				}
            			else
            			{
            				exit(0);
            			}
            		}
            		if(choixSecond == 2)
            		{
            			fichier = fopen(« hp2.txt », « r »);
            
            			if(fichier != NULL)
            			{
            				while(caractere != EOF)
            				{
            					caractere = fgetc(fichier);
            				}
            			}
            			else
            			{
            				exit(0);
            			}
            	}
            	else if(choix == 2)
            	{
            		printf(« Nommer votre fichier\n »)
            		scanf(« %s », nomFichier);
            		printf(« \nN'oubliez pas l'extension ;)\n »);
            		scanf(« %s », extension);
            
            		fichier = fopen(« %s.%s », nomFichier, extension, « w »);
            		fclose(fichier);
            		
            		printf(« Vous avez creez votre fichier %s.%s\n », nomFichier, extension);
            	}
            	else
            	{
            		fichier = fopen(« dico.txt », « w »);
            		
            		printf(« Que voulez vous ecrire\n »);
            
            		scanf(« %s » taVie);
            
            		fprintf(fichier, « taVie »);
            
            		fclose(fichier);
            	}
            
            	return 0;
            }
            


            Exo 12:


            # include <stdio.h>
            # include <stdlib.h>
            
            int main(int argc, char* argv[])
            {
            	int tab[20] = {0}, i = 0, resultat = 0;
            
            	printf(« Ecrivez un nombre\n »);
            	scanf(« %s », tab);
            	
            	for(i = 0; i < 20; i++)
            	{
            		resultat = 0 + tab[i];
            	}
            		
            	printf(« La somme de tous ces chiffres est %d », resultat);
            
            	return 0;
            }
            


            zGame


            # include <stdio.h>
            # include <stdlib.h>
            #include <time.h>
            
            int verifCalcul(int a, int b, int c, int tab, int i);
            
            int correction(int tab);
            
            int aleatoire(int a, int MIN, int MAX);
            
            int main(int argc, char* argv[])
            {
            	int  a = 0, b = 0, resultat = 0, MIN = 1, MAX = 10, i = -1;
            	int tab[10] = {0};
            
            	printf(« \t-zGame-: Entrainez votre cerveau\n »);
            	printf(« \nLe programme va vous soumettre dix multiplications que vous allez devoir 	resoudre le plus rapidement possible... et de tete !\n »);
            
            	printf(« prêt ? »);
            
            	system(« PAUSE »);
            	
            	do
            	{
            		aleatoire( a, MIN, MAX);
            		aleatoire( b, MIN, MAX);
            		
            		printf(« %d * %d = », a, b);
            		scanf(« %d », &resultat);
            
            		i++;
            		verifCalcul( a, b, resultat, tab, i);
            	}
            	while(i < 9);
            
            	correction(tab);
            
            	return 0;
            }
            
            
            int verifCalcul(int a, int bn int cn int tabn int i)
            {
            	int resultat = 0;
            
            	resultat = a*b;
            	
            	if( c == (a*b) || c == resultat) // je ne sais pas si ma premiere methode marche
            	{
            		tab[i] = 1;
            	}
            	else
            	{
            		tab[i] = 0;
            	}
            
            	return 1;
            }
            
            int correction(int tab)
            {
            	int i, faute = 0;
            
            	for(i = 0; i < 10; i++)
            	{
            		if(tab[i] == 0)
            		{
            			faute++;
            		}
            	}
            	if(faute == 0)
            	{
            		printf(« Bravo, tu as fait 0 fautes ! »);
            	}	
            
            	else
            	{
            		printf(« Tu as fais %d faute(s) », faute);
            	}
            
            	return 1;
            }
            
            int aleatoire(int a, int MIN, int MAX)
            {
            	srand(time(NULL));
            	a = (rand()%(MAX-MIN+1)) + MIN);
            	return a;
            }
            


            J'ai ecris ces programmes a la hate,sur papier, ( car pas d'ordinateur), je vous demande d'excuser la presentation, et les fautes...
            (sans doute immondes ^^ , et/ou hors sujet :( )


            ... que j'ai commises. Merci beaucoup ^^
            • Partager sur Facebook
            • Partager sur Twitter
            May the Force be with you
              7 mai 2011 à 8:24:50

              @garagou: Au niveau de printf et scanf, c'est pas les guillemets " " que tu dois utiliser ?
              • Partager sur Facebook
              • Partager sur Twitter
                7 mai 2011 à 17:06:48

                Si, c'est ce que j'ai fait, mais sous open office, sa ne me les a pas affichés "correctement" ^^ desolé.
                • Partager sur Facebook
                • Partager sur Twitter
                May the Force be with you
                  20 mai 2011 à 12:27:54

                  Bonjour

                  Je me suis rendu compte que la correction de l'exercice 5 : afficher le triangle de Pascal en utilisant un échange de pointeurs était fausse. :-°

                  Bien que ce soit passé inaperçu, je corrige ici(je ne peux plus éditer la correction).

                  #include <stdio.h>
                  
                  #define SIZE    20
                  
                  void swap(int **p, int **q)
                  {
                      int *tmp = *p;
                      *p = *q;
                      *q = tmp;
                  }
                  
                  
                  
                  void afficher(int tab[SIZE], int lin)
                  {
                      int col;
                  
                      for(col = 0; col <= lin; col++)
                          printf(" %4d", tab[col]);
                  
                      puts("");
                  
                  }
                  
                  
                  
                  int main(void)
                  {
                      int prv[SIZE] = {0};
                      int crt[SIZE] = {1};
                  
                      int *p_prv = prv;
                      int *p_crt = crt;
                      int lin, col;
                  
                      for(lin = 0; lin < SIZE; lin++)
                      {
                          p_crt[0] = 1;
                          p_crt[lin] = 1;
                          for(col = 1; col < lin; col++)
                              p_crt[col] = p_prv[col - 1] + p_prv[col];
                  
                          afficher(p_crt , lin);
                          swap(&p_prv, &p_crt);
                      }
                  
                      return 0;
                  }
                  


                  edit:
                  code amélioré gràce à Pouet forever. :)
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Zeste de Savoir, le site qui en a dans le citron !
                    20 mai 2011 à 23:48:30

                    Correction - zConjug



                    Pour faire cette correction, j'ai pris le code de macmist, que j'ai un peu modifié :
                    J'ai utilisé les arguments du main, pour ajouter une autre fonctionnalité, et le programme gère l’exception du 'g'. ^^

                    Voici le code un peu commenté :
                    #include <stdio.h>
                    #include <stdlib.h>
                    #include <string.h>
                    
                    #define NB_SUJETS 6
                    #define PRESENT 1
                    #define IMPARFAIT 2
                    #define FUTUR 3
                    #define TOUS 4
                    #define NB_CHJ 7
                    #define GROUPE_1 1
                    #define GROUPE_2 2
                    
                    void zConjug(char *verbe);
                    int saisie_verbe(char *verbe);
                    int lire(char *chaine, int longueur);
                    void vider_buffer(void);
                    int get_groupe(char *chaine, int taille);
                    void conjuguer(const char *verbe, int groupe, int temps, int taille);
                    char* conjuguer_g1(const char *chaine, char *chaine_copie, int temps, int sujet, int taille);
                    char *conjuguer_g2(const char *chaine, char *chaine_copie, int temps, int sujet);
                    void exeption(char *verbe, int taille, char premiere_lettre);
                    int is_j(const char *verbe);
                    void afficher(const char *verbe, const char *sujet);
                    
                    int main(int argc, char *argv[])
                    {
                      char verbe[100] = "";
                    
                      if(argc == 1) /*Si le programme n'a recu aucun argument en ligne de commande*/
                        zConjug(verbe);
                      else /*Sinon, envoyer comme argument l'argument de la ligne de commande*/
                        zConjug(argv[1]);
                    
                      return EXIT_SUCCESS;
                    }
                    
                    /*Fonction principale*/
                    void zConjug(char *verbe)
                    {
                      int groupe = 0;
                      int taille = 0;
                      int choix = 0;
                      int i;
                      char verbe_copie[100] = "";
                      char nom_temps[][14] = {"au present", "a l'imparfait", "au futur"};
                    
                      taille = saisie_verbe(verbe);
                    
                      printf("\n\n" );
                      printf("Choisissez le temps auquel vous voulez conjuguer le verbe %s :\n", verbe);
                      printf("1.Present\n2.Imparfait\n3.Futur\n4.A tous les temps possibles\n");
                    
                      while(choix < PRESENT || choix > TOUS)
                      {
                        printf("Entrer 1, 2, 3 ou 4 : ");
                        scanf("%d" , &choix);
                      }
                    
                      groupe = get_groupe(verbe, taille);
                      strcpy(verbe_copie, verbe);
                      verbe_copie[taille-2] = '\0';
                    
                      if(choix == TOUS)
                        for(i = 0; i < 3; i++)
                        {
                          printf("\nLe verbe %s %s :\n\n", verbe, nom_temps[i]);
                          conjuguer(verbe_copie, groupe, i + 1, taille);
                        }
                    
                      else
                      {
                        printf("\nLe verbe %s %s :\n\n", verbe, nom_temps[choix-1]);
                        conjuguer(verbe_copie, groupe, choix, taille);
                      }
                    }
                    
                    int saisie_verbe(char *verbe)
                    {
                      int taille = 0;
                    
                      if(!(strcmp(verbe, "")) || !(get_groupe(verbe, (int)strlen(verbe))))
                        do
                        {
                          printf("Entrez un verbe a l'infinitif : ");
                          lire(verbe, 100);
                          taille = (int)strlen(verbe);
                        }while(get_groupe(verbe, taille) == 0);
                    
                      if(!taille)
                        taille = (int)strlen(verbe);
                    
                      return taille;
                    }
                    
                    /*Voir http://www.siteduzero.com/tutoriel-3-14185-la-saisie-de-texte-securisee.html#ss_part_2*/
                    int lire(char *chaine, int longueur)
                    {
                      char *position_entree = NULL;
                    
                      if(fgets(chaine, longueur, stdin) != NULL)
                      {
                        position_entree = strchr(chaine, '\n');
                        if(position_entree != NULL)
                          *position_entree = '\0';
                        else
                          vider_buffer();
                        return 1;
                      }
                    
                      else
                      {
                        vider_buffer();
                        return 0;
                      }
                    }
                    
                    /*Voir http://www.siteduzero.com/tutoriel-3-14185-la-saisie-de-texte-securisee.html#ss_part_2*/
                    void vider_buffer(void)
                    {
                      int c = 0;
                      while(c != '\n' && c != EOF)
                        c = getchar();
                    }
                    
                    int get_groupe(char *chaine, int taille)
                    {
                      int i = taille - 2, j = 0;
                      char copie[3] = "";
                    
                      /*Copie les 3 dernieres lettres du verbe*/
                      while(i < taille)
                      {
                        copie[j] = chaine[i];
                        i++;
                        j++;
                      }
                    
                      if(!(strcmp("er", copie)))
                        return GROUPE_1 ;
                    
                      else if(!(strcmp("ir", copie)))
                        return GROUPE_2;
                    
                      else
                        return 0;
                    }
                    
                    void conjuguer(const char *verbe, int groupe, int temps, int taille)
                    {
                      char pronoms[][10] = {"Je", "Tu", "Il/Elle", "Nous", "Vous", "Ils/Elles"};
                      char *resultat = NULL;
                      char verbe_copie[100] = "";
                      int i = 0;
                    
                      /*On conjugue le verbe a la i personne et on affiche le resultat*/
                      for(i = 0; i < NB_SUJETS; i++)
                      {
                        if(groupe == GROUPE_1)
                          resultat = conjuguer_g1(verbe, verbe_copie, temps, i, taille);
                        else
                          resultat = conjuguer_g2(verbe, verbe_copie, temps, i);
                    
                        afficher(resultat, pronoms[i]);
                        verbe_copie[0] = '\0';
                      }
                    }
                    
                    char* conjuguer_g1(const char *chaine, char *chaine_copie, int temps, int sujet, int taille)
                    {
                      char term_present[][4] = {"e" , "es" , "e" , "ons" , "ez" , "ent"};
                      char term_imparfait[][6] = {"ais" , "ais" , "ait" , "ions" , "iez" , "aient"};
                      char term_futur[][6] = {"erai" , "eras" , "era" , "erons" , "erez" , "eront"};
                      char verbe_conjugue[100] = "";
                    
                      strcat(verbe_conjugue, chaine);
                    
                      /*Concane verbe_conjugue a term_present[sujet] et vérifie pour les deux premiers temps si il n'y a pas l'exeption du 'g'*/
                      if(temps == PRESENT)
                      {
                        exeption(verbe_conjugue, taille, term_present[sujet][0]);
                        strcat(verbe_conjugue, term_present[sujet]);
                      }
                      else if(temps == IMPARFAIT)
                      {
                        exeption(verbe_conjugue, taille, term_imparfait[sujet][0]);
                        strcat(verbe_conjugue, term_imparfait[sujet]);
                      }
                      else
                        strcat(verbe_conjugue, term_futur[sujet]);
                    
                      strcat(chaine_copie, verbe_conjugue);
                    
                      return chaine_copie;
                    }
                    
                    char *conjuguer_g2(const char *chaine, char *chaine_copie, int temps, int sujet)
                    {
                      char term_presant[][7] = {"is", "is", "it", "issons", "issez", "issent"};
                      char term_imparfait[][9] = {"issais", "issais", "issait", "issions", "issiez", "issaient"};
                      char term_futur[][6] = {"irai", "iras", "ira", "irons", "irez", "iront"};
                      char verbe_conjugue[100] = "";
                    
                      strcat(verbe_conjugue, chaine);
                    
                      /*Concane verbe_conjugue a term_present[sujet]*/
                      if(temps == PRESENT)
                        strcat(verbe_conjugue, term_presant[sujet]);
                      if(temps == IMPARFAIT)
                        strcat(verbe_conjugue, term_imparfait[sujet]);
                      else if(temps == FUTUR)
                        strcat(verbe_conjugue, term_futur[sujet]);
                    
                      strcat(chaine_copie, verbe_conjugue);
                    
                      return chaine_copie;
                    }
                    
                    void exeption(char *verbe, int taille, char premiere_lettre)
                    {
                      int i;
                      int continuer = 1;
                      char lettres[] = {'e', 'i', 'y'};
                    
                      for(i = 0; i < 3; i++)
                        if(premiere_lettre == lettres[i]) /*Si l'une des 3 voyelles concorde avec la premiere lettre de la terminaison actuelle*/
                          continuer = 0;
                    
                      if(continuer && verbe[taille - 3] == 'g')
                        sprintf(verbe, "%se", verbe);
                    }
                    
                    int is_j(const char *verbe)
                    {
                      int i;
                      char lettres[] = {'a', 'e', 'i', 'o', 'u', 'y', 'h'};
                    
                      for(i = 0; i < NB_CHJ; i++)
                        if(verbe[0] == lettres[i]) /*Si l'une des voyelles (plus le 'h') concorde avec la premiere lettre du verbe*/
                          return 1;
                      return 0;
                    }
                    
                    void afficher(const char *verbe, const char *sujet)
                    {
                      if(!(strcmp(sujet, "Je")) && is_j(verbe))
                        printf("\tJ'%s \n", verbe);
                      else
                        printf("\t%s %s \n", sujet, verbe);
                    }
                    

                    Il reste très simple, mais si vous voulez d'avantages d'explications, je vous les fournirai.

                    Je remercie (évidemment Pouet_forever, comme d’habitude et) LeBri@n, qui a décelé un bug avec les verbe du deuxième groupe au présent.

                    -
                    Edité par paraze 25 juillet 2013 à 14:11:05

                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 mai 2011 à 12:02:34

                      slt a tous ,
                      je debute en prog et j apprecie l initiative des exercices avec correction mis ici en ligne. je ne suis pas encore tres avance dans la lecture du tutoriel et aimerais savoir ou commencer.
                      petite suggestion pour les debutants comme moi se serait judicieux de preciser de quelles notions on aura besoin pour resoudre les exercices.
                      je m excuse pr les fautes d orthographes. merci davance
                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 mai 2011 à 13:20:53

                        Oui batigoal, pour les prochains exos que je vais proposer, je préciserai quels éléments du cours officiel les zéros auront besoin pour résoudre mes futurs exercices.
                        Sinon, essaye d'améliorer un peu ton orthographe (c'est important), tu peux d'aider de bonpatron si t'as vraiment trop de mal. :)
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          30 mai 2011 à 10:37:50

                          Bonjour,

                          Je me suis mis à la lecture du livre "Apprenez à programmer en C", et je trouve ce topic très utile et intéressant ! Je me suis donc attelé à la réalisation de quelques exercices.
                          J'espère que vous pourrez me donner des conseils, corriger mes erreurs, etc...

                          Exercice n°1 : zReader

                          #include <stdio.h>
                          #include <stdlib.h>
                          #include <string.h>
                          
                          void lireFichier();
                          void creerFichier();
                          void ecrireFichier();
                          int lireClavier(char chaine[], int longueur);
                          long lireLong();
                          void viderBuffer();
                          
                          int main()
                          {
                              long choixUtilisateur = 0, continuerProgramme = 1;
                          
                              printf("Bienvenue dans zReader");
                          
                              while(continuerProgramme)
                              {
                                  printf("\n\n=== MENU ===\n\n");
                          
                                  printf("1. Lire un fichier\n");
                                  printf("2. Creer un fichier\n");
                                  printf("3. Ecrire dans un fichier\n");
                                  printf("4. Quitter programme\n\n");
                          
                                  printf("Votre choix ? ");
                                  choixUtilisateur = lireLong();
                          
                                  switch(choixUtilisateur)
                                  {
                                      case 1:
                                          lireFichier();
                                          break;
                                      case 2:
                                          creerFichier();
                                          break;
                                      case 3:
                                          ecrireFichier();
                                          break;
                                      case 4:
                                          continuerProgramme = 0;
                                          break;
                                      default:
                                          printf("Cette commande n'est pas definie. Veuillez entrez un chiffre entre 1 et 4.\n");
                                  }
                              }
                          
                              return 0;
                          }
                          
                          void lireFichier()
                          {
                              FILE *fichier = NULL;
                              char nomFichier[100] = {0}, chaine[1000] = {0};
                          
                              printf("\nEntrez le nom du fichier a ouvrir : ");
                              lireClavier(nomFichier, 100);
                          
                              fichier = fopen(nomFichier, "r");
                          
                              if(fichier != NULL)
                              {
                                  printf("\n");
                                  while(fgets(chaine, 1000, fichier) != NULL)
                                  {
                                      printf("%s", chaine);
                                  }
                          
                                  fclose(fichier);
                              }
                          
                              else
                              {
                                  printf("Ce fichier n'existe pas ou n'a pas pu etre ouvert.\n");
                              }
                          }
                          
                          void creerFichier()
                          {
                              FILE *fichier = NULL;
                              char nomFichier[100] = {0};
                          
                              printf("\nEntrez le nom du fichier que vous souhaitez creer : ");
                              scanf("%s", nomFichier);
                          
                              fichier = fopen(nomFichier, "a");
                          
                              if(fichier != NULL)
                              {
                                  printf("Le fichier a bien ete cree !\n");
                                  fclose(fichier);
                              }
                          
                              else
                              {
                                  printf("Impossible de creer le fichier\n");
                              }
                          }
                          
                          void ecrireFichier()
                          {
                              FILE *fichier = NULL;
                              char nomFichier[100] = {0}, chaineAInserer[1000] = {0};
                          
                              printf("\nEntrez le nom du fichier a editer : ");
                              lireClavier(nomFichier, 100);
                          
                              fichier = fopen(nomFichier, "a+");
                          
                              if(fichier != NULL)
                              {
                                  printf("Entrez le texte a inserer : ");
                                  lireClavier(chaineAInserer, 1000);
                          
                                  fputs(chaineAInserer, fichier);
                                  fputc('\n', fichier); // On insère un retour à la ligne pour que le prochain texte entré ne soit pas collé à ce qui précède
                          
                                  fclose(fichier);
                              }
                          
                              else
                              {
                                  printf("Impossible d'ouvrir le fichier\n");
                              }
                          }
                          
                          int lireClavier(char chaine[], int longueur)
                          {
                              char *positionEntree = NULL;
                          
                              if(fgets(chaine, longueur, stdin) != NULL)
                              {
                                  positionEntree = strchr(chaine, '\n');
                                  if(positionEntree != NULL)
                                  {
                                      *positionEntree = '\0';
                                  }
                          
                                  else
                                  {
                                      viderBuffer();
                                  }
                          
                                  return 1;
                              }
                          
                              else
                              {
                                  viderBuffer();
                                  return 0;
                              }
                          }
                          
                          long lireLong()
                          {
                              char nombreTexte[100] = {0};
                          
                              if(lireClavier(nombreTexte, 100))
                              {
                                  return strtol(nombreTexte, NULL, 10);
                              }
                          
                              else
                              {
                                  return 0;
                              }
                          }
                          
                          void viderBuffer()
                          {
                              int c = 0;
                          
                              while(c != '\n' && c != EOF)
                              {
                                  c = getchar();
                              }
                          }
                          


                          Exercice n°2 : zBinary

                          #include <stdio.h>
                          #include <stdlib.h>
                          
                          void conversionDecimalBinaire();
                          
                          int main()
                          {
                              int choix = 0, continuerProgramme = 1;
                          
                              printf("Bienvenue dans zBinary");
                          
                              while(continuerProgramme)
                              {
                                  printf("\n\n== MENU ==\n\n");
                                  printf("1. Conversion decimal -> binaire\n");
                                  printf("2. Quitter le programme\n\n");
                          
                                  printf("Votre choix ? ");
                                  scanf("%d", &choix);
                          
                                  switch(choix)
                                  {
                                      case 1:
                                          conversionDecimalBinaire();
                                          break;
                                      case 2:
                                          continuerProgramme = 0;
                                          break;
                                      default:
                                          printf("Une erreur est survenue.\n");
                                  }
                          
                              }
                          
                              return EXIT_SUCCESS;
                          }
                          
                          void conversionDecimalBinaire()
                          {
                              int nombreDecimal = 0, nombreBinaire[100] = {0};
                              int i = 0, reste = 0;
                          
                              printf("\nNombre decimal : ");
                              scanf("%d", &nombreDecimal);
                          
                              while(nombreDecimal > 0)
                              {
                                  reste = nombreDecimal % 2;
                                  nombreBinaire[i] = reste;
                                  i++;
                                  nombreDecimal /= 2;
                              }
                          
                              printf("Nombre binaire : ");
                              for(i = i - 1; i >= 0; i--)
                              {
                                  printf("%d", nombreBinaire[i]);
                              }
                          }
                          


                          Exercice n°4 : zStrcapitalize

                          #include <stdio.h>
                          #include <stdlib.h>
                          #include <string.h>
                          
                          void strcapitalize(char chaine[]);
                          int lireClavier(char chaine[], int longueur);
                          void viderBuffer();
                          
                          int main()
                          {
                              char chaine[1000] = {0};
                          
                              printf("Bienvenue dans zStrcapitalize\n");
                          
                              printf("Entrez une phrase : ");
                              lireClavier(chaine, 1000);
                          
                              strcapitalize(chaine);
                              printf("%s", chaine);
                              return 0;
                          }
                          
                          void strcapitalize(char chaine[])
                          {
                              int i = 0, j = 0;
                              char alphabetMinuscule[26] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
                              char alphabetMajuscule[26] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
                          
                              for(i = 0; chaine[i] != '\0'; i++)
                              {
                                  if(i == 0)
                                  {
                                      for(j = 0; j < 26; j++)
                                      {
                                          if(chaine[i] == alphabetMinuscule[j])
                                          {
                                              chaine[i] = alphabetMajuscule[j];
                                          }
                                      }
                                  }
                          
                                  else
                                  {
                                      for(j = 0; j < 26; j++)
                                      {
                                          if(chaine[i] == alphabetMajuscule[j])
                                          {
                                              chaine[i] = alphabetMinuscule[j];
                                          }
                                      }
                                  }
                              }
                          }
                          
                          int lireClavier(char chaine[], int longueur)
                          {
                              char *positionEntree = NULL;
                          
                              if(fgets(chaine, longueur, stdin) != NULL)
                              {
                                  positionEntree = strchr(chaine, '\n');
                                  if(positionEntree != NULL)
                                  {
                                      *positionEntree = '\0';
                                  }
                          
                                  else
                                  {
                                      viderBuffer();
                                  }
                          
                                  return 1;
                              }
                          
                              else
                              {
                                  viderBuffer();
                                  return 0;
                              }
                          }
                          
                          void viderBuffer()
                          {
                              int c = 0;
                          
                              while(c != '\n' && c != EOF)
                              {
                                  c = getchar();
                              }
                          }
                          


                          Exercice n°7 : zGame

                          #include <stdio.h>
                          #include <stdlib.h>
                          #include <string.h>
                          #include <time.h>
                          
                          void jouer();
                          int lireClavier(char chaine[], int longueur);
                          long lireLong();
                          void viderBuffer();
                          
                          int main()
                          {
                              long choix = 0, continuerProgramme = 1;
                              srand(time(NULL));
                          
                              printf("-zGame- : Entrainez votre cerveau au calcul mental !\n\n");
                              printf("Le programme va vous soumettre dix calculs sur les tables de multiplication\n");
                              printf("Calculs que vous allez devoir resoudre le plus rapidement possible");
                          
                              while(continuerProgramme)
                              {
                                  printf("\n\n=== MENU ===\n");
                                  printf("1. Commencer partie\n");
                                  printf("2. Quitter\n\n");
                          
                                  printf("Votre choix ? ");
                                  choix = lireLong();
                          
                                  switch(choix)
                                  {
                                      case 1:
                                          jouer();
                                          break;
                                      case 2:
                                          continuerProgramme = 0;
                                          break;
                                      default:
                                          printf("Erreur");
                                  }
                              }
                          
                              return 0;
                          }
                          
                          void jouer()
                          {
                              int i = 0, facteur_1 = 0, facteur_2 = 0, nombre_erreurs = 0;
                              long reponse_joueur = 0;
                          
                              clock_t temps_initial = clock();
                              clock_t temps_final = 0;
                          
                              for(i = 0; i < 10; i++)
                              {
                                  facteur_1 = rand()%11, facteur_2 = rand()%11;
                          
                                  printf("%d * %d = ", facteur_1, facteur_2);
                                  reponse_joueur = lireLong();
                          
                                  if(reponse_joueur != (facteur_1*facteur_2))
                                      nombre_erreurs++;
                              }
                          
                              temps_final = clock();
                              printf("Vous avez mis %f secondes et vous avez %d erreur !", (double)((temps_final - temps_initial) / CLOCKS_PER_SEC), nombre_erreurs);
                          }
                          
                          int lireClavier(char chaine[], int longueur)
                          {
                              char *positionEntree = NULL;
                          
                              if(fgets(chaine, longueur, stdin) != NULL)
                              {
                                  positionEntree = strchr(chaine, '\n');
                                  if(positionEntree != NULL)
                                  {
                                      *positionEntree = '\0';
                                  }
                          
                                  else
                                  {
                                      viderBuffer();
                                  }
                          
                                  return 1;
                              }
                          
                              else
                              {
                                  viderBuffer();
                                  return 0;
                              }
                          }
                          
                          long lireLong()
                          {
                              char nombreTexte[100] = {0};
                          
                              if(lireClavier(nombreTexte, 100))
                              {
                                  return strtol(nombreTexte, NULL, 10);
                              }
                          
                              else
                              {
                                  return 0;
                              }
                          }
                          
                          void viderBuffer()
                          {
                              int c = 0;
                          
                              while(c != '\n' && c != EOF)
                              {
                                  c = getchar();
                              }
                          }
                          


                          Merci d'avance pour votre aide !
                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 juin 2011 à 20:30:26

                            Bonjour à tous ! :D
                            Je vais vous présenter un petit exercice pas très compliqué mais qui devrait vous faire réfléchir un tout tout tout petit peu ^^

                            Alors le voici :D

                            zTriangle
                            </span></span>

                            Mois : Juin
                            Sujet : Les boucles

                            L'exercice !
                            </span></span>

                            Le but de l'exercice est assez simple : vous devez créer un programme qui affiche un triangle isocèle formé d'étoiles.

                            La hauteur du triangle (c'est à dire le nombre de lignes) devra être demandée à l'utilisateur.

                            La dernière ligne du triangle devra s'afficher sur le bord gauche de l'écran.

                            Un ptit exemple ? :-°
                            </span></span>
                            Votre triangle fera combien de lignes ?  10
                            
                            
                                     *
                                    ***
                                   *****
                                  *******
                                 *********
                                ***********
                               *************
                              ***************
                             *****************
                            *******************


                            A vous de codez !!

                            EDIT : Mise en page + correction :
                            #include <stdio.h>
                            #include <stdlib.h>
                            #define star '*'
                            
                            int main (int arg, char *argv)
                            {
                            int nb_ligne, compteur_ligne, nb_espace, j;
                            
                            printf("Vous voulez faire un triangle de combien de lignes ?  ");
                            scanf("%d", &nb_ligne);
                            printf("\n\n");
                            
                            for(compteur_ligne = 0; compteur_ligne < nb_ligne; compteur_ligne++)
                            {
                            	nb_espace = nb_ligne - compteur_ligne - 1;
                            
                            	for(j = 0; j < nb_espace; j++)
                            		putchar(' ');
                            
                            	for(j = 0; j < 2*compteur_ligne + 1; j++)
                            		putchar(star);
                            
                            	putchar ('\n');
                            }
                            	system("Pause");
                            }
                            


                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 juin 2011 à 20:37:08

                              Je vais le faire, mais franchement, la présentation est un tout petit peu à revoir, l'idée est bonne mais ça rejoint ce topic : http://www.siteduzero.com/forum-83-591 [...] t-niveau.html .
                              Aussi, tu devrais mettre plusieurs niveaux de difficulté et/ou plusieurs énoncés car là, c'est un peu rapide... :-°
                              • Partager sur Facebook
                              • Partager sur Twitter
                                17 juin 2011 à 21:27:28

                                L'intention est bonne, mais ce serait parfait si la présentation était moins flashy et si tu faisais un topic dédié. De plus, un peu plus de contenu serait le bienvenu car là comme le dit paraze, il n'y a pas grand chose à faire, preuve à l'appui :-° :
                                #include <stdio.h>
                                
                                int
                                main (void) {
                                
                                    int i, j, n;
                                    if (scanf(" %d", &n) != 1)
                                        return !puts("Tcho !!");
                                
                                    for (i=j=0;i<n;putchar(j<n-i-1?' ':'*'),j==n+i-1?putchar('\n'),++i,j=0:++j);
                                
                                    return 0;
                                }
                                
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  17 juin 2011 à 21:31:22

                                  :)

                                  Enfin, je trouve cela un peu abusé :
                                  for (i=j=0;i<n;putchar(j<n-i-1?' ':'*'),j==n+i-1?putchar('\n'),++i,j=0:++j);
                                  

                                  :lol:
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    17 juin 2011 à 21:39:35

                                    Pour la présentation, j'ai fait comme j'ai pu :lol: J'édite ça si ça ne vous plaît pas.
                                    Pour l'instant j'ai pas trop d'idée :( J'essayerais d'en trouver :)

                                    Sinon ton code Lithrein c'est du lourd :lol:
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      17 juin 2011 à 21:42:11

                                      Ok. ^^

                                      Tu pourrais faire la même chose avec d'autres formes, creuses et pleines.
                                      Tu pourrais aussi t'aider de ça : http://www.france-ioi.org/train/algo/s [...] 94637b9638760 et de ça : http://www.siteduzero.com/forum-83-591 [...] t-niveau.html .
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        17 juin 2011 à 22:52:27

                                        Le mieux serait encore de faire la même présentation que les autres exercices...
                                        Aller, juste histoire de rigoler j'ai essayé de faire ton exercice :

                                        #include <stdio.h>
                                        #define fOr putchar
                                        main(_,o){static int eIse;return _>0?scanf("%d", &eIse),1*4%6&&eIse>0&&main(-eIse,1),0:_<0?3*4&&fOr(' ')&&main(_+1,o)&&_==-eIse&&fOr('\n'),1+2&&--eIse>0&&main(-eIse,o+2):o>0?fOr('*')&&main(_,o-1):fOr('\n');}
                                        
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          18 juin 2011 à 0:02:58

                                          Ce serait pas mal de lire les règles du forum avant de poster.
                                          Crée un nouveau topic pour ton problème.
                                          Utilise les balises de codes.
                                          Ne pas utiliser le langage sms.
                                          Donner un titre explicite à son topic.

                                          Bon courage. :)
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            18 juin 2011 à 1:03:12

                                            +1 Pouet :)

                                            En c99 avec les chaines de caractères :
                                            #include <stdio.h>
                                            #include <string.h>
                                            #include <stdlib.h>
                                            int main(int _,char** __)
                                            <%char t[100] = "%";
                                            return _>0?scanf("%d", &_),*__=malloc(_<<1+1),memset(__??(0??),'*',_<<1),main(-_,__):!!_?sprintf(t, "%s%d.%ds","%",(-_+strlen(__??(!_:>)+(_<<1)+1),strlen(*__)+(_<<1)+1),printf(t,*__),puts(""),main(_+1,__):free(*__),0;
                                            }
                                            
                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

                                              18 juin 2011 à 12:18:23

                                              Oh, lui hé ! Copieur ! C'est mon code modifié ça. :lol:
                                              Par contre (hé oui :p ) si j'entre un nombre négatif ça plante, et j'ai quelques warning (hé oui, le size_t c'est %zd en C99 :p ) :

                                              main.c: In function ‘main’:
                                              main.c:6: warning: format ‘%d’ expects type ‘int’, but argument 6 has type ‘long unsigned int’
                                              main.c:6: warning: format ‘%d’ expects type ‘int’, but argument 7 has type ‘long unsigned int’
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                18 juin 2011 à 13:34:07

                                                Citation : Pouet_forever

                                                Oh, lui hé ! Copieur ! C'est mon code modifié ça. :lol:

                                                Euh démasqué :'(
                                                J'ai juste repris la gestion des paramètres du main()(d'ailleurs j'ai fais une bourde car j'ai fais !!_ et toi _<0. Sinon, les 2 codes n'ont absolument rien à voir :)


                                                Edit: Je n'ai pas le Warning que tu présentes.

                                                PS: Correction ;
                                                #include <stdio.h>
                                                #include <string.h>
                                                #include <stdlib.h>
                                                int main(int _,char** __)
                                                <%char t[100] = "%";
                                                return _>0?scanf("%d", &_),_<=0||((*__=malloc(_<<1+1))&&memset(__??(!_??),'*',_<<1)),(_)||(_=-!_),main(-_,__):!!_?sprintf(t, "%s%d.%ds","%",(-_+strlen(__??(!_:>)+(_<<1)+1),strlen(*__)+(_<<1)+1),printf(t,*__),puts(""),main(_+1,__):(free(*__),0);
                                                }
                                                
                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

                                                  18 juin 2011 à 14:24:07

                                                  Période: été 2011
                                                  Sujet: Boucles, manipulation de chaînes de caractères

                                                  zRom


                                                  L'exercice se trouve ici : http://www.siteduzero.com/forum-83-660136-p1-zrom.html
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    20 juin 2011 à 20:49:25

                                                    Vous vous amusez bien ?

                                                    Exercice des triangles :


                                                    Je propose une solution avec une contrainte : n'utiliser qu'une seule variable d'itération (au lieu de 2). .
                                                    #include <stdio.h>
                                                    #include <stdint.h>
                                                    
                                                    /* QUELQUES EXPLICATIONS :
                                                       
                                                       L'écran est modélisé par une "grille", avec 'n' lignes,
                                                       numérotées à  partir de 0. Par exemple, pour n==4 :
                                                       
                                                         0. ---*...     (les tirets représentent ici les espaces blancs,
                                                         1. --***..      à afficher, et les points ceux à "sauter")
                                                         2. -*****.
                                                         3. *******
                                                            0123456
                                                       
                                                       Il y a '2n-1' colonnes (un peu de maths), qu'on note 'N' ;
                                                       on les numérote à partir de 0.
                                                       
                                                       Dans le programme, on parcourt cette grille pour afficher les caractères
                                                       (' ', '*' ou '\n'). On peux bien sûr utiliser 2 variables pour cela
                                                       (ligne et colonne) avec 2 boucles imbriquées ; cependant, je me suis
                                                       imposé la contrainte de n'utiliser qu'une seule variable et une seule
                                                       boucle...
                                                       
                                                       On a au total 'n*(2n-1)' cases, soit '2n²-n'. Il faut donc parcourir la
                                                       grille en boucle, en initialisant la variable (appelée 'i') à 0 et tant
                                                       que 'i<2n²-n'.
                                                       
                                                       On obtient le n° de la ligne 'L' actuelle en faisant 'i/N' (quotient
                                                       de la division entière), et le n° de la colonne actuelle 'C' en faisant
                                                       'i%N' (reste de la division entière).
                                                       
                                                       On constate (cf schéma) qu'il y a, pour chaque ligne, 'n-L-1' espaces
                                                       à gauche et autant à droite.
                                                       La colonne de la 1ère étoile est donc 'n-L-1', (souvenez-vous que la
                                                       numérotation commence à 0), et celle du 1er espace de droite 'N - (n-L-1)'.
                                                       
                                                       Les espaces de gauche (représentés par des tirets) doivent être écrits
                                                       sur l'écran, tandis que ceux de droite (représentés par des points)
                                                       peuvent être omis puisqu'il n'y a rien après.
                                                    */
                                                    
                                                    #define  N  (2*(uint32_t)n-1)   // largeur (nombre de colonnes)
                                                    #define  L  (i/N)   // ligne actuelle
                                                    #define  C  (i%N)   // colonne actuelle
                                                    
                                                    int main(void) {
                                                       uint8_t n;   // hauteur (nombre de lignes), fournie par l'utilisateur (0-255)
                                                       uint32_t i;  // pour parcourir la "grille" d'affichage
                                                       
                                                       printf("n=? ");
                                                       if(scanf(" %u",&n))   // si la saisie du l'utilisateur est valide
                                                          for(i=0; i<2*n*n-n; ++i) {   // on parcourt la grille
                                                             if(C == N - (n-L-1)) {             /* si on est rendu au 1er espace de droite
                                                                                                   (cf explications pour le calcul du test) */
                                                                i+= N-C-1; // on va à la fin de la ligne
                                                                putchar('\n');
                                                             }
                                                             else if(C < n-L-1)   putchar(' '); /* si on est dans les espaces de gauche
                                                                                                   (cf explications pour le calcul du test) */
                                                             else                 putchar('*'); /* sinon, on est dans la pyramide */
                                                          }
                                                       return 0;
                                                    }
                                                    
                                                    Je pense qu'il est possible de se débarrasser de i et n'utiliser qu'une seule variable en tout ('n') ; je posterais mon nouveau code une fois que j'aurais réussi (si je réussis).


                                                    ÉDIT: Code revu et commenté suite à la remarque de Fayden (le code "moche" peut toujours être consulté :p )

                                                    Code dégueu :
                                                    #include <stdio.h>
                                                    #include <stdint.h>
                                                    #define N ((signed)(((uint32_t)n<<1)-1))
                                                    #define L ((signed)(i/N))
                                                    #define C ((signed)(i%N))
                                                    int main(void){uint8_t n;uint32_t i;printf("n=? ");if(scanf(" %u",&n))
                                                    for(i=0;(n*n<<1)-n-i;putchar(n-N-L+C-1?0<n-L-C-1?' ':'*':(i+=N-C-1,'\n')),++i);
                                                    return 0;}
                                                    
                                                    J'ai été gentil, je l'ai mis sur 3 lignes :p (si le préprocesseur vous dérange, je peux faire du search&replace !)

                                                    <secret>Qui peux m'expliquer pourquoi ce code ne donne-t-il pas le même résultat que le précédent ?
                                                    int main(void){uint8_t n;uint32_t i=0;printf("n=? ");if(scanf(" %u",&n))
                                                    for(;(n*n<<1)-n-i;putchar(n-N-L+C-1?0<n-L-C-1?' ':'*':(i+=N-C-1,'\n')),++i);
                                                    return 0;}
                                                    
                                                    La seule différence, c'est l'initialisation de i qui est faite à la déclaration et pas dans le for. J'ai beau chercher, je ne vois pas et ça m'embête :colere: , parce qu'avec le 2è code le programme ne fonctionne pas.

                                                    J'ai plein d'autres problèmes du style, pour remplacer des expressions a priori équivalentes. Je soupçonne un lien avec le typage et/ou le signe (signed/unsigned), mais là j'ai le cerveau en compote.</secret></span>

                                                    @che > J'aime beaucoup ton code :lol: Je ne savais même pas que c'est autorisé de nommer ses variables _ et __ o_O Juste, pourquoi n'as-tu pas remplacé la dernière accolade de ton main ?
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      20 juin 2011 à 23:28:26

                                                      @Maelan44: Merci, j'ai pas remplacer la dernière accolades pour que le code reste lisible :p (En vérité, il n'y a pa de raison)
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter

                                                      🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

                                                        21 juin 2011 à 3:02:05

                                                        Citation : Alerte reçue

                                                        Ce topic vire au "qui sera capable de poster le code le plus degueulasse" et ce n'etait pas son but a la base..


                                                        Et il n'a pas tort. Si vous voulez faire un topic pour les débutants, ce serait dommage de remplir ses pages avec des codes imbuvables qui n'aideront pas les débutants.
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          21 juin 2011 à 17:08:35

                                                          Mes excuses :honte: .

                                                          J'ai édité mon message (et surtout le code) dans l'optique "topic d'entraînement pour les débutants (ou pas)", et non "most obfuscated code" ; je l'ai présenté convenablement et commenté en détail afin qu'il soit (je l'espère) suffisamment compréhensible.
                                                          Je pense en effet qu'il peut être intéressant vu qu'il ne s'agit pas d'une redite des codes précédemment postés (puisqu'il introduit une contrainte).

                                                          Encore navré de la dérive.
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            21 juin 2011 à 17:21:30

                                                            Citation : Fayden

                                                            Citation : Alerte reçue

                                                            Ce topic vire au "qui sera capable de poster le code le plus degueulasse" et ce n'etait pas son but a la base..


                                                            Et il n'a pas tort. Si vous voulez faire un topic pour les débutants, ce serait dommage de remplir ses pages avec des codes imbuvables qui n'aideront pas les débutants.


                                                            Il n'a peut-être pas tord, mais sachant qu'il n'y a quasiment aucun (pour pas dire aucun) débutant qui fait les exos, pourquoi se priver ? Et puis franchement, je me demande même pourquoi on s'emmerde à en proposer. Le seul exercice qui a eu beaucoup de succès (à mon goût), c'est l'exercice zMorp, le reste, je ne vois pas une précipitation accablante...
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            Exercices pour débutants en C (suite)

                                                            × 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