IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Taux en pourcentage langage C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2021
    Messages : 3
    Par défaut Taux en pourcentage langage C
    Bonsoir à tous,

    Je me présente à vous, j'ai 62 ans passionné d'informatique depuis 1999. J'ai tester linux, windows et finalement revenu sur Mac.
    Certains me disent fou car j'apprends le C avec le livre de Mathieu Nébra.
    Ils me disent le C te servira à rien alors que je lis que c'est une base solide. Donc...

    Je vous met en copie le code source d'un programme en C dont je débute d'ailleurs ; et j'ai un soucis je voudrais que le taux soit exprimé en pourcentage.
    Et là je ne sais pas faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    36
    37
    38
    39
    40
    41
    //
    //  main.c
    //  CT1retraite
    //
    //  Created by proux on 17/04/2021.
    //
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    int main(int argc, char *argv[])
    {
        int retraite = 0, taux = 0, salaire = 0, trimestre = 0;
        double coefficient = 0;
     
     
     
      printf("Entrez le coefficient : ");
      scanf("%lf", &coefficient);
      printf("Entrez les trimestres : ");
      scanf("%d", &trimestre);
     
      taux = coefficient * trimestre;
        printf("%lf * %d = %d\n", coefficient, trimestre, taux);
     
      printf("Entrez le taux : ");
      scanf("%d", &taux);
      printf("Entrez le salaire : ");
      scanf("%d", &salaire);
     
      // On fait le calcul :
     
      retraite = taux * salaire;
     
      // Et on affiche la multiplication à l'écran :
     
      printf ("%d * %d = %d\n", taux, salaire, retraite);
     
      return 0;
    }
    Voici l'exécution du programme dans le terminal sous MacOS

    Last login: Sat Apr 17 20:54:05 on ttys001
    /Users/proux/Desktop/CT1retraite ; exit;
    proux@Mac-mini-de-proux ~ % /Users/proux/Desktop/CT1retraite ; exit;

    Entrez le coefficient : 0.449
    Entrez les trimestres : 150
    0.449000 * 150 = 67
    Entrez le taux : 67
    Entrez le salaire : 1000
    67 * 1000 = 67000
    Saving session...
    ...copying shared history...
    ...saving history...truncating history files...
    ...completed.

    [Opération terminée]
    Merci à vous tous de m'aider si vous pouvez.

    Bruno.

  2. #2
    Membre très actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Par défaut
    Je ne suis pas sur

    change ces deux ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // On fait le calcul :
     
    retraite = taux * salaire / 100 ;
     
    // Et on affiche la multiplication à l'écran :
     
    printf ("%f %% * %d = %d\n", (float)taux/100, salaire, retraite);

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par bruno proux Voir le message
    J'ai tester linux, windows et finalement revenu sur Mac.

    Certains me disent fou car j'apprends le C avec le livre de Mathieu Nébra.
    Ils me disent le C te servira à rien alors que je lis que c'est une base solide. Donc...
    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.

    Citation Envoyé par bruno proux Voir le message
    Je vous met en copie le code source d'un programme en C dont je débute d'ailleurs ; et j'ai un soucis je voudrais que le taux soit exprimé en pourcentage.
    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 c : Sélectionner tout - Visualiser dans une fenêtre à part
    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..
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Certains me disent fou car j'apprends le C avec le livre de Mathieu Nébra.
    Ils me disent le C te servira à rien alors que je lis que c'est une base solide. Donc...
    Bah disons que c'est un mauvais livre pour le C

    Sinon , le C ne sert pas à "rien" , mais il est clairement pas pédagogue comme langage , depuis le temps que je traîne sur les forum C , la plupart des débutants passe leur temps à résoudre des problèmes lié au langages et aux différents UB que à vraiment codé.
    Pour ma part le truc le plus important dans l'informatique c'est l'algo est un langage qui permet de se concentrer sur celui ci (comme le Python) est bien mieux pédagogue que le C.

    Je ne rejoins pas forcément l'avis de mon camarade plus haut que le C est bas niveau , cela dépend surtout de son utilisation , un printf/scanf ,c'est tout sauf du bas niveau
    Par contre le C peut être bas niveau si on code en embraqué ,mais rare sont ceux qui font de l'embarqué en général , donc si tu fais du C sur un OS , je considère pas que tu fera du C très bas niveau (même si ça reste plus "bas niveau" que la plupart des langages).

    L'utilité du C est variable, si ton but est de faire de la GUI , oui il faut fuir le C , c'est clairement pas le langage fait pour :p
    Je pense que tes interlocuteurs qui dise que le C ne sert pas ,c'est que sauf si tu code un OS / driver/embarqué , hors de ces champs là , oui le C n'est pas le meilleur outils pour faire d'autre type de programme.

  5. #5
    Membre émérite
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Par défaut
    Citation Envoyé par bruno proux Voir le message
    Bonsoir à tous,

    Je me présente à vous, j'ai 62 ans passionné d'informatique depuis 1999. J'ai tester linux, windows et finalement revenu sur Mac.
    Certains me disent fou car j'apprends le C avec le livre de Mathieu Nébra.
    Ils me disent le C te servira à rien alors que je lis que c'est une base solide. Donc...
    Re-Bonjour Bruno,
    Je ne sais pas qui te traite de fou mais je me permets d'intervenir car sur un autre site, celui d'OCR le QG de M. Nébra, tu précises aussi bientôt suivre une formation en algo.
    Cette précision est importante, car à moins d'avoir comme prérequis une connaissance minimale de C pour suivre cette formation, il est fort à parier que si un langage particulier est pris pour implémenter des algorithmes alors ce sera certainement ou python ou javascript ou quelque chose de ce acabit. Pourquoi ? Parce que dans ces langages tu n'as besoin de t'occuper de beaucoup de détails qui au début sont surtout du bruit et cela te permettra de te concentrer sur l'essentiel.
    Pour te donner un exemple, tu as l'algo d'échange de valeur entre deux variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    algo échange( v1, v2 )
        temp <- v1
        v1 <- v2
        v2 <- temp
    En gros en C ça demande de comprendre un minimum ce que sont les pointeurs, d'avoir survolé une description du modèle mémoire, …
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void swap(int *v1, int *v2)
    {
        int tmp=*v1;
        *v1=*v2;
        *v2=tmp;
    }
    Et là tu n'as que la version entière (=la version qui traite des entiers), il faudra faire d'autres versions de fonctions similaires pour traiter d'autres types.
    Alors qu'en python un échange se fait simplement par une affectation :
    C'est un bon choix que de suivre une formation en algo, car c'est cela avoir de bonnes bases solides.
    En général on présentera toujours un algo sous forme de pseudo-code, une sorte de langage à mi-chemin entre une langue naturelle et un langage de programmation (comme le premier code).

    Donc le C pourquoi pas … mais pas comme premier langage d'apprentissage surtout dans le cadre d'un formation algo, enfin àmha.


    Citation Envoyé par Sve@r Voir le message
    [...][*]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!!!)
    [...]
    Ce sont des considérations que l'on a pas en débutant en algo, que l'on a en général pas dans d'autres langages qui se débrouillent très bien avec ou des entiers ou des flottants et on en sait pas plus, par exemple.
    De plus, on a aucune certitude qu'utiliser un short «fait gagner en vitesse», bien au contraire sur x86_64 par exemple. Si on veut «de la vitesse» alors on peut utiliser les fast int depuis C99 → par exemple uint_fast_16t qui garantit d'utiliser le type le plus rapide pour des opérations non signées (attention danger pour le débutant) sur au moins 16 bits.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par WhiteCrow Voir le message
    De plus, on a aucune certitude qu'utiliser un short «fait gagner en vitesse»
    Comme l'indique ce préambule "elles n'ont pas besoin d'être signées" ma remarque ne portait pas sur le short mais sur l'unsigned pour lequel il n'y a pas besoin d'extension du bit de signe. Quelle que soit la rapidité de cette extension, si elle n'y est pas c'est fatalement du temps de gagné.

    Citation Envoyé par WhiteCrow Voir le message
    Ce sont des considérations que l'on a pas en débutant en algo
    Ici on n'est pas en algo mais en C. Et les conseils, plus tôt on les suit moins on a d'effort à faire pour s'y mettre plus tard. Et quoi qu'il arrive un conseil reste toujours bon à prendre.

    Citation Envoyé par WhiteCrow Voir le message
    que l'on a en général pas dans d'autres langages
    Pareil, ici on n'est pas dans "d'autres langages". Il aurait posé sa question dans le fofo Python ma réponse n'aurait pas été la même. Il veut se mettre au C, je lui donne des conseils et états d'esprit que moi-même j'applique à mes codes en C mais qui ne sont pas ceux de mes codes Python.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre émérite
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    [...]
    Ici on n'est pas en algo mais en C. Et les conseils, plus tôt on les suit moins on a d'effort à faire pour s'y mettre plus tard. Et quoi qu'il arrive un conseil reste toujours bon à prendre.


    Pareil, ici on n'est pas dans "d'autres langages". Il aurait posé sa question dans le fofo Python ma réponse n'aurait pas été la même. Il veut se mettre au C, je lui donne des conseils et états d'esprit que moi-même j'applique à mes codes en C mais qui ne sont pas ceux de mes codes Python.
    Ce sont des conseils qui étaient certainement très pertinents il y a quelques années lorsque les compilos étaient bien moins débrouillard que de nos jours. Toujours àmha, les bons conseils à donner sont soit ceux qui aident le compilo comme l'utilisation de restrict, des vla dans les signatures de fonctions soit ceux qui augmentent la lisibilité du code comme ne pas essayer d'être trop intelligent en faisant de l'extraction de code, vouloir dérécursiver à tout prix, etc …
    C'est clair que le PO ne précise pas ici sont but d'avoir une formation en algo.

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par WhiteCrow Voir le message
    Ce sont des conseils qui étaient certainement très pertinents il y a quelques années lorsque les compilos étaient bien moins débrouillard que de nos jours.
    Ah ce fameux compilateur tellement intelligent. Pourtant des compilos il y en a toute une foultitude. Déjà tu ne peux pas présumer de ce sur quoi le PO va travailler/s'amuser (embarqué? vieux truc?). Il n'y a pas si longtemps j'ai codé pour une caméra et même si elle contient un Linux, il n'était pas très riche ledit Linux (même pas de Python quoi !!!)
    Et puis j'aime à penser qu'aussi intelligent qu'il puisse être, un compilo fera aussi bien avec mon aide que sans mais qu'avec mon aide il a alors une chance de faire encore mieux.

    Citation Envoyé par WhiteCrow Voir le message
    Toujours àmha, les bons conseils à donner sont soit ceux qui aident le compilo comme l'utilisation de restrict, des vla dans les signatures de fonctions soit ceux qui augmentent la lisibilité du code comme ne pas essayer d'être trop intelligent en faisant de l'extraction de code, vouloir dérécursiver à tout prix, etc …
    L'un n'empêche pas l'autre. Je t'assure que si j'avais eu connaissance des notions que tu cites (et si j'avais jugé que ça pouvait servir le PO) j'en aurais parlé. restrict je viens d'aller voir sur la page wikipedia ce qui s'en dit mais je n'ai pas encore trop d'idée de son utilité. Et les vla dans des signatures de fonction je n'arrive même pas à m'imaginer à quoi ça doit ressembler (toutefois perso les vla je suis pas super fana car si le vla ne peut pas se faire, il n'y a pas de retour possible et c'est la mort du petit cheval => j'en suis resté au bon vieux malloc peut-être rustique mais au-moins qui te dit s'il peut faire le job ou pas).
    Accessoirement déclarer une variable "unsigned short" c'est indiquer "cette variable n'est pas destinée à monter super haut et ne sera jamais négative" ce qui, en soi, est aussi un atout concernant la lisibilité du code...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Citation Envoyé par WhiteCrow Voir le message
    Donc le C pourquoi pas … mais pas comme premier langage d'apprentissage surtout dans le cadre d'un formation algo, enfin àmha.
    C'est la différence entre programmeur et développeur (et on peut ajouter analyste-programmeur qui en France, avec les grilles de salaires à 1 niveau Bac+2 et ingénieur)

    Les programmeurs développent les briques que les développeurs vont utiliser.
    Le développeur doit aussi participer aux réunions, faire la documentation, remonter les tickets, ... en gros intégrer le processus entreprise.

    Et donc ta réaction est typiquement de l'air du temps : on forme des développeurs qui vont empiler les briques, on ne leur demande pas de savoir comment cela fonctionne.
    Et comme tu le dis, l'embarqué, le développement d'applications bureau, ..., en France, ce sont des emplois de niche qui pour certains, les E.S.N.s demandent + 1 profil électronique qu'informatique pur.

  10. #10
    Membre émérite
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Par défaut
    Citation Envoyé par foetus Voir le message
    C'est la différence entre programmeur et développeur (et on peut ajouter analyste-programmeur qui en France, avec les grilles de salaires à 1 niveau Bac+2 et ingénieur)
    [...]
    Y a-t-il une différence entre un débutant programmeur, un débutant développeur et, en France, un débutant analyste-programmeur ? 😶
    Non, ce sont tous des novices qui doivent tout apprendre. Je ne pense pas que savoir monter et démonter un moteur, ou simplement avoir une idée de comment il fonctionne fait d'un conducteur un conducteur plus prudent. La base c'est pas la mécanique mais le code de la route. Et comme le PO, même s'il ne l'exprime pas ici mais sur d'autres forums, cherche avant tout à se préparer à une formation en algo … sans avoir plus de connaissances en programmation que ça …
    C'est d'ailleurs le seul but de mon intervention, rajouter de l'info manquante à la question que le PO pose …

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2021
    Messages : 3
    Par défaut Taux en pourcentage langage C
    Merci à vous tous j'ai réussi à résoudre le problème.

    Vous êtes formidables.

    Je vous mettrais le code source prochainement.

    Bruno.

  12. #12
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 667
    Par défaut
    Salut,

    Citation Envoyé par WhiteCrow Voir le message
    Ce sont des considérations que l'on a pas en débutant en algo, que l'on a en général pas dans d'autres langages qui se débrouillent très bien avec ou des entiers ou des flottants et on en sait pas plus, par exemple.
    De plus, on a aucune certitude qu'utiliser un short «fait gagner en vitesse», bien au contraire sur x86_64 par exemple. Si on veut «de la vitesse» alors on peut utiliser les fast int depuis C99 → par exemple uint_fast_16t qui garantit d'utiliser le type le plus rapide pour des opérations non signées (attention danger pour le débutant) sur au moins 16 bits.
    Absolument ! Le type de base pour les entiers c'est int et pour les réels c'est double. Sauf pour quelques CPU 8 bits, le type int est taillé pour offrir les meilleurs performances et le plus de sécurité. Ce type doit être privilégié par et pour le débutant.

    Citation Envoyé par foetus Voir le message
    et si tu mets des size_t à la place de tes int cela fait quoi ?
    Je me souviens il y a quelques jours (?) d'un code où un débutant avait noté int age; et tu lui en avais proposé un avec size_t age;

  13. #13
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Citation Envoyé par kaitlyn Voir le message
    Je me souviens il y a quelques jours (?) d'un code où un débutant avait noté int age; et tu lui en avais proposé un avec size_t age;
    Dans la norme C99, certains retiennent en priorité, les types mis en avant comme size_t, que la librairie standard utilise partout (1 exemple malloc), le retour int de main.
    Et d'autres, les VLAs (qui sont dépréciés depuis C11), les instructions non standard comme _restrict et qui sont des conseils et attendent la nouvelle norme C23 pour savoir comment rendre lisible 1 code C.

    Après tu as raison, j'ai été traumatisé par Visual C++ 2008-2010-2013 qui n'est pas compatible C99 : je définis toujours en premier mes variables, j'essaye de ne pas utiliser le nouveau commentaire, et mes booléens sont des unsigned char (et peut-être d'autres choses)


    Et pour le type "idéal", le type int ne fait que 32 bits même en 64 bits : donc j'ai 1 doute sur cette affirmation

  14. #14
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 667
    Par défaut
    Ben les calculs sur un nombre de 32bits n'en seront pas moins performants. Si tu n'as pas besoin d'un nombre de 64bits, int reste l’idéal.

  15. #15
    Membre émérite
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Par défaut
    Citation Envoyé par foetus Voir le message
    Dans la norme C99, certains retiennent en priorité, les types mis en avant comme size_t, que la librairie standard utilise partout (1 exemple malloc), le retour int de main.
    Et d'autres, les VLAs (qui sont dépréciés depuis C11), les instructions non standard comme _restrict et qui sont des conseils et attendent la nouvelle norme C23 pour savoir comment rendre lisible 1 code C.
    Les VLA ne sont pas dépréciés (comme l'a pu être gets avant d'être obsolète et retirée), mais optionnels. Si la macro _ _STDC_NO_VLA_ _ est définie et vaut 1 alors l'implémentation ne propose pas les VLA. Même s'ils peuvent ne pas être proposés par une implémentation, elle doit néanmoins les reconnaître syntaxiquement, ce qui semble aller de soi ne serait-ce que pour émettre un message d'erreur indiquant que l'utilisateur les utilise mais que le compilo ne l'implémente pas.

    restrict est un mot clé depuis C99, c'est un qualificateur de type dont le but même est de pouvoir avoir une optimisation plus aggressive.

    Les types comme size_t ne sont pas utilisés partout dans la libc, mais partout où ils font sens. size_t par exemple sera préférentiellement utilisé là où la notion de taille, d'alignement ou de nombre d'éléments apparaît comme dans malloc mais aussi dans strlen ou fwrite (où d'ailleurs restrict apparaît aussi pour assurer au compilo que les deux pointeurs passés pointent bien sur deux objets différents).

    Citation Envoyé par foetus Voir le message
    Après tu as raison, j'ai été traumatisé par Visual C++ 2008-2010-2013 qui n'est pas compatible C99 : je définis toujours en premier mes variables, j'essaye de ne pas utiliser le nouveau commentaire, et mes booléens sont des unsigned char (et peut-être d'autres choses)


    Et pour le type "idéal", le type int ne fait que 32 bits même en 64 bits : donc j'ai 1 doute sur cette affirmation
    Ouais, moi aussi j'aime bien les années 80, mais surtout pour la musique

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2021
    Messages : 3
    Par défaut Taux en pourcentage langage C
    Citation Envoyé par Sve@r Voir le message
    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 c : Sélectionner tout - Visualiser dans une fenêtre à part
    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..
    Merci pour toutes ces infos. Je débute et j'ai réussi à faire le pourcentage à ma façon mais je vais suivre ton code.

    Bruno.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Format pourcentage en taux
    Par zezro dans le forum SAS Base
    Réponses: 3
    Dernier message: 17/04/2018, 09h12
  2. Calcul d'un taux de pourcentage entre 2 prix
    Par scoubisami dans le forum AJAX
    Réponses: 2
    Dernier message: 31/01/2018, 10h07
  3. Calcul pourcentage Taux
    Par Baxter89 dans le forum WinDev
    Réponses: 6
    Dernier message: 15/06/2017, 11h33
  4. [CR XI] TCD sur un pourcentage (taux de service en fonction d'une tranche de tolérance)
    Par juju05 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 17/11/2014, 09h58
  5. [langage] Je cherche un bon livre ?
    Par Anonymous dans le forum Langage
    Réponses: 13
    Dernier message: 09/04/2003, 13h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo