Chaine de caractére : problème

Résolu
éma -  
 imilia -
salut mon ami
je suis qu'un debutante et c'est tres tres urgent STP STP aide moi j'ai beaucoup essayé mais maintenant je n'ai plus de temps. STP STP STP fait le pour moi

il s'ait des chaine de caractére (on n'a pas le droit d'utiliser les pointeurs)

conjugaison d'un verbe du premier groupe au present,futur,imparfait.

mon probleme c'est que j'ai pas sue integrer les cas speciaux qui sont:

*lorsque le verbe commence avec une voyelle on le je devient j'
*lorsque le verbe se termne avec un "ger" ,on ajoute le "e"
*en cas du verbe "aller" on dit que ce n'est pas un verbe du 1er groupe

voici le programme que j'ai fait, il marche mais il ne contient pas les cas:

#include <stdio.h>
#include <string.h>
main()
{
/* Déclarations */
/* Sujets et terminaisons */
char suj1[6][5] = {"je","tu","il","nous","vous","ils"};
char suj2[6][5] = {"j'","tu","il","nous","vous","ils"};
char term1[6][5] = {"e","es","e","ons","ez","ent"};
char term2[6][7] = {"erai","eras","era","erons","erez","eront"};
char term3[6][7] = {"ais","ais","ait","ions","iez","aient"};
char verb[20]; /* chaîne contenant le verbe */
int l; /* longueur de la chaîne */
int i; /* indice courant */
/* Saisie des données */
printf("verb : ");
scanf("%s", verb);
/* Contrôler s'il s'agit d'un verbe en 'er' */
l=strlen(verb);
if ((verb[l-2] != 'e') || (verb[l-1] != 'r'))
printf("\"%s\" n'est pas un verbe du premier groupe.\n",verb);
else
{
/* Couper la terminaison 'er'. */
verb[l-2]='\0';
/* Conjuguer ... */
printf("la conjugaison du verbe au present est:\n");
for (i=0; i<6; i++)
{
printf("%s %s%s\n",suj1[i], verb, term1[i]);
}
verb[l-2]='\0';
printf("la conjugaison du verbe au futur est:\n");
for(i=0; i<6; i++)
{
printf("%s %s%s\n",suj1[i], verb, term2[i]);
}
verb[l-2]='\0';
printf("la conjugaison du verbe a l'imparfait est:\n");
for (i=0; i<6; i++)
{
printf("%s %s%s\n",suj1[i], verb, term3[i]);
}
return 0;
}
}

