Chaine de caractére : problème

Résolu
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. Modérateur
    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
    1. Modérateur
      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
      1. Modérateur
        *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. 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
        2. Modérateur
          @émaRe,

          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
        3. @lami20jmerci beaucoup pour vous et pardonnez moi
          je pense que le probléme est dans mon ordinateur.
          merci............merci........merci
          pardent encore une fois
          0
        4. Modérateur
          @émaDe rien,

          Bonne continuation,

          lami20j
          0
      2. Modérateur
        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. 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. @simonsalut 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. Modérateur
          @simonSalut,

          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. @émaoui, bien sur il y a beaucoup, par exemple:
          arranger,émigrer,emmenager,encourager..............................................
          bon courage
          0
        5. Modérateur
          @simonPas é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
      3. Modérateur
        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. salut,
          merci lami20j c'est ce que je voulais, bravo vous etes un geni
          merci
          0
      4. bonjour,
        qu'entend on par tri de caractére pour un programme en c
        0
        1. 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