Bonjour
On ne peut pas forcément dire que ça ne servira à rien. Un langage est un langage et s'il continue à être utilisé aujou'd'hui c'est que fatalement il sert. Comme le disait Herbert Mayer "Aucun langage de programmation n'est parfait. Il n'existe même pas un langage meilleur que d'autre ; il n'y a que des langages en adéquation ou peu conseillés pour des buts particuliers".
Le C est un langage ultra rapide. Il tient sa vitesse du fait qu'il ne contrôle absolument rien de ce que demande le dev, dans une philosophie que se résume à "le dev sait ce qu'il fait". Le dev demande un truc, il tentera alors de faire le truc sans vérifier si le truc est/n'est pas licite. Cela veut dire qu'il ne vérifiera pas si, quand on écrit dans tab[10] si l'indice "10" est/n'est pas dans les limites du tableau. Cela rend un programme ultra rapide mais si ledit programme n'est pas écrit avec une rigueur absolue, il pourra potentiellement faire n'importe quoi (on nomme ce comportement un "comportement imprévisible" ou "UB" pour "Undefined Behavior").
C'est aussi un langage ultra bas-niveau (à peine au dessus de l'assembleur). Cela signifie que tu ne pourras pas développer très rapidement. Rien que pour ajouter un nouvel élément dans un tableau qui n'a pas assez de place et qu'il faut alors agrandir il faut grosso-modo 5 lignes (sous réserve en plus que le tableau ait été au départ prévu pour être dynamique!!!) là où dans d'autres langages il suffit d'écrire
tab.append(truc). Donc si tu veux coder par exemple un logiciel utilisateur avec menus, boutons, copier/coller etc tu es parti pour 3 mois de boulot rien que pour faire une calculatrice à 4 opérations.
Donc voilà un peu le résumé du C. Accessoirement c'est dommage que tu ne sois pas resté sous Linux car cet OS a été écrit en C. C'est d'ailleurs une des raisons qui fait que le C reste enseigné dans les écoles d'ingénieur car on peut ensuite taper avec dans les couches profondes de cet OS pour lui programmer ses propres interfaces. Mais bon comme le Mac a lui aussi une base Unix peut-être que...
En revanche je ne sais rien du livre de Mathieu Nebra. Ce que je sais c'est que c'est dommage d'acheter un livre pour apprendre les bases d'un langage alors qu'il existe sur le net toute une foule de tutoriels gratuits et très bien faits.
Bon ben il compile sans erreur ni warning. C'est déjà une bonne chose. Simplement le
include <math.h> n'est pas utile (tu ne fais pas appel à des outils mathématiques tels que "racine carrée" ou "sinus/cosinus" et de toute façon si tu devais y faire appel il faudrait compiler en demandant spécifiquement de relier ladite librairie à l'exécutable) ni
include <stdlib.h> (tu n'utilises pas de fonctions de la librairie standard et printf/scanf appartiennent à "stdio.h").
Maintenant concernant ton souci je pense que cela vient à la base d'une incompréhension de ce que tu manipules. Parce que mathématiquement parlant, un taux c'est une valeur comprise entre 0 et 1. Donc tu ne peux pas décemment saisir "67". Ou alors c'est parce que inconsciemment, tu considères ce "67" comme un pourcentage du taux, autrement dit le taux lui est de 0.67. Donc une fois saisi sous forme de pourcentage, il faut alors le diviser par 100 avant de le multiplier (et dans ce cas comme il devient float il faut l'afficher comme un float =>
printf ("%d%% * %d = %f\n", taux, salaire, retraite)).
D'autant plus que tu utilises la même variable "taux" dans deux contextes différents (une première fois comme une multiplication des coef par les trimestres) ce qui nuit un peu à la compréhension de son rôle réel. Et comme cette multiplication n'est elle-même pas réutilisée après, elle pourrait alors être directement faite dans le
printf().
Bref il me semble que ce code devrait mieux correspondre à ton calcul
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| // main.c
// CT1retraite
//
// Created by proux on 17/04/2021.
//
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned short trimestre;
float coefficient;
printf("Entrez le coefficient : ");
scanf("%f", &coefficient);
printf("Entrez les trimestres : ");
scanf("%hu", &trimestre);
printf("%.02f * %hu = %.02f\n", coefficient, trimestre, coefficient * trimestre);
unsigned short salaire;
unsigned short taux;
float retraite;
printf("Entrez le taux (sous forme de pourcentage) : ");
scanf("%hu", &taux);
printf("Entrez le salaire : ");
scanf("%hu", &salaire);
// On fait le calcul :
retraite=taux / 100.0 * salaire;
// Et on affiche le résultat à l'écran :
printf("%hu * %hu%% = %.02f\n", salaire, taux, retraite);
return 0;
} |
Tu remarqueras plusieurs choses
- j'ai remplacé tes "int" par des "unsigned short". Ben oui, ces valeurs étant toutes positives, elles n'ont pas besoin d'être signées (on gagne en vitesse lors des calculs, vitesse infinitésimale certes mais vitesse quand-même) et n'étant pas énormes (je ne pense pas que ton salaire dépassera 65535€/mois) le short suffit. Plus tu te forceras à réfléchir au typage précis de tes variables dès le départ plus ça te sera facile quand il faudra le faire réellement. Pareil pour le double qui peut, dans ces calculs, être remplacé par un float (on ne recherche pas la masse de l'électron!!!)
- j'ai supprimé l'initialisation de tes variables. Ben oui, pourquoi mettre à 0 une variable qui de toute façon sera écrasée 2 lignes plus bas (philosophie du C, on ne fait pas de choses inutiles). Ok ici il y a un petit schisme entre les divers intervenants, certains prônent l'initialisation systématique comme "barrière de sécurité" et ils ont aussi des bons arguments en faveur de cette option. Donc si ça te rassure de laisser l'initialisation à 0...
- j'ai défini les variables uniquement à partir du moment où j'en avais besoin. Ca c'est un des avantages du C99 (l'année où tu t'es mis à l'informatique), autant en profiter. A la base ça ne change rien mais quand tu feras évoluer ton code et que tu supprimeras certaines parties devenues inutiles, ça t'aidera alors à supprimer les variables elles-aussi devenues inutiles sans en oublier. Ou alors (autre possibilité) quand tu supprimes une partie du code tu supprimes alors toutes les variables puis tu attends que le compilo râle pour savoir lesquelles remettre..