Précédent   MicroClick-Québec.ca > COUR DE RÉCRÉATION > Parlons-en

Notices

Parlons-en Discussion, faits divers, humour, entraide générale. ATTENTION: Tout propos racistes, xénophobes ou homophobes seront supprimés dès que vus

Réponse
 
Outils de la discussion Modes d'affichage
Vieux 28/02/2021, 02h40   #1
Master 0719
 
Avatar de Master 0719
 
Date d'inscription: 13/02/2017
Messages: 2 068
Par défaut Langage de programmation

Bonjour! Je me passionne et j’ai des aptitudes pour la programmation mais c’est un passe-temps qui demande des journées complètes pour en arriver au résultat escompté alors je ne n’en fais pas autant que je le souhaiterais mais, de temps à autres, je me lâche lousse!

J'ai fait une recherche sur le forum pour les mots "programmation" et "langage" et j'ai constaté qu'on en a jamais beaucoup parlé ici.

J’ai touché au Basic, Assembleur, Pascal, et un peu de C++, C# et Python. Il y a quelques jours, on m’a parlé du langage Clojure, basé sur le langage Lisp. Et en 2 jours seulement j’ai pondu un petit programme test pour me faire la main et me familiariser un peu avec Clojure.

Ce programme de conversion de températures n’est pas des plus pratiques dans le sens ou on trouve déjà des tonnes de pages web qui font ces conversions mais c’est le genre de programme que j’aime faire avec chacun des nouveaux langages avec lesquels je veux me familiariser un peu. Le programme est pas très long et est perfectible mais je fais juste ça pour m’amuser et je pense qu’avoir fait ça en 2 jours alors qu’un ou deux jours avant je connaissait rien de Clojure, c’est déjà pas mal.

Voila ce que ça donne en vidéo: https://www.youtube.com/watch?v=ogOoYdJoCkc
Master 0719 est connecté maintenant   Réponse avec citation
Vieux 01/03/2021, 10h50   #2
LaBroue
Visiteur
 
Messages: n/a
Par défaut Re : Langage de programmation

C'est très bien.
C'est amusant faire de la programmation, du moins la partie logique. C'est le respect de la syntaxe qui est parfois pénible.
Un petit défi: limiter le nombre de décimal à un caractère.
  Réponse avec citation
Vieux 01/03/2021, 18h23   #3
Master 0719
 
Avatar de Master 0719
 
Date d'inscription: 13/02/2017
Messages: 2 068
Par défaut Re : Langage de programmation

Citation:
Envoyé par LaBroue Voir le message
C'est très bien.
C'est amusant faire de la programmation, du moins la partie logique. C'est le respect de la syntaxe qui est parfois pénible.
Un petit défi: limiter le nombre de décimal à un caractère.
Oui, j'y ai pensé de réduire le nombre de décimales. Pour la conversion de Fahrenheit à Celsius, si je choisi "À point flottant" ça me donne moins de décimales mais le problème c'est que si je prend la réponse et que je re-converti de Celsius à Fahrenheit le résultat est erroné et c'est pour ça que j'ai choisi "double précision" plutôt que "point flottant" mais ça donne beaucoup plus de décimales. Mais je sais qu'on peux faire une opération mathématique qui réduira le nombre de décimale, je l'ai juste pas encore essayé.

Le calcul à faire en langage Basic pour réduire à 2 décimales est le suivant: "nombrefinal = int ((nombre*100)+.5)/100" il faudra que fasse l'équivalent en Clujore et espérer que ça marche...

Dernière modification par Master 0719 ; 01/03/2021 à 18h46.
Master 0719 est connecté maintenant   Réponse avec citation
Vieux 02/03/2021, 01h41   #4
Master 0719
 
Avatar de Master 0719
 
Date d'inscription: 13/02/2017
Messages: 2 068
Par défaut Re : Langage de programmation

J'ai réussi à arrondir à 2 décimales seulement après le point et ça marche pas mal bien. Voila le code modifié, il n'y a qu'à le copier dans un éditeur de texte et le sauvegarder sous "nom.clj" et le lancer dans un compilateur de Clojure:

Code:
(defn Celsius []

(print (str (char 27) "[2J"))
(print (str (char 27) "[;H"))
(newline)
(print "Entrez les degrés Celsius: ") (flush)

(def nmbr (read-line))
(def nombre (Float/parseFloat nmbr))

(newline)

(print nmbr "degrés Celsius = ")
(def nmbr2 (float (+ (* nombre (/ 9 5)) 32)))

(if (< nmbr2 0)
     (def u -0.5))
(def calcul (float (/ (int (+ (* nmbr2 100) u)) 100)))
(def s (str calcul))
(if (= (.endsWith s ".0") true)
    (do (print (int calcul)))
    (print calcul))

(println " degrés Fahrenheit")
(newline))



(defn Fahren []

(print (str (char 27) "[2J"))
(print (str (char 27) "[;H"))
(newline)
(print "Entrez les degrés Fahrenheit: ") (flush)

(def nmbr (read-line))
(def nombre (Double/parseDouble nmbr))

(newline)

(print nmbr "degrés Fahrenheit = ")
(def nmbr2 (float (* (- nombre 32) (/ 5 9))))

(if (< nmbr2 0)
     (def u -0.5))
(def calcul (float (/ (int (+ (* nmbr2 100) u)) 100)))
(def s (str calcul))
(if (= (.endsWith s ".0") true)
    (do (print (int calcul)))
    (print calcul))
    
(println " degrés Celsius")
(newline))



(defn Debut []
(def u 0.5)
(print (str (char 27) "[2J"))
(print (str (char 27) "[;H"))
(newline)
(println "Celsius à Fahrenheit = 1")
(println "Fahrenheit à Celsius = 2")
(newline)
(print "Entrez votre choix (1 ou 2) ") (flush)
(def choix (read-line))
(if (= choix "1")
     (do (Celsius))
     (do (Fahren)))
(newline))
(loop []
(Debut)
(print "Appuyez sur ENTER: ") (flush)
(read-line)
(recur))
Mais je ne suis pas un mathématicien et la seule chose dont je suis pas sur c'est que: Je fait l'arrondi en multipliant par 100 et additionnant .5 et en divisant par 100, sauf que, sur des chiffres négatifs le nombre semble décroître alors qu'il croît bel et bien alors je crois que je me suis trompé car j'ai fait en sorte que quand c'est un chiffre négatif qu'on additionne -.5 et non .5. Mais je me rend compte que j'ai probablement fait une erreur étant donné que le nombre est censé augmenter si on doit arrondir. De toutes façons c'est très facilement réparable dans le code.

Je viens aussi de me rendre compte que le résultat serait peut-être plus précis en ne mettant qu'une seule décimale après le point comme l'a mentionné LaBroue en multipliant et divisant par 10 au lieu de 100 pour arrondir.

Dernière modification par Master 0719 ; 02/03/2021 à 02h49.
Master 0719 est connecté maintenant   Réponse avec citation
Vieux 02/03/2021, 19h27   #5
Master 0719
 
Avatar de Master 0719
 
Date d'inscription: 13/02/2017
Messages: 2 068
Par défaut Re : Langage de programmation

Je viens de faire une autre découverte, la commande "format":

Ainsi, au lieu de faire: (def calcul (float (/ (int (+ (* nmbr2 100) u)) 100)))
je peux simplement faire: (def calcul (format "%.2f" nmbr2))

Ça donne le même résultat pour le nombre de décimales après le point et c'est moins long à écrire!

Pour mettre plus ou moins de décimales après le pont juste à remplacer 2f par 1f, 3f, 4f, etc...
Master 0719 est connecté maintenant   Réponse avec citation
Vieux 03/03/2021, 04h23   #6
jandre
Visiteur
 
Messages: n/a
Par défaut Re : Langage de programmation

Bonjour si tu veut tu a un forum de développeur ,le lien se trouve dans actualités informatique
  Réponse avec citation
Vieux 03/03/2021, 05h51   #7
Master 0719
 
Avatar de Master 0719
 
Date d'inscription: 13/02/2017
Messages: 2 068
Par défaut Re : Langage de programmation

Citation:
Envoyé par jandre Voir le message
Bonjour si tu veut tu a un forum de développeur ,le lien se trouve dans actualités informatique
Merci jandre, je vais regarder cela.
Master 0719 est connecté maintenant   Réponse avec citation
Vieux 03/03/2021, 22h12   #8
Master 0719
 
Avatar de Master 0719
 
Date d'inscription: 13/02/2017
Messages: 2 068
Par défaut Re : Langage de programmation

Bon, c'est la dernière fois que je vous achale avec mon programme! Mais j'ai fait plusieurs changements et améliorations.

Premièrement j'ai créé une fonction pour effacer l'écran que je peux appeler à ma guise n'importe où dans le programme, et une fonction qui regarde si ce qu'on entre est bien un chiffre, comme ça le programme va pas planter si on entre plutôt des lettres mais va plutôt donner la valeur 0 à la variable. J'ai aussi fait plusieurs autres petits changements que vous pourrez voir dans le code:

Code:
(defn Clear []
(print (str (char 27) "[2J"))
(print (str (char 27) "[;H"))
(newline))

(defn numeric? [s]
  (if-let [s (seq s)]
    (let [s (if (= (first s) \-) (next s) s)
          s (drop-while #(Character/isDigit %) s)
          s (if (= (first s) \.) (next s) s)
          s (drop-while #(Character/isDigit %) s)]
      (empty? s))))

(defn Celsius []

(print "Entrez les degrés Celsius: ") (flush)

(def s (read-line))
(if (= s "")
     (def s "0"))
(if (= (numeric? s) false)
      (def s "0"))
(let [nombre (Float/parseFloat s)]

(newline)

(print s "degrés Celsius = ")
(def nmbr2 (float (+ (* nombre (/ 9 5)) 32))))

(if (< nmbr2 0)
     (def u -0.5))
(def s (format "%.2f" nmbr2))
(def calcul (Float/parseFloat s))
(if (= (.endsWith s ".00") true)
    (do (print (int calcul)))
    (print calcul))

(println " degrés Fahrenheit")
(newline))


(defn Fahren []

(print "Entrez les degrés Fahrenheit: ") (flush)

(def s (read-line))
(if (= s "")
     (def s "0"))
(if (= (numeric? s) false)
      (def s "0"))
(let [nombre (Float/parseFloat s)]

(newline)

(print s "degrés Fahrenheit = ")
(def nmbr2 (float (* (- nombre 32) (/ 5 9)))))

(if (< nmbr2 0)
     (def u -0.5))
(def s (format "%.2f" nmbr2))
(def calcul (Float/parseFloat s))
(if (= (.endsWith s ".00") true)
    (do (print (int calcul)))
    (print calcul))
    
(println " degrés Celsius")
(newline))


(defn Debut []
(Clear)
(def u 0.5)
(println "C = Celsius à Fahrenheit")
(println "F = Fahrenheit à Celsius")
(println "Q = Quitter")
(newline)
(print "Entrez votre choix (C, F ou Q) ") (flush)
(def chx (read-line))
(def choix (clojure.string/lower-case chx))
(if (= (not= choix "q") true)
(do (Clear)
(if (= choix "c")
     (do (Celsius))
     (do (Fahren)))
(newline))))

(def choix "1")
(while (= (not= choix "q") true)
   (do
(Debut)
(if (= (not= choix "q") true)
 (do(print "Appuyez sur ENTER: ") (flush) (read-line))
)) (Clear) (println "Bonne journée!\n"))
Master 0719 est connecté maintenant   Réponse avec citation
Réponse


Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s))
 

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non

Navigation rapide


Fuseau horaire GMT -5. Il est actuellement 18h29.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Version française #23 par l'association vBulletin francophone