Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

PS. do tematu "Przeczytany, zamknięty Czy da się bez użycia warunków if"

Ostatnio zmodyfikowano 2011-01-01 14:42
Autor Wiadomość
F90M
» 2010-12-28 14:54:16
w treści zadania było powiedziane że a>=5 więc wyniki dla a<5 nie muszą być takie jak podałeś
Czepiasz się szczegółów, autor pisał że 5 jest najmniejszą wartością dla A, więc teoretycznie nie ma wartości A < 5. Wiemy że są wartości A > 9, ale autor ich nie podał, więc pisząc
a = 10, b = 4, c = 3
 jaką masz pewność że otrzymasz poprawny wynik? A no taką że pasuje do pewnego schematu,
a = 4, b = 1, c = 0
 do tego schematu pasuje.
A teraz ison napisz mi działanie (bez warunków, żeby nie było) które spełnia te zależności:
a = 5, b = 1, c = 1
a = 6, b = 2, c = 1
a = 7, b = 2, c = 2
a = 8, b = 3, c = 2
a = 9, b = 3, c = 3
ale to
a = 4, b = 1, c = 0
 nie będzie już poprawnym wynikiem.


Gdybyś doczytał tamten wątek to byś zobaczył, że ten istotny błąd poprawiłem w przedostanim poście.
Kto nie doczytał i o jaki błąd chodzi?
P-25760
ison
» 2010-12-28 15:01:10
@up jeśli w zadaniu jest założenie a>=5 to nie możesz mówić o wynikach dla a<5. Nie było powiedziane że a<9 więc dla reszty powinniśmy się domyśleć tak jak chciał autor

A teraz ison napisz mi działanie (bez warunków, żeby nie było) które spełnia te zależności:
a = 5, b = 1, c = 1
a = 6, b = 2, c = 1
a = 7, b = 2, c = 2
a = 8, b = 3, c = 2
a = 9, b = 3, c = 3
ale to
a = 4, b = 1, c = 0
 nie będzie już poprawnym wynikiem.
np takie gdzie korzystasz ze zmiennej unsigned i w pewnym momencie w obliczeniach odejmujesz 5 - dla a<5 licznik się przekręci :)
ale to jest mało istotne, założenie a>=5 jest istotne i powinniśmy się tego trzymać, nie możesz mówić że twój program ma wypisywać to samo dla a<5 co program jsc.
P-25765
jsc
Temat założony przez niniejszego użytkownika
» 2010-12-28 15:30:12
Dla poprawionego kodu (a co do a = - 3, rzeczywiście powinno być a = a - 3) to wyniki dla a<5 ma takie same.

A co do błędu w programie to pokręciłem b z c.
P-25778
F90M
» 2010-12-28 15:44:00
Dla 4 i 3 licznik się nie przekręci :P
A wyniki które podałem tyczyły się tego kodu
C/C++
for( int a = 0, b, c; a < 10; ++a )
{
    b = /* działanie */;
    c = /* działanie */;
    std::cout << "a = " << a << ", b = " << b << ", c = " << c << "\n";
}
nie ma tu unsigned, działanie miał wstawić w miejsce komentarzy.

Poprawiłem wcześniejszy post, ale nadal twierdzę że to jest szczegół, i sam dobrze wiesz że nie o to tutaj chodzi (po prostu wale odruchowo a = 0 w pętli i jadę do 9, tyle).

@jsc, czy możesz mi wytłumaczyć dlaczego robisz to
a = a - 3
, bo kompletnie nie jest dla mnie zrozumiały Twój upór, wytykałem to dwa razy, a i tak dalej się tego trzymasz.
P-25781
jsc
Temat założony przez niniejszego użytkownika
» 2010-12-28 15:53:17
Od postu nr. P-25714.

» Napisano 2010-12-28 02:28:14
A to:
b = a << 2 - 1;
c = b + a % 2 - 1;

Zeszło do 8 sekund.

A to dlatego po optymalizacjach kodu JSC i F90M czasy wynosiły 11 i 13 sekund.

A mój upór przy a = a - 3, wypływa z tego, że broniłem zamieszczonego kodu, który niestety źle wkleił.

Wymyśliłem dlatego, bo nie chciałem kombinować co trzeba zrobić po b<<1 (ups. znalazłem błąd) i b+a%2, takie pójście na łatwiznę.
P-25782
F90M
» 2010-12-28 15:56:13
Dobra, to teraz może wkleisz w końcu dobry kod i zamkniemy ten temat.
I przeczytaj kurs STC.
P-25783
jsc
Temat założony przez niniejszego użytkownika
» 2010-12-28 16:03:41
    for (long int a=0; a < 10; ++a) //JSC daje 10 sek.
    {
     long int a2, b, c;
     a2 = a - 3;
     c = a2/2;
     b = c + (a2%2);
     cout << "a = " << a << " b = " << b << " c = " << c <<"\n";
    }
    cin >> czas;

Nie mogłem znaleźć znaczników od grafik.
P-25784
F90M
» 2010-12-28 16:20:20
Ten działa jak należy, chyba można temat zamknąć :)

I muszę się jeszcze przyznać do błędu
C/C++
#include <iostream>

int main()
{
    for( int a = 0, b, c; a < 10; ++a )
    {
        b =( a >> 1 ) - 1;
        c = b +( a & 1 ) - 1;
        std::cout << "a = " << a << " b = " << b << " c = " << c << "\n";
    }
   
    std::cout << "\n";
   
    for( int a = 0; a < 10; ++a )
    {
        long int a2, b, c;
        a2 = a - 3;
        c = a2 / 2;
        b = c +( a2 % 2 );
        std::cout << "a = " << a << " b = " << b << " c = " << c << "\n";
    }
}
Wynik
a = 0 b = -1 c = -2
a = 1 b = -1 c = -1
a = 2 b = 0 c = -1
a = 3 b = 0 c = 0
a = 4 b = 1 c = 0
a = 5 b = 1 c = 1
a = 6 b = 2 c = 1
a = 7 b = 2 c = 2
a = 8 b = 3 c = 2
a = 9 b = 3 c = 3

a = 0 b = -2 c = -1
a = 1 b = -1 c = -1
a = 2 b = -1 c = 0
a = 3 b = 0 c = 0
a = 4 b = 1 c = 0
a = 5 b = 1 c = 1
a = 6 b = 2 c = 1
a = 7 b = 2 c = 2
a = 8 b = 3 c = 2
a = 9 b = 3 c = 3
Wyniki dla a < 3 są różne więc ison miał rację.
P-25785
1 2 3 4 5 « 6 » 7 8
Poprzednia strona Strona 6 z 8 Następna strona