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

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

 C Discussion :

Convertir un algorithme en C


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 28
    Points : 24
    Points
    24
    Par défaut Convertir un algorithme en C
    Bonjour, je suis sambalien. J'ai deux problemes pour lesquels je sollicite votre aide.
    1- J'ai un algorithme en tete et j'aimerais le convertir en C.
    Je vous le soumets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Chaine: variableChaine
    OuvertureFichier: fichier
    Entier: numeroLigne = 1
     
    fichier = Fonction_d_OuvertureFichier("urlFichier","modeLecture")
    Ecrire("Donnez votre chaine")
    Lire(variableChaine)
    Faire
      LireChaineDuFichier(numeroLigne)
      Si (varariableChaine == ChaineDuFichierLue){  // ChaineDuFichierLue pourra etre une retournée
                                                  //  par la fonction LireChaineDuFichier
        Ecrire("Chaine Trouvée")
        Sortir
        }
      Sinon{
        Ecrire("Chaine non trouvée", numeroLigne, "fois")
        numeroLigne++
        }
    Jusqu'a ce que(FinDeFichier)
    Fin
    Si vous pouvez me le convertir en langage C cela me serait d'un grand secours.

    2- J'utilise le Dev-C++, quand je fais des fonctions j'ai toujours un probleme
    avec le linker lors de la compilation.

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

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Ce n'est pas très compliqué. Essayes de le faire et poste des questions avec ton code si tu as des problèmes.

    Quelques indices :
    Fonction_d_OuvertureFichier : fopen() fera l'affaire
    LireChaineDuFichier : s'interesser à fgets()
    varariableChaine == ChaineDuFichierLue : voir strcmp()

    Il manque dans ton algo
    Fonction_de_FermetureFichier : fclose()
    Publication : Concepts en C

    Mon avatar : Glenn Gould

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

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 28
    Points : 24
    Points
    24
    Par défaut Voici le code en C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main(int argc, char *argv[])
    {
      // Des variable pour prendre des chaines
      char chaineFichier[100], chaineUtilisateur[100];
      int line = 1;
     
      // Pour l'ouverture du fichier
      FILE* fichier = NULL;
      fichier = fopen("pass.txt","r");
     
      // Pour prendre le texte de l'utilisateur
      printf("Entrez votre chaine: ");
      scanf("%s", &chaineUtilisateur);
     
      // Verification de l'ouverture du fichier
      if (fichier != NULL){
                  printf("\nOuverture reussie...\n\n");
                  while(!(EOF)){
                                fgets(chaineFichier,100,fichier);
                                if(strcmp(chaineFichier, chaineUtilisateur) == 0){
                                    printf("\nChaine Identique");
                                    getchar();
                                   // break;
                                }
                                else
                                    line++;
                                }
    fclose(fichier);
                  }
      system("PAUSE");	
      return 0;
    }
    J'ai ecrit ci-dessus le code que j'ai essayé. Mon probleme maintenant c'est qu'apres l'affichage de la chaine Ouverture reussie, mon programme s'arrete. On dirait que la suite de mon code est ignoré.

    J'utilise le compilateur Dev-C++

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Allez, mes quelques remarques puisque si tu nous présentes ton code, c'est pour qu'on le commente

    1/ scanf("%s", &chaineUtilisateur);
    scanf dans ce cas attend un pointeur sur caractères, tu lui donnes l'adresse d'un pointeur sur caractères. La bonne syntaxe : scanf("%s", chaineUtilisateur);

    2/ while(!(EOF))
    EOF est une constante définie dans un fichier include donc !EOF est aussi une constante, le résultat de ce test sera toujours le même (j'ai la flemme de te dire si tu ne rentreras jamais dans la boucle ou si tu ne sortiras jamais de la boucle). De toute façon, ce n'est pas comme cela que l'on teste la fin d'un fichier (voir dans la FAQ)

    3/ fgets(chaineFichier,100,fichier);
    Le jour où tu va modifier la taille de ton buffer, je suis presque sûr que tu vas oublier d'aller modifier le nombre 100. Pour éviter ce genre d'oubli, on écrit comme cela : fgets(chaineFichier, sizeof(chaineFichier), fichier); comme cela, c'est le compilateur qui fait le sale boulot (il est là pour cela)

    4/ ta variable line est initialisée, incrémentée mais jamais utilisée. Elle ne sert à rien.

    5/ Pour faciliter la lecture et la relecture, on soigne la présentation et l'indentation du code.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 28
    Points : 24
    Points
    24
    Par défaut Ce n'est pas encore resolu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main(int argc, char *argv[])
    {
      // Des variable pour prendre des chaines
      char chaineFichier[100], chaineUtilisateur[100];
     
      // Pour l'ouverture du fichier
      FILE* fichier = NULL;
      fichier = fopen("pass.txt","r");
     
      // Pour prendre le texte de l'utilisateur
      printf("Entrez votre chaine: ");
      scanf("%s", chaineUtilisateur);
     
      // Verification de l'ouverture du fichier
      if (fichier != NULL){
                  printf("\nOuverture reussie...\n\n");
                  while(1){
                                fgets(chaineFichier,sizeof(chaineFichier),fichier);
                                if(strcmp(chaineFichier, chaineUtilisateur) == 0){
                                    printf("\nChaine Identique");
                                   // getchar();
                                   // break;
                                   fclose(fichier);
                                }
                                }
                  }
      system("PAUSE");	
      return 0;
    }
    J'ai apporté certaines modifications c'est presque le meme resultat:
    1- Le programme affiche :Ouverture reussie
    2- Le programme reste en memoire et n'affiche plus rien et n'accepte aucune commande.

    p.s. Je n'ai pas encore trouvé comment lui dire de d'arreter la boucle. J'ai pense a break; mais je pense que c'est la logique mon probleme.
    toutefois vous avez mon algorithme et mes codes sources si vous trouvez une meilleure logique faites moi savoir

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Tu n'a plus de test sur la fin de fichier donc c'est normal que tu boucles sans fin.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while(1)
    {
       if(fgets(...) == NULL)
       {
          /* c'est probalement la fin du fichier */
          break;
       }
    }
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 28
    Points : 24
    Points
    24
    Par défaut Ca avance
    Ca a marche un peu,
    mais le programme ne se comporte pas toujours comme je l'aurais souhaiter. Il me retourne toujours la chaine "Chaine introuvable" meme quand je tape quelque chose qui existe dans mon fichier. voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main(int argc, char *argv[])
    {
      // Des variable pour prendre des chaines
      char chaineFichier[100], chaineUtilisateur[100];
     
      // Pour l'ouverture du fichier
      FILE* fichier = NULL;
      fichier = fopen("pass.txt","r");
     
      // Pour prendre le texte de l'utilisateur
      printf("Entrez votre chaine: ");
      scanf("%s", chaineUtilisateur);
     
      // Verification de l'ouverture du fichier
      if (fichier != NULL){
                  printf("\nOuverture reussie...\n\n");
                  while(1){
                                fgets(chaineFichier,sizeof(chaineFichier),fichier);
                                if(strcmp(chaineFichier, chaineUtilisateur) == 0){
                                    printf("\nChaine Identique");
                                   // getchar();
                                    break;
                                   //fclose(fichier);
                                }
                                else
                                    printf("\nChaine introuvable...\n");
                                    break;
                                }
                  }
                  fclose(fichier);
      system("PAUSE");	
      return 0;
    }

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Si on suit le déroulement de ton programme, ton problème s'explique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    boucle sans fin
       lecture ligne
       si contenu ligne lu = valeur saisie par l'utilisateur
       alors
          afficher "Chaine Identique"
          quitter la boucle sans fin
       sinon
          afficher "Chaine introuvable..."
          quitter la boucle sans fin
       fin si
    fin boucle
    Donc globalement, tu lis une ligne et quelque soit le résultats de ta comparaison, tu quittes la boucle de lecture. Au final, tu n'auras lu qu'une seule ligne de ton fichier.

    le pseudo code devrait être quelque chose comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    boucle sans fin
       lecture ligne
       si fin de fichier détectée
       alors
          quitter la boucle sans fin
       fin si
       si contenu ligne lu = valeur saisie par l'utilisateur
       alors
          afficher "Chaine Identique"
          quitter la boucle sans fin
    fin boucle
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 28
    Points : 24
    Points
    24
    Par défaut 2 nouveaux problemes
    J'ai bien apprécié et compris toutes les réponses trouvées jusqu'ici. Elles m'ont aidé a voir mieux ma facon de programmer.
    Sur la derniere reponse que j'ai eue voici comment j'ai implémeté mon programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main(int argc, char *argv[])
    {
      // Des variable pour prendre des chaines
      char chaineFichier[100], chaineUtilisateur[100];
     
      // Pour l'ouverture du fichier
      FILE* fichier = NULL;
      fichier = fopen("pass.txt","r");
      if(fichier == NULL){
                printf("Impossible d'ouvrir votre fichier . . .\n");
                }
      else{
     
           printf("Entrez votre chaine: ");
           scanf("%s", chaineUtilisateur);
           while(1){
                    fgets(chaineFichier,sizeof(chaineFichier),fichier);
                    if(EOF){
                            break;
                            }
                    if(strcmp(chaineFichier,chaineUtilisateur) == 0){
                        prinf("\nChaine Identique");
                        //break;
                        }
                    }
           }
     
      system("PAUSE");	
      return 0;
    }
    maintenant voici les problemes que j'ai
    1-Ce code ne dit pas de passer a la ligne suivante. Car la fonction fgets s'arrete au premier \n trouve (il ny a pas d'iteration reelle).
    2-Le programme n'analyse pas vraiment le fichier car apres la lecture de la chaineUtilisateur le programme s'arrete sans donner de messages.

    verifier vous meme le code sources dans votre compilateur et essayer de deceler le vrai probleme. Merci de votre aide, ne me laissez pas tomber.

  10. #10
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Posté hier soir par moi même
    EOF est une constante définie dans un fichier include , le résultat de ce test sera toujours le même (j'ai la flemme de chercher si tu rentreras toujours ou jamais dans le test). De toute façon, ce n'est pas comme cela que l'on teste la fin d'un fichier (voir dans la FAQ)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Algorithme Convertir nombre Entier en nombre Romain
    Par Kiffoux dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 30/11/2012, 10h34
  2. Convertir cet algorithme en Java
    Par napanh dans le forum Général Java
    Réponses: 19
    Dernier message: 17/08/2011, 15h44
  3. convertir algorithme en C
    Par Sergi06 dans le forum Débuter
    Réponses: 3
    Dernier message: 29/03/2009, 23h17

Partager

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