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

[C++] Resultat de ce programme ?

jeux_maniac
jeux_maniac
Niveau 10
16 décembre 2008 à 22:00:55

Bonjour tlm, la forme ?

bon voilà, jai un prb de compréhension avec un programme qui est le suivant :
----------------------------------

  1. include <iostream>
  2. include <vector>

using namespace std;

typedef unsigned long int Nombre;

Nombre f(Nombre n) {
vector<Nombre> v;
Nombre j(0);

while (n!=0) {
v.push_back(n % 100) ;
n = n / 1000 ;
}

for (int i(v.size()-1); i>0; --i) {

for (++j; v[i]>=j; j=j+2) {
v[i] = v[i] - j ;
}

j = 10 * (j-1);
v[i-1] = v[i-1] + 100*v[i] ;
}

for (++j; v[0]>=j; j=j+2) {
v[0] = v[0] - j ;
}

return (j-1)/2 ;
}

int main () {
cout << f(20000) << endl ;
return 0 ;
}
-----------------------------------------

Voilà, ca affiche "44". mais je comprend pas pk. est-ce que qqun pourrait mexpliquer chaques calculs, chaques étapes ?

Je sais que c bcp demander mais qui tente rien na rien ^^

Bonne soirée

Kaoron
Kaoron
Niveau 9
17 décembre 2008 à 12:56:10

Partie 1 : initialisation du vecteur

while (n!=0) {
v.push_back(n % 100) ;
n = n / 1000 ;
}

Tant que n est non negatif, on met à la fin de v le résultat de n%100
première itération : n=20000 (!= 0)
v.push_back(20000%100 = 0)
n=20000/1000 = 20
deuxième itération : n=20 (!=0)
v.push_bachk(20%100 = 20)
n=20/1000 = 0 (int !!!)

a la fin : v = <0, 20>

Seconde partie : génération du résultat
La boucle [ for (int i(v.size()-1); i>0; --i) ] démarre de v.size-1 = 1 et itere par pas de -1 tant que i est > 0, donc à priori, ca va tourner un seul tour.

for (++j; v[i]>=j; j=j+2) {
v[i] = v[i] - j ;
}
Cette boucle incrémente j à l'initialisation (donc j=1), puis tant que j est inférieur ou égal à v[i] [i=1 dans cette itération], j est retranché à v[i]

on a donc :
j=1 ( v[i]-=1 ) = 19 (j += 2)=3 // test OK
j=3 ( v[i]-=3 ) = 16 (j += 2)=5 // test OK
j=5 ( v[i]-=5 ) = 11 (j += 2)=7 // test OK
j=7 ( v[i]-=7 ) = 4 (j += 2)=9 // test PAS OK

On sort donc avec j=9

Puis j = 10 * (j-1), 10*8 = 80

Et v[i-1] = v[i-1] + 100*v[i], v[0]=0 est augmenté donc 100*4=400 !

On sort de la boucle sur i, il n'y a bien qu'une itération

Troisième partie : génération du résultat (suite)
for (++j; v[0]>=j; j=j+2) {
v[0] = v[0] - j ;
}
Pareil qu'au dessus, j est incrémenté à 81 à l'initialisation
j=81 ( v[0]-=81 ) = 319 (j += 2)=83
j=83 ( v[0]-=83 ) = 236 (j += 2)=85
j=85 ( v[0]-=85 ) = 151 (j += 2)=87
j=87 ( v[0]-=87 ) = 64 (j += 2)=89
On obtient j=89

Enfin, return (j-1)/2 : (89-1)/2 = 44

jeux_maniac
jeux_maniac
Niveau 10
17 décembre 2008 à 18:28:36

merci infiniment Kaoron !

à n'en pas douter tu t'y connais :p

jme sens mieux mnt, encore merci !!

jeux_maniac
jeux_maniac
Niveau 10
17 décembre 2008 à 18:59:59

En fait, jme suis trompé qd j'ai réécrit le programme sur mon post...

la boucle while doit etre modifié comme suit:

while (n!=0) {
v.push_back(n % 100) ;
n = n / 100 ; // 100 et non pas 1000 ...
}

mais grâce à la marche à suivre que m'a fourni Kaoron (merci encore), jai trouvé la solution. Pour les curieux, la réponse est 141 !

voilà, bonne fin de journée à tous.

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