CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

MPSI: algorithmique, partie entière

Khatru
Khatru
Niveau 6
06 septembre 2010 à 21:58:14

Bonjour,

je dois réaliser un programme qui a partir d'un réel positif x donne sa partie entière en algorithmique (prépa MPSI) en utilisant la boucle tant que.
Je n'ai pas vraiment l'habitude de "réfléchir comme un PC", et bien que d'autres petite programmes basiques ne m'ont pas posé trop de problèmes je sèche totalement sur celui. Un petit peu d'aide, ne serait-ce qu'une piste, est la bienvenu. :)

Pour information, la partie entière d'un réel positif x est l'entier noté E(x) tel que
E(x) =< x < E(x) + 1

Merci d'avance :)

chris_27
chris_27
Niveau 10
06 septembre 2010 à 22:03:41

Je vais te donner une indication : teste tous les n de 0 à E(x).

Shakey
Shakey
Niveau 8
06 septembre 2010 à 22:31:32

Assez "simple" comme indication mais je pense que ça a fait tilt.

J'ai donc:

entrer(x);
b <-0 ;
tant que x-1>=0;
x <- x-1;
b <- b+1;
fin de boucle tant que;
afficher(b); [b correspond à la partie entière]

A priori ça m'a l'air de bien marcher.
encore merci :)

dnob700
dnob700
Niveau 10
06 septembre 2010 à 22:32:50

putain ! les profs qui donnent des questions aussi débile devraient être virés de l'éducation nationale.

Comment est-ce que des mecs peuvent apprendre à programmer correctement si on leur dit n'importe quoi ?

Tu dira à ton prof que s'il ne te dit pas comment est représenté ton "réel positif" ou quelles sont les opérations auxquelles tu as droit dessus, tu ne réponds pas à cette question, car il est absolument impensable d'utiliser un algorithme aussi mauvais pour répondre à une tâche aussi simple : il n'y a aucune raison qu'il faille un million de fois plus de temps pour prendre la parti entière de 1000000,1 que 1,1 (les deux devraient prendre le même temps) or c'est le cas si tu utilise une boucle while.

(c'est tellement horrible que si Chris n'avait pas expliqué comment faire, je n'aurais pas trouvé...)

chris_27
chris_27
Niveau 10
06 septembre 2010 à 22:42:37

dnob700: j'ai pas osé le dire. :o))

Après, c'est pas forcément trivial de trouver des illustrations à tout ce qu'on présente, et c'est ainsi que naissent ce genre d'exos. :(
Le plus important, c'est de voir si le prof donnera ou pas du recul à ses élèves en leur disant que c'était une solution de merde pour calculer E(x).

Shakey
Shakey
Niveau 8
06 septembre 2010 à 22:42:59

Je pense que c'est plutôt à titre d'exemple, pas pour nous apprendre à bien programmer.
Pour l'instant je n'ai eu qu'une heure de cours où ont été donné les commandes élémentaire (affecter une valeur ; afficher à l'écran le contenu d'une variable ; faire des calculs avec des zones mémoires (additionner, soustraire, multiplier, diviser) et comparer le contenu de 2 zones mémoires) ainsi que les décomposeurs de condition (si alors; si alors sinon; en cas de) et une boucle: "tant que"

Il nous a fait faire un ou deux exemples pour chaque décomposeurs, sauf sur la boucle "tant que" par manque de temps, et c'est donc à nous de le faire pour la prochaine fois.

final-hearts
final-hearts
Niveau 10
16 septembre 2010 à 21:47:25

suffirait pas d'utiliser un floor ?

chris_27
chris_27
Niveau 10
16 septembre 2010 à 22:18:39

Pour répondre à la question initiale, non. :-)

En pratique, oui, la fonction floor de math.h ou plutôt ici la fonction int_of_float de la libraire standard de caml. Après, il y a toujours la question de savoir comment ces deux fonctions sont implantées. :-)

dnob700
dnob700
Niveau 10
16 septembre 2010 à 23:53:10

floor existe aussi en caml (et à un type un peu préférable ici). Par contre int_of_float fonctionne même si le nombre est négatif, ce qui n'est pas le cas de floor.

Devinette, quelle est la valeur de floor appliqué à un zéro négatif ?

chris_27
chris_27
Niveau 10
17 septembre 2010 à 09:27:24

dnob700 : int_of_floor est préférable ici. La partie entière, c'est l'*entier* tel que … :d) donc on s'attend à un int et pas à un floor.

Enfin c'est mon avis. :-)

lndiana-Jones
lndiana-Jones
Niveau 10
17 septembre 2010 à 12:56:52

e:entier = 0
x:réel
entrer(x)

tant que e < x-1 faire
e = e + 1;
fin tant que

afficher(e)

'fin je sais pas :noel:

chris_27
chris_27
Niveau 10
17 septembre 2010 à 13:13:37

Échec. :-)

1) qui a dit que ton réel était positif ?
2) qui a dit que ton réel n'était pas un entier ?

Blague à part, ce n'est pas lui rendre service que de lui donner une solution toute faite.

PS: en vrai, ce sujet est résolu je crois.

lndiana-Jones
lndiana-Jones
Niveau 10
17 septembre 2010 à 13:28:27

0) qui a dit que c'était la bonne solution? :noel:

dnob700
dnob700
Niveau 10
17 septembre 2010 à 14:22:59

Pour répondre au 1), c'est Khatru qui l'a dit dans le premier message. Pour répondre au 2) par contre, je ne vois pas quel est le problème ?

chris_27
chris_27
Niveau 10
18 septembre 2010 à 00:44:19

Zut, tu m'as embrouillé avec ta remarque sur la différence entre floor et int_of_float sur les négatifs. :rouge:

Sinon, rappelons que pour tout entier n, E(n) = n et pas n-1 comme retournerait l'algorithme d'lndiana-Jones.
Le test "e < x-1" ne convient pas, il fait mettre "e <= x-1" pour traiter correctement le cas où x est entier.

dnob700
dnob700
Niveau 10
18 septembre 2010 à 12:15:04

Mince, erreur de débutant, je me suis dit que tu t'es embrouillé avec le fait que la boucle sort au moment ou la condition n'est plus validé et donc que e = n, et je n'ai pas fait attention au -1...

lndiana-Jones
lndiana-Jones
Niveau 10
18 septembre 2010 à 16:08:33

idem =/

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment