Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Rekomendowane odpowiedzi

Opublikowano

Witam. Zabrałem się dzisiaj za naukę programowania i mam problem w napisaniu kalkulatora bo nie chce mi użyć switch. Daje ++

 

w dev'e wywala: switch quantity not an integer

 

Kod

 

#include <iostream.h>

main()

{

int i;

float pierwsza_liczba, druga_liczba, wynik;

 

 

char dzialanie, znak ;

 

 

do

{

dalej1:

dalej2:

 

cout << "Podaj pierwsza liczbe" << "\n";

cin >> pierwsza_liczba ;

 

switch (pierwsza_liczba)

{

case '0':

cout << "Nie wykonuje z liczba 0";

goto dalej2;

break;

case '1' :

break;

case '2' :

break;

case '3' :

break;

case '4' :

break;

case '5' :

break;

case '6' :

break;

case '7' :

break;

case '8' :

break;

case '9' :

break;

default :

cout << "Nie podales liczby";

goto dalej1;

}

dalej3:

dalej4:

cout << "Podaj druga liczbe" << "\n";

cin >> druga_liczba ;

switch (druga_liczba)

{

case '0':

cout << "Nie wykonuje z liczba 0";

goto dalej3;

break;

case '1' :

break;

case '2' :

break;

case '3' :

break;

case '4' :

break;

case '5' :

break;

case '6' :

break;

case '7' :

break;

case '8' :

break;

case '9' :

break;

default :

cout << "Nie podales liczby";

goto dalej4;

}

 

cout << "Podaj dzialanie +, -, *, / " ;

cin >> dzialanie ;

 

 

 

 

switch (dzialanie)

{

case '+' :

wynik = pierwsza_liczba + druga_liczba ;

cout << "Wynik to:" << wynik ;

break ;

case '-' :

wynik = pierwsza_liczba - druga_liczba ;

cout << "Wynik to:" << wynik ;

break ;

case '*' :

wynik = pierwsza_liczba * druga_liczba ;

cout << "Wynik to:" << wynik ;

break ;

case '/' :

wynik = pierwsza_liczba / druga_liczba ;

cout << "Wynik to:" << wynik ;

break;

default :

 

cout << "Podalas zle dzialanie" << "\n" ;

break ;

 

}

 

cout << "Czy chcesz zakonczyc program ( t/n ) ?" << "\n" ;

cin >> znak ;

}

while( znak != 't');

cout << "Dziekuje";

/*for ( i = 1, i <= 4, i = i + 1);

{

cout << "Program wylaczy sie za :" << i ;

}*/

 

 

}

 

 

 

P.S przy okazji jak użyć żeby tej funkcji for na końcu w komentarzu żeby działało?

 

 

 

 

@edit dzięki masz +

2vuhg8m.jpg

Opublikowano

switch ((int)pierwsza_liczba)

switch ((int)druga_liczba)

 

albo int pierwsza_liczba, druga_liczba, wynik;

 

switch nie będzie działał poprawnie bo porównujesz liczbę do znaku co skutkuje odpaleniem default

poprawiony fragment bez ' przy case bo nie porównujemy znaków tylko do liczb

 

To jest ukryta treść, proszę

 

co do tego for, dodaj

To jest ukryta treść, proszę

Opublikowano

Mam jeszcze jedno pytanie. Jak zapisać w funkcji if żeby odrzucało znaki i 0 zamiast switch'a

 

 

skoro litery mają wartości liczbowe to dałem tak..

 

if(pierwsza_liczba = 0)

 

if(pierwsza_liczba > 9)

 

ale nie działało po wpisaniu 'a' . Jak to zapisać?

2vuhg8m.jpg

Opublikowano

Naucz się nie używać instrukcji goto w tak prostych programach. Strasznie to będzie wyglądać w dużych projektach jak zacznie ją tak często stosować.

Już chyba lepiej wywoływać funkcje i zwrotem return kontrolować jej wykonanie :)

Poczytaj o funkcjach :)

www.gamehacking.pl

sygnaturka.png

Opublikowano

Witam. Mam następny problem a mianowicie nie wiem czemu powtarza mi switch(nWylosowana) skoro niema żadnej pętli. Daje ++ . Z góry dziękuje za pomoc

 

 

#include <string>

#include <iostream.h>

 

 

 

 

 

 

main()

{

int i , g, f;

using std::string;

 

srand ((int) time(NULL));

int nWylosowana = rand() % 4 + 1;

 

char a, b, c, d;

 

string imie;

 

 

cout << "Podaj swoje imie" << endl;

cin >> imie;

cout << "Witam cie " << imie << endl << "Przejdzmy do pytan" << endl << endl;

 

wruc:

cout << imie << " Ulz w kolejnosci miasta pod wzgledem wielkosci od najwiekszego do najmniejszego" << endl;

cout << "a) Krakow" << endl;

cout << "B) Rzeszow" << endl;

cout << "c) Lublin" << endl;

cout << "d) Warszawa" << endl;

cin >> a;

cin >> b;

cin >> c;

cin >> d;

i = d + a - c + b;

 

 

switch(i)

{

case 196:

cout << "Podales poprawne ulozenie" << endl;

break;

default :

cout << "Podales zla kolejnosc sprobuj jeszcze raz";

goto wruc;

}

switch (nWylosowana)

{

case 1:

int r;

char odpowiedz;

 

 

cout << imie << " Które z przedstawionych ptaków jest ptakiem domowym?" << endl;

cout << "a)sikorka" << endl << "b)wrona" << endl << "c)papuga" << endl << "d)flaming" << endl;

cin >> odpowiedz;

 

 

switch(odpowiedz)

{

case 'c':

char znak;

cout << imie << "Podles poprawna odpowiedz" << endl;

break;

default:

cout << "Niestety to nie jest poprawna odpowiedz" << endl << "Poprawna odpowiedz to c)papuga" << endl;

cout << " Zakonczyc gre? n/t ";

cin >> znak;

if(znak != 't')

{

goto zzz;

}

break;

}

 

case 2:

char odpowiedz2;

cout << imie << " Ktore panstwo jest najwieksze?" << endl << "a)Polska" << endl << "b)Wegry" << endl << "c)Niemcy" << endl << "d)Rosja" << endl;

cin >> odpowiedz2;

switch(odpowiedz2)

{

case 'd':

char znak;

cout << "Podles poprawna odpowiedz" << endl;

break;

default:

cout << "Niestety to nie jest poprawna odpowiedz" << endl << "Poprawna odpowiedz to d)Rosja" << endl;

cout << " Zakonczyc gre? n/t ";

cin >> znak;

if(znak != 't')

{

goto zzb;

}

break;

}

 

 

case 3:

char odpowiedz3;

cout << imie << " Ktora z podanych licz jest liczba szesnastkowa?" << endl;

cout << "a)0x100" << endl << "b)10e3" << endl << "c)100" << endl << "d)0100" << endl;

cin >> odpowiedz3;

switch(odpowiedz3)

{

case 'a':

char znak;

cout << "Podles poprawna odpowiedz" << endl;

break;

default:

cout << "Niestety to nie jest poprawna odpowiedz" << endl << "Poprawna odpowiedz to a)0x100" << endl;

cout << " Zakonczyc gre? n/t " << endl;

cin >> znak;

if(znak != 't')

{

goto zzc;

}

break;

}

 

case 4:

char odpowiedz4;

cout << imie << "W ktorym roku byla wojna pod grunwaldem?" << endl;

cout << "a)1658" << endl << "b)1410" << endl << "c)1244" << endl << "d) 1310" << endl;

cin >> odpowiedz4;

 

switch(odpowiedz4)

{

case 'b':

char znak;

cout << "Podles poprawna odpowiedz" << endl;

break;

default:

cout << "Niestety to nie jest poprawna odpowiedz" << endl << "Poprawna odpowiedz to b)1410" << endl;

cout << " Zakonczyc gre? n/t ";

cin >> znak;

while(znak != 't')

{

goto zzd;

}

break;

}

}

zzz:

zzb:

zzc:

zzd:;

 

 

 

}

 

 

2vuhg8m.jpg

Opublikowano

Po pierwsze to miazga w kodzie, napisałem Ci żebyś nie używał instrukcji goto bo jest do "dupy". Robisz etykiety, które są zbędne! W ogóle programując pod windowsem używasz innego kompilatora ja visual studio? Moim zdaniem to tak jak mieć krowę i kupować mleko :).

 

To jest ukryta treść, proszę

Dlaczego instrukcja nie jest zamknięta nie posiada "defaulta"? Czemu wprowadzasz zmienne wewnątrz instrukcji? Przy takich programach stosowanie zmiennych lokalnych jest nie potrzebne, tym bardziej, że gubisz się w instrukcjach. Przeanalizuj kod i dojdziesz czemu tak jest :).

 

Moja rada, jak dużo się uczyć programowania i ćwiczysz to rób Sobie często przerwy :). Jak poczujesz, że jesteś zmęczony tym wszystkim to nie idź na upartego a odpocznij. Czasami problemy same się rozwiążą.

 

Kod dla Visualowców:

 

To jest ukryta treść, proszę

www.gamehacking.pl

sygnaturka.png

Opublikowano
Dlaczego instrukcja nie jest zamknięta nie posiada "defaulta"? Czemu wprowadzasz zmienne wewnątrz instrukcji? Przy takich programach stosowanie zmiennych lokalnych jest nie potrzebne, tym bardziej, że gubisz się w instrukcjach. Przeanalizuj kod i dojdziesz czemu tak jest :)

 

 

Zamknąłem defaultem i nic się nie zmieniło tak jak myślałem bo i tak nie jest on używany a instrukcja bez niego działa. Sledze kod i nie mogę dojść jakim cudem to tak działa. Powinno raczej być [losuje liczbę>liczba wybrana 4> wykonanie instrukcji case 4> zakończenie switch(nWylosowana)>zakończenie programu] a zamiast tego losowo robi pętle

2vuhg8m.jpg

Opublikowano

nie robi losowo pętli, Ty zrobiłeś coś takiego

 

To jest ukryta treść, proszę

 

jak wylosuje 1 to zada wszystkie 4 pytania po kolei, 2 to 3 pytania itd.. bo nie ma break :rolleyes:

 

To jest ukryta treść, proszę

 

switch w switchu i goto to nie są dobre rozwiązania w takich programach, ale uczysz się to dobrze :)

 

przeanalizuj sobie to z breakami i bez

 

To jest ukryta treść, proszę

Opublikowano

Doszedłem do tego sam ale + za pomoc :D

Mam trzy pytanka

-Jak zapisać żeby podczas losowania liczby przy drugiej turze wyrzucało liczbę wylosowaną w wcześniej i tak dalej.... Mniej więcej wiem jak to zrobić prymitywnie dla przedziału 1-4 ale to się z celem bo to ponad 10 kombinacji

-Jak wyjść z zagnieżdżonych pętli/instrukcji bez użycia goto?

-Macie jakieś pomysły na napisanie jakiegoś ciekawego programu, średnio trudnego pozwalające użyć następne poznane funkcje? (przeplatam "Symfonie" z Od zera do..")

2vuhg8m.jpg

Opublikowano

łap kawałek kodu co losuje do skutku i porównuje z poprzednimi losowaniami :)

 

 

 

To jest ukryta treść, proszę

 

 

 

goto sie bardzo rzadko używa, niemal zawsze da się obejść bez niego.

napisz sobie jakąś prostą grę rpg, kasa,hp,level,exp + tłuczenie 'potworów' zdobywanie nowych broni coś takiego :P

Opublikowano
napisz sobie jakąś prostą grę rpg, kasa,hp,level,exp + tłuczenie 'potworów' zdobywanie nowych broni coś takiego

 

Mam rozumieć że chodzi o gre Rpg typu przeglądarkowego np.bitefigth, bloodwars tylko że bez obrazków?! Czy to po prostu ironia i chodzi d3d??

 

Coś mi już świta po głowie jak to zrobić ale zasiądę do tego dopiero po świętach i pochwale się wynikiem. Thx za pomoc +

2vuhg8m.jpg

Opublikowano

Siema. Zrobiłem dzisiaj podstawy tej gry ale mam mały problem. Gdy w grze robię awans na 2lvl pokazuje mi go tylko raz i szybko wskakuje na 3lvl

 

 

 

#include <iostream.h>

int k, r;

signed int hp = 100;

int maxhp1 = 200;

int lvl = 1;

int hpra = 200;

int poziom1 = 1000;

 

signed int exp = 0;

char znak;

 

void klasa()

