Online: 1 użytkownik(ów), 17 gość(ie)
  Nie jesteś zalogowany     UŻYTKOWNICY     PROFIL     OPD     PRYWATNE WIADOMOŚCI     LOGUJ    
Newsy
Nagłówki
Archiwum
Grupa Steam
Shoutbox Wywiady
Tutoriale
Forum / regulamin
Szukaj
Linki
Serwery Mapy
Programy
Zasoby
VERC Collective

source SDK

Strona dla początkujących mapperów zawierająca kurs i porady dotyczące tworzenia map do Counter Strike'a

grinder74.com - Polska Baza Map i Modów SP dla HL1 & HL2

AHA - Andrzej Hrycyk - Polskie mapy do Counter Strike

D.I.P.R.I.P.

 Wejdz na strone The BORG Collective

MAPOSFERA.ORG

NATURAL-SELECTION.PL

CSNation.pl

kzpl.kampno.pl

Bannerek serwisu beta

Forum > Programming/Modding > C++ - IF mały problem.
 
> 1 <
Autor Wiadomość
rdnx1950gt
[10] Użytkownik
Coś tam już napisał ...
      3891930
Dołączył: 03 Stycznia 2009
Miasto: Lublin
Zawód: Uczeń
Wiek: 22
 Środa, 11 Lut 09r, godz. 14:39     #23221   
Witam, ostanio sciągnołem niejakiego ebooka ,,Od zera do gier kodera!".

I jest tam ćwiczenie, aby wykonać program, który prosi użytkownika o wpisanie liczby całkowitej, i przyporządkowanie go do 4 grup którymi są : ujemne, 1cyfrowe, 2cyfrowe i inne.

Do dyspozycji mamy 2 instrukcje - if, i switch.

Zacząłem robić z if, bo w switch "JA" myślę że jest niewykonalne i ogólnie mija się z celem.

Kod:
Stwórz program, który poprosi użytkownika o liczbę całkowitą i przyporządkuje ją
do jednego z czterech przedziałów: liczb ujemnych, jednocyfrowych,
dwucyfrowych lub pozostałych.
Która z instrukcji &#8211; if czy switch &#8211; będzie tu odpowiednia?


I teraz tak.

Oto kawałek mojego kodu:
Kod:
int main(){
int Liczba1;
cout << "Podaj liczbe calkowita ";
cin >> Liczba1;

int Grupy;
if(Liczba1 == 0)
cout << "Podana liczba jest liczba ujemna.";

if(Liczba1 < 0)
cout << "Podana liczba jest liczba ujemna.";

if(Liczba1 < 1 > 10)
cout << "Podana liczba jest liczba jednocyfrowa.";

if(Liczba1 == 10 - 99)
cout << "Podana liczba jest liczba dwucyfrowa.";

else {
cout << "Podana liczba niema grupy.";


I np. gdzie if(Liczba1 == 10 - 99) wiem że jest źle, ale zrobić przedział między liczbami ? Czy trzeba pisać tyle raz if i (Liczba1 == 1) i tak każdą cyfrę ? Jeśli tak to się załamię... weźcie zaradźcie plz
Post edytowany: 1 razy, ostatnio Środa, 11 Lut 09r, godz. 14:40 przez rdnx1950gt (--- temu)
LOBO
[40] Redaktor
Administracja
     
Dołączył: 27 Lutego 2004
Miasto: Wrocław
Zawód: nijaki
Wiek: 32
 Środa, 11 Lut 09r, godz. 15:25     #23227   
pierwszy i drugi warunek mozesz zastapic przez:
Kod:
if(Liczba1 <= 0)
cout << "Podana liczba jest liczba ujemna.";


nie mozesz napisac tak: 'Liczba1 < 1 > 10' bo parser porozstawia nawiasy po swojemu i wyjdzie: Kod:
((Liczba1 < 1) > 10)
czyli 'czy liczba1 jest mniejsza niz 1', czego wynikiem bedzie 0 lub 1 i to wlasnie 0 lub 1 bedzie porownane z 10 czyli ten warunek zawsze bedzie falszywy. Musisz napisac tak:
Kod:
if(Liczba1 >= 1 && Liczba1 < 10)
cout << "Podana liczba jest liczba jednocyfrowa.";

&& oznacza logiczne AND

w ostatnim 'Liczba1 == 10 - 99' wychodzi 'czy Liczba1 rowna sie (10-99)', czyli 'czy Liczba1 rowna sie -89', musisz to zastąpic:
Kod:
if(Liczba1 >= 10 && Liczba1 <= 99)
cout << "Podana liczba jest liczba dwucyfrowa.";

Kod:
no i brakuje ci jeszcze
if(Liczba1 >= 100)
cout << "Pozostałe";


Ogolnie to polecam troche poczytac o operatorach logicznych i algebrze Boole'a
rdnx1950gt
[10] Użytkownik
Coś tam już napisał ...
      3891930
Dołączył: 03 Stycznia 2009
Miasto: Lublin
Zawód: Uczeń
Wiek: 22
 Środa, 11 Lut 09r, godz. 15:34     #23230   
Dzięęęęki wielkie, chodziło mi o to &&, bo używałem minusa jako przedział koffam :*
Będe się pewnie jeszcze zwracać z pomocą dzieki
utworzkonto
[10] Użytkownik
Będzie źle jak nic nie powie
      4696966
Dołączył: 03 Grudnia 2007
Zawód: miłosny :P
Wiek: 25
 Środa, 11 Lut 09r, godz. 18:50     #23238   
Może problem rozwiązany, ale jeszcze chciałbym powiedzieć, jak bym ja to zrobił

Kod:
#include <iostream>

int main()
{
using std::cout;
using std::cin;
using std::endl;

cout << "Podaj liczbe calkowita: ";
int liczba;
cin >> liczba;
cout << endl;

if (liczba < 0)
cout << "Liczba ujemna";

else if (liczba == 0)
cout << "Podana liczba to 0";

/* "else if" mozna tlumaczyc jako "w przeciwnym wypadku, jezeli..."
taka konstrukcja jest bezpieczniejsza niz stosowanie 'pojedynczych' if'ow */

else if ((liczba >= 1) && (liczba <=9))
cout << "Podales\as cyfre";

else if ((liczba >=10) && (liczba <= 99))
cout << "Podales\as dwucyfrowa liczbe";

else
cout << "Pozostale";

return 0;

}


PS. Wiem, że wiele osób zachwyca się tym tutorialem, ale szczerze mówiąc pomija on niektóre ważne kwestie. Jeśli naprawdę chcesz się pożądnie nauczyć podstaw kolosa jakim jest C++ to polecam Ci tę pozycję:
http://helion.pl/ksiazki/cpprim.htm
Nie należy ona do najtańszych, ale IMO doskonale uczy podstaw
Są rzeczy, których łomem rozwalić nie można, wszystkie inne rozwalisz gravity gun'em.

KBAT (Kompiluj BATem) v 2.0 beta 1 >>DOWNLOAD
LOBO
[40] Redaktor
Administracja
     
Dołączył: 27 Lutego 2004
Miasto: Wrocław
Zawód: nijaki
Wiek: 32
 Środa, 11 Lut 09r, godz. 20:56     #23245   
co prawda nie wiem jak C++ ale do ANSI C Prata napisal dobra ksiazke, za to proponuje trzymac sie z daleka od Grębosza i symfoni c++, nie wiem czym ludzie tak ekscytuja, autor momentami sie zachowuje jak by chcial powiesci pisac a nie ksiazke do nauki jezyka

w tym przypadku akurat konstrkucja else if nic nie zmienia bo warunki sie nawzajem wykluczaja ale rzeczywiscie niektorzy stosuja ten styl. kwestia przyzwyczajenia. za to za brak wciec powinienes spedzic noc w karcerze przydaje sie tez stosowanie klamr {} nawet jak instrukcje sa pojedyncze. to ulatwia prace srodowiskom ktore wspieraja sprzatanie kodu, bardzo fajna funkcja

btw wiesz ze zamiast
using std::cout;
using std::cin;
using std::endl;
wystarczy using namespace std; ? :>
utworzkonto
[10] Użytkownik
Będzie źle jak nic nie powie
      4696966
Dołączył: 03 Grudnia 2007
Zawód: miłosny :P
Wiek: 25
 Środa, 11 Lut 09r, godz. 21:18     #23246   
Tę książkę co poleciłem to mam w domu i IMO jest bdb.
Wiem, że konstrukcja else if w tym przypadku nic nie zmienia, ale lepiej uczyć się dobrej praktyki od razu
A brak wcięć jest spowodowany, tym, że jak wciskam TAB to mi się "Odpowiedz" zaznacza a ze spacjami to już mi się bawić nie chciało
Co do {} to mam takie przyzwyczajenie, że jak jest pojedyncza instrukcja to ich nie piszę, ale zgadza się, ułatwia to co nie co.
I wreszcie wiem, że można stosować "using namespace std" (ba, wiem, że można stosować to przed funkcją main() i każdą inną ), ale nie chciałem używać wszystkich obiektów z przestrzeni nazw std
Są rzeczy, których łomem rozwalić nie można, wszystkie inne rozwalisz gravity gun'em.

KBAT (Kompiluj BATem) v 2.0 beta 1 >>DOWNLOAD
Post edytowany: 3 razy, ostatnio Środa, 11 Lut 09r, godz. 21:43 przez utworzkonto (--- temu)
Dexter
[35] Moderator
Ja wiem najlepiej !
      2891092
Dołączył: 12 Kwietnia 2007
Miasto: Wałcz
Zawód: Hl1,Hl2 C++ Coder
Wiek: 22
 Czwartek, 12 Lut 09r, godz. 08:20     #23250   
Już żeby nie zakładać nowego tematu to zapytam tutaj bo nie rozumiem jednego. Kłopotów nigdy nie miałem z instrukcją warunkową if ale nie czaje oco chodzi z tym else if bo samo else to jest w przeciwnym wypadku gdy w if warunek się nie spełni. No to o co chodzi z tym else if ???? Wprzeciwnym wypadku jeżeli?
navarioN
[40] Redaktor
Administracja
      7920444
Dołączył: 20 Kwietnia 2008
Miasto: Tarnobrzeg
Zawód: Uczeń
 Czwartek, 12 Lut 09r, godz. 11:00     #23252   
Na przykład:

if($username = "Heniek" {
echo "Wypad";
} elseif($username = "Maniek" {
echo "Ty też wypad";
} else {
echo "Droga wolna ";
}

To jest takie niby php, ale mało pamiętam więc są błędy
W każdym razie widać strukture.
Pierwszy warunek zapisujesz w if, następne w elseif, dopiero jeśli wyczerpią się wszystkie przykłady to dajesz else (bez warunku)
Morgan: no to mozesz sie pochwalic znajomym ze wyedukowałeś jednego typka w 10 sec
Orkan
[50] Admin
Administracja
     
Dołączył: 03 Marca 2004
Miasto: Gdańsk
Zawód: Cieśla, hehe
 Czwartek, 12 Lut 09r, godz. 11:35     #23253   
Dexter: tu chodzi o przyspieszenie wykonywania kodu. Jezeli uzywasz else lub else if i któryś z wczesniejszych warunkow zostal spelniony to pozostale warunki sa juz pomijane. Bez else kazdy po kolei bylby sprawdzany jak leci. Nie ma problemu przy prostych warunkach ale np.
if(Liczba1 > SkomplikowaneOperacje()) bedzie niepotrzebnie spowalnial kod.

utworzkonto:
a co powiesz na takie cos (bez klamer)
Kod:
if(Liczba1 < 0)
cout << "Podana liczba jest liczba ujemna.";

if(Liczba1 > 0)
cout << "Podana liczba jest dodatnia.";

else
cout << "Totalne nic";


Pytanie: do ktorego if nalezy koncowe else?
utworzkonto
[10] Użytkownik
Będzie źle jak nic nie powie
      4696966
Dołączył: 03 Grudnia 2007
Zawód: miłosny :P
Wiek: 25
 Czwartek, 12 Lut 09r, godz. 14:13     #23265   
Końcowe else należy do drugiego if'a.

Jest to doskonały przykład wymagający stosowania else .. if.
Załóżmy, że użytkownik podaje liczbę dodatnią. Program sprawdza pierwszy warunek (Liczba1 < 0) i nie wyświetla komunikatu. Sprawdzany jest drugi if. Warunek jest spełniony, czyli mamy komunikat "Podana liczba jest dodatnia.". Else jest pomijane z wiadomych przyczyn

Teraz zakładamy, że mamy liczbę 0. Pierwszy warunek nie jest spełniony, więdz program "idzie" dalej. Drugi też nie jest spełniony, więc program wykonuje instrukcje z else. I mam komunikat "Totalne nic".

Zobaczmy co się stanie jak podamy liczbę ujemną. Sprawdzany jest pierwszy warunek, który jest spełniony. Więc mamy komunikat "Podana liczba jest liczba ujemna.". Program sprawdza teraz drugiego if'a. Oczywiście warunek nie jest spełniony, więc efekt jest taki, że wykonywane są teraz instrukcję z else i dostajemy komunikat "Totalne nic". Czyli ostatecznie mamy coś takiego: "Podana liczba jest liczba ujemna.Totalne nic", czyli coś jest nie tak

Teraz zobaczmy co się stanie jak zastosujemy else if. Więc mamy coś takiego:

Kod:
if(Liczba1 < 0)
cout << "Podana liczba jest liczba ujemna.";

else if(Liczba1 > 0)
cout << "Podana liczba jest dodatnia.";

else
cout << "Totalne nic";


Zakładamy, że Liczba1 == 1. Czyli program sprawdza pierwszy warunek (oczywiście nieprawda) więc program "przechodzi" do bloku else, w którym to znowu jest blok if. Warunek jest prawdziwy, więc mamy komunikat "Podana liczba jest dodatnia." i koniec programu.

Teraz niech Liczba1 == 0. Pierwszy warunek jest fałszywy, więc mamy blok else, w któwym to jest if. Ten warunek również nie jest spełniony, więc instrukcje są wykonywane z ostatniego bloku else (czyli komunikat "Totalne nic" ).

Teraz niech Liczba1 == -1. Sprawdzany jest pierwszy warunek, który jest prawdziwy, więc dostajemy komunikat "Podana liczba jest liczba ujemna." i pominięcie bloku else, w którym to jest kolejny if i else

W tym przypadku jest już wszystko OK

Ogólnie chodzi o to, że jak mamy:

Kod:
if (warunek)
{
...
}
else if (inny warunek)
{
...
}
else
{
...
}


to pierwsze else jest tak naprawdę odniesieniem do pierwszego if'a. A ponieważ w tym else mamy znowu if, to program przechodzi do kolejnego sprawdzania warunków. I znowu jeżeli ten if jest fałszywy to przechodzi do kolejnego else, w którym to znowu może być użyty if .. else. I tak cały czas.


Mam nadzieję, że jasno to wytłumaczyłem

PS. Sorry za wprowadzone zamieszanie
Są rzeczy, których łomem rozwalić nie można, wszystkie inne rozwalisz gravity gun'em.

KBAT (Kompiluj BATem) v 2.0 beta 1 >>DOWNLOAD
Post edytowany: 3 razy, ostatnio Czwartek, 12 Lut 09r, godz. 14:24 przez utworzkonto (--- temu)
> 1 <
 
Tylko zarejestrowani użytkownicy mogą brać udział w dyskusji
 
Powered by LDU 604 Czas generowania strony: 0.149 sek
SQL : 0.003 sek - zapytań: 36 - średnio: 9.0E-5 sek
Top