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

J´aide les personne en C/C++

nulissimo
nulissimo
Niveau 4
03 juin 2005 à 23:05:59

Petite question :

c´est quoi Uint ?

dynoplasmma
dynoplasmma
Niveau 9
03 juin 2005 à 23:07:56

Je ne sais pas trop mais en SDL, je met Uint 8 keystate, c´est pour faire bouger quelqu´ue chose, mais attend une reponse plus approprié car je n´en susi pas si sur.

dnob700
dnob700
Niveau 10
04 juin 2005 à 15:24:24

Uint ça veut dire unsigned int : un entier ( un int) mais non signé ( que positif de 0 à 4 milliard).

Ce n´est pas un type de base du langage. ça veut drie que quelquepart dans le programme ou dans les fichier d´en tête il y a marqué :

typedef unsigned int Uint
ou alors

  1. define Uint unsigned int
Happyman
Happyman
Niveau 6
06 juin 2005 à 09:11:24

Moi, j´ai fait un programme simple :

  1. include < iostream.h>
  2. include < stdlib.h>
  3. include < time.h>

using namespace std;

int main()
{
int toi;
int autre;
srand(time(NULL));
toi = ( rand()%6)+1;
autre = ( rand()%6)+1;

cout < < " Jouons aux des ! !!" < < endl < < " Appuie sur une touche pour faire tirer un nombre a ton adversaire" < < endl;
cin.get();
cout < < " Ton adversaire a fait : " << autre < <" . " < < endl; < < " Appuie de nouveau sur une touche pour tirer un nombre"<< endl;

if ( autre == 6)
{
cout < < " Tu ne peux pas faire plus, tu as perdu..."<< endl;
}
else
{
cout < < " Appuie de nouveau sur une touche pour tirer un nombre"<< endl;
cin.get();
cout < < " Tu a fait : " << toi<< " . "<< endl;
if ( toi > autre)
{
cout < < " TU A GAGNE ! !!" < < endl;
}

else if ( toi == autre)
{
cout < < " Egalite, personne n´a gagne..." < < endl;
}

else
{
cout < < " Tu a perdu..." < < endl;
}
}

cin.get();
return 0;
}

Et quand je veux le compiler, RIEN ? Quelqu´un peut me dire pourquoi ça marche pas, plize ?

Ptival
Ptival
Niveau 10
06 juin 2005 à 09:40:46

Bizarre ton programme...

Comment ça " RIEN" ? ??

Déjà enlève le . h à iostream je crois...<iostream>

Puis aussi ya une erreur, quand autre==6, tu mets qu´il a forcément perdu, mais il peut y avoir égalité.

Sois plus explicite sur ce qui se passe à la compil´...

godrik
godrik
Niveau 30
06 juin 2005 à 12:07:08

allez hop, j´ai un créneau pour parler de la génération des nombres aléatoires alors j´en profite...

" autre = ( rand()%6)+1;"
Ca c´est super classique; c´est quelquechose qu´on lit assez souvent alors je vais me permettre d´expliquer pourquoi: " c´est MAL!"

rand dans la plupart des implémentation de la libC est fait comme un LCG ( Linear Congruential Generator).
alors qu´est ce que ca veut dire cte bete la, ca veut dire que
rand_n+1 = ( a*rand_n + b)%c
Et c´est le triplet ( a,b,c) qui fixe la " qualité" de la génération aléatoire.

On voit bien quand on donne cette formule que l´opération modulo est une opération important de la génération d´aléa. C´est pourquoi il ne faut PAS utiliser de modulo quand on fait un générateur de nombre plus petit.
( pour vous amuser fait un rand()%2 en boucle, sur la plupart des implémentations vous obtiendrez 01010101 ou 0011001100110011, des fois, on constate des périodes a 8).
Tout ca pour dire que % c´est mal.

donc, comment faire les choses proprement un nombre aléatoire entre 0 et N ? modulo dit que les nombres 0 seront les nombres du type 0+kN, les un seront 1+kN . ..
essaye de faire autrement en disant que les 0 seront entre 0 et RAND_MAX/N, les 1 entre RAND_MAX/N et 2*RAND_MAX/N . ..
et ca comment on le fait en faisant ( ((float)rand()/RAND_MAX)*N) et la on a quelquechose de " plus" aléatoire...

Sinon HappyMan, donne plus d´information sur ce qui t´arrive

dnob700
dnob700
Niveau 10
06 juin 2005 à 19:00:46

Godrik dis moi, dans une autre vie tu t´appelait nesca ? ( voir le dernier post de la première page de ce topic)

Si tu essaye d´aficher en boucle des rand()%2 je te promet que tu ne verra pas de série du type 10101010 ou 11001100 comme tu le prétend tout simplement parce que ton trimplet ( a,b,c) est bien choisi. Globalement il est tellement bien choisie qu´entre 0 et RAND_MAX tout les nombres sortiront une fois avant de ressortir une nouvelle fois et ceci avec une irégularité stupéfiante ( alors qu´il est facile de retrouver ces 3 nombres à partir des sorties de la fonction.
Donc sachant que générallement RAND_MAX vaut 32000 et des poussière la différence de probabilité entre le 1 et le 6 n´excède pas 1 sur 5000. C´est à dire probablement moins que sur un vrai dès qui est toujours un peu pipé. Donc c´est vraiment enculer des mouches ( surtout qu´il vaut mieux faire float(rand()*N)/RAND_MAX que le contraire sinon tu y perd forcément.

la théorie c´est vachement bien, mais quand ça donne des gens qui t´écrive des programme en ANSI C qui ne peuvent pas se sompiler car le compilo suffisament conforme n´existe pas ça devient mauvais. Donc autant essayer son générateur de nombre aléatoire, voir qu´il fonctionne très bien avec un modulo et l´utiliser de la manière la plus simple qui soit.

" On voit bien quand on donne cette formule que l´opération modulo est une opération important de la génération d´aléa. C´est pourquoi il ne faut PAS utiliser de modulo quand on fait un générateur de nombre plus petit"
c´est ce qu´on appelle une superbe démonstration argumenté...

cin.get est pas terrible, il vaut mieux utiliser getch ( que tu trouve dans conio.h) ou system("pause"). sinon mets 2 cin.get d´affilé, un seul peut dans certain cas ne pas suffire.

Happyman
Happyman
Niveau 6
07 juin 2005 à 08:56:56

Désolé pour le manque d´information, mais je devais aller au collège alors . .. :rouge:

Mon programme est un petit jeu de dés très simple, sans images; L´ordinateur génère deux nombre aléatoires entre 1 et 6 qu´il met dans les variables " toi" et " autre"; Si la valeur de la variable " toi" est supérieure à la valeur de la variable " autre", l´ordinateur affiche " TU AS GAGNE", si les nombres sont égaux, ça affiche " Egalite, personne n´a gagne..." et si " autre" est supérieur à " toi", ça met " Tu as perdu...", sauf si l´adversaire fait directement 6, dans ce cas tu as perdu sans avoir tiré de nombre...

Pour les détails de la compilation, la fenêtre qui me dit s´il n´y a pas de bug dans mon prog m´annonce que tout va bien, elle se ferme . .. et c´est tout, il n´y a rien d´autre.

Happyman
Happyman
Niveau 6
07 juin 2005 à 09:05:18

Merci j´ai trouvé le problème, dans la ligne :

cout < < " Ton adversaire a fait : " < < autre < <" . " < < endl; < < " Appuie de nouveau sur une touche pour tirer un nombre"<< endl;

J´avais mis un point virgule après le premier " endl", alors que la fonction n´était pas terminée ( Ah, ce que je peux être couillon :sarcastic: )

godrik
godrik
Niveau 30
07 juin 2005 à 11:40:50

dnoob700, je ne suis pas aller voir le premier topic.
Je me suis gourré quand j´ai dit que c´etait un LCG qui etait implémenté dans la libC actuelle ( enfin, je parle de celle de Linux).
En effet, c´est actuellement un stub pour random ( qui utilise une politique a base de decalage de bit)
en outre, on peut lire dans man 3 rand

" If you want to generate a random integer between 1 and 10, you should always do it by using high-order bits, as in
j=1+(int) ( 10.0*rand()/(RAND_MAX+1.0));

and never by anything resembling
j=1+(rand() % 10);
( which uses lower-order bits)."

c´est ce qu´on appelle une superbe démonstration argumenté...

Je pourrais t´expliquer precisement pourquoi il ne faut pas le faire, mais franchement j´ai pas que ca a foutre.
si tu prend l´exemple de man 3 rand sur l´exemple de LCG, et que tu fais une etude de parité tu verra bien.

Darksalamandar
Darksalamandar
Niveau 3
08 juin 2005 à 20:26:44

Dans mon programme , on demande d´ecrire son nom
alors je met :

  1. include < stdlib.h>
  2. include < iostream>

using namespace std;

int main()
{
a :
char tc[129] ;
int i=0 ;
cout < < " Entre votre nom et terminer par un point " < < endl;
do
cin > > tc[i] ;
while ( tc[i++] ! =´.´);
cout < < " Vous avez entrez : " < < tc < < endl;
i=0;
do
cout < < tc[i] ;
while ( tc[i++] ! =´.´);
system("pause");
return 0;

mais quelque fois il y a un smiley ou un symbole qui est inscrit apres le nom , j´aomerais savoir pourquoi ?

Darksalamandar
Darksalamandar
Niveau 3
08 juin 2005 à 20:28:29

Ne faite pas attention au < < a:>>
j´ai fais une erreur en recopiant

dnob700
dnob700
Niveau 10
08 juin 2005 à 22:54:31

pourquoi ne pas faire cin > > tc;
?

bon sinon mets en 0 après le dernier caractère :
cin > > tc[i] ;
while ( tc[i++] ! =´.´);
tc[i]=0;

pour que lorsque tu fait cout < < tc;
il s´arrète au bon endroit.
ensuite, ton a: au début sers pas à grand chose et c´est pas très propre compte tenu que tu déclare des variables après.

dnob700
dnob700
Niveau 10
08 juin 2005 à 22:55:10

excuse moi, j´ai pas fait gaffe, à ton 2eme message, je pensais que c´était un label pour un éventuel goto.

godrik
godrik
Niveau 30
09 juin 2005 à 11:32:33

while ( tc[i++] ! =´.´);
a priori tu fais une post incrementation, je pense que tu voulais faire une preincrementation

tu devrais utiliser un for pour faire ce que tu fais la, c´est bine plus adapter.
ensuite, les chaine de caractere sont termine en C/C+ par un \0, tu pourrais l´utiliser pour faire un programme plus simple comme te l´a conseillé dnob700

JeanYvesYves
JeanYvesYves
Niveau 10
09 juin 2005 à 11:38:50

darksalamandar >
Personnellement, ( c´est un avis personnel bien sur) je n´aime pas les contractions : meme quand on maitrise, des fois ça joue des sales tours.
Donc moi je serais plutot favorable, au lieu de faire :

t[c++]!=3

t[c]!=3;
c++;

Bref, encore une fois c´est un avis personnel. Faut faire gaffe aussi a ce que ça fasse la meme chose :)

godrik
godrik
Niveau 30
09 juin 2005 à 11:44:03

jyy:
tu as raison, globalement les contractions: c´est mal!
De la meme facon j´ai tendance a mettre plus de {} qu´il n´en faut pour la lisibilité.

par contre, je remarque une mode par ici:
" cout < < " Vous avez entrez : " < < tc < < endl; "
celle de mettre cout < <
pour pas cout<< ?
vous trouvez ca plus lisible ? moi non perso

ah, sinon oui, j´ai trouvez ton smiley! :)
c´est dans la ligne que j´ai mise au dessus
< <tc<<endl;
ton tc n´est pas null terminated!
il fautrajouter a la fin de ta boucle de lecture un " tc[i] = ´\0´;"

JeanYvesYves
JeanYvesYves
Niveau 10
09 juin 2005 à 14:03:28

le < < avec un espace au milieu, ça vient de jeuxvideo.com qui reformate le texte :)
mais sinon, évidemment qu´on préfere sans espaces :)

godrik
godrik
Niveau 30
09 juin 2005 à 14:05:22

il ne le pas fait sur mon post au dessus

LGV
LGV
Niveau 28
09 juin 2005 à 14:14:46

< < mais<< ( symbole, ou mot), mais oui, sans espace dans le code

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