7 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    je ne suis pas vraiment content de ce que j'ai fait mais ça marche, donc si tu veux ce n'est pas très propre (j'ai fait quelques copier coller et j'ai ajouter 2 tableaux et 2 condition if - en gros le code a été multiplié par 2) en plus je n'ai pas assez de temps.

    En plus (je ne suis pas francophone) je ne sais pas si existe un verbe qui commence avec une voyelle et se fini avec ger. Donc on peux enlever la condition pour ger dans la 1ère partie où on teste les voyelles.

    Tu peux tester.
    Il faut aussi traiter le cas des verbes comme envoyer.
    [lamitest@localhost corbeille]$ ./conjugaison
    verb : envoyer
    la conjugaison du verbe au present est:
    j' envoye
    tu envoyes
    il envoye
    nous envoyons
    vous envoyez
    ils envoyent
    la conjugaison du verbe au futur est:
    j' envoyerai
    tu envoyeras
    il envoyera
    nous envoyerons
    vous envoyerez
    ils envoyeront
    la conjugaison du verbe a l'imparfait est:
    j' envoyais
    tu envoyais
    il envoyait
    nous envoyions
    vous envoyiez
    ils envoyaient
    [lamitest@localhost corbeille]$
    

    En fait si tu relis le code tu peux le arranger mieux que je l'ai fait. Compile et teste
    #include <stdio.h>
    #include <string.h>
    main()
    {
    /* Déclarations */
    /* Sujets et terminaisons */
    char suj1[6][5] = {"je","tu","il","nous","vous","ils"};
    char suj2[6][5] = {"j'","tu","il","nous","vous","ils"};
    char term1[6][5] = {"e","es","e","ons","ez","ent"};
    char term2[6][7] = {"erai","eras","era","erons","erez","eront"};
    char term3[6][7] = {"ais","ais","ait","ions","iez","aient"};
    char term4[6][7] = {"e","es","e","eons","ez","ent"}; /*cas nous mangeons*/
    char term5[6][7] = {"eais","eais","eait","ions","iez","eaient"};/* imparfait */
    char verb[20]; /* chaîne contenant le verbe */
    int l; /* longueur de la chaîne */
    int i; /* indice courant */
    /* Saisie des données */
    printf("verb : ");
    scanf("%s", verb);
    /* Contrôler s'il s'agit d'un verbe en 'er' */
    l=strlen(verb);
    if ((verb[l-2] != 'e') || (verb[l-1] != 'r'))
    	printf("\"%s\" n'est pas un verbe du premier groupe.\n",verb);
    else
    {
    if((verb[0] == 'a') || (verb[0] == 'e') || (verb[0] == 'i') || 
    	(verb[0] == '0') || (verb[0] == 'u') ) 
    /* les verbes en voyelles sans les accents*/
    {
    /* Couper la terminaison 'er'. */
    	verb[l-2]='\0';
    /* Conjuguer ... */
    	printf("la conjugaison du verbe au present est:\n");
    	if ((verb[l-3] == 'g')){/* les verbes en ger */
    		for (i=0; i<6; i++)
    		{
    			printf("%s %s%s\n",suj2[i], verb, term4[i]);
    		}
    	}
    	else
    	{
    		for (i=0; i<6; i++)
    		{
    			printf("%s %s%s\n",suj2[i], verb, term1[i]);
    		}
    	}
    	verb[l-2]='\0';
    	printf("la conjugaison du verbe au futur est:\n");
    		for(i=0; i<6; i++)
    		{
    			printf("%s %s%s\n",suj2[i], verb, term2[i]);
    		}
    		verb[l-2]='\0';
    	printf("la conjugaison du verbe a l'imparfait est:\n");
    	if(verb[l-3] == 'g'){
    		for (i=0; i<6; i++)
    		{
    			printf("%s %s%s\n",suj2[i], verb, term5[i]);
    		}
    
    	}
    	else
    	{
    		for (i=0; i<6; i++)
    		{
    		printf("%s %s%s\n",suj2[i], verb, term3[i]);
    		}
    	}
    return 0;
    }
    else
    {
    /* Couper la terminaison 'er'. */
      verb[l-2]='\0';
    /* Conjuguer ... */
      printf("la conjugaison du verbe au present est:\n");
      if ((verb[l-3] == 'g')){
        for (i=0; i<6; i++)
        {
          printf("%s %s%s\n",suj1[i], verb, term4[i]);
        }
      }
      else
      {
        for (i=0; i<6; i++)
        {
          printf("%s %s%s\n",suj1[i], verb, term1[i]);
        }
      }
      verb[l-2]='\0';
      printf("la conjugaison du verbe au futur est:\n");
        for(i=0; i<6; i++)
        {
          printf("%s %s%s\n",suj1[i], verb, term2[i]);
        }
        verb[l-2]='\0';
      printf("la conjugaison du verbe a l'imparfait est:\n");
      if(verb[l-3] == 'g'){
        for (i=0; i<6; i++)
        {
          printf("%s %s%s\n",suj1[i], verb, term5[i]);
        }
    
      }
      else
      {
        for (i=0; i<6; i++)
        {
        printf("%s %s%s\n",suj1[i], verb, term3[i]);
        }
      }
    return 0;
    }
    }
    }
    
    0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Donc la version sans tester la terminaison ger quand les verbes commence avec une voyelle. Toujours sans tester les verbes de genre envoyer
    #include <stdio.h>
    #include <string.h>
    main()
    {
    /* Déclarations */
    /* Sujets et terminaisons */
    char suj1[6][5] = {"je","tu","il","nous","vous","ils"};
    char suj2[6][5] = {"j'","tu","il","nous","vous","ils"};
    char term1[6][5] = {"e","es","e","ons","ez","ent"};
    char term2[6][7] = {"erai","eras","era","erons","erez","eront"};
    char term3[6][7] = {"ais","ais","ait","ions","iez","aient"};
    char term4[6][7] = {"e","es","e","eons","ez","ent"}; /*cas nous mangeons*/
    char term5[6][7] = {"eais","eais","eait","ions","iez","eaient"};/* imparfait */
    char verb[20]; /* chaîne contenant le verbe */
    int l; /* longueur de la chaîne */
    int i; /* indice courant */
    /* Saisie des données */
    printf("verb : ");
    scanf("%s", verb);
    /* Contrôler s'il s'agit d'un verbe en 'er' */
    l=strlen(verb);
    if ((verb[l-2] != 'e') || (verb[l-1] != 'r'))
    	printf("\"%s\" n'est pas un verbe du premier groupe.\n",verb);
    else
    {
    if((verb[0] == 'a') || (verb[0] == 'e') || (verb[0] == 'i') || 
    	(verb[0] == '0') || (verb[0] == 'u') ) /* les verbes en voyelles sans les accents*/
    {
    /* Couper la terminaison 'er'. */
    	verb[l-2]='\0';
    /* Conjuguer ... */
    	printf("la conjugaison du verbe au present est:\n");
    	{
    		for (i=0; i<6; i++)
    		{
    			printf("%s %s%s\n",suj2[i], verb, term1[i]);
    		}
    	}
    	verb[l-2]='\0';
    	printf("la conjugaison du verbe au futur est:\n");
    		for(i=0; i<6; i++)
    		{
    			printf("%s %s%s\n",suj2[i], verb, term2[i]);
    		}
    		verb[l-2]='\0';
    	printf("la conjugaison du verbe a l'imparfait est:\n");
    	if(verb[l-3] == 'g'){
    		for (i=0; i<6; i++)
    		{
    			printf("%s %s%s\n",suj2[i], verb, term5[i]);
    		}
    
    	}
    	else
    	{
    		for (i=0; i<6; i++)
    		{
    		printf("%s %s%s\n",suj2[i], verb, term3[i]);
    		}
    	}
    return 0;
    }
    else
    {
    /* Couper la terminaison 'er'. */
      verb[l-2]='\0';
    /* Conjuguer ... */
      	printf("la conjugaison du verbe au present est:\n");
      	if ((verb[l-3] == 'g')){
        		for (i=0; i<6; i++)
        		{
          		printf("%s %s%s\n",suj1[i], verb, term4[i]);
        		}
      	}
      	else
      	{
        		for (i=0; i<6; i++)
        		{
          		printf("%s %s%s\n",suj1[i], verb, term1[i]);
        		}
      	}
      verb[l-2]='\0';
      	printf("la conjugaison du verbe au futur est:\n");
        		for(i=0; i<6; i++)
        		{
          		printf("%s %s%s\n",suj1[i], verb, term2[i]);
        		}
      verb[l-2]='\0';
      	printf("la conjugaison du verbe a l'imparfait est:\n");
      	if(verb[l-3] == 'g'){
        		for (i=0; i<6; i++)
        		{
          		printf("%s %s%s\n",suj1[i], verb, term5[i]);
        		}
    	}
      	else
      	{
        		for (i=0; i<6; i++)
        		{
        		printf("%s %s%s\n",suj1[i], verb, term3[i]);
        		}
      	}
    return 0;
    }
    }
    }
    
    0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    *en cas du verbe "aller" on dit que ce n'est pas un verbe du 1er groupe

    Bon le verbe aller c'est un verbe de 3ème groupe. En ce cas il faut poser une condition qui va exclure la conjugaison du verbe aller en tant que verbe de la 1ère groupe.

    Au lieu de
    if ((verb[l-2] != 'e') || (verb[l-1] != 'r'))
    écrit
    if ((verb[l-2] != 'e') || (verb[l-1] != 'r') || (strcmp(verb,"aller") == 0))

    0
    1. éma
       
      merci , merci............beaucoup tu m'as sauvé la vie.
      sa sera sympa de ta part si vous pouvez me trouver ou est le probléme dans ce programme

      il ne contient aucune erreur , mais je n'arrive pas a l'executer

      le but ent de chercher les point-cols dans une matrice
      merci d'avance

      #include <stdio.h>
      main()
      {
           
       int A[50][50];                   
      
       int MAX[50][50];
       int MIN[50][50];
       int N, M;    
       int I, J;    
       int AIDE;
       int C;       
      
        printf("Nombre de lignes   (max.50) : ");
       scanf("%d", &N );
       printf("Nombre de colonnes (max.50) : ");
       scanf("%d", &M );
       for (I=0; I<N; I++)
          for (J=0; J<M; J++)
              {
               printf("Elément[%d][%d] : ",I,J);
               scanf("%d", &A[I][J]);
              }
       
       printf("Matrice donnée :\n");
       for (I=0; I<N; I++)
          {
           for (J=0; J<M; J++)
                printf("%7d", A[I][J]);
           printf("\n");
          }
      
        for (I=0; I<N; I++)
           {
       
            AIDE=A[I][0];
            for (J=1; J<M; J++)
                 if (A[I][J]>AIDE) 
                  AIDE=A[I][J];
       
            for (J=0; J<M; J++)
                 if (A[I][J]==AIDE)  
                      MAX[I][J]=1;   
                 else
                      MAX[I][J]=0;
           }
       
       
       
       for (J=0; J<M; J++)
           {
       
            AIDE=A[0][J];
            for (I=1; I<N; I++)
                 if (A[I][J]<AIDE) AIDE=A[I][J];
       
            for (I=0; I<N; I++)
                 if (A[I][J]==AIDE)  
                      MIN[I][J]=1;   
                 else
                      MIN[I][J]=0;
           }
       
       
       printf("Points - cols :\n");
       for (C=0, I=0; I<N; I++)
            for (J=0; J<M; J++)
                 if (MAX[I][J]&&MIN[I][J])
                    {
                     C++;
                     printf("L'élément %d\test un maximum "
                            "sur la ligne %d\n"
                            "             \t et un minimum "
                            "sur la colonne %d\n", A[I][J], I, J);
                    }
       if (C==0)
           printf("Le tableau ne contient pas de points-cols.\n");
       return 0;
      }


      ...............je serai reconnaissante.............................
      0
      1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > éma
         
        Re,

        sa sera sympa de ta part si vous pouvez

        Ca ne me dérange pas si tu me tutoies, donc décide toi.

        Compilé avec
        [lamitest@localhost ~]$ gcc --version
        gcc (GCC) 4.0.2 20051125 (Red Hat 4.0.2-8)
        Copyright © 2005 Free Software Foundation, Inc.
        Ce logiciel est libre; voir les sources pour les conditions de copie.  Il n'y a PAS
        GARANTIE; ni implicite pour le MARCHANDAGE ou pour un BUT PARTICULIER.
        
        [lamitest@localhost ~]$
        

        J'exécute ton programme et j'ai ça. Donc dit ce que tu veux obtenir ou si ce que j'obtiens c'est bon
        [lamitest@localhost ~]$ ./ema_matrice
        Nombre de lignes   (max.50) : 2
        Nombre de colonnes (max.50) : 2
        Elément[0][0] : 4
        Elément[0][1] : 2
        Elément[1][0] : 50
        Elément[1][1] : 25
        Matrice donnée :
              4      2
             50     25
        Points - cols :
        L'élément 4     est un maximum sur la ligne 0
                         et un minimum sur la colonne 0
        [lamitest@localhost ~]$
        
        0
      2. éma > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
         
        merci beaucoup pour vous et pardonnez moi
        je pense que le probléme est dans mon ordinateur.
        merci............merci........merci
        pardent encore une fois
        0
      3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > éma
         
        De rien,

        Bonne continuation,

        lami20j
        0
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,

    Pour amusement j'ai traduit ton code en Perl.
    Si tu as l'occasion de le tester tu peux le faire. Le cas de verbe envoyer n'est pas vérifier.
    Je n'ai pas tester tous le verbes non plus, un francophone connais mieux que moi la conjugaison des verbes.
    Pour l'exécuter (sous Linux)
    [lamitest@localhost corbeille]$ perl conjugaison2.pl
    Entrez un verbe du 1ere groupe : partir
    Le verbe PARTIR n'est pas un verbe du 1ere groupe.
    [lamitest@localhost corbeille]$ perl conjugaison2.pl
    Entrez un verbe du 1ere groupe : aimer
    
    Conjugaison des verbes du 1ere groupe au Present,Imparfait et Future simple
    
    ------Present------
    
    j' aime
    tu aimes
    il(elle) aime
    nous aimons
    vous aimez
    ils(elles) aiment
    
    ------Imparfait------
    
    j' aimais
    tu aimais
    il(elle) aimait
    nous aimions
    vous aimiez
    ils(elles) aimaient
    
    ------Future simple------
    
    j' aimerai
    tu aimeras
    il(elle) aimera
    nous aimerons
    vous aimerez
    ils(elles) aimeront
    [lamitest@localhost corbeille]$
    
    Le script
    #! /usr/bin/perl -w
    
    use warnings;
    use strict;
    $" = "\n";
    
    my (@present,@imparfait,@future);
    my %baratiner = (
                      aje           =>  ['e','ais','ai'],
                      btu           =>  ['es','ais','as'],
                     'cil(elle)'    =>  ['e','ait','a'],
                      dnous         =>  ['ons','ions','ons'],
                      evous         =>  ['ez','iez','ez'],
                     'fils(elles)'  =>  ['ent','aient','ont'],
    );
    
    print "Entrez un verbe du 1ere groupe : ";
    chomp(my $verb = <STDIN>);
    if ($verb !~ /er$/ or $verb eq 'aller'){
      print "Le verbe \U$verb\E n'est pas un verbe du 1ere groupe.\n";
    }
    else {
      foreach (sort keys %baratiner) {
        my $base = substr($_,1);
        push @future, ($base." ".$verb.$baratiner{$_}[2]);
        if ($verb =~ /(.*g)er$/) {
          if($base eq 'je' or $base eq 'tu' or $base eq 'il' or $base eq 'ils') {# imparfait
            push @imparfait,($base." ".$1.'e'.$baratiner{$_}[1]);
          }
          else {
            push @imparfait,($base." ".$1.$baratiner{$_}[1]);
          }
          if ($base eq 'nous') { $baratiner{$_}[0] = 'eons' }# present
            push @present,($base." ".$1.$baratiner{$_}[0]);
        }
        elsif ($verb =~ /(.*)yer$/) {
          push @imparfait,($base." ".$1.'y'.$baratiner{$_}[1]);# imparfait
          if ($base eq 'vous' or $base eq 'nous') {# present
            push @present,($base." ".$1.'y'.$baratiner{$_}[0]);
          }
          else {
            push @present,($base." ".$1.'i'.$baratiner{$_}[0]);
          }
        }
        elsif ( $verb =~ /(.*)er$/) {
          push @present,($base." ".$1.$baratiner{$_}[0]);# present
          push @imparfait,($base." ".$1.$baratiner{$_}[1]);# imparfait
        }
      }
    if ($verb =~ /^[aeiou]/){ grep { s/je/j'/ } (@present,@imparfait,@future) }# j'
    print "\nConjugaison des verbes du 1ere groupe au Present,Imparfait et Future simple\n";
    print "\n"."-" x 6, "Present", "-" x 6,"\n\n";
    print "@present\n";
    print "\n"."-" x 6, "Imparfait", "-" x 6,"\n\n";
    print "@imparfait\n";
    print "\n"."-" x 6, "Future simple", "-" x 6,"\n\n";
    print "@future\n"
    }
    0
    1. simon
       
      salut, je veut participer a votre discution en vous ajoutant un cas speciales que vous avez oublier c'est le cas ou le verbe commence avec une voyelle et se termine avec un ger, malheureusement je metrise pas es chaines de caractéres.

      essayez de le faire vous.
      a+
      simon
      0
    2. éma > simon
       
      salut simon, moi je connait pas un verbe qui commence avec une voyelle et se termine avec "ger".
      si tu es encore là STP citez moi quelque verbes.
      merci
      0
    3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > simon
       
      Salut,


      que vous avez oublier c'est le cas ou le verbe commence avec une voyelle et se termine avec un ger

      Voir message N°2

      Donc la version sans tester la terminaison ger quand les verbes commence avec une voyelle.

      lami20j
      0
    4. simon > éma
       
      oui, bien sur il y a beaucoup, par exemple:
      arranger,émigrer,emmenager,encourager..............................................
      bon courage
      0
    5. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > simon
       
      Pas émigrer. Ger pas grer

      Ce résultat est correct?
      [lamitest@localhost my_perl_script]$ perl conjugaison2.pl
      Entrez un verbe du 1ere groupe : emmenager
      
      Conjugaison des verbes du 1ere groupe au Present,Imparfait et Future simple
      
      ------Present------
      
      j' emmenage
      tu emmenages
      il(elle) emmenage
      nous emmenageons
      vous emmenagez
      ils(elles) emmenagent
      
      ------Imparfait------
      
      j' emmenageais
      tu emmenageais
      il(elle) emmenageait
      nous emmenagions
      vous emmenagiez
      ils(elles) emmenageaient
      
      ------Future simple------
      
      j' emmenagerai
      tu emmenageras
      il(elle) emmenagera
      nous emmenagerons
      vous emmenagerez
      ils(elles) emmenageront
      [lamitest@localhost my_perl_script]$
      
      
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Dans le message N°8 il y a une petite erreur

    Au debut j'ai utilisé comme clés dans hachage

    aje
    btu
    cil
    dnous
    evous
    fils
    Donc cet if fonctionne :
    if($base eq 'je' or $base eq 'tu' or $base eq 'il' or $base eq 'ils')


    Pour les clés de hachage

    aje
    btu
    'cil(elle)'
    dnous
    evous
    'fils(elles)'

    J'ai changé if

    if($base eq 'je' or $base eq 'tu' or $base eq 'il(elle)' or $base eq 'ils(elles)') 
    0
    1. éma
       
      salut,
      merci lami20j c'est ce que je voulais, bravo vous etes un geni
      merci
      0
  7. pépereF Messages postés 36 Date d'inscription   Statut Membre 2
     
    bonjour,
    qu'entend on par tri de caractére pour un programme en c
    0
  8. imilia
     
    slt j'ai un problème
    je vx faire un test sur des entier c-à-dire
    switch(c) {
    case'(': c=getchar();
    if(c=='*')
    while (c!='*'){
    c=getchar() ;}
    c=gechar();
    if(c==')')
    unite_lex="COMMENTAIRE";
    break;
    case:0
    case:1
    .
    .
    .
    case:9
    traitement
    je ve minimiser ca

    merci
    si vous pouvez m'aider
    0