Promocja językowa LINGO

Lekcja 22

Wszystkie informacje związane z Kurs C++ - POZIOM 3

Moderator: Moderatorzy

Postprzez mnabialek Śr lis 01, 2006 15:52 pm

Da się to zrobić na 2 sposoby:

1) Deklarujemy rozmiar tablicy jako większy od tego, który się spodziewamy, np. 100, a później jeśli ktoś pisze większą ilość osób, to wypisujemy, że można wpisać max 100.
2) Za pomocą wskaźników dynamicznie przydzielamy pamięć po podaniu rozmiaru.
Promocja na abonament w serwisie - kup lub poleć innym - szczegóły na Abonament w serwisie
Avatar użytkownika
mnabialek
Administrator
Administrator
 
Posty: 657
Dołączył(a): Śr paź 25, 2006 14:05 pm
Lokalizacja: Częstochowa

Re: Lekcja 22

Postprzez Joe N gru 30, 2007 14:20 pm

Ja mam problem ze zrozumieniem do końca pierwszego przykładu z tej lekcji. Wszystko jest dobrze do momentu gdzie zaczyna się wyścig czyli pętle do while. W tej zagnieżdżonej pętli jest zawsze uszkadzanie jedno koło? Bo wiem, że ta pętla wykonuje się co najmniej raz do momentu aż warunek nie będzie prawdziwy więc wiedząc, że na początku wszystkie koła są true to wtedy zostaje wykonana tylko raz i czy ta wartość false jest przypisana do tego koła? no i kolejny problem to to, że na początku jest losowane koło od 0 do 3. A jeśli zostanie wylowowane powiedzmy kolo nr 1 to potem w zmiennej szczęście moze być wylosowane znowu kolo nr. 1? No i końcowy warunek. Jest tam informacja, że uszkodzone koła muszą być < 2. Ale to wygląda dla mnie tak jakby maksymalnie 3 koła mogły być uszkodzone. Czy ktoś mógłby mi wyjaśnić tą cześć wyściugu. Bo sie troche pogubiłem i nie wiem co mam z tym zrobić!

Pozdrawiam i prosze o pomoc,
Joe
Joe
obserwator
obserwator
 
Posty: 19
Dołączył(a): Śr gru 12, 2007 14:16 pm

Re: Lekcja 22

Postprzez menajev Pn gru 31, 2007 11:15 am

Joe napisał(a):W tej zagnieżdżonej pętli jest zawsze uszkadzanie jedno koło?

Jedno albo żadne, zależy jakie wylosuje się szczęście.

A jeśli zostanie wylowowane powiedzmy kolo nr 1 to potem w zmiennej szczęście moze być wylosowane znowu kolo nr. 1?


W zmiennej szczęście nie losujesz koło, tylko co się stanie z kołem już wylosowanym.

Jest tam informacja, że uszkodzone koła muszą być < 2. Ale to wygląda dla mnie tak jakby maksymalnie 3 koła mogły być uszkodzone.

Kod: Zaznacz cały
wyscigowka.niesprawne<2
przyjmuje wartość true jeśli niesprawne wynosi 1 lub 0, więc maksymalnie jedno koło może być uszkodzone.
Ateisten- barbarien,
4c756269652077737a7973746b6f2c20636f20706c75737a6f7765206920706163686e69652070726f737a6b69656d20646f207072616e69612e
menajev
początkujący
początkujący
 
Posty: 106
Dołączył(a): Pt sie 31, 2007 22:19 pm

Re: Lekcja 22

Postprzez Joe Śr sty 02, 2008 13:19 pm

Dzięki za pomoc teraz już rozumiem! :)
Poprostu chodzi o to, że ta pęta zagnieżdżona wykonuje się tylko 1 raz i mamy jakiś numer koła wylosowany i to czy będzie uszkodzone to koło czy nie zależy od wylosowanego szczęścia. Jeśli koła nie są uszkodzone to pętla powtarza sie tak długo(ta zewnętrzna) póki będą te dwa koła rozwalone tak? :)
Joe
obserwator
obserwator
 
Posty: 19
Dołączył(a): Śr gru 12, 2007 14:16 pm

Re: Lekcja 22

Postprzez menajev Śr sty 02, 2008 16:45 pm

Dokładnie tak.
Następnym razem używaj przecinków, będzie łatwiej zdanie zrozumieć.
Ateisten- barbarien,
4c756269652077737a7973746b6f2c20636f20706c75737a6f7765206920706163686e69652070726f737a6b69656d20646f207072616e69612e
menajev
początkujący
początkujący
 
Posty: 106
Dołączył(a): Pt sie 31, 2007 22:19 pm

Re: Lekcja 22

Postprzez Joe Śr sty 02, 2008 22:13 pm

Ok, sory bo tamto zdanie w pośpiechu pisałem. Jeszcze raz dzięki!
Joe
obserwator
obserwator
 
Posty: 19
Dołączył(a): Śr gru 12, 2007 14:16 pm

Re: Lekcja 22

Postprzez Ajdija N mar 02, 2008 22:19 pm

Otóż według zaleceń, postanowiłem ćwiczyć umiejętności po każdej lekcji.
Wykonałem taki program:
download: http://www.zabawaphp.yoyo.pl/wojna.exe
or
Kod: Zaznacz cały
#include <iostream>
#include <string>

using namespace std;


int main()
{
      unsigned int liczbarund=0;
     const int ileMax=5;
     
     struct Bohater
     {
            string imie;
            int punktyzycia;
            int dmg;
            int gold;
            };
Bohater wojownik[ileMax];
unsigned long int ile; // ilosc wojownikow;


cout <<"Podaj ile Bohaterow ma walczyc: ";
cin >>ile;
cin.ignore();           
if (ile>ileMax)
{
   cout <<"Niestety podana liczba jest za duza. Maksymalna ilosc Bohaterow to "<<ileMax<<'\n';
   cout <<"Nacisnij ENTER aby zakonczyc...\n";
   getchar();
   return 0;
}
if (2>ile)
{
   cout <<"Czy chcesz aby bohater sam zabil siebie?\n TO nie najlepsze rozwiazanie!\n Wlacz program ponownie.";
   cout <<"Nacisnij ENTER aby zakonczyc...\n";
   getchar();
   return 0;
}
for (unsigned int i=0;i<ile;++i)
{
      cout <<"\nDANE O Bohaterze "<<(i+1)<<'\n';
     cout <<"Podaj imie ";
    cin >>wojownik[i].imie;
    cin.ignore();
}
for (unsigned int i=0;i<ile;++i)
{
    wojownik[i].punktyzycia=500;
    wojownik[i].dmg=50;
    wojownik[i].gold=0;
}
cout <<"\n\nOto dane o bohaterach:\n\n";
for (unsigned int i=0;i<ile;++i)
{
     cout <<"\nDANE O BOHATERZE "<<(i+1)<<'\n';
    cout << "Imie: ";cout << wojownik[i].imie << '\n';
    cout << "Punkty zycia: ";cout << wojownik[i].punktyzycia <<'\n';
    cout << "Wartosc dmg: ";cout << wojownik[i].dmg <<'\n';
}
unsigned int j;
unsigned int losowy=0;
    srand(static_cast<unsigned>(time(0)));
   
cout <<"\n\nPodaj ile rund maja rozegrac bohaterowie: ";
cin >>liczbarund;
cin.ignore();

unsigned int max=0;

for (unsigned int i=0;i<liczbarund;++i)
{
cout <<"\n\nRUNDA ";
cout <<(i+1);
cout <<"\n\n";
     for (unsigned int i=0; i<ile; ++i)
      {             
   
        losowy=rand()%ile;       
        j=losowy;

        if(wojownik[i].punktyzycia<=0)
        { cout << "Bohater "<<(i+1)<<"("<<wojownik[i].imie<<")"" umarl, wiec nie uczestniczy w dalszej walce.";
        cout <<"\n\n";}
        if(wojownik[i].punktyzycia>0)
        {
                                     if(i==j)
                                     { cout << "Bohater "<<(i+1)<<"("<<wojownik[i].imie<<")"" gubi sie w ogniu walki. ";
                                     cout <<"\n\n";}
                                     if(i!=j)
                                     {
                                             if(wojownik[j].punktyzycia>0)
                                             {cout << "Bohater "<<(i+1)<<"("<<wojownik[i].imie<<")"" atakuje bohatera ";
                                             wojownik[j];
                                             wojownik[j].punktyzycia=wojownik[j].punktyzycia-wojownik[i].dmg;
                                             cout <<(j+1);
                                             cout <<"("<<wojownik[j].imie<<")";
                                             cout <<" odbierajac mu ";
                                              cout <<wojownik[i].dmg;
                                               cout <<" punktow zycia.";
                                               cout <<"\n\n";}
                                             if(wojownik[j].punktyzycia<=0)//problem gdyz jesli jest duzo rund bohater be zprzerwy to robi
                                             {
                                             cout << "Bohater "<<(i+1)<<"("<<wojownik[i].imie<<")"" oglada zwloki bohatera ";
                                             cout <<(j+1);
                                             cout <<"("<<wojownik[j].imie<<")";
                                             cout << " i nie atakuje w tej rundzie.\n\n";
                                             }
                                     }
        }

       
            if (wojownik[i].punktyzycia>wojownik[max].punktyzycia)
       max=i; // najlepszy staje sie obecny 
       
        }// zamykam petle walki
for (unsigned int i=0;i<ile;++i)
     {
     cout <<"\n\nDANE O BOHATERZE "<<(i+1)<<'\n';
    cout << "Imie: ";cout << wojownik[i].imie << '\n';
    cout << "Punkty zycia: ";cout << wojownik[i].punktyzycia <<'\n';
    cout << "Wartosc dmg: ";cout << wojownik[i].dmg <<'\n';
    }    //zamykam petle statystyk
}//zamykam petle rund

cout <<"\nNacisnij ENTER aby zakonczyc...\n";
getchar(); 
return 0;
}


w tym problem, że 'bohater' ogląda zwłoki (innego 'bohatera') przez wiele rund , jeśli użytkownik programu poda ich zbyt wiele. Chciałbym aby 'jeśli zostanie sam 1 bohater', rundy się zakończyły i wyświetlił się komunikat:
Bohater[*](imie) pokonał pozostałych bohaterów, już w rundzie [*] więc pozostałe nie zostały rozegrane.

lub coś w tym stylu.

Thx
Ajdija
obserwator
obserwator
 
Posty: 5
Dołączył(a): N mar 02, 2008 21:57 pm

Poprzednia stronaNastępna strona

Powrót do KURS C++ POZIOM 3

Kto przegląda forum

Użytkownicy przeglądający to forum: Brak zalogowanych użytkowników i 0 gości

cron
ręceprecz odtybetu | Programista PHP | Pozycjonowanie www | Seo link directory | Pozycjonowanie Częstochowa | wizy do rosji | wizy do uzbekistanu