{

 

 

cout << "Wybierz klase postaci" << endl << endl;

cout << "1 Wojownik |2 Szaman |3 Ninja" << endl << endl;

cin >> ::k;

switch(k)

{

case 1:

cout << "-------------------------------------------------------------------" << endl;

cout << " Wybrales klase wojownik. Wojownik to kupa opancerzonego miesa ktorego inteligencja jest odwrotnie proporcjonalna do jego sily. Macha swoim stu kilogramowym mieczem niczym pudzian trzepiacy dywan. Odziwo potrafi takrze nosic tarcze razem z dwureczna bronia" << endl << endl << endl << endl;

break;

case 2:

cout << "-------------------------------------------------------------------" << endl;

cout << "Wybrales klase szaman. Jest to klasa ktora uzywa czarow i wachlarza. Dzieki swoim klontwom wspomagajacym potrafi czasem lepiej przypiergolic ze swojego wachlarza niz wojownik. Klasa posiada 50% na obrazenia krytyczne" << endl << endl << endl << endl;

break;

case 3:

cout << "-------------------------------------------------------------------" << endl;

cout << "Wybrałes klase ninja. Ninja to klasa ktora nawet sprawnie macha swoimi scyzorykami. Legenda glosi że był kiedys emo i wyczwiczyl sie machajac zyletkami. Klasa ta posiada 10% od obrazen przeszywajacych gdy potwory zobaczą jego scyzoryki z otwieraczem do piwa i korkociagiem klada sie ze smiechu na ziemie co postac latwo to wykorzystuje" << endl << endl << endl << endl;

break;

default:

cout << "-------------------------------------------------------------------" << endl;

cout << "Wybrales unikatowa klase NooB. Jest to klasa która nie uzywa broni lecz dziala psychicznie na swoich wrogow. Jego glowne skile to zal.pl,ale urwal, daj 200k plx. Klasa ta posiada 100% przeszycie gdyz po tych skilach potwory baranieja i popelniaja samobojstwa. Jego zdobywane doswiadczenie jest obnizone o 50%" << endl << endl << endl << endl;

break;

}

}

void odpoczynek()

{

if(::hp < ::hpra)

{

cout << "Odpoczywasz 24h w swoim zajebistym domu z pudelka tekturowego pod mostem" << endl << "Powraca ci +10HP" << endl;

::hp = ::hp + 10;

}

else if(::hp = ::hpra)

{

cout << "Twoje HP jest pelne" << endl;

}

}

void rip()

{

do

{

cout << endl << "Niestety zdechles" << endl;

cin >> ::r;

}

while(1);

 

 

}

void expienie()

{

 

srand ((int) time(NULL));

int potwor = rand() % 5 + 1;

switch(potwor)

{

case 1:

cout << " Trafiles na wcieklego psa twojego sasiada rasy pitbull. Poniosles spore straty zycia ale ubiles go. Exp +60 Hp -30" << endl << endl;

::exp = ::exp + 60;

if(::exp >= 1000)

{

::poziom1 = ::poziom1 + 1000;

::maxhp1 = ::maxhp1 + 50;

::lvl = ::lvl + 1;

::hpra = ::hpra + 50;

}

::hp = ::hp - 30;

if(::hp < 1)

{

rip();

}

 

 

break;

case 2:

cout << " Trafiles na okrutnego duzego pajaka za twoja szafa. Pokonales go bez problemy lecz pajak odgryzl ci pisiora. Exp+20 Hp-5" << endl << endl;

::exp = ::exp + 20;

if(::exp >= ::poziom1)

{

::poziom1 = ::poziom1 + 1000;

::hp = ::hp + 50;

::lvl = ::lvl + 1;

::hpra = ::hpra + 50;

}

::hp = ::hp - 10;

if(::hp < 1)

{

rip();

}

 

 

break;

case 3:

cout << " Trafiles na dzikusa w twoim lesie. Gdy podszedles do niego zaczol ci pierdolic o bezliku rozmow w SIMPLUSIE ale zanim skonczyl ubiles go bez problemu. Exp +30 Hp -0" << endl << endl;

::exp = ::exp + 30;

if(::exp >= ::poziom1)

{

::poziom1 = ::poziom1 + 1000;

::hp = ::hp + 50;

::lvl = ::lvl + 1;

::hpra = ::hpra + 50;

}

 

 

if(::hp < 1)

{

rip();

}

break;

case 4:

cout << "Trafiles na polnego zajaca wpierdlajacego marchewke. Lecz zanim udalo ci sie go zajsc on spierdolil. Exp za porazke -20 Hp -0" << endl << endl;

if(::exp >= 20)

{

::exp = ::exp - 20;

}

if(::exp >= ::poziom1)

{

::poziom1 = ::poziom1 + 1000;

::hp = ::hp + 50;

::lvl = ::lvl + 1;

::hpra = ::hpra + 50;

}

if(::hp < 1)

{

rip();

}

break;

case 5:

cout << " Trafiles na jjjebuccckiego wilka. Niestety nawet twoja mnisia zbroja z zakonu shao-lin nie ochronila cie przed jego atakami wiec musiales uciekac. Exp za porazke -20 Hp -50" << endl << endl;

if(::exp >= 20)

{

::exp = ::exp -20;

}

 

if(::exp >= ::poziom1)

{

::poziom1 = ::poziom1 + 1000;

::hp = ::hp + 50;

::lvl = ::lvl + 1;

::hpra = ::hpra + 50;

}

::hp = ::hp - 50;

if(::hp < 1)

{

rip();

}

break;

default:

break;

}

}

 

main()

{

int t, wybor;

 

 

 

cout << " Gra Action Fanatsy Rpg " << endl;

cout << " Metin 3/4 : Return to shadow podworko " << endl;

cout << "-----------------------------------------------------------------------" << endl;

klasa();

 

if(::k == 1)

{

do

{

cout << "-------------------------------------------------------------------" << endl;

cout << " Panel:Wojownik" << endl;

cout << "hp " << ::hp << "/" << ::maxhp1 << " lvl " << ::lvl << " exp " << ::exp << "/" << ::poziom1 << endl << endl << endl;

cout << "1 Idz expic" << endl;

cout << "2 Odpoczywaj" << endl;

cout << "4 Wyjscie" << endl;

cin >> wybor;

switch(wybor)

{

case 1:

expienie();

break;

case 2:

 

odpoczynek();

break;

case 4:

goto wyjscie;

default:

break;

 

}

}

while(1) ;

}

 

else if(::k == 2)

{

do

{

cout << "-------------------------------------------------------------------" << endl;

cout << " Panel:Szaman" << endl;

cout << "hp " << ::hp << " lvl " << ::lvl << " exp " << ::exp << "/" << ::poziom1 << endl << endl << endl;

cout << "1 Idz expic" << endl;

cout << "2 Odpoczywaj" << endl;

cout << "4 Wyjscie" << endl;

cin >> wybor;

switch(wybor)

{

case 1:

expienie();

break;

case 2:

odpoczynek();

break;

case 4:

goto wyjscie1;

default:

break;

}

}

while(1);

}

else if(::k == 3)

{

do

{

cout << "-------------------------------------------------------------------" << endl;

cout << " Panel:Ninja" << endl;

cout << "hp " << ::hp << " lvl " << ::lvl << " exp " << ::exp << "/" << ::poziom1 << endl << endl << endl;

cout << "1 Idz expic" << endl;

cout << "2 Odpoczywaj" << endl;

cout << "4 Wyjscie" << endl;

cin >> wybor;

switch(wybor)

{

case 1:

expienie();

case 2:

odpoczynek();

break;

case 4:

goto wyjscie2;

}

}

while(1);

 

 

}

wyjscie:

wyjscie2:

wyjscie1:

cout << "Dziekuje zagranie w moja gre" << endl;

cout << "wcisnij dowolny klawisz i nacisnij enter aby zakonczyc...." << endl;

cin >> t;

 

}

 

 

 

 

2vuhg8m.jpg

Opublikowano

ciężko sie w tym połapać.. strasznie dużo przewijania, spróbuj zrobić najpierw jedną klasę postaci a potem dodać nowe, możesz to rozpisać na kilka plików, te :: są wszędzie zbędne, służą do czegoś innego :P w switchu ninjy nie ma break po case 1 ;< taki pierwszy rzut oka :rolleyes:

 

bezlik rozmow w SIMPLUSIE xD n1

Opublikowano

Już mam

w case 1 zamiast

To jest ukryta treść, proszę

było

To jest ukryta treść, proszę

 

 

 

 

 

 

 

 

 

 

 

@edit

 

Zabieram się za pisanie od nowa bo chcąc wprowadzić def, obrażenia (zwykłe krytyczne przeszywające), itemki, kase, + jakieś obrazki w ascii było by za dużo przerabiania

 

- Jak zrobić pokazywanie tekstu na nowej stronie bo '/f' mi nie działa ??(pokazuje się znaczek egipski ankh)

2vuhg8m.jpg

Opublikowano

Jak zrobić w pętli żeby if raz dodało wartość mimo pętli na przykładzie.?

 

do

{

i = i + 1;

if(i >= 5)

{

i = i + 5;

}

}

while(1)

 

Jak zrobić pokazywanie tekstu na nowej stronie bo '/f' mi nie działa ??(pokazuje się znaczek egipski ankh)?

Oczywiście lecą ++ i sorry za spam

2vuhg8m.jpg

Opublikowano

Nie zrozumiałeś tego o co mi chodziło. Z tej pętli

 

To jest ukryta treść, proszę

 

załóżmy że " i " będzie levelem i będzie się zmieniał tak średnio co 10 pętli czyli if bedzie dodawało +5 10 razy. Trzeba mi coś co po zobatrzeniu lvl odblokowyje kolejny zakres losowania liczb i następnym lvl tak dalej i dalej.... A z tym kodem powyżej po każdej przejsciu pętli dodaje zakres mimo że lvl się nie zmienia. Dałbym kod ale zacząłem od dupy strony więc jest nie czytelny

2vuhg8m.jpg

×
×
  • Dodaj nową pozycję...