C++! Lehet ezt könnyebben, egyszerűbben megoldani?
Sziasztok .. az alábbi programot szeretném ha megnéznétek ..Most kezdtem el C++ tanulni (előfordulhatnak benne ezért elvi hibák ) Azt szeretném megtudni .. hogy szerintetek jól csináltam -e vagy van mit rajt változtatni ?
// program 21-ezés
#include<iostream>
using namespace std ;
int dontes(int) ;
int main()
{
int a = 5 , b =7 ,elsolap,masodiklap,harmadiklap,osszeg ;
cout<< "Kapott lapok :"<< a << " , " << b << "\n";
cout << "Milyen lapot ker ? 1 kor !\n" ;
cin>> elsolap ;
dontes(elsolap) ;
cin>> masodiklap;
dontes (masodiklap);
cin>> harmadiklap ;
dontes(harmadiklap);
osszeg = a+b+elsolap+masodiklap+harmadiklap;
cout << osszeg ;
if (osszeg >21)
cout << "You Lose\n";
else
cout <<"You Won"<<osszeg<<endl;
cin>> osszeg ;
return 0;
}
int dontes(int x )
{
if ((x ==2) || (x==3)|| (x==4)|| (x==7)|| (x==8)|| (x==9)|| (x==10)|| (x==11))
cout<< "a kert lap :" << x << "\n";
else
cout << "ilyen lap nincsen:";
return (x) ;
}
Első ránézésre az a baj hogy hiába döntöd el a lapról hogy jó-e, mindenképp azzal fog számolni a program. (tehát a "dontes" fv-nek nincs semmi értelme)
ajánlott javítás:
//a beolvasások így nézzenek ki
do
{
cin >> elsolap;
}while (!dontes(elsolap));
//és a döntés fv
bool dontes(int x )
{
if ((x ==2) || (x==3)|| (x==4)|| (x==7)|| (x==8)|| (x==9)|| (x==10)|| (x==11))
return true;
else
{
cout << "ilyen lap nincsen:";
return false ;
}
}
Így minden lapot addig kér be újra míg jó értéket nem kap
egyébként nem tudom az 5-ös és 6-os lapok mért maradtak ki, de ha csak véletlenül, akkor az if feltétele lehetne rövidebb igy:
if ((x >= 2) && (x <= 11))
{
//helyes lap
}
else
{
//hibás lap
}
Annyit szeretnék hozzátenni,hogy ha egy konkrét változó különböző értékekre vonatkozó eseteit szeretnéd kezelni,akkor a gyakorlatban az ún. switch - case szerkezetet használják.
A te esetedben pl:
if ((x ==2) || (x==3)|| (x==4)|| (x==7)|| (x==8)|| (x==9)|| (x==10)|| (x==11)) helyett, ezt is írhatod:
switch(x){
case 2:
//csinálj valamit ebben az esetben
break;
case 3:
//csinálj valamit ebben az esetben
break;
case 4:
//csinálj valamit ebben az esetben
break;
//...
default:
//ha egyik eset sem teljesül,akkor az ide írt kód teljesül
//esetedben az else ág
}
Látom jobban jártas vagy a témában ... szóval lenne még egy kérdésem ... Az alábbi programmal mi a gond ??? a Százalék megadása után hibaüzenetet hoz fel ..
//Feladat: 1. Akció: Egy üzlet nyár végi szezonkiárusítás keretében minden termékére akciót hirdet meg.
// program kérje be egy adott termék eredeti árát, a leárazás mértékét százalékban, és ezek alapján
//határozza meg az akciós árat. Ha az akció 50%-nál nagyobb mértékű volt, akkor közölje a
//felhasználóval, hogy megéri az árut megvenni, ellenkezo esetben nem.
# include<iostream>
using namespace std;
int main()
{
unsigned long int eredeti , learazas , termek ;
cout<< "Ird be az eredeti arat !\n" ;
cin >> eredeti ;
cout <<"Ird be a learazas merteket szazalakban !\n";
cin >> learazas ;
termek=termek-(eredeti*(learazas/100)) ;
cout << "A learazott ara : "<<termek << endl ;
if (learazas >50)
cout <<"Megeri megvenni\n" ;
else
cout<<"Nem eri meg megvenni" ;
cin>> termek ;
}
Esetleg azt is megírhatnád mi az a hibaüzenet. (egyébként nekem hibaüzenet nélkül lefutott)
De ami biztos nem stimmel az ahogy a termek változónak értket adsz. Szerintem inkább így akartad:
termek = eredeti - (eredeti * (learazas / 100.0));
Egyébként a (learazas / 100) mindíg 0 lesz, mert ha egészet osztasz egésszel annak egész lesz a végeredménye. (Azért írtam át a 100-at 100.0-ra)
Ez egy programkód részlet .. maga a szorzás .. jól működik .. stb .. e az if es feltételsor . valamiért nem jó .. Futtatás után mindig csak a második változót mutatja igaznak ...
#include<iostream>
using namespace std;
int main()
{
int szorzo, szam , osszeg=0 , novekvo=0 , ujabbosszeg=0;
cout<< "Ird be a szorzot!\n";
cin>> szorzo;
cout<< "Ird be a szamot!\n";
cin>> szam;
while(szorzo>0)
{
osszeg+=szam;
szorzo--;
}
cout<< osszeg<< endl ;
if (szam == szorzo)
cout<<"A ket szam egyenlo!\n";
if (szam > szorzo)
cout<<" Nagyobb a(z) "<<szam<<"\n";
if (szorzo > szam)
cout<<" Nagyobb a(z) "<< szorzo<<"\n";
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!