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

question sur le c++

lag-it
lag-it
Niveau 10
30 juin 2003 à 17:33:42

Oh et le jour ou on inventera un compilateur capable de corriger les erreurs, j´offre le champagne à tout le forum ; )

VictorVVV
VictorVVV
Niveau 6
30 juin 2003 à 17:34:50

ok, je fais du C+, pas Du C++ : )

VictorVVV
VictorVVV
Niveau 6
30 juin 2003 à 17:41:00

et puis pour moi çà sert à rien de faire du 100% C++, c´est juste que j´apprends avec un tuto sur le C++, mais pour l´instant à ce que j´ai compris c´est que du C.

JeanYvesYves
JeanYvesYves
Niveau 10
30 juin 2003 à 19:38:40

Ah ben tu vois : ) C ce que je dis, faut commencer par le C ; -p
puisque tu fais du C ! !
Le mec qui commence par du C++ commence par un langage 3e génération ( POO), avec les héritages et tout ! philosophie autre que le C !
mais faut commencer par le C qui est 2e génération : )
Si un compilo accepte les fonctions dans une struct, C maladroit de sa part, et c´est surtout pas portable, car on sort totalement de la norme ANSI.
Apres, le mec qui apprend le C aura surement un compilo C++ car quasi tous les compilos gerent le C++ : )

Mais c´est du C ; -p

VictorVVV
VictorVVV
Niveau 6
30 juin 2003 à 19:41:36

si je comprend il faut mettre class à la place de struct pour que çà marche ?
et est-ce que je suis obligé de mettre les public: ou alors tout sera public par default ?

Altonfrere
Altonfrere
Niveau 10
30 juin 2003 à 20:13:39

Prends pour habitude de marquer les choses plutôt que laisser le compilo faire sa sauce ! !

Déjà essaie de comprendre ce que signifient ces mots clés ( public/protected/private), et ne tombe pas dans la facilité de tout mettre en public car ca sert à rien sinon à fait du sale code ou plutôt une mauvaise conception de tes objets.

( pour information, avec VC++ en tout cas, c´est le mode private qui est pris par défaut)

VictorVVV
VictorVVV
Niveau 6
30 juin 2003 à 20:23:35

je veux d´abord que mon prog marche comme vavant, puis apres utiliser les mots-clés public, protected, private.

Altonfrere
Altonfrere
Niveau 10
30 juin 2003 à 20:25:29

bin alors réécris le comme avant . .. et ensuite documente toi sur les classes avant de vouloir t´en servir.

VictorVVV
VictorVVV
Niveau 6
30 juin 2003 à 20:32:06

j´ai remplacer struct par class au début et tout est public pour le moment

Altonfrere
Altonfrere
Niveau 10
30 juin 2003 à 20:45:11

ah au fait pour en revenir à cette histoire de struct/class :

" Si un compilo accepte les fonctions dans une struct, C maladroit de sa part, et c´est surtout pas portable, car on sort totalement de la norme ANSI. "

En quoi ce n´est pas portable ? ? ou contraire à la norme ANSI ? ?
La notion de structures avec membres et méthodes fait partie intégrante du C++ ( peut être pas de la programmation objet mais bel et bien du C++). Et ca ne m´étonnerai pas qu´elle fasse également partie de la norme ANSI, vu que c´est par là qu´à la base la notion de classe s´est faite.

Remplacer " class" par " struct" revient exactement au même au niveau de l´écriture ( pas au niveau conceptuel bien sûr).

JeanYvesYves
JeanYvesYves
Niveau 10
30 juin 2003 à 20:45:56

mais qu´est ce que tu t´emmerdes Victor ! ! pour le moment, ça marche bien ! ! pkoi changer ?

la POO, c´est bien + que de remplacer struct par class

tu verras ça plus tard : )

VictorVVV
VictorVVV
Niveau 6
30 juin 2003 à 20:47:44

j´ai quand même changer et çà marche, avec membres publics et prives :

float racar(float A, float J)
{
float i;
float Xj1;
float Xj;
float flag;
float m;
do
{
if(A>=0)
{
if(J<51)
{
Xj=A;
for(i=0;i<J;i++)
{
Xj1=(Xj+(A/Xj))/2;
Xj=Xj1;
m=i+1;
//printf("La %.0f approximation de la racine carree de %.2f est %.4f\n",m,A,Xj1);
}
//printf("la racine carré de %f vaut %f\n",A,Xj1);
flag=1;
}
else
{
//printf("Entrer la precision J\n");
//scanf("%f",&);
return 0;
}
}
else
{
//printf("Entrer une valeur POSITIVE pour A\n");
//scanf("%f",&);
return 0;
}
}
while(flag==0);
return Xj1;
}

float puissance(float x, int y)
{
float valeur = 1;
for ( int i=0; i < y;i++)
{
valeur = valeur*x;
}
return valeur;
}

class operation
{
public :
void setnum_un(float num)
{
num_un = num;
}
void setop(char perateur[100])
{
for ( int i = 0; i<100; i++)
{
op[i] = perateur[i];
}
}
void setnum_de(float num)
{
num_de = num;
}
float calcul ( )
{
float resultat = 1;
int resultat2 = 1;
int num_un2;
int num_de2;
if ( strcmp(op,"+")==0) resultat = num_un + num_de;
if ( strcmp(op,"-")==0) resultat = num_un - num_de;
if ( strcmp(op,"*")==0) resultat = num_un * num_de;
if ( strcmp(op,"/")==0) resultat = num_un / num_de;
if ( strcmp(op,":")==0) resultat2 = int(num_un / num_de);
if ( strcmp(op,"modulo")==0)
{
//cout < < " test";
num_un2 = int(num_un);
num_de2 = int(num_de);
resultat = num_un2 % num_de2;
}
if ( strcmp(op,">")==0) resultat = ( num_un > num_de);
if ( strcmp(op,"<")==0) resultat = ( num_un < num_de);
if ( strcmp(op,"puissance")==0)
{
//cout < < " test";
num_de2 = int(num_de);
resultat = puissance(num_un, num_de2);
}
if ( strcmp(op,"racine_carre")==0) resultat = racar(num_un, num_de);
if ( strcmp(op,"cosinus")==0) resultat = cos((num_un / 180.0) * M_PI);
if ( strcmp(op,"sinus")==0) resultat = sin((num_un / 180.0 ) * M_PI);
if ( strcmp(op,"tangeante")==0) resultat = tan((num_un / 180.0) * M_PI);
if ( strcmp(op,"cotangeante")==0) resultat = tan(((90 - num_un) / 180.0) * M_PI);
if ( strcmp(op,"pythagore")==0) resultat = racar(num_un*num_un+num_de*num_de,50 ) ;
if ( strcmp(op,"%")==0) resultat = num_un*(100/num_de);
if ( strcmp(op,"==")==0) resultat = ( num_un == num_de);

if ( resultat)
{
return resultat;
}
return float(resultat2);
}
friend ostream& operator<<(ostream& os, operation oper)
{
if ( oper.test())
{
if ( oper.test() == 1)
{
return os < < oper.num_un < < oper.op < < oper.num_de < < " =" < < oper.calcul();
}
else return os < < " erreur";
}
else
{
oper.determinant();
return os < < oper.deter < < " " < < oper.op < < " de " < < oper.num_un < < " = " < < oper.calcul();
}
}
operation(float numun, float numde, char operation2[2])
{
num_un = numun;
num_de = numde;
//op = operation2;
}
operation(float numun, float numde)
{
num_un = numun; num_de = numde;
}
operation(float numun)
{
num_un = numun;
}
int test()
{
if ( strcmp(op,"+")==0) return 1;
if ( strcmp(op,"-")==0) return 1;
if ( strcmp(op,"*")==0) return 1;
if ( strcmp(op,"/")==0) return 1;
if ( strcmp(op,":")==0) return 1;
if ( strcmp(op,"modulo")==0) return 1;
if ( strcmp(op,">")==0) return 1;
if ( strcmp(op,"<")==0) return 1;
if ( strcmp(op,"puissance")==0) return 1;
if ( strcmp(op,"pythagore")==0) return 1;
if ( strcmp(op,"%")==0) return 1;
if ( strcmp(op,"==")==0) return 1;
if ( strcmp(op,"racine_carre")==0) return 0;
if ( strcmp(op,"cosinus")==0) return 0;
if ( strcmp(op,"sinus")==0) return 0;
if ( strcmp(op,"tangeante")==0) return 0;
if ( strcmp(op,"cotangeante")==0) return 0;
return 2;
}
private :
float num_un;
float num_de;
char op[100];
char deter[12];
char determinant()
{
char deter1[12] = " le";
char deter2[12] = " la";
if ( strcmp(op,"cosinus")==0) deter = deter1;
else if ( strcmp(op,"sinus")==0) deter = deter1;
else deter = deter2;
}
};

//int testnombre(char chainombre[])
//{
//int value;
//value = strlen(chainombre);
//int nombre;
//for ( int i = 0;i < value; i++)
//{
//nombre += int(chainombre)*int(puissance(10,(value-i)-1));
//}
//return nombre;
//}

int main(int argc, char *argv[])
{
//char nombre1[12];
//char nombre2[12];
float nombre_un;
float nombre_de;
char peration[100];
while ( 1)
{
cout < < " entrez un nombre : ";
cin > > nombre_un;
cout < < " \nmarquer un operateur : \n+ = +\n- = -\n* = x\n/ = /\n: = / euclidienne\nm = %\n> = > \n< = < \npuissance = puissance\nracine_carre = racine caree\ncosinus = cosinus\nsinus = sinus\ntangeante = tangeante\ncotangeante = cotangeante\npythagore = theoreme de pythagore\n% = pourcentage\n== = ==\nvotre choix : ";
cin > > peration;
//nombre_un = float(testnombre(nombre1));
operation opera(nombre_un);
//operation opera;
opera.setop(peration);
if ( opera.test() == 1)
{
cout < < " entrez un nombre : ";
cin > > nombre_de;
opera.setnum_de(nombre_de);
cout < < opera;
}
else cout < < opera;
cout < < " \n\n\n\n\n";
}
system ( "PAUSE");
return 0;
}

Altonfrere
Altonfrere
Niveau 10
30 juin 2003 à 20:51:51

ouais et bien sur tu sais toujours pas pourquoi ca marche en privé . ... ( indice : utilisation du mot-clé " friend")

En tout cas ton code il me fait peur ! Je sais pas si c´est le manque d´indentation mais c´est affolant !

Bref, maintenant que " ton" prog " marche", essaie d´en comprendre le fonctionnement ! ( dans le détail)

VictorVVV
VictorVVV
Niveau 6
30 juin 2003 à 20:55:12

çà marche parce que les membres prives ne sont pas utilises par le programme mais par les membres publics de la classe.
Les membres publics de la classe sont appelés par le programme.

VictorVVV
VictorVVV
Niveau 6
30 juin 2003 à 20:57:28

Et puis le mot clé friend je l´utilise pour pouvoir utiliser mon operation en fesant :

cout < < operation;

Ce code là je l´ai tiré d´un code d´exemple en le modifiant :

friend ostream& operator<<(ostream& os, operation oper)
{
if ( oper.test())
{
if ( oper.test() == 1)
{
return os < < oper.num_un < < oper.op < < oper.num_de < < " =" < < oper.calcul();
}
else return os < < " erreur";
}
else
{
oper.determinant();
return os < < oper.deter < < " " < < oper.op < < " de " < < oper.num_un < < " = " < < oper.calcul();
}
}

i_am_the_law
i_am_the_law
Niveau 6
30 juin 2003 à 20:59:38

Pour que ton code soit + clair separe la definition de ta classe avec son implementation sinon c illisible...

par ex

class truc
{
protected:
int machin();
void truc1();
int a;
public:
truc();

};

et pour definir les fonctions tu fais

int truc::machin()
{
. ..
}

void truc::truc2()
{
. .
}

truc::truc()
{
. ..
}

comme ca on voit d´une seul coups d´oeil ce qui est dans ta classe, car on s´en moque de la maniere dont apres c´est implementer.

VictorVVV
VictorVVV
Niveau 6
30 juin 2003 à 21:00:33

Ok the Law...

VictorVVV
VictorVVV
Niveau 6
30 juin 2003 à 21:05:58

çà c´est + lisible ?

class operation
{
public :
void setnum_un(float num)
{
num_un = num;
}
void setop(char perateur[100])
{
for ( int i = 0; i<100; i++)
{
op[i] = perateur[i];
}
}
void setnum_de(float num)
{
num_de = num;
}
float calcul ( );
friend ostream& operator<<(ostream& os, operation oper)
{
if ( oper.test())
{
if ( oper.test() == 1)
{
return os < < oper.num_un < < oper.op < < oper.num_de < < " =" < < oper.calcul();
}
else return os < < " erreur";
}
else
{
oper.determinant();
return os < < oper.deter < < " " < < oper.op < < " de " < < oper.num_un < < " = " < < oper.calcul();
}
}
operation(float numun, float numde, char operation2[2])
{
num_un = numun;
num_de = numde;
//op = operation2;
}
operation(float numun, float numde)
{
num_un = numun; num_de = numde;
}
operation(float numun)
{
num_un = numun;
}
int test();
private :
float num_un;
float num_de;
char op[100];
char deter[12];
char determinant()
{
char deter1[12] = " le";
char deter2[12] = " la";
if ( strcmp(op,"cosinus")==0) deter = deter1;
else if ( strcmp(op,"sinus")==0) deter = deter1;
else deter = deter2;
}
};

float operation::calcul()
{
float resultat = 1;
int resultat2 = 1;
int num_un2;
int num_de2;
if ( strcmp(op,"+")==0) resultat = num_un + num_de;
if ( strcmp(op,"-")==0) resultat = num_un - num_de;
if ( strcmp(op,"*")==0) resultat = num_un * num_de;
if ( strcmp(op,"/")==0) resultat = num_un / num_de;
if ( strcmp(op,":")==0) resultat2 = int(num_un / num_de);
if ( strcmp(op,"modulo")==0)
{
//cout < < " test";
num_un2 = int(num_un);
num_de2 = int(num_de);
resultat = num_un2 % num_de2;
}
if ( strcmp(op,">")==0) resultat = ( num_un > num_de);
if ( strcmp(op,"<")==0) resultat = ( num_un < num_de);
if ( strcmp(op,"puissance")==0)
{
//cout < < " test";
num_de2 = int(num_de);
resultat = puissance(num_un, num_de2);
}
if ( strcmp(op,"racine_carre")==0) resultat = racar(num_un, num_de);
if ( strcmp(op,"cosinus")==0) resultat = cos((num_un / 180.0) * M_PI);
if ( strcmp(op,"sinus")==0) resultat = sin((num_un / 180.0 ) * M_PI);
if ( strcmp(op,"tangeante")==0) resultat = tan((num_un / 180.0) * M_PI);
if ( strcmp(op,"cotangeante")==0) resultat = tan(((90 - num_un) / 180.0) * M_PI);
if ( strcmp(op,"pythagore")==0) resultat = racar(num_un*num_un+num_de*num_de,50 ) ;
if ( strcmp(op,"%")==0) resultat = num_un*(100/num_de);
if ( strcmp(op,"==")==0) resultat = ( num_un == num_de);

if ( resultat)
{
return resultat;
}
return float(resultat2);
}
int operation::test()
{
if ( strcmp(op,"+")==0) return 1;
if ( strcmp(op,"-")==0) return 1;
if ( strcmp(op,"*")==0) return 1;
if ( strcmp(op,"/")==0) return 1;
if ( strcmp(op,":")==0) return 1;
if ( strcmp(op,"modulo")==0) return 1;
if ( strcmp(op,">")==0) return 1;
if ( strcmp(op,"<")==0) return 1;
if ( strcmp(op,"puissance")==0) return 1;
if ( strcmp(op,"pythagore")==0) return 1;
if ( strcmp(op,"%")==0) return 1;
if ( strcmp(op,"==")==0) return 1;
if ( strcmp(op,"racine_carre")==0) return 0;
if ( strcmp(op,"cosinus")==0) return 0;
if ( strcmp(op,"sinus")==0) return 0;
if ( strcmp(op,"tangeante")==0) return 0;
if ( strcmp(op,"cotangeante")==0) return 0;
return 2;
}

//int testnombre(char chainombre[])
//{
//int value;
//value = strlen(chainombre);
//int nombre;
//for ( int i = 0;i < value; i++)
//{
//nombre += int(chainombre)*int(puissance(10,(value-i)-1));
//}
//return nombre;
//}

int main(int argc, char *argv[])
{
//char nombre1[12];
//char nombre2[12];
float nombre_un;
float nombre_de;
char peration[100];
while ( 1)
{
cout < < " entrez un nombre : ";
cin > > nombre_un;
cout < < " \nmarquer un operateur : \n+ = +\n- = -\n* = x\n/ = /\n: = / euclidienne\nm = %\n> = > \n< = < \npuissance = puissance\nracine_carre = racine caree\ncosinus = cosinus\nsinus = sinus\ntangeante = tangeante\ncotangeante = cotangeante\npythagore = theoreme de pythagore\n% = pourcentage\n== = ==\nvotre choix : ";
cin > > peration;
//nombre_un = float(testnombre(nombre1));
operation opera(nombre_un);
//operation opera;
opera.setop(peration);
if ( opera.test() == 1)
{
cout < < " entrez un nombre : ";
cin > > nombre_de;
opera.setnum_de(nombre_de);
cout < < opera;
}
else cout < < opera;
cout < < " \n\n\n\n\n";
}
system ( "PAUSE");
return 0;
}

VictorVVV
VictorVVV
Niveau 6
30 juin 2003 à 21:07:20

je l´ai fait pour les fonctions test et calcul car les autres sont courtes et avec la friend ostream je sais pas si on peut le faire

i_am_the_law
i_am_the_law
Niveau 6
30 juin 2003 à 21:07:49

presque : )
faut faire ca pour chaque fonction de ta classe, meme si elle fait une ligne. A moins que ca soit dans un but precis, mais pour le moment essaye de prendre de bonnes habitudes et de pas ecrire de code a l´interieur des fonctions dans tes classes

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