Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Premier programme fait maison...

116 réponses
Avatar
listes
Salut,

Voilà... je suis super débutant... Je poste ici mon premier programme
fait maison....

Je voudrait avoir votre avis..

J'utilise Xcode sur un macintosh sous 10.4.4, mais cela n'a pas beaucoup
d'importance...

#include <stdio.h>
#include <string.h>

int main (int argc, const char * argv[]) {

//on défini les variables
char Nom[200];
float quantite; // la variable quantité
float prix; // la variable prix
float total; // la variable total
float tauxtva; // le taux de tva
float soustotal; // le sous tatal sans la tva
float tva; // le montant de la tva

printf("Entrez votre nom : ");
scanf("%s", Nom);
printf("\n");
printf("Taux de tva ? : "); // on demande le taux de tva
scanf("%f",&tauxtva);
printf("\n");
printf("Quantite de l'article a facturer ? : "); // on demande
la quantité
scanf("%f",&quantite);
printf("\n");
printf("Le prix de l'article ? : "); // on demande le prix
scanf("%f",&prix);
printf("\n");

// le calcul

soustotal = quantite * prix;
tva = (soustotal * tauxtva)/100;
total = soustotal + tva;

//on affiche le résultat

printf ("Montant a payer hors tva %.2f\n\n",soustotal);
printf ("TVA a payer : %.2f\n\n", tva);
printf ("%s, vous avez un total a payer : %.2f\n", Nom, total);

return 0;
}

Est-ce assez clair dans la présentation (pour ce cas-ci bien sur) ?

A+

10 réponses

Avatar
Laurent Deniau

writes:


Laurent Deniau writes:

Et de tout facon j'utilise eassert qui a le meme comportement que a ssert
(et eassert.h que assert.h) mais leve une exception ExBadAssert en cas
d'echec au lieu de quitter le programme.


Pour pouvoir faire quelque chose une fois que l'exception est
attrapee, il faut etre sur d'au moins une partie de l'etat du
programme. De quelle partie de l'etat es-tu sur apres qu'une
assertion echoue? Si tu as l'equivalent des destructeurs, comment
ceux-ci peuvent ils etre sur que l'etat des objets qu'ils doivent
detruire, ils ne connaissent pas la cause pour laquelle ils sont
appeles.


C'est un vaste sujet!
[snip des choses interessantes auxquelles je fais faire une

seconde reponse]

Tu ne reponds pas au fond de ma question qui portait sur
l'etat que tu supposais valide apres qu'une *assertion*
echoue.


Si. Mais a la lecture de ta prose, je crois qu'on a un approche
differente des assertions-exceptions. J'utilise les
assertions-exceptions exclusivement pour verifier des pre-conditions.
Pour les invariants ou les post-conditions j'utilise des
assertions-debug.

J'utilise des assertions pour verifier que mes hypotheses
sur l'etat du programme sont vraies. Si elles ne sont pas
vraies, je me demande ce que je peux encore supposer et
faire de sense avant de quitter.


C'est la que l'approche est differente. Je considere le code correcte
par defaut (parce que debugge et teste ;-) ) mais je ne fais pas
confiance aux entrees. L'etat est donc connu en cas d'echec puisque non
affecte par les entrees invalides. Un cas typique, c'est realloc.

Le plus souvent, la cause de l'echec est un defaut
d'analyse: l'etat est valide mais le programme n'est pas
prevu pour traiter ce cas la. Mais il n'est pas rare qu'on
se retrouve avec un etat invalide, soit que l'hypothese a
ete tenue pour vraie avant, soit qu'il y a une erreur dans
le programme.


Ni l'un, ni l'autre qui normalement auraient du etre revele par les
tests. L'utilisateur n'a pas suivi les specs. Les deux premiers cas
sont traites pendant les tests et la je suis d'accord qu'a part faire
du log et quitter il n'y a pas grand chose d'autre a faire. Ceci dit,
meme si c'est pour quitter, les exceptions permettent de detruire les
objets existants et de liberer proprement les ressources. Je n'ai que
trois cas ou je fait un abort en OOC et ce sont les memes que C++. Il
doit y avoir une bonne raison ;-)

Pour etre honnete, mes assertions-debugs restent aussi en production si
elle ne penalise pas l'efficacite et me permettent via les logs de
savoir ce qui n'a pas fonctionne correctement, mes programmes n'etant
biensur pas inffaillibles. Mais en 8 ans, je n'ai eu a le faire que
trois fois.

a+, ld.




Avatar
Gabriel Dos Reis
candide writes:

[...]

| J'ajoute que le rôle pédagogique du debugger est largement sous-estimé, un

je trouve que le debugger est sur-estimé. Programmer, ce n'est pas
passer des heures sous le debugger jusqu'à ce que le programme semble
afficher une résultat qui correspond vaguement à la spécification.

Pourquoi ne fais-tu pas un site exempte des reproches que tu fais à
Marc et que tu pourrais conseiller aux débutants qui auraient des
problèmes que tu soulèves ; cela serait une contribution positive sans
précédent.

-- Gaby
Avatar
Gabriel Dos Reis
Marc Boyer writes:

| Chaque argument de type -Wxxx demande au compilo d'activer certains
| avertissements. La doc dit exactement lequel fait quoi.
| -W en active certains, -Wall d'autres, et en plus, certains
| sont communs je crois.

et d'autres activés par -Wextra n'ont pas de nom propre.

-- Gaby
Avatar
candide
Gabriel Dos Reis wrote in
news::

candide writes:

[...]

| J'ajoute que le rôle pédagogique du debugger est largement
| sous-estimé, un

je trouve que le debugger est sur-estimé. Programmer, ce n'est pas
passer des heures sous le debugger jusqu'à ce que le programme semble
afficher une résultat qui correspond vaguement à la spécification.


Oui j'avais lu sur les archives de Google une discussion où tu défendais
ce point de vue. Tu auras noté que j'ai parlé du rôle *pédagogique* du
debugger, pour le reste je ne me prononce pas je ne suis pas compétent.
Peut-être aussi qu'utiliser un debugger c'est apprendre à s'en passer.


Pourquoi ne fais-tu pas un site exempte des reproches que tu fais à
Marc et que tu pourrais conseiller aux débutants qui auraient des
problèmes que tu soulèves ; cela serait une contribution positive sans
précédent.



Je suis candide alors je fais l'hypothèse que tu n'es pas ironique.
Toujours est-il qu'effectivement à terme j'ai l'intention de faire un
site pour les débutants comme moi qui sont des très neuneus très motivés
dans l'apprentissage du langage C [concernant ce que disait Marc, c'est
plus la question de la doc sous Unix/Linux qui était en cause que la
question du C à proprement parler, mais là c'est un domaine beaucoup
beaucoup plus vaste]. Naturellement, j'ai pour l'instant une vision
d'utilisateur du C. Pour moi, l'apprentissage du C ne se réduit pas au C
pur, crystallin et éthéré dont il serait question ici. Faire du C c'est
aussi une question aussi une question d'environnement au sens large, donc
d'éditeur, de débugger, d'outils et de capacités spécifiques (make,
outils memoire, inclusion d'assembleur, connaître les options de son
compilateur, etc, je vais en découvrir des quantités au fur et à mesure
que j'apprendrai), ça peut aussi être occasionnellement une question
d'implémentation. J'aurais aussi envie de mettre une grosse partie à
faire du codage en C de questions mathématiques
(tout en restant simple, il existe des dizaines de sujets intéressants
propres à satisfaire le matheux amateur ou non même si le C n'est pas
forcément le langage le plus adapté). Je le ferai parce que la doc que je
vois ne me donne absolument pas satisfaction, et en même temps me semble
TRES largement perfectible et en plus assez _facilement_, c'est juste une
question de temps et de motivation (les idées elles suivent après sans
sans problème) et je ne manque ni de l'un ni de l'autre. Et j'ai bien
l'intention de faire quelque chose qui n'existe pas, oui, sinon autant ne
rien faire. Mais auparavant, il m'aura fallu beaucoup lire, beaucoup
coder, beaucoup expérimenter, beaucoup réfléchir, beaucoup discuter,
beaucoup tester. En disant cela, j'ai bien conscience que j'en ai pris
pour 5 ans. En espérant qu'à ce moment-là, on programmera encore en C
tant qu'à faire (merci de me rassurer sinon je passe à Java ;) )

Sur ce je crois que je vais vous faire un nouvel "ce n'est qu'un au
revoir" parce que vous avez compris que j'ai du code sur la planche, et
je suis sérieux.


Candide

Avatar
Jean-Marc Bourguet
candide writes:

abstraite. Ce n'est pas pour rien qu'un des bouquins de
Hennessy et Patterson est sous-titre "The Hardware/Software
Interface".


Merci, je viens de regarder la toc, ça déchire.


Je n'ai pas lu celui la mais le sous-titre marque bien le
point que je voulais faire. Je ne sais pas quelles bases il
demande. J'ai l'autre (Computer Architecture, A
Quantitative Approach qui est plus complet, a certains
endroits ils renvoient a Computer Organisation and Design
pour une explication des principes qu'ils utilisent) qui
n'est a coup sur pas un bouquin d'introduction.

--
Jean-Marc


Avatar
candide
Marc Boyer wrote in
news::

Chaque argument de type -Wxxx demande au compilo d'activer certains


donc xxx peut être vide

avertissements. La doc dit exactement lequel fait quoi.
-W en active certains, -Wall d'autres, et en plus, certains
sont communs je crois.

Tu vois bien que c'est pas du tout intuitif (je suppose que c'est une

histoire de compatibilité entre versions successives de gcc)

Je souligne que ne connais
pas cette liste par coeur, je sais juste par tatonnenements




oui oui la question n'est pas là bien sûr.


successifs que, pour mon code, je compile avec
-W -Wall -pedantic -stdÉ9
et que cela me conviens bien.
Et quand je travaille avec le code des élèves, j'ajoute
-Wuninitialized -0





OK


C'est pour cela que, même si je pense que mes cours sont de qualité,
je ne me lance pas à écrire le N+1 ième bouquin de C...



Et pourtant, ce ne doit pas tre très dur, la capacité première étant de
savoir faire un tri topologique.



J'avoue aussi que, considérant que tu avais une agreg de math, j'ai
du
mal à situer ton niveau: les questions que tu poses vont bien plus
loins que ce que se posent mes étudiants, et je t'imaginais plus apte
à lire des docs informatiques.




Question : Qu'est ce qu'il faut pour comprendre la doc ?
Réponse : Comprendre la doc.


Candide



Avatar
candide
candide wrote in
news:43e4d94c$0$21277$:


Toujours est-il qu'effectivement à terme j'ai l'intention de faire un
site pour les débutants comme moi qui sont des très neuneus très
motivés dans l'apprentissage du langage C



Oui, une rubrique à faire aussi c'est une rubrique documentation et en
particulier sur les forums. Le nombre d'étudiants de licence d'info qui
ne connaissent rien de usenet est hallucinant, alors imaginez les autres.
Il faut donc expliquer pas à pas au visiteur neuneu du site qu'il existe
cette ressource méconnue qu'est usenet et il faut expliquer pas-à-pas
comment on fait pour s'incrire sur un forum, c'est quoi un serveur de
news, etc, tout un tas de truc que j'ai mis un temps fou à apprendre
parce que si on connait pas quelqu'un qui vous initie, c'est galère de
trouver la doc éparse sur le net. Alors c'est sûr, ça n'a aucun rapport
avec le langage C mais c'est en rapport avec son apprentissage et en plus
ça ne coûte pas cher à expliquer et je pense avoir le temps de le faire.


Et puis, y'aura une rubrique people, les in et les out du Committee et
les dernières blaguent qui y courent ;)


Candide

Avatar
Jean-Marc Bourguet
candide writes:

Gabriel Dos Reis wrote in
news::

candide writes:

[...]

| J'ajoute que le rôle pédagogique du debugger est largement
| sous-estimé, un

je trouve que le debugger est sur-estimé. Programmer, ce n'est pas
passer des heures sous le debugger jusqu'à ce que le programme semble
afficher une résultat qui correspond vaguement à la spécification.


Oui j'avais lu sur les archives de Google une discussion où tu défendais
ce point de vue. Tu auras noté que j'ai parlé du rôle *pédagogique* du
debugger, pour le reste je ne me prononce pas je ne suis pas compétent.
Peut-être aussi qu'utiliser un debugger c'est apprendre à s'en passer.


Apprendre a utiliser une debugger, c'est plutôt apprendre à
en être dépendant.

Au fait, quel est l'aspect que tu trouves pédagogique dans
l'utilisation d'un debugger?

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Jean-Marc Bourguet
candide writes:

C'est pour cela que, même si je pense que mes cours
sont de qualité, je ne me lance pas à écrire le N+1 ième
bouquin de C...


Et pourtant, ce ne doit pas tre très dur, la capacité
première étant de savoir faire un tri topologique.


Il y a des cycles. S'il n'y en avait pas, tu aurais déjà ce
que tu veux.

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Jean-Marc Bourguet
"Laurent Deniau" writes:

OOC supporte seulement l'heritage simple et utilise la delegation de
type pour simuler l'heritage multiple. Un objet est structurellement
valide (du point de vu OOC) juste apres son *allocation* et avant son
initialisation, donc ses parents aussi.


Tu as l'air de dire maintenant que l'objet est en situation
neutre pour le destructeur par l'effet de l'allocation.
J'avais compris de

si le constructeur commence par rendre son objet neutre pour
son destructeur


qu'il fallait écrire du code spécifiquement pour ça. Comme
il faut que toute la hiérarchie soit dans un état neutre
pour pouvoir appeler le destructeur, j'imaginais une
construction en deux temps.

Si tu as un exemple concis d'heritage simple en C++ qui
montre un probleme qui te tiens a coeur, je peux essayer
de voir en quoi OOC resout ou non le probleme.


Je n'ai rien de particulier en vue.

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org