Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1404 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Je comprends pas d'où vient mon erreur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Je comprends pas d'où vient mon erreur

n°1493707
Jp3rF
Posté le 19-12-2006 à 18:46:22  profilanswer
 

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 :/

mood
Publicité
Posté le 19-12-2006 à 18:46:22  profilanswer
 

n°1493708
0x90
Posté le 19-12-2006 à 18:48:18  profilanswer
 

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.
n°1493709
Jp3rF
Posté le 19-12-2006 à 18:49:33  profilanswer
 

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

n°1493710
Jp3rF
Posté le 19-12-2006 à 18:51:14  profilanswer
 

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
n°1493712
0x90
Posté le 19-12-2006 à 18:52:09  profilanswer
 

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


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1493713
franceso
Posté le 19-12-2006 à 18:53:07  profilanswer
 

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
n°1493718
0x90
Posté le 19-12-2006 à 18:56:17  profilanswer
 

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.
n°1493727
Jp3rF
Posté le 19-12-2006 à 19:19:27  profilanswer
 

En fait c'est plus le coef directeur :o

n°1493760
Emmanuel D​elahaye
C is a sharp tool
Posté le 19-12-2006 à 20:19:36  profilanswer
 

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/
n°1493769
Sve@r
Posté le 19-12-2006 à 20:38:22  profilanswer
 

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.
mood
Publicité
Posté le 19-12-2006 à 20:38:22  profilanswer
 

n°1493770
0x90
Posté le 19-12-2006 à 20:39:26  profilanswer
 

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.
n°1493771
Jp3rF
Posté le 19-12-2006 à 20:40:50  profilanswer
 

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:

n°1493781
Jp3rF
Posté le 19-12-2006 à 21:20:50  profilanswer
 

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

n°1493784
0x90
Posté le 19-12-2006 à 21:27:48  profilanswer
 
n°1493786
Jp3rF
Posté le 19-12-2006 à 21:30:51  profilanswer
 

0x90 a écrit :

Relis les règles du forum :o


Hum hum hum :sleep:

n°1493803
Emmanuel D​elahaye
C is a sharp tool
Posté le 19-12-2006 à 22:11:09  profilanswer
 

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/
n°1493809
Emmanuel D​elahaye
C is a sharp tool
Posté le 19-12-2006 à 22:16:17  profilanswer
 

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/
n°1493811
Jp3rF
Posté le 19-12-2006 à 22:16:33  profilanswer
 

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:

n°1493813
Emmanuel D​elahaye
C is a sharp tool
Posté le 19-12-2006 à 22:16:53  profilanswer
 

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/
n°1493814
Emmanuel D​elahaye
C is a sharp tool
Posté le 19-12-2006 à 22:17:49  profilanswer
 

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/
n°1493815
Jp3rF
Posté le 19-12-2006 à 22:18:04  profilanswer
 

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 ??

n°1493816
Emmanuel D​elahaye
C is a sharp tool
Posté le 19-12-2006 à 22:20:32  profilanswer
 

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/
n°1493817
MossieurPr​opre
I d͟o̩n᷃'̵t͖ give a shit
Posté le 19-12-2006 à 22:21:37  profilanswer
 

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]

n°1493821
Emmanuel D​elahaye
C is a sharp tool
Posté le 19-12-2006 à 22:31:58  profilanswer
 

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/
n°1493822
-ThX-
Not here anymore
Posté le 19-12-2006 à 22:34:03  profilanswer
 

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
n°1493824
MossieurPr​opre
I d͟o̩n᷃'̵t͖ give a shit
Posté le 19-12-2006 à 22:37:08  profilanswer
 

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

n°1493829
Trap D
Posté le 19-12-2006 à 22:53:58  profilanswer
 

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

n°1493838
Sve@r
Posté le 19-12-2006 à 23:56:45  profilanswer
 

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.
n°1495195
Jp3rF
Posté le 22-12-2006 à 09:52:37  profilanswer
 


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
n°1495206
Trap D
Posté le 22-12-2006 à 10:30:28  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Je comprends pas d'où vient mon erreur

 

Sujets relatifs
erreur avec des char*Erreur d'execution
Erreur header(sprintf("Location: %s", $deleteGoTo));Erreur AJAX, besoin de vous pour tester !
[RESOLU]Erreur SQL : ORA-01008: Toutes les variables ne sont pas liées[VBA - Excel] - RESOLU - Erreur de focus sur fonction "simple"
PB:Erreur 3061 VBAProblème de débutant: erreur dès le debut "aucune action ne peut...
Erreur 403 Depuis sitemap Google [ Réglé ]Erreur javascript aléatoire
Plus de sujets relatifs à : Je comprends pas d'où vient mon erreur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR