Bonsoir!pour les gens qui sont fort en c.. besoin a votre aide

Fermé
oualidos - 17 déc. 2012 à 02:49
 oualidos - 30 déc. 2012 à 02:35
Bonjour,
jai un petit probleme dans mon projet... j'ai besoin d'une fonction qui permet a lutilisateur de savoir dans quelle page existe existe lélement i du tableau..sous-etendu que le tableau stock les valeurs sur des pages de 23 elements...
d'une autre part.. je trouve un problem dans scanf(). par exemple dans linstruction suivante:
printf('donner la taille du tableau ");
scanf("%d",&k);
si je tape un cartere ou un symbole un reel le programme se plonte..comment faire pour empecher le plontage!
et finalement..
comment dessiner un graph (x,y) en prenant les des valeurs à partir d'une matrice A(2 lignes,k colonnes)

merci davane

4 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
Modifié par fiddy le 17/12/2012 à 08:35
C'est à toi de faire les contrôles.
Le plus sûr est de lire une chaîne de caractère avec fgets() et de convertir avec strtol (). Je te laisse creuser la piste car c'est un exercice intéressant. Si t'y arrives pas je te donnerai un exemple ce soir.
Pour le graph, il te faudra une bibliothèque spéciale. Mais cela sort de la compétence C. Il y a beaucoup plus simple et adapté comme langage.


Google is your friend
0
il est où ce petit exemple ^^ !
0
ok merci je vais ressayer mais si vous pouvez menvoyez ce petit programme pour resoudre ce problém le soir ..
0
salut

voici ce petit programme qui renvoi la page ou se trouve un element x s'il figure dans le tableau :

.....
#define n 10000
#define faux 0
#define vrai 1
int T[n];
/*nobre_pag le nombre de pages */
/*k etant une partie du tableau k on va utilisé*/
/* chaque page ne contient que 23 élements , pour cela une variable cmp est une boucle de 23 */
void page (k)
{

int nbre_pag;
nbr_pag=k/23;
int trouve;
int v,j;
int i=0;
int cmp=0;
printf("veuillez saisir l''element que vous cherchez ");
scanf("%d",&v);
trouve=faux;
do{
for(p=0;p<k;p++)
{
for(i=0;i<nbr_page;i++)
{
for(j=0;j<23;j++)
{
if (T[p]==v)
trouve=vrai;
}
}
}
}while(touve=faux);
printf("l lement %d se trouve sur la page %d",v,i);
}

il est ou le problem dans ce programme!
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
18 déc. 2012 à 16:03
Salut.
Je ne comprend rien à ton algorithme :
quel est l'interet des boucles i et j sachant que tu ne modifie rien.
Si l'élément n'existe pas, tu tournes en rond avec while jusqu'à ce qu'il trouve sans pour autant modifier quoi que ce soit. Et pour et finir, et non des moindre,
while(trouve=faux) correspond à une affectation qui fait que tu sortira de ton while à la première boucle (C'est à dire que ta boucle while est inutile).
on verra pour la protection de l'entrée clavier et du graphe par la suite.
0
ok merci
en fait jé pu trouvé comm solution pour les flux des données entrées la boucle suivante et ça marché bién :

while(k<=0){
printf(" donner la taille du tableau : " );
scanf("%ld[%c%f\n]",&k);

while ( ((c = getchar()) != '\n') && c != EOF && c!="%d"){};
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
24 déc. 2012 à 13:13
Euh, ça m'étonnerait fort que ça marche correctement.
Ya pleins d'erreurs dans le code. La plus grosse étant sans doute : c!="%d"...
0
le c!="%d" c'est un truc de plus ça na aucun intérêt ...mais bon cette méthode qui semble bizarre rempli la tache :)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
24 déc. 2012 à 15:51
Tu ne me feras pas gober que c'est grâce à ça que ta tâche est résolue.
Si c'est le cas, c'est que tu as un problème en amont. En tout cas, ton code c'est vraiment archi faux. Ton compilateur doit le signaler...

Je te donne un code fonctionnel bien plus propre :

#include <stdio.h>

int main (int argc, char ** argv) {
	long k;
	int ret=0;

	while(ret!=1 || k<=0){
		int c;
		printf(" donner la taille du tableau : " ); 
		ret=scanf("%ld",&k); 
		
		while ( ((c = getchar()) != '\n') && c != EOF);
	}
	
	printf("%ld\n",k);
	return 0;
}

Ce n'est pas top (car fait à l'arrache), mais au moins ça compile proprement.
0
Ouais enfin ,parfois on peut aller du faux pour prouver et en trouve des résultats qui marchent.. je suis po convaincu par ma fonction mais je ça ma aidé à m'en débrouiller ..enfin quand j l'utilise pour insérer manuellement des éléments dans un tableau des entiers..elle ne fait que convertir en décimal si je fais entrer par exemple des caractère.je vais réessayer a nouveau avec cette nouvelle solution..en fait j'ai po pu arriver a votre résultat puiske je suis toujours amateur en C. merci
0