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 :

Aide SVP probleme "espace"


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 4
    Par défaut Aide SVP probleme "espace"
    Bonjour,

    Je suis étudiant en première année de Mesure-Physique et pour cette fin d'année, j'ai, ce que nos profs appellent, un projet en informatique à réaliser.

    (Énoncer page 1,page 2)

    Pour ceux qui ont la flm d'aller voir l'énoncer : je dois faire un programme qui me traduit des mots en signe représentant un personnage avec des drapeaux, langage de la marine.

    Pour le moment voila ce que j'ai fait, avec mes maigres connaissances (il fonctionne pour le moment qu'avec les lettres "a" et "b":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #include <stdio.h>
    #include <string.h>
     
    void saisie();
    void traduc (int longueur, char* chaine);
     
    main()
    {
        saisie();
     
        fflush(stdin);
        getchar();  
    }
     
    void saisie()
    {
        char chaine[256];
        printf("Entrez votre chaine a traduire : ");
        scanf("%s",chaine);
        traduc(strlen(chaine), chaine);
    }
     
    void traduc (int longueur, char* chaine)
    {
        int i,j,k;
        char tab[2][4][8]= {{"       ","   ()  ","  /^^| "," <>][] ",},
                            {"       ","  _()  ","[] ^^| ","   ][] "}};
     
        char* lettre = "abcdefghijklmnopqrstuvwxyz";                    
     
        for (i = 0; i<4; i++)   //boucle des colonnes
        {
            for (j=0; j<longueur; j++)   //chaque lettre de chaine
            {
                for (k = 0; k<28; k++)  //chaque lettre de lettre
                {
                    if (chaine[j] ==  lettre[k])  //k contient l'indice de la lettre a traduire  
                    {
                            printf("%s ",tab[k][i]); //on affiche la ligne correspondante
                            break;         //on sort de la boucle
                    }
                }
            }
            printf("\n");
        }
    }
    Mon problème est le suivant comme je dois faire apparaître la traduction en signe de telle manière qu'un mot soit afficher sur une ligne, comment puis-je faire?

    En cherchant un peu, j'ai vue qu'il me faudrait remplacer mes scanf par des fgets, pour que les espaces soient reconnus. Mais je ne vois pas comment faire pour que lorsqu'il y ait un espace cela fasse un saut de ligne...

    Merci d'avance.
    Kermouse

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void saisie()
    {
        char chaine[256];
        printf("Entrez votre chaine a traduire : ");
        fgets(chaine,sizeof(chaine),stdin);
        traduc(strlen(chaine), chaine);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main(void)
    {
    ...
    return EXIT_SUCCESS;
    }
    Pas standard, que sous Windows.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 4
    Par défaut
    Pour le fgets, merci ca marche,
    par contre cette partie dsl je vois pas comment l'utiliser pour faire faire un saut de ligne à chaque fois qu'il y a un espace.
    Citation Envoyé par seriousme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main(void)
    {
    ...
    return EXIT_SUCCESS;
    }
    Pas standard, que sous Windows.

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    faire un saut de ligne à chaque fois qu'il y a un espace.
    C'est à dire?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 4
    Par défaut
    ben en fait lorsqu'il y a un espace le mot suivant traduit en signe doit s'afficher sur la ligne d'en dessous...

    grossiérement, chaque fois qu'il y a un espace il faut un "\n"

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char chaine[32]="abc def ghi";
    char* p;
    while(p=strstr(chaine," ")){
    *p='\n';
    }

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 4
    Par défaut
    hum encore merci mais ca ne régle pas mon probléme :
    ce qui tu ma donné permet de faire
    aaa bbb -->aaa
    bbb


    moi ce que je veux c'est :


    ....................()...... ().....()
    ................../^^| /^^| /^^|
    aaa bbb --><>][] <>][] <>][]
    ..................
    .................._ ()....._ ()....._ ()
    ................[] ^^| [] ^^| [] ^^|
    ....................][]......][].......][]

    Le code transforme des lettres en des symboles qui sont des matrices de 4 par 8, qu'il affiche ligne par ligne, et non symbole après symbole, si je me contente de rajouter des \n dans le code ca va juste décaler et déformer les symboles.

    Ou alors je n'ai pas compris comment utiliser ce que tu m'as donné

    ps : j'ai réparé les liens vers l'énoncé dsl

  8. #8
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Le code au dessus sert juste à remplacer les " " par des "\n".

    Sinon faire un tableau du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    char* t[26]={"<>][]","_ ()",...};
    ...
    char chaine[32]="aaa bbb";
    char c;
    int indice;
    for(i=0;i<7;i++){
    c=chaine[i];
    if(c==' '){
    printf("\n");
    continue;
    }
    indice=c-'a';
    printf("%s",t[indice]);
    }

  9. #9
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Citation Envoyé par Kermouse
    Bonjour,

    Je suis étudiant en première année de Mesure-Physique et pour cette fin d'année, j'ai, ce que nos profs appellent, un projet en informatique à réaliser.

    (Énoncer page 1,page 2)

    Pour ceux qui ont la flm d'aller voir l'énoncer : je dois faire un programme qui me traduit des mots en signe représentant un personnage avec des drapeaux, langage de la marine.
    Un petit sémaphoriste


    Citation Envoyé par Kermouse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                 for (k = 0; k<28; k++)  //chaque lettre de lettre
                {
                    if (chaine[j] ==  lettre[k])
    Attention ici, dans la boucle tu vas jusqu'a k = 27, or le tableau lettre a 26 elements (id est, z est à l'indice 25 et '\0' à l'indice 26).
    Donc k < 27.

    Citation Envoyé par Kermouse
    Mon problème est le suivant comme je dois faire apparaître la traduction en signe de telle manière qu'un mot soit afficher sur une ligne, comment puis-je faire?

    En cherchant un peu, j'ai vue qu'il me faudrait remplacer mes scanf par des fgets, pour que les espaces soient reconnus. Mais je ne vois pas comment faire pour que lorsqu'il y ait un espace cela fasse un saut de ligne...
    Dissocie simplement ta lecture en entree et ta traduction vers les symboles.

    Quelques remarques sur la traduction vers les symboles. Il faudrait pour être bien une structure représentant ton symbole, avec par exemple 4 membres char* ou char[] pour représenter les lignes 1 à 4 de ton symbole. Lors de la traduction, lorsque tu rencontres un espace, tu combines les ligne 1 des symboles correspondants, tu l'affiches, tu passes à la suivante, etc... jusqu'à la ligne 4. Tu peux associer ainsi une structure 'symbole' à chaque lettre.
    La contrainte est que tu dois définir une largeur fixe pour tes symboles, de façon à avoir une 'symétrie' avec la tête, le buste et les jambes du bonhomme. J'ai pris 12 par exemple, 6 caractères de chaque côté.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    #define SYMMAXWIDTH 12
     
    typedef struct {
       char symLine1[SYMMAXWIDTH+1];
       char symLine2[SYMMAXWIDTH+1];
       char symLine3[SYMMAXWIDTH+1];
       char symLine4[SYMMAXWIDTH+1];
    } symbol_s ;
     
    /* Tableau de symboles a initialiser pour chaque lettre [a-zA-Z] et [0-9] */
    /* A faire dans une fonction à part par exple */
    symbol_s tabSym[26+10];
    /* Exple pour 'a' et 'A' */
    strcpy(tabSym[0].symLine1, "            ");
    strcpy(tabSym[0].symLine2, "     ()     ");
    strcpy(tabSym[0].symLine3, "    /^^|    ");
    strcpy(tabSym[0].symLine4, "   <>][]    ");
    /* etc... */
     
    int traduireEtAfficheSym(char const * mot) 
    {
        int rc = 0;
        if (!mot) { rc = -1; }
     
        if (rc >=0 ) {
             symbol_s sym;
             size_t i, lg =  strlen(mot);
             char * ligne1 = NULL, * ligne2 = NULL, * ligne3 = NULL, * ligne4 = NULL;
             ligne1=malloc(lg*SYMMAXWIDTH*sizeof*ligne1 + sizeof*ligne1);
             if (!ligne1)  {
                 return -2;  
             }
             ligne2=malloc(lg*SYMMAXWIDTH*sizeof*ligne2 + sizeof*ligne2);
             if (!ligne2)  {
                 free(ligne1);
                 return -2;  
             }
             ligne3=malloc(lg*SYMMAXWIDTH*sizeof*ligne3 + sizeof*ligne3);
             if (!ligne3)  {
                free(ligne2); free(ligne1);
                return -2;  
             }
             ligne4=malloc(lg*SYMMAXWIDTH*sizeof*ligne4 + sizeof*ligne4);
             if (!ligne4)  {
                free(ligne3); free(ligne2); free(ligne1);
                return -2;  
             }
     
             for (i = 0; i <lg; ++i) {
                 /* Parcourir mot et remplir sym en fonction du caractere
                  * rencontre : suivant *mot, sym = tabSym[?] 
                  */
                 strcat(ligne1, sym.symLine1);
                 strcat(ligne2, sym.symLine2);
                 strcat(ligne3, sym.symLine3);
                 strcat(ligne4, sym.symLine4);
             }
             puts(ligne1); puts(ligne2); puts(ligne3); puts(ligne4);
             free(ligne4); free(ligne3); free(ligne2); free(ligne1);      
        }
    }
    A+

Discussions similaires

  1. [PHP 5.3] Probleme espace , quote et input
    Par misakilou dans le forum Langage
    Réponses: 2
    Dernier message: 12/10/2011, 17h03
  2. Aide SVP probleme scanf
    Par ceagle75 dans le forum C
    Réponses: 10
    Dernier message: 17/06/2006, 18h04
  3. [text] probleme avec simple quote
    Par bor1s dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/12/2005, 16h03

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