Programmation C

Fermé
martur - 12 déc. 2010 à 14:12
 martur - 12 déc. 2010 à 22:01
Bonjour,


Bonjour,

je suis nulle en programmation..je dois faire l'exercice suivant:
etant donné deux tableaux T et tronc de dimensions respectives n et m qui contiennent des caracteres.ecrire un programme en c qui cherche l'indice du tableau T ou apparait le tronçon TRONC pour la première fois (s'il existe)

alors j'ai fait l'essai suivant


#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void main ()
{
char tronc[5],t[20];
int i,n,m,j;
int res;



printf ( " donner la taille du 1er tableau\n");
scanf("%d",&n);

for (i=0 ; i<n ; i++)
{

printf("donner l'element %d ",i);
scanf("%c",&t[i]);
getchar();
}



printf ( " donner la taille du 2eme tableau\n");
scanf("%d",&m);



for (j=0 ; j<m ; j++)
{

printf("donner l'element %d ",j);
scanf("%c",&tronc[j]);
getchar();
}
i=0;
do
{
j=0;
res=0;
do{

if (t[i+j]!=tronc[j])
{
res=0;
}
j++;
}
while((res=1)||(j<m));
i++;
}
while ((res=0)||(i<(n-m)));
if(res==0)
{
printf("la troncature n'existe pas");
}
if(res==1)
{
printf("la troncature commence à l'indice %d",i);
}
getch();
}



alors lors de l'éxécution,aprés avoir remplir les deux tableau,l'éxécution est interrompu au niveau de la ligne
if (t[i+j]!=tronc[j])

est ce que quelqu'un peut m'indiquer la cause..
merci d'avance


A voir également:

4 réponses

Utilisateur anonyme
12 déc. 2010 à 14:24
il faut faire (t[i+j]! == tronc[j]) ou si ca marche pas (t[i+j]!= tronc[j]) ou (t[i+j]!==tronc[j])
0
Utilisateur anonyme
12 déc. 2010 à 14:24
ou (t[i+j] != tronc[j])
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
12 déc. 2010 à 14:52
Lol, c'est pas du pif le C ^^. !== ça n'existe pas comme opérateur.
L'opérateur qui permet de tester si deux données sont différentes est !=
Cdlt,
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
12 déc. 2010 à 14:56
Bonjour,

J'ai pas tout lu le code.
Mais déjà, je vois deux points gênants.
while((res=1)||(j<m));
L'opérateur d'égalité est : == et non = (opérateur d'affectation).
Si tu fais while (res=1); ça revient à faire : res=1; while (res);
Toi ce que tu veux faire : c'est while( (res==1) || (j<m));
Même remarque pour l'autre boucle while.

Corrige ces deux points. Si cela ne marche toujours pas, reposte ton code avec les corrections en l'englobant dans deux balises codes (à droite du bouton souligné), sinon c'est illisible.

Cdlt,
0
bonjour
j'ai fait les corrections que vous m'avez indiquées..mais toujours même problème
voici le code de nouveau

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void main ()
{
char tronc[5],t[20];
int i,n,m,j;
int res;



printf ( " donner la taille du 1er tableau\n");
scanf("%d",&n);

for (i=0 ; i<n ; i++)
{

printf("donner l'element %d ",i);
scanf("%c",&t[i]);
getchar();
}



printf ( " donner la taille du 2eme tableau\n");
scanf("%d",&m);



for (j=0 ; j<m ; j++)
{

printf("donner l'element %d ",j);
scanf("%c",&tronc[j]);
getchar();
}
i=0;
do
{
j=0;
res=0;
	do{ 
		
	if (t[i+j]!=tronc[j])
	{
		res=0;
	}
	j++;
	}
	while((res==1)||(j<m));
	i++;
	}
while ((res==0)||(i<(n-m)));
if(res==0)
{
	printf("la troncature n'existe pas");
}
if(res==1)
{
	printf("la troncature commence à l'indice %d",i);
}
getch();
}

0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
12 déc. 2010 à 21:43
Ah, que c'est plus clair ^^.

Alors tout d'abord, il faut toujours faire très attention lorsqu'on lit un seul caractère (scanf("%c",...)) à ce qu'il n'y a pas du résidu dans le buffer clavier. Tu as bien mis des getchar() après les scanf("%c"), mais il ne faut pas également oublier d'en mettre après tes scanf("%d",&n); et scanf("%d",&m);

Ensuite, tu initialises ta variable res a 0 dans la boucle do. Mais à aucun moment, tu la mets à 1, donc jamais le programme peut espérer trouver une troncature. Il faut donc initialiser res à 1. Conceptuellement, tu supposes qu'il y a troncature et dès qu'il y a un caractère qui ne correspond pas (ton if), tu mets res à 0.

Autre problème, tes opérateurs logiques dans tes while sont faux. Tu dois mettre des et logique (&&).

Pour la deuxième condition de la boucle while, il faut aller un coup plus loin (+1).
while ((res==0)&&(i<(n-m)+1));

Et enfin, il faut mettre i-1 dans le printf final pour trouver le bon indice vu qu'on l'aurait incrémenté une fois de trop : printf("la troncature commence à l'indice %d",i-1);

Et dernières remarques, tu n'as pas besoin de la bibliothèque math.h.
Tu utilises des boucles scanf("%c") pour initialiser tes variables. est-ce un exercice scolaire ou tu ne sais pas faire autrement ?

Ton programme devrait déjà mieux fonctionner avec toutes ces corrections.
N'hésite pas à reposer ton code avec les corrections (toujours dans des balises codes).

Cdlt,
0
merci fiddy..:)
0