Nom: bienparenthésé()()()(() verifie si la chaine passée en parametre est bien parenthésée

Soyez le premier à donner votre avis sur cette source.

Snippet vu 2 698 fois - Téléchargée 34 fois

Contenu du snippet

Le titre veut tout dire on m a dit que mon code ne fonctionne pas moi je dis que si.J attends des commentaires. Amicalement

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>
int parenthesee(int size, char* expression) 
{
	char a = '(';
	char b = ')';
   int i;
   int gauche = 0;
   int droite = 0;
   for(i=0; i<=size; i++)
   {
	   if (expression[i] == a) gauche = gauche + 1;  
	  
   }

   for(i=0; i<=size; i++)
   {
	   if(expression[i] == b) droite = droite + 1;
   }

   if(gauche == droite)
   {
	   return 1;
   }
   else
   {

	   return 0;
   }
}

 

int main() 
{ 
   int size; 
   char* expression;
   scanf("%d\n", &size); 
   expression = malloc(size+1); 
   scanf("%s", expression); 
   printf("%d\n", parenthesee(size, expression)); 
   return 0; 
}

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
samedi 15 mai 2010
Statut
Membre
Dernière intervention
10 novembre 2009

ton programme cher ami va dire ke l'expression " ))(( " est valide, or c'est pa les cas
attetion!!!
Messages postés
51
Date d'inscription
lundi 7 juin 2004
Statut
Membre
Dernière intervention
15 juillet 2005

c'est un code sympathique que celui-ci !
une autre chose pour optimiser : les déclarations de a et de b sont totalement inutile en utilisant directement ')' et '(' dans les conditions. 2 octets de gagnés.
le dernier if peut aussi être retiré en mettant
return (gauche == droite);

je trouve que tu prends aussi un risque en faisant la saisie de la chaine avec scanf. suffit que tu entres un ' ' (espace) et c'est foutu. et comme l'a dit jcecchi, la demande de la taille est maladroite.

et pour régler le problème du cas )( , il faudrait faire une boucle tant que le nombre de parethèses ouvertes - nombre de parenthèses fermées >=0. en gros, une seule grande boucle qui vérifie si c'est un '(', ou un ')' et que gauche-droite>=0
Messages postés
14
Date d'inscription
jeudi 12 décembre 2002
Statut
Membre
Dernière intervention
9 avril 2005

Merci kaid pour le commentaire fait sur l optimisation possible de mon code.
Merci beaucoup jcecchi pour ton commentaire sur mon code.
Amicalement.
Messages postés
117
Date d'inscription
samedi 12 janvier 2002
Statut
Membre
Dernière intervention
14 janvier 2003
2
Salut,

Ceux qui disent que ton code ne marche n'ont pas tout a fait tort.
Je m'explique, en fait ton code compte le nombre de parentheses ouvrantes et fermantes mais imagine que :
expression = "Test )-:("
Et bien tu auras droite gauche 1 et ton programme renverra "OK c'est bon", mais ce n'est pas bon.
Il faudra donc aussi que tu penses a verifier les positions des parentheses.

Sinon a part ca, tu prend des risques a demander a l'utilisateur le nombre de caracteres de l'expression, c'est tellement vite fait d'oublier de compter une lettre.
Prefere plutot l'utilisation de la ligne de commande pour passer l'expression a tester + strlen.

Voila.
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Ton code est optimisable en ne fesant qu'un seul parcours pour compter les parenthèses et en incrémentant les variables avec l'opérateur ++.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.