Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercices pour débutants en C (suite)

Venez vous entrainer!

    19 juin 2010 à 19:38:05

    J'étais au courant pour strftime mais je trouvais plus cool d'afficher la date en français. Après tout on est en France.
    • Partager sur Facebook
    • Partager sur Twitter
      19 juin 2010 à 20:08:18

      Citation : Lithrein

      J'ai retouché l'énoncé le trouvez vous plus clair ou non ?
      Si non, dites moi ce que vous ne comprenez pas et je tenterais d'éclaircir.



      L'énoncé était presque parfait, dommage, on se demande pourquoi tu te plais à compliquer ;) .Les débutants et post-débutants ont besoin d'exos simples et carrés (ie bien délimités).

      L'idée qui est bonne est de faire calculer le prochain vendredi 13. Après ton histoire de timestamp, c'est de l'obfuscation. Tu as un principe de base en génie logiciel, ça s'appelle la séparation. Dis-toi bien que ton programme, la recherche du prochain vendredi 13, est un programme "grand public". L'interface doit donc être adaptée au client et demeurer "grand public". Madame Schmolo qui joue au loto chaque vendredi 13, elle sait pas ce que c'est qu'un timestamp. Ce dernier appartient (éventuellement) à l'implémentation. Donc, ton timemachin ne doit pas apparaître dans l'interface (principe d'encapsulation).


      Par ailleurs, si ton exo doit être fait par un débutant, tu dois le guider un minimum. Il existe a priori trois méthodes pour résoudre ton problème.
      • Partager sur Facebook
      • Partager sur Twitter
        21 juin 2010 à 13:54:27

        Je peux joindre à vous ? :D

        Sinon, ça me botterait bien de commencer à partir du tout premier exo (j'ai besoin de pratique) mais est-ce possible de poster des questions en rapport avec les vieux exos ?
        • Partager sur Facebook
        • Partager sur Twitter
          21 juin 2010 à 14:01:50

          Absolument, tu peux poser des questions sur tous les exos de la liste.
          • Partager sur Facebook
          • Partager sur Twitter
            21 juin 2010 à 17:10:52

            Bon, j'ai réussi le premier (pas très dur celui-là) ^^

            #include <stdio.h>
            #include <stdlib.h>
            
            void lire()
            {
                FILE *k=NULL;
                int caractereActuel=0;
                char chemin[100]={0};
                do
                {
                printf("Quel est le nom du fichier ? ");
                scanf("%s", chemin);
                k=fopen(chemin, "r");
                if(k==NULL)
                {
                    printf("\nOperation echouee. Veuillez reverifier le chemin d'acces");
                }
                }while(k==NULL);
                do
                {
                    caractereActuel=fgetc(k);
                    printf("%c", caractereActuel);
                }while(caractereActuel!=EOF);
                fclose(k);
            }
            
            
            
            void creer()
            {
            
                FILE *k=NULL;
                char nom[100]="Sansnom";
                do
                {
                printf("\nVeuillez entrer un nom pour votre fichier : ");
                scanf("%s", nom);
                k=fopen(nom, "w");
                if(k==NULL)
                {
                    printf("\nOperation echouee. Veuillez reverifier le nom");
                }
            
                }while(k==NULL);
                fclose(k);
            }
            
            void ecrire()
            {
                FILE *k=NULL; char ecriture[100];
                char chemin[100]={0};
                do
                {
                printf("\nVeuillez entrer le chemin d'accès a votre fichier : ");
                scanf("%s", chemin);
                k=fopen(chemin, "a+");
                if(k==NULL)
                {
                    printf("Operation echouee. Veuillez reverifier le chemin d'acces");
                }
                }while(k==NULL);
                printf("Que voulez vous ecrire ? ");
                scanf("%s", ecriture);
                fclose(k);
            }
            
            
            int main()
            {
                FILE* fichier=NULL;
                fichier = fopen("test.txt", "r+");
                int r=1;
                while(r>0)
                {
                int c=0;
                printf("1.Lire un fichier\n");
                printf("2.Créer un fichier\n");
                printf("3.Ecrire dans un fichier\n");
                printf("\nVotre choix ? ");
                scanf("%d", &c);
                switch(c)
                {
                    case 1:
                    lire();
                    break;
                    case 2:
                    creer();
                    break;
                    case 3:
                    ecrire();
                    break;
                    default:
                    printf("\nChoix errone, veuillez entrez un choix valide\n");
                    break;
            
                }
                printf("\n\nVoulez vous reutiliser zReader ?\n0.Non\n1.Oui\n\n");
                scanf("%d", &r);
                }
                return 0;
            }
            


            Par contre, l'exercice 2, j'ai plus de mal là, je ne sais pas vraiment comment on convertit en théorie un nombre décimal en nombre binaire... Donc je ne peux pas écrire le code :-°
            • Partager sur Facebook
            • Partager sur Twitter
              21 juin 2010 à 17:31:13

              du decimal au binaire
              Perso, je pense que tu devrais créer un topic pour poser tes questions.
              • Partager sur Facebook
              • Partager sur Twitter
              Zeste de Savoir, le site qui en a dans le citron !
                23 juin 2010 à 19:25:33

                Merci Guyrney, j'ai réussi à pondre un code qui marche impeccablement bien grâce à l'aide de meteor sur le topic que j'ai crée. Bon, il n'est pas aussi concis que d'autres, et il ne gère pas les nombres binaires de plus 15 caracteres... :p

                #include <stdio.h>
                #include <stdlib.h>
                
                
                long convertir(long decimal, int tableau[])
                {
                    long i=14, k=0;
                    for(i=14;decimal>=1 || k!=1;i--)
                    {
                        tableau[i]=decimal%2;
                        decimal/=2;
                        k=1;
                    }
                    i++;
                    return i;
                }
                
                int main()
                {
                    long i=0, decimal=0;
                    int binaire[15]={0};
                    printf("Welcome to zBinary\nLe programme vous permet de  convertir un nombre en base 10 en base binaire");
                    printf("\n\n\n");
                    printf("Veuillez entrer un nombre en base 10 :  ");
                    scanf("%ld", &decimal);
                    i=convertir(decimal, binaire);
                    while(i<15)
                    {
                        printf("%d", binaire[i]);
                        i++;
                    }
                    return 0;
                }
                


                J'ai aussi codé zStrcapitalize, mais il ne gère que le code ASCII :

                #include <stdio.h>
                #include <stdlib.h>
                char* strcapitalize(char* string);
                char minuscule(char lettreMajuscule);
                char majuscule(char lettreMinuscule);
                
                
                char* strcapitalize(char* string)
                {
                    int i, k=0;
                    for(i=0;k!=1 && string[i]!='\0';i++)
                    {
                        if((string[i]>='A' && string[i]<='Z') || (string[i]>='a' && string[i]<='z'))
                        {
                            k=1;
                            if(string[i]>='a' && string[i]<='z')
                            {
                                string[i]=majuscule(string[i]);
                            }
                        }
                    }
                    while(string[i]!='\0')
                    {
                        if(string[i]>='A' && string[i]<='Z')
                        {
                            string[i]=minuscule(string[i]);
                        }
                        i++;
                    }
                    return string;
                }
                
                
                char minuscule(char lettreMajuscule)
                {
                    lettreMajuscule+=32;
                    return lettreMajuscule;
                }
                
                char majuscule(char lettreMinuscule)
                {
                    lettreMinuscule-=32;
                    return lettreMinuscule;
                }
                
                int main()
                {
                    char test[]="zsALut les zeRos.";
                    strcapitalize(test);
                    printf("%s\n", test);
                    char test1[]="iL Y a 3mOts.";
                    strcapitalize(test1);
                    printf("%s\n", test1);
                    char test2[]="PLOP               aux zEros.";
                    strcapitalize(test2);
                    printf("%s\n", test2);
                    return 0;
                }
                


                Oui, j'ai sauté l'exercice zTri car je ne connais pas les algorithmes de tri, ça a l'air d'utiliser les logarithmes néperiens et tutti quanti, ce qui au dessus de mes connaissances en maths (je suis en 1èreS, je viens à peine de d'entrevoir sur wiki l'existence des primitives :D ).

                Est-ce qu'il suffit d'une simple explication pour avoir le concept ou il faudra attendre une année ou plus pour qui je puisse coder cet exo ?
                • Partager sur Facebook
                • Partager sur Twitter
                  24 juin 2010 à 1:43:08

                  Citation : HopeSky


                  Oui, j'ai sauté l'exercice zTri car je ne connais pas les algorithmes de tri, ça a l'air d'utiliser les logarithmes néperiens et tutti quanti, ce qui au dessus de mes connaissances en maths



                  Mais non, te laisse pas impressionner comme ça, ces histoires de logarithme, c'est juste pour mesurer la complexité d'un tri par comparaisons. Tu n'as rien besoin de savoir pour coder un algorithme de tri.


                  Citation : HopeSky


                  Est-ce qu'il suffit d'une simple explication pour avoir le concept



                  Tu n'as besoin d'aucune explication, je suppose qu'étant en 1ère, tu sais comment trier 50 ou 100 nombres, ben donc il te reste plus qu'à le conceptualiser en C. Just do it ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 juin 2010 à 0:03:16

                    Puisqu'il est question de dates, il y a aussi un petit programme sympa à écrire, c'est un cal-like (cal pour calendar).

                    Avec un exemple vous allez tout de suite comprendre ce qu'il faut faire :

                    $ cal 1 2038
                        janvier 2038    
                    lu ma me je ve sa di
                                 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
                                        
                    $



                    $ cal 2011
                                                 2011                              
                    
                          janvier               février                 mars        
                    lu ma me je ve sa di  lu ma me je ve sa di  lu ma me je ve sa di
                                    1  2      1  2  3  4  5  6      1  2  3  4  5  6
                     3  4  5  6  7  8  9   7  8  9 10 11 12 13   7  8  9 10 11 12 13
                    10 11 12 13 14 15 16  14 15 16 17 18 19 20  14 15 16 17 18 19 20
                    17 18 19 20 21 22 23  21 22 23 24 25 26 27  21 22 23 24 25 26 27
                    24 25 26 27 28 29 30  28                    28 29 30 31         
                    31                                                              
                           avril                  mai                   juin        
                    lu ma me je ve sa di  lu ma me je ve sa di  lu ma me je ve sa di
                                 1  2  3                     1         1  2  3  4  5
                     4  5  6  7  8  9 10   2  3  4  5  6  7  8   6  7  8  9 10 11 12
                    11 12 13 14 15 16 17   9 10 11 12 13 14 15  13 14 15 16 17 18 19
                    18 19 20 21 22 23 24  16 17 18 19 20 21 22  20 21 22 23 24 25 26
                    25 26 27 28 29 30     23 24 25 26 27 28 29  27 28 29 30         
                                          30 31                                     
                          juillet                 août               septembre      
                    lu ma me je ve sa di  lu ma me je ve sa di  lu ma me je ve sa di
                                 1  2  3   1  2  3  4  5  6  7            1  2  3  4
                     4  5  6  7  8  9 10   8  9 10 11 12 13 14   5  6  7  8  9 10 11
                    11 12 13 14 15 16 17  15 16 17 18 19 20 21  12 13 14 15 16 17 18
                    18 19 20 21 22 23 24  22 23 24 25 26 27 28  19 20 21 22 23 24 25
                    25 26 27 28 29 30 31  29 30 31              26 27 28 29 30      
                                                                                    
                          octobre               novembre              décembre      
                    lu ma me je ve sa di  lu ma me je ve sa di  lu ma me je ve sa di
                                    1  2      1  2  3  4  5  6            1  2  3  4
                     3  4  5  6  7  8  9   7  8  9 10 11 12 13   5  6  7  8  9 10 11
                    10 11 12 13 14 15 16  14 15 16 17 18 19 20  12 13 14 15 16 17 18
                    17 18 19 20 21 22 23  21 22 23 24 25 26 27  19 20 21 22 23 24 25
                    24 25 26 27 28 29 30  28 29 30              26 27 28 29 30 31   
                    31
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      26 juin 2010 à 11:22:37

                      Tiens, le mien met des majuscules et commence à dimanche
                      $ cal 2011
                                                   2011
                      
                            Janvier               Février                 Mars
                      Di Lu Ma Me Je Ve Sa  Di Lu Ma Me Je Ve Sa  Di Lu Ma Me Je Ve Sa
                                         1         1  2  3  4  5         1  2  3  4  5
                       2  3  4  5  6  7  8   6  7  8  9 10 11 12   6  7  8  9 10 11 12
                       9 10 11 12 13 14 15  13 14 15 16 17 18 19  13 14 15 16 17 18 19
                      16 17 18 19 20 21 22  20 21 22 23 24 25 26  20 21 22 23 24 25 26
                      23 24 25 26 27 28 29  27 28                 27 28 29 30 31
                      30 31                                       
                             Avril                  Mai                   Juin
                      Di Lu Ma Me Je Ve Sa  Di Lu Ma Me Je Ve Sa  Di Lu Ma Me Je Ve Sa
                                      1  2   1  2  3  4  5  6  7            1  2  3  4
                       3  4  5  6  7  8  9   8  9 10 11 12 13 14   5  6  7  8  9 10 11
                      10 11 12 13 14 15 16  15 16 17 18 19 20 21  12 13 14 15 16 17 18
                      17 18 19 20 21 22 23  22 23 24 25 26 27 28  19 20 21 22 23 24 25
                      24 25 26 27 28 29 30  29 30 31              26 27 28 29 30
                                                                  
                            Juillet                 Août               Septembre
                      Di Lu Ma Me Je Ve Sa  Di Lu Ma Me Je Ve Sa  Di Lu Ma Me Je Ve Sa
                                      1  2      1  2  3  4  5  6               1  2  3
                       3  4  5  6  7  8  9   7  8  9 10 11 12 13   4  5  6  7  8  9 10
                      10 11 12 13 14 15 16  14 15 16 17 18 19 20  11 12 13 14 15 16 17
                      17 18 19 20 21 22 23  21 22 23 24 25 26 27  18 19 20 21 22 23 24
                      24 25 26 27 28 29 30  28 29 30 31           25 26 27 28 29 30
                      31                                          
                            Octobre               Novembre              Décembre
                      Di Lu Ma Me Je Ve Sa  Di Lu Ma Me Je Ve Sa  Di Lu Ma Me Je Ve Sa
                                         1         1  2  3  4  5               1  2  3
                       2  3  4  5  6  7  8   6  7  8  9 10 11 12   4  5  6  7  8  9 10
                       9 10 11 12 13 14 15  13 14 15 16 17 18 19  11 12 13 14 15 16 17
                      16 17 18 19 20 21 22  20 21 22 23 24 25 26  18 19 20 21 22 23 24
                      23 24 25 26 27 28 29  27 28 29 30           25 26 27 28 29 30 31
                      30 31
                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 juin 2010 à 14:00:56

                        Citation : ttthebest

                        Tiens, le mien met des majuscules et commence à dimanche



                        On dirait une version américaine mal adaptée (où conventionnellement le début de semaine est plutôt dimanche et les américains ont la manie de faire commencer les mots par des capitales).

                        La prise en compte de ce genre de possibilité conduit à compliquer le code produit et à mon avis est néfaste pour les débutants. Dans un premier temps, s'en tenir à une version. Plus tard, on peut songer à avoir un code plus paramétré.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          29 juin 2010 à 9:14:25

                          Veuillez m'excusez du hors-sujet, je digresse le sujet vers l'exercice zTri. Il s'avère que j'ai codé le programme il y a un peu plus d'une semaine suite à quoi je me suis concentré sur le bac de français ^^ . Enfin bref, il m'avait l'air fonctionnel au niveau de l'algo des tris étant donné que j'avais déjà fait l'exo "ordonnerTableau" de Mateo21 où j'avais pu donc aborder avant cet exercice le raisonnement des tris.

                          Bon, je viens tout juste de me replonger dans le code, je l'ai testé, cependant, il reste un gros problème, le tri par sélection m'indique un temps d'exécution qui m'a l'air plausible tandis que le tri à bulles et le tri par insertion m'affiche 0 secondes. Je doute que mon PC ait la puissance d'un supercalculateur sur ces deux tris :lol:

                          Voici le code (désolé pour la longueur :-° ) :
                          #include <stdio.h>
                          #include <stdlib.h>
                          #include <time.h>
                          void triBulles(int tableau[], int taille);
                          void triSelection(int tableau[], int taille);
                          void triInsertion(int tableau[], int taille);
                          int verification(int tableau[], int taille);
                          void copie(int sauvegarde[], int tableau[], int taille);
                          
                          void copie(int sauvegarde[], int tableau[], int taille)
                          {
                              int i;
                              for(i=0;i<taille;i++)
                              {
                                  tableau[i]=sauvegarde[i];
                              }
                          }
                          
                          void triBulles(int tableau[],int taille)
                          {
                              taille-=1;
                              int v=0, i, temp;
                              do
                              {
                                  v=verification(tableau, taille);
                                  for(i=0;i<taille;i++)
                                  {
                                      if(tableau[i]>tableau[i+1])
                                      {
                                          temp=tableau[i];
                                          tableau[i]=tableau[i+1];
                                          tableau[i+1]=temp;
                                      }
                                  }
                              }while(v!=1);
                          }
                          
                          void triSelection(int tableau[], int taille)
                          {
                              int i, j, temp;
                              for(i=0; i<taille; i++)
                              {
                                  for(j=i; j<taille; j++)
                                  {
                                      if(tableau[i]>tableau[j])
                                      {
                                          temp=tableau[i];
                                          tableau[i]=tableau[j];
                                          tableau[j]=temp;
                                      }
                                  }
                              }
                          }
                          
                          void triInsertion(int tableau[], int taille)
                          {
                              int i, j, temp;
                              for(i=1;i<taille;i++)
                              {
                                  for(j=1;tableau[j]<tableau[j-1] && j>0;j--)
                                  {
                                      temp=tableau[j];
                                      tableau[j]=tableau[j-1];
                                      tableau[j-1]=temp;
                                  }
                              }
                          }
                          
                          
                          int verification(int tableau[], int taille)
                          {
                              int i=0, v=1;
                              for(i=0;i<taille;i++)
                              {
                                  if(tableau[i]>tableau[i+1])
                                  {v=0;}
                              }
                              return v;
                          }
                          
                          int main()
                          {
                              srand(time(NULL));
                              const int MIN=1, MAX=100;
                              int taille=0;
                              clock_t t1, t2;
                              printf("Bienvenue dans le zTri !\n\n");
                              printf("Combien d'éléments voulez-vous trier ? ");
                              scanf("%d", &taille);
                              double temps;
                              int i, *sauvegarde=NULL, *tableau=NULL;
                              sauvegarde=tableau=malloc(taille * sizeof(int));
                              for(i=0;i<taille;i++)
                              {
                                  tableau[i]=(rand() % (MAX - MIN + 1)) + MIN;
                                  sauvegarde[i]=tableau[i];
                              }
                          
                              printf("\nTri par insertion en cours... :");
                              t1=clock();
                              triInsertion(tableau, taille);
                              t2=clock();
                              temps=(t2-t1)/CLOCKS_PER_SEC;
                              printf("%f", temps);
                          
                              printf("\nTri par selection en cours... :");
                              copie(sauvegarde, tableau, taille);
                              t1=clock();
                              triSelection(tableau, taille);
                              t2=clock();
                              temps=(t2-t1)/CLOCKS_PER_SEC;
                              printf("%f", temps);
                          
                              printf("\nTri a bulles en cours... :");
                              copie(sauvegarde, tableau, taille);
                              t1=clock();
                              triBulles(tableau, taille);
                              t2=clock();
                              temps=(t2-t1)/CLOCKS_PER_SEC;
                              printf("%f", temps);
                              printf("\n\n");
                          
                              free(tableau);
                              free(sauvegarde);
                              return 0;
                          }
                          


                          D'ailleurs, je risque après celui-ci de ne plus pouvoir continuer à faire les exercices jusqu'à la rentrée car je vais en vacances pendant deux mois :)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            1 juillet 2010 à 6:59:24

                            Finalement, je suis parvenu à trouver mon erreur. J'ai en fait allouer une même zone mémoire pour le tableau sauvegarde et tableau. Donc, dès lors que je triais le tableau, la sauvegarde aussi était triée.

                            Et j'ai aussi corrigé l'algorithme du tri par insertion. En tout cas, cet exercice était réellement intéressant.

                            Voici donc le code :
                            #include <stdio.h>
                            #include <stdlib.h>
                            #include <time.h>
                            void triBulles(int tableau[], int taille);
                            void triSelection(int tableau[], int taille);
                            void triInsertion(int tableau[], int taille);
                            int verification(int tableau[], int taille);
                            void copie(int sauvegarde[], int tableau[], int taille);
                            
                            void afficheTableau(int tableau[], int taille)
                            {
                                int i;
                                printf("\n");
                                for(i=0;i<taille;i++)
                                {
                                    printf("%d ", tableau[i]);
                                }
                                printf("\n");
                            }
                            
                            void copie(int sauvegarde[], int tableau[], int taille)
                            {
                                int i;
                                for(i=0;i<taille;i++)
                                {
                                    tableau[i]=sauvegarde[i];
                                    /*printf("%d", sauvegarde[i];*/
                                }
                            }
                            
                            void triBulles(int tableau[],int taille)
                            {
                                taille-=1;
                                int v=0, i, temp;
                                do
                                {
                                    v=verification(tableau, taille);
                                    for(i=0;i<taille;i++)
                                    {
                                        if(tableau[i]>tableau[i+1])
                                        {
                                            temp=tableau[i];
                                            tableau[i]=tableau[i+1];
                                            tableau[i+1]=temp;
                                        }
                                    }
                                }while(v!=1);
                            }
                            
                            void triSelection(int tableau[], int taille)
                            {
                                int i, j, temp;
                                for(i=0; i<taille; i++)
                                {
                                    for(j=i+1; j<taille; j++)
                                    {
                                        if(tableau[i]>tableau[j])
                                        {
                                            temp=tableau[i];
                                            tableau[i]=tableau[j];
                                            tableau[j]=temp;
                                        }
                                    }
                                }
                            }
                            
                            void triInsertion(int tableau[], int taille)
                            {
                                int i, j, temp;
                                for(i=1;i<taille;i++)
                                {
                                    for(j=i;tableau[j]<tableau[j-1] && j>0;j--)
                                    {
                                        temp=tableau[j];
                                        tableau[j]=tableau[j-1];
                                        tableau[j-1]=temp;
                                    }
                                }
                            }
                            
                            
                            int verification(int tableau[], int taille)
                            {
                                int i=0, v=1;
                                for(i=0;i<taille;i++)
                                {
                                    if(tableau[i]>tableau[i+1])
                                    {v=0;}
                                }
                                return v;
                            }
                            
                            int main()
                            {
                                srand(time(NULL));
                                const int MIN=1, MAX=100;
                                int taille=0;
                                clock_t t1, t2;
                                printf("Bienvenue dans le zTri !\n\n");
                                printf("Combien d'éléments voulez-vous trier ? ");
                                scanf("%d", &taille);
                                double temps=0.0;
                                int i, *sauvegarde=NULL, *tableau=NULL;
                                tableau=malloc(taille * sizeof(int));
                                sauvegarde=malloc(taille *sizeof(int));
                                for(i=0;i<taille;i++)
                                {
                                    sauvegarde[i]=(rand() % (MAX - MIN + 1)) + MIN;
                                    tableau[i]=sauvegarde[i];
                                }
                            
                            
                                ;
                                printf("\nTri par insertion en cours... :");
                                t1=clock();
                                triInsertion(tableau, taille);
                                t2=clock();
                                temps=(t2-t1)/CLOCKS_PER_SEC;
                                printf("%f", temps);
                            
                                printf("\nTri par selection en cours... :");
                                copie(sauvegarde, tableau, taille);
                                t1=clock();
                                triSelection(tableau, taille);
                                t2=clock();
                                temps=(t2-t1)/CLOCKS_PER_SEC;
                                printf("%f", temps);
                            
                                printf("\nTri a bulles en cours... :");
                                copie(sauvegarde, tableau, taille);
                                t1=clock();
                                triBulles(tableau, taille);
                                t2=clock();
                                temps=(t2-t1)/CLOCKS_PER_SEC;
                                printf("%f", temps);
                                free(tableau);
                                free(sauvegarde);
                                return 0;
                            }
                            
                            • Partager sur Facebook
                            • Partager sur Twitter
                              2 juillet 2010 à 16:22:59

                              Voici le code de mon zReader, préparé avec amour :D.
                              Je suis prêts pour recevoir le bataillon de critique :p

                              #include <stdio.h>
                              #include <stdlib.h>
                              #include <string.h>
                              
                              void	clear_stdin(void);
                              void	wait(void);
                              void	read_file(void);
                              void	create_file(void);
                              
                              void	clear_stdin(void)
                              {
                              	char c;
                              
                              	c = 0;
                              	while ((c = getchar()) != '\n');
                              }
                              
                              void	wait(void)
                              {
                              	printf("Appuyez sur entrer pour revenir au choix des actions.\n");
                              	clear_stdin();
                              }
                              
                              void	read_file(void)
                              {
                              	char filename[FILENAME_MAX + 1];
                              	FILE* fichier = NULL;
                              	int c;
                              
                              	printf("Quelle est le nom du fichier que vous voulez lire ?\n");
                              	fgets(filename, FILENAME_MAX, stdin);
                              	filename[strlen(filename) - 1] = '\0';
                              	fichier = fopen(filename, "r");
                              	if (fichier != NULL)
                              		{
                              			c = fgetc(fichier);
                              			while (c != EOF)
                              			{
                              				    printf("%c", c);
                              			  	    c = fgetc(fichier);
                              				}
                              			fclose(fichier);
                              	    }
                                  else
                                      printf("Impossible d'ouvrir le fichier %s\n", filename);
                              	wait();
                              }
                              
                              void	create_file(void)
                              {
                              	char filename[FILENAME_MAX + 1];
                              	FILE* fichier = NULL;
                              
                              	printf("Quelle est le nom du fichier que vous voulez creer ?\n");
                              	fgets(filename, FILENAME_MAX, stdin);
                              	filename[strlen(filename) - 1] = '\0';
                              	fichier = fopen(filename, "w");
                              	if (fichier == NULL)
                              		printf("Le fichier n'a pas pu correctement etre cree\n");
                              	wait();
                              }
                              
                              void	write_file(void)
                              {
                              	char filename[FILENAME_MAX + 1];
                              	char input[BUFSIZ + 1];
                              	FILE* fichier = NULL;
                              
                              	printf("Quelle est le nom du fichier que vous voulez ecrire ?\n");
                              	fgets(filename, FILENAME_MAX, stdin);
                              	filename[strlen(filename) - 1] = '\0';
                              	fichier = fopen(filename, "w");
                              	printf("Pour quitter le mode d'ecriture taper :q puis valider par entrer\n");
                              	if (fichier != NULL)
                              		{
                              			while(fgets(input, BUFSIZ, stdin))
                              				{
                              					if (strcmp(":q\n", input) == 0)
                                      				break;
                              					fputs(input, fichier);
                              				}
                              			fclose(fichier);
                              		}
                              	else
                              		printf("Le fichier n'a pas pu correctement etre cree / ouvert\n");
                              	wait();
                              }
                              
                              int	main(void)
                              {
                              	int choix;
                              
                              	do
                              	{
                              		printf("1. Lire un fichier\n");
                              		printf("2. Creer un fichier\n");
                              		printf("3. Ecrire dans un fichier\n");
                              		printf("4. Quitter\n\n");
                              		printf("Votre choix ? ");
                              		choix = getchar();
                              		clear_stdin();
                              		if (choix == '1')
                              			read_file();
                              		else if (choix == '2')
                              			create_file();
                              		else if (choix == '3')
                              			write_file();
                              		else if (choix == '4')
                              			break;
                              	}
                              	while (1);
                              
                                  return (0);
                              }
                              
                              • Partager sur Facebook
                              • Partager sur Twitter
                                2 juillet 2010 à 16:30:44

                                premiere remarque : getchar retourne un int, comment tu vas choper la valuer de EOF si la plage de ton char est de 0 -> 255 ??

                                ensuite, bon moi je t'ai montre comment j'aurais fait pour le write_file

                                j'aurais pas fait de boucle infinie dans le main

                                sinon moi a la place de fgets pour securiser la saisie j'aurais utilise les regexp de scanf :)

                                et enfin tu te paierais une de ces taules sur la norme pitek x)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  2 juillet 2010 à 16:38:10

                                  Ha ouai effectivement je corrige, mais pourquoi le code fonctionne correct, ça devrait pas ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    2 juillet 2010 à 21:24:57

                                    <citation rid="5141688">sinon moi a la place de fgets pour securiser la saisie j'aurais utilise les regexp de scanf :)<citation>

                                    Qu'est ce que des "regexp"
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      2 juillet 2010 à 21:42:23

                                      Regular Expression -> Expression régulière. :)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        2 juillet 2010 à 22:20:30

                                        Oui mais je pense qu'il voulait un exemple de ton equivalent fgets avec les regexp
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          2 juillet 2010 à 23:20:36

                                          Expression rationnelle plutôt.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            2 juillet 2010 à 23:23:02

                                            Citation : bestpig

                                            Oui mais je pense qu'il voulait un exemple de ton equivalent fgets avec les regexp



                                            Oui :D

                                            Si mes souvenirs sont bon, ce n'est pas quelque chose du genre:
                                            ^[%]d

                                            (je crois que c'est dans le désordre) Il m'a semblé l'avoir vu dans un forum ou un totoriel il y a de ça quelques mois ^^ .

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              3 juillet 2010 à 0:17:47

                                              Le simple fait d'utiliser les formateurs fait que tu utilises les regex.
                                              Après, pour ton exemple c'est plutôt %[^\n] (par exemple).
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                3 juillet 2010 à 10:13:58

                                                Citation : Pouet_forever

                                                Le simple fait d'utiliser les formateurs fait que tu utilises les regex.
                                                Après, pour ton exemple c'est plutôt %[^\n] (par exemple).




                                                +1 Merci beaucoup :)
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  3 juillet 2010 à 11:59:26

                                                  Bonjour, je peux poster mon exercice ici ?

                                                  Que devrai-je mettre pour qu'il soit à vos normes ?
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    3 juillet 2010 à 12:01:54

                                                    Citation : perimgui

                                                    Que devrai-je mettre pour qu'il soit à vos normes ?


                                                    Poste un code fonctionnel, sans warning, ce sera très bien. ;)
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      3 juillet 2010 à 12:03:56

                                                      :D je parle d'un exercice que j'ai créer
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        3 juillet 2010 à 12:09:14

                                                        Citation : perimgui

                                                        :D je parle d'un exercice que j'ai créer


                                                        Déjà tu devrais attendre que Lithrein poste la correction du dernier.

                                                        Ensuite, tu devrais le contacter pour vous organiser. :)
                                                        Si on poste des exercices à l'arrache, ça risque de devenir le bazar. ;)
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Zeste de Savoir, le site qui en a dans le citron !
                                                          3 juillet 2010 à 12:14:53

                                                          Comment ça le contacter ? C'est Lithrein qui s'en occupe ?

                                                          Citation : GurneyH

                                                          Si on poste des exercices à l'arrache, ça risque de devenir le bazar. ;)



                                                          Ok, mais il n'y a pas un Tableau pour ça ?

                                                          Sinon, ok, bon, je le posterai une autre fois.
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            3 juillet 2010 à 12:20:07

                                                            Citation : perimgui

                                                            Ok, mais il n'y a pas un Tableau pour ça ?


                                                            On essaye de rester sur l'optique d'un exercice à la fois. Sinon c'est la pagaille. :)
                                                            En ce moment c'est Lithrein qui s'en occupe, donc tu lui envoies un message. :)
                                                            • 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