Je comprends pas d'où vient mon erreur

Je comprends pas d'où vient mon erreur - C - Programmation

Marsh Posté le 19-12-2006 à 18:46:22    

Salut
 
J'ai un soucis en langage c :
 
en fait je fais un prog qui permet de calculer la distance AB :
 
#include <stdio.h>
#include <conio.h>
 
main()
{
int xa,ya,xb,yb;
int add=(yb-ya)/(xb-xa);
printf("Quelles sont les coordonnees de a \n" );
scanf("%d %d",&xa,&ya);
printf("Quelles sont les coordonnees de b \n" );
scanf("%d %d",&xb,&yb);
printf("La distance AB est egale a %d \n",add);
getch();
return 0;
}
 
 
Quand j'entre les 2 valeurs pour a, 2 pour b, ça m'affiche La distance AB est egale a 910 à chaque fois :/

Reply

Marsh Posté le 19-12-2006 à 18:46:22   

Reply

Marsh Posté le 19-12-2006 à 18:48:18    

heu, tu calcule add avant d'avoir mis les valeurs dans xa,xb,ya,yb.... Si c'est pas une étourderie, t'as bcp de bases à revoir :/
 
(et une division avec des int c'est probablement pas ce que tu veut au passage, la division entière spa le bon plan du tout pour une distance)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 19-12-2006 à 18:49:33    

0x90 a écrit :

heu, tu calcule add avant d'avoir mis les valeurs dans xa,xb,ya,yb.... Si c'est pas une étourderie, t'as bcp de bases à revoir :/
 
(et une division avec des int c'est probablement pas ce que tu veut au passage, la division entière spa le bon plan du tout pour une distance)


C'est pas une étourderie  :o mais je vois pas pourquoi on doit le mettre avant

Reply

Marsh Posté le 19-12-2006 à 18:51:14    

Ah si j'ai capté :D parce que les coordonnées ne valent rien au départ


Message édité par Jp3rF le 19-12-2006 à 18:51:33
Reply

Marsh Posté le 19-12-2006 à 18:52:09    

héhé spa de la programmation fonctionnelle hein ;)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 19-12-2006 à 18:53:07    

0x90 a écrit :

Si c'est pas une étourderie, t'as bcp de bases à revoir :/
 
(et une division avec des int c'est probablement pas ce que tu veut au passage, la division entière spa le bon plan du tout pour une distance)


j'ajouterai qu'il n'y a normalement pas besoin de division pour calculer une distance et que mettre le résultat d'une division dans une variable nommée 'add' n'est pas forcément une bonne idée pour celui qui te relira


---------------
TriScale innov
Reply

Marsh Posté le 19-12-2006 à 18:56:17    

franceso a écrit :

j'ajouterai qu'il n'y a normalement pas besoin de division pour calculer une distance et que mettre le résultat d'une division dans une variable nommée 'add' n'est pas forcément une bonne idée pour celui qui te relira


 
Arf j'ai même pas fait gaffe que le calcul était faux en plus ... :whistle:


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 19-12-2006 à 19:19:27    

En fait c'est plus le coef directeur :o

Reply

Marsh Posté le 19-12-2006 à 20:19:36    

Jp3rF a écrit :

J'ai un soucis en langage c :

 

en fait je fais un prog qui permet de calculer la distance AB :

 

Quand j'entre les 2 valeurs pour a, 2 pour b, ça m'affiche La distance AB est egale a 910 à chaque fois :/


Ce code n'a aucun sens. Tu effectues des calculs sur des valeurs qui n'ont pas encore été initialisées. Je rappelle que, sauf avis contraire (décision, itérations), le programme s'exécute de haut en bas.

 

Il est donc illogique de faire des calculs sur des valeurs qui seront définies plus tard...

 

Tu veux sans doute ceci :

Code :
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.    int xa, ya, xb, yb;
  5.    printf ("Quelles sont les coordonnees de a\n" );
  6.    scanf ("%d %d", &xa, &ya);
  7.    printf ("Quelles sont les coordonnees de b\n" );
  8.    scanf ("%d %d", &xb, &yb);
  9.    {
  10.       int add = (yb - ya) / (xb - xa);
  11.       printf ("La distance AB est egale a %d \n", add);
  12.    }
  13.    return 0;
  14. }


A noter que l'usage de scanf() est difficile à maitriser et qu'ici, il est incorrect en se sens que les erreurs de saisies ne sont pas traitées et entrainent une instabilité. Les alternatives à base de fgetc() ou de fgets() sont connues...

 

Nota : à supposer que la formule soit correcte (je ne suis pas mathématicien, mais j'ai des notions d'arithmétique), il faudrait vérifier que le dénominateur de la fonction ne soit pas nul, sous peine de comportement indéfini.

Message cité 1 fois
Message édité par Emmanuel Delahaye le 19-12-2006 à 20:23:32

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 19-12-2006 à 20:38:22    

Emmanuel Delahaye a écrit :

il faudrait vérifier que le dénominateur de la fonction ne soit pas nul, sous peine de comportement indéfini.


C'est réellement indéfini ? Il n'y a pas une histoire de "NaN" quand on divise par 0 ???


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 19-12-2006 à 20:38:22   

Reply

Marsh Posté le 19-12-2006 à 20:39:26    

tu va avoir du mal à le rentrer ton NaN dans un int et une division entière [:dawa]


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 19-12-2006 à 20:40:50    

Merci pour ton post :o
 
Là j'essaye de faire un exo avec tableau :
 
Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50 composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
 
Calculer et afficher ensuite la somme des éléments du tableau.
 
#include <stdio.h>
#include <conio.h>
 
main()
 
{
 
int N,T[N],i;
printf("Entrez les valeurs dans le tableau \n" );
scanf("%d",&T[N]);
 
for(i=0;i<=N;i++);
     {
          int somme=0;
          somme=i+N;
          printf("Voici le tableau %d \n",T[N]);
          printf("Voici la somme des valeurs du tableau %d \n",somme,T[N]);
     }
 
getch();
return 0;
 
}
 
Je dois pas être loin mais c'est pas ça :whistle:

Reply

Marsh Posté le 19-12-2006 à 21:20:50    

Et aussi j'ai un exo sur les chaines de caractères c'est :
 
Exercice 8.8
 
Ecrire un programme qui lit un verbe régulier en "er" au clavier et qui en affiche la conjugaison au présent de l'indicatif de ce verbe. Contrôlez s'il s'agit bien d'un verbe en "er" avant de conjuguer. Utiliser les fonctions gets, puts, strcat et strlen.
 
Exemple:
 
      Verbe : fêter
      je fête
      tu fêtes
      il fête
      nous fêtons
      vous fêtez
      ils fêtent
 
Je vois pas comment le résoudre :D

Reply

Marsh Posté le 19-12-2006 à 21:27:48    

Reply

Marsh Posté le 19-12-2006 à 21:30:51    

0x90 a écrit :

Relis les règles du forum :o


Hum hum hum :sleep:

Reply

Marsh Posté le 19-12-2006 à 22:11:09    

Jp3rF a écrit :

Hum hum hum :sleep:


Ben oui, elles disent entre autre, qu'on ne fournit pas de code. C'est toi de poster le code avec lequel tu as des problèmes.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 19-12-2006 à 22:16:17    

Jp3rF a écrit :


<<Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50 composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
 
Calculer et afficher ensuite la somme des éléments du tableau.>>
 
Je dois pas être loin mais c'est pas ça


Ben non. Encore une fois, tu ne fais la les choses dans l'ordre. Tu définis une tableau d'une taille indéterminée (N n'est pas initialisé). Le comportement est indéfini. Il est pourtant précisé que la taille maximale est définie (50). Ce qui peut changer c'est le nombre d'éléments du tableau (qui ne doit évidemment pas être > à 50, mais peut bien sûr être inférieur). Relis bien l'énoncé avant de sauter sur le clavier.
 
Et utilise les balises code...
 
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 19-12-2006 à 22:16:33    

Emmanuel Delahaye a écrit :

Ben oui, elles disent entre autre, qu'on ne fournit pas de code. C'est toi de poster le code avec lequel tu as des problèmes.


Arf, en fait j'ai révisé toute l'après midi là je suis un peu HS  :ouch:

Reply

Marsh Posté le 19-12-2006 à 22:16:53    

Sve@r a écrit :

C'est réellement indéfini ? Il n'y a pas une histoire de "NaN" quand on divise par 0 ???


Oui, non.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 19-12-2006 à 22:17:49    

Jp3rF a écrit :

Arf, en fait j'ai révisé toute l'après midi là je suis un peu HS  :ouch:


Et ? Tu veux qu'on bosse à ta place, c'est ça ?
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 19-12-2006 à 22:18:04    

Emmanuel Delahaye a écrit :

Ben non. Encore une fois, tu ne fais la les choses dans l'ordre. Tu définis une tableau d'une taille indéterminée (N n'est pas initialisé). Le comportement est indéfini. Il est pourtant précisé que la taille maximale est définie (50). Ce qui peut changer c'est le nombre d'éléments du tableau (qui ne doit évidemment pas être > à 50, mais peut bien sûr être inférieur). Relis bien l'énoncé avant de sauter sur le clavier.
 
Et utilise les balises code...


Il faut initialiser N ??

Reply

Marsh Posté le 19-12-2006 à 22:20:32    

Jp3rF a écrit :

Il faut initialiser N ??

Ben oui ! Si ça doit définir la taille d'un tableau, il faut que ce soit une expression constante. D'après ton énoncé, elle vaut ici 50.

 

Par exemple :

 
Code :
  1. #define N (25*2)


ou

Code :
  1. enum {N = 51 - 1};
 

(il y a plus simple, évidemment...)

Message cité 1 fois
Message édité par Emmanuel Delahaye le 19-12-2006 à 22:21:49

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 19-12-2006 à 22:21:37    

Emmanuel Delahaye a écrit :

Il faut que ce soit uine expression constante qui vaille 50.
 
Par exemple :  
 

Code :
  1. #define N (25*2)


ou

Code :
  1. enum {N = 51 - 1};


 
(il y a plus simple, évidemment...)


 

Code :
  1. #define blabla 5
  2. #define bloblo 0
  3. #define N blablabloblo


 
[:prodigy]

Reply

Marsh Posté le 19-12-2006 à 22:31:58    

MossieurPropre a écrit :

Code :
  1. #define blabla 5
  2. #define bloblo 0
  3. #define N blablabloblo


 
[:prodigy]


Ben non. Si on veut faire le malin, il faut avoir le niveau...

Code :
  1. #define blabla 5
  2. #define bloblo 0
  3. #define N blabla##bloblo


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 19-12-2006 à 22:34:03    

encore plus vicelard

 
Code :
  1. #define bla 5
  2. #define blablabla bla
  3. #define bla bla##bla
  4. #define N ( bla - blablabla )
 

:love:

 

patapeï

Message cité 1 fois
Message édité par -ThX- le 19-12-2006 à 22:35:54
Reply

Marsh Posté le 19-12-2006 à 22:37:08    

Emmanuel Delahaye a écrit :

Ben non. Si on veut faire le malin, il faut avoir le niveau...

Code :
  1. #define blabla 5
  2. #define bloblo 0
  3. #define N blabla##bloblo



 
certes. Je connais l'existence de ce type d'amusements, mais à vrai dire, je ne m'en sers pas tout les jours. :o
 

-ThX- a écrit :

encore plus vicelard
 

Code :
  1. #define bla 5
  2. #define blablabla bla
  3. #define bla bla##bla
  4. #define N ( bla - blablabla )


 
 :love:  
 
patapeï


 
:D

Reply

Marsh Posté le 19-12-2006 à 22:53:58    

Jp3rF a écrit :

Et aussi j'ai un exo sur les chaines de caractères c'est :
 
Exercice 8.8
 
Ecrire un programme qui lit un verbe régulier en "er" au clavier et qui en affiche la conjugaison au présent de l'indicatif de ce verbe. Contrôlez s'il s'agit bien d'un verbe en "er" avant de conjuguer. Utiliser les fonctions gets, puts, strcat et strlen.
 
Exemple:
 
      Verbe : fêter
      je fête
      tu fêtes
      il fête
      nous fêtons
      vous fêtez
      ils fêtent
 
Je vois pas comment le résoudre :D

Et personne ne réagit au gets, z'êtes fatigués les gars  :lol:  
A mon avis, change d'école ou de prof !
Ton exo, il ne viendrait pas d'ici par hasard ? http://www.ltam.lu/Tutoriel_Ansi_C/prg-c81.htm

Reply

Marsh Posté le 19-12-2006 à 23:56:45    

Jp3rF a écrit :

Là j'essaye de faire un exo avec tableau :
 
Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50 composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
 
for(i=0;i<=N;i++);


Tiens ? personne n'a remarqué ça ???
Si ton tableau fait "N" éléments, il faut boucler de "0" à "N - 1" donc "for (i=0; i < N; i++)"
 

Jp3rF a écrit :

Je dois pas être loin


De justesse... mais même de justesse, quand c'est raté ce n'est pas réussi  :sol:
 

Jp3rF a écrit :


Ecrire un programme qui lit un verbe régulier en "er" au clavier et qui en affiche la conjugaison au présent de l'indicatif de ce verbe. Contrôlez s'il s'agit bien d'un verbe en "er" avant de conjuguer. Utiliser les fonctions gets, puts, strcat et strlen.
 
Exemple:
 
      Verbe : fêter
      je fête
      tu fêtes
      il fête
      nous fêtons
      vous fêtez
      ils fêtent
 
Je vois pas comment le résoudre :D


Tu comptes combien de lettres (strlen) - Si les 2 dernières lettres ne sont pas "er" (strcmp) alors fin du prog.
Sinon tu tronques ton verbe aux "N - 2" premiers caractères (il suffit de mettre un '\0' au bon endroit) et tu affiches ensuite successivement le verbe tonqué suivi des terminaisons "e", "es", "e", "ons", "ez", "ent" (printf) - A vue de nez, ça doit prendre à peine 20 lignes.
 
PS: Utiliser un tableau contenant "e", "es", "e", "ons", "ez" et "ent" et faire une boucle de traitement répétitif sur chaque élément de ce tableau sera évidemment beaucoup mieux perçu par ton prof que faire bêtement les 6 conjugaisons instruction par instruction...
 

Trap D a écrit :

Ton exo, il ne viendrait pas d'ici par hasard ? http://www.ltam.lu/Tutoriel_Ansi_C/prg-c81.htm


Si ça se trouve, il y a même la soluce qqpart dans le site...


Message édité par Sve@r le 20-12-2006 à 00:32:22

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 22-12-2006 à 09:52:37    


Spoiler :

tg toi  :o  
l'école est pourrie, c'est beaucoup trop cher pour pas grand chose, la ville est naze, le prof j'ai pas dis qu'il était mauvais


Message édité par Jp3rF le 22-12-2006 à 09:53:15
Reply

Marsh Posté le 22-12-2006 à 10:30:28    

Rassure moi, il vous a au moins prévenu des dangers de gets ?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed