8 / 8
Nov 2017
   #include <iostream>
    #include <cstdlib>
    #include <ctime>

    using namespace std;

    int main()
    {
    srand(time(0));
    int w = 0;
    int ww = -2;

    for (int z = 0; z < 3; z++) {
        cout << z << ". ";

        for (int x = 0; x < 5; x++) {

            int a = rand() % 2;

            cout << a;
            if (a == 1) {ww++; if (ww == 0) {w++;break;}
            }
            if (a == 0) { ww--; if (ww == 0) { w++; break;}
            }
            if (ww == 0) {w++;break;}
        }
        cout << endl;
    }
    cout << endl
         << endl
         << "wygrane:" << w << endl;
    cout << "przegra:" << ww << endl;
    }

Wynik:

  1. 10100
  2. 111
  3. 1100

wygrane:2
przegra:0

Process returned 0 (0x0) execution time : 0.069 s
Press any key to continue.

Problem polega na tym, że nie znam c++ zbyt dobrze i nie wiem których narzędzi użyć aby program pracował tak jak tego chcę.

Podstawowe pożądane zasady działania programu:
**1.**Jeżeli program otrzymuje 1 dodaje 1 (ww++)
**2.**Jeżeli program otrzymuje 0 odejmuje 1 (ww–)
**3.**ww od samego początku ma wartość -2. Kiedy osiągnie wartość 0 dodaje w++ przerywając tym samym dalsze generowanie liczb.

Program liczy w inny sposób:

Liczy sobie (od początku przez wszystkie linie):
0. 10100
ww=-2 +1-1+1-1-1=-3
1. 111
(powinien zacząć od nowa ww=-2 i zaprzestać generować na 11 bez 3-ciej 1-nki dodając w++ ) program liczy dalej:
ww=-3+1+1+1=0 0=w+ (niby działa częściowo bo przestaje dalej generować)
2. 1100
(powinien zacząć od nowa ww=-2 i zaprzestać generować na 11 bez 00 dodając w++)

Program liczy jednak ww=0+1+1=2-1-1=0. Przestaje generować i wykonuje w++ jako że osiągnoł 0 od drugiej strony.

Starałem się opisać ten problem możliwie najprościej. Coś robię źle. Jeżeli chodzi o generowanie tylko 1 lini program działa tak jak tego oczekuję, lecz problem zaczyna się kiedy wrzucam to do pętli, i chce aby kod był powtórzony kilkukrotnie.

Z góry dziękuję za wspacie.

  • created

    Nov '17
  • last reply

    Nov '17
  • 7

    replies

  • 1.2k

    views

  • 3

    users

  • 4

    likes

  • 2

    links

już doszedłem do sedna, w petli nalezy umiescic int w oraz int ww. ja zrobilem petle poza nimi i to byl powod.

Nie za bardzo rozumiem ideę tego kodu, ale ok - uznam, że to jakiś tam Twój eksperyment.

Przy takim formatowaniu:

nie wiem niestety jakiej pomocy oczekujesz. Bo chyba nie tego, że ktoś będzie to analizował albo ręcznie indentował.

Nie chcę uchodzić za konserwatystę, wręcz konserwę i purystę językowego do kwadratu, ale tfuj tekst osiongnoł poźom ótródńajoncy jego przeczytanie, o zrozómieńó ńe muwionc. Na prawdę słowa typu “urzyć” rzucają się w oczy i odwracają skupienie od problemu, który opisujesz.

Umieszczanie intów w pętli dla tak prostych zadań to połowa sukcesu w drodze do braku umiejętności kodzenia. W szczególności chętnie dowiem się jak zrealizujesz taki program w językach, które uniemożliwiają zadeklarowanie zmiennej lokalnej w funkcji po wywołaniu pierwszego efektu ubocznego. Znając życie zmienną typu public (albo private w języku, o którym właśnie myślę).

Poniższy kod realizuje to zadanie:

  ww = -2;

 //blabla

  if(a == 1)
    ++ww;
  else if(a == 0)
    --ww;

  if(ww = 0)
    ++w;

Bardziej złożony, rzeczywisty kod może zawierać zerowanie zmiennych i inne “cuda”, ale powyższa logika powinna być niezmieniona.

Serdecznie dziękuję za poświęcony czas na udzielenie mi odpowiedzi.
Cieszy mnie Pańska/Pani uwaga, błąd ort. poprawiony.

Ja zdaje sobie sprawę z faktu jak ten kod może wyglądać dla profesionalisty. Proszę być konserwatystą krytykując w konstruktywny sposób :slight_smile: jak w tym przypadku.
Jak to w Bibli napisane: “Lepsza nagana mędrca niż pochwała głupca”. Zasada ta nie zmienia się i w tym przypadku.

Jeżeli chodzi o kod, jestem “samoukiem”. Kompilator często wyrzuca mi błędy, zdarzają się sytuacje, jak w tym przypadku, iż usiłując zapisać kod w Pana sposób wystąpił błąd którego nie potrafiłem się dopatrzeć, co nie znienia faktu że pozostawiając stary kod, program działa w pożądany sposób. Dla spokoju zostawiłem stary aby oszczedzis sobie czas.

A poza tym nie mam większych aspiracji niż zrozumienie podstaw i dokończenie tego programiku, moze coś wiecej w przyszlosci. Na tym poprzestanę. Takie pisanie sobie programików dla własnych potrzeb.

Dziękuję za odp.

PS

zmieniwszy zapis na Pański, program nie działa tak jak tego oczekuję…

Like za brak focha. W końcu ktoś na SPOJu, kto faktycznie chce pójść do przodu, a nie być traktowany jak jajko…

Co do bycia profesjonalistą - nie przesadzałbym :wink:

Jedną z przyczyn tego, że w IT na wysokim poziomie są wielkie pieniądze względem np. remontowania dróg na wysokim poziomie jest fakt, iż trzeba pracować samemu rozwiązując kolejne problemy w różnych, coraz nowszych technologiach i nie można sprowadzić każdej (a nawet większości) aplikacji do prostego schematu typu “klepnij dwa razy łopatą”. Zawsze coś się popsuje, coś trzeba zmodernizować, coś poprawić, coś wyciąć, …

Nie ma nic złego w klepaniu fuszerki o ile jest się tego świadomym. Przykładowo jestem takim leniem, że mając jedno z zadań na SPOJu (sprawdzanie sudoku czy coś tego typu) zrobiłem go kopiując i wklejając kolejne fragmenty kodu uzykując około 1000 linii kodu zamiast pętli w pętli na mniej niż 100 linii kodu :wink: Moje uwagi biorą się stąd, że nie wiem, w jakim stopniu rozumiesz jakość swojego rozwiązania. Działać - działa i to się ceni. Ale czy taka poprawka byłaby możliwa w jakiejś porządnej, rozbudowanej aplikacji?

Ok.

Mój zapis to dopiero początek zabawy :stuck_out_tongue: Ale spoko - jeżeli chcesz poprzestać na tym co masz to oczywiście jest ok :slight_smile:

taka mała uwaga: osobiście dał bym spokój robotnikom budowlanym. To inne formy wysiłku, składa się na to zbyt wiele czynników aby tak zwyczajnie generalizować iż osoba która jest poza " intelektualną wojną" zasługuje jedynie na ochłap. Oczywiście, nie potrafię wielu z nich zrozumieć… to kwestie wiary, filozofii,wielu innych czynników. Nie lubię takiego porównywania, w pewnym sensie ubliżania fizycznemu robotnikowi, co w tych kręgach jest bardzo popularne, przez co nie zmierzam też do ich gloryfikacji…

Dziękuję.

Nigdzie nie określiłem IT mianem intelektualnej wojny. Nigdzie nie pisałem też o robotnikach budowlanych, a jedynie o całej przykładowej dziedzinie jaką jest remontowanie dróg (doda(łe)m: na wysokim poziomie - pisząc to nie myślałem o robotnikach drogowych). W szczególności nie dopuściłem się stwierdzenia, że osoba poza “intelektualną wojną” zasługuje jedynie na ochłap bo i tak nie uważam. W związku z tym nie mogłem się dopuścić ubliżania robotnikom fizycznym. I nie dopuszczam się tego czynu w żadnej sytuacji już chociażby z tak prymitywnej pobudki jak własne wykształcenie, które ukierunkowane jest w stronę pracy fizycznej w laboratorium / kopalni / rafinerii / zakładach chemicznych. Twoja wypowiedź odnosi się nie do tego co napisałem, a do (nad)interpretacji tej wypowiedzi. Jeżeli jednak razi Cię przykład (faktycznie sztampowy) remontowania dróg (nawet na bliżej nieokreślonym wysokim poziomie) i klepania łopatą, możesz tam wstawić chemię analityczną i analizę kationów III grupy albo biologię i barwienie HiE albo nawet gorzelnictwo i wyznaczanie półek teoretycznych metodą McCabe-Thile’a (to już zdecydowanie wysoki poziom gorzelnictwa!) :slight_smile:

Trudno zrozumieć, o co Ci chodzzzzzi :wink:
Ale może po prostu wrzuć do pętli odpowiednio “cały” a nie fragment ?
Co mam na myśli?:

for (int z = 0; z &lt; 3; z++) {
   int w = 0; /// może ta linia przed pętlą, nie mam pojęcia 
   int ww = -2;

PS
Poprawiłem wklejenie twojego kodu - możesz “wejść” do edycji swojego kodu i zobaczyć jak.

PS 2
Oczywiście nie możesz tego tłumaczyć nie znajomością c++. To są zasady obowiązujące we wszechświecie komputerów [dowolnych języków programowania]. Miałbym więcej uwag, ale ta jedna powyższa, powinna chyba rozwiązać problem?

Chyba warto “wejść” z tobą w bardziej przyjacielskie stosunki :wink:

PS 3
@vegezaur! Sorry. Nie doczytałem, że już doszedłeś do sedna :wink:

PS 4
Przeniosłem wątek do innego działu [też nie jest najlepszy] ale ten w którym Ty go umieściłeś jest anglojęzyczny.