Chaine de caractére : problème

Résolu/Fermé
éma - 26 févr. 2006 à 13:44
 imilia - 28 mai 2008 à 14:41
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

lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 565
26 févr. 2006 à 14:34
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 565
26 févr. 2006 à 14:49
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 565
26 févr. 2006 à 15:11
*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
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 565 > éma
26 févr. 2006 à 17:25
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
éma > lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019

26 févr. 2006 à 18:52
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 565 > éma
26 févr. 2006 à 19:34
De rien,

Bonne continuation,

lami20j
0
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 565
26 févr. 2006 à 20:03
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
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
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
oui, bien sur il y a beaucoup, par exemple:
arranger,émigrer,emmenager,encourager..............................................
bon courage
0
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 565 > simon
26 févr. 2006 à 21:58
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 565 > éma
26 févr. 2006 à 22:34
Enfin de compte ema, c'est bon pour toi ou pas?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 565
26 févr. 2006 à 21:50
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
salut,
merci lami20j c'est ce que je voulais, bravo vous etes un geni
merci
0
pépereF
Messages postés
36
Date d'inscription
dimanche 11 décembre 2005
Statut
Membre
Dernière intervention
25 janvier 2008
2
18 mars 2007 à 16:57
bonjour,
qu'entend on par tri de caractére pour un programme en c
0
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