41 / 49
Feb 2024

IFy są ok. Chodzi mi o to, żeby zamiast robić ify w debuggu typu:

if(x == 0) cout << "Oj, x to zero!";

oraz pisać same couty upewniające Cię co do logiki w kodzie typu:

void f(int x, int y) {
   cout << "Wolam f dla " << x << " oraz " << y << endl;
   //...
}

klepać, jak już coś, ewentualne zabezpieczenia np. tak:

assert(x != 0);

Porównaj: https://ideone.com/idgbib1 z https://ideone.com/vPuShA1

Zapamiętam assert, jako bajer na przyszłość :slightly_smiling_face: Dzięki cout mogę łatwo wyświetlić wartość zmiennych, i nr linii też. Ale warto uczyć się nowych rzeczy więc skorzystam. A te ify w main to nie były do debugu, na początku pomyślałem że NWD nie działa jeśli drugi argument jest większy niż pierwszy.
A dlaczego lepsze ‘\n’ niż endl? :thinking: Co do zmiennych, w tym przykładzie akurat to nie ma znaczenia, ale często w takiej pętli “testów” zapominałem zerować jakieś zmienne i kolejne testy były nie poprawne. A tak się same zerują. Jeśli mamy zagnieżdżoną pętlę for(), to “j” w wewnętrznej pętli też jest wiele razy(dokładniej “i” razy :slightly_smiling_face:) inicjowane.

Miałeś SIGABORT? (sigsegv)
Masz przekroczenie limitu czasu?
Będziesz miał WA - błędną odpowiedź.
Więc po prostu skorzystaj z podpowiedzi :wink:

Inicjowanie == zerowanie !? ?! No no :slight_smile:

Miałem sigsegv przez głupotę którą wskazał mr. T, limit czasu oczywiście też, ale jakieś zadania z dzielnikami na spoju już rozwiązałem, i przypomniało mi się jak to skrócić (w czasie). I oczywiście masz rację, inicjacja nie żeruje zmiennych, chyba że dopisze się do niej =0. A jeśli Wynik+=Podwynik to chyba trzeba ją tak zainicjować, i wtedy nie trzeba pamiętać o żerowaniu jej na końcu pętli. Nie wiem czy to dobrze czy źle, dopiero się uczę, to chyba widać. Tak samo nie wiem dlaczego lepiej używać /n niż endl. Wiem że czepiam się szczegółów, co potrafi być irytujące, ale uważam je za ważne, tym bardziej w kodowaniu🙂

Skoro się uczysz: koncepcja default initialization jest Ci znana?

Co to za (nowa?, twoja?) koncepcja?
W swoim programie na ideone, usiłujesz udowodnić, że zmienne globalne są inicjalizowane wartością zero? W taki sposób niczego nie udowadniasz, a nawet gdybyś użył zmiennych lokalnych, to też niczego, w taki sposób nie dowiedziesz. A że zmienne globalne są tak inicjalizowane, to chyba każdy wiedzieć powinien?
I to jest ta default initialization koncepcija? Wprawdzie nigdy o czymś takim jeszcze nie słyszałem, ale człowiek uczy się całe życie.

Wracając do zadania.
Dla takiej konstrukcji, wykorzystanej przez pytającego, w tym zadaniu, wewnątrz pętli:

cin >> bok1 >> bok2;

zmienne bok1, bok2, nie muszą być zerowane. Dowolna, poprzednia zwartość jest za każdym razem [za pierwszym też], nadpisywana, zamazywana nowymi, wczytanymi wartościami.

https://en.cppreference.com/w/cpp/language/default_initialization1

Raczej jedynie pokazać, że coś takiego istnieje.

Ale początkujący może mieć problemy z nazwaniem mechanizmu i wyszukaniem jego szczegółów przy bardziej złożonych konstrukcjach (czy zmienne lokalne też są tak inicjalizowane? Czy to faktycznie default-initialization czy zero-initialization czy może obie odpowiedzi są poprawne? Czy te zmienne w moim kodzie są statyczne?). Zwłaszcza, jeżeli na start nauczy się uproszczeń jako pewników i nie dowie o istnieniu jakiejkolwiek poważnej dokumentacji.

Nie wiedziałem że zmienne globalne są tak inicjalizowane, wiem za to że lepiej ich nie używać, żeby np. nie zalegały w pamięci, i ktoś tam o jakimś ogniu czy piekle przy nich wspominał.

Oczywiście że wiem co oznacza ta instrukcja, przedtem pisałem:

Oczywiście gdy deklaruję z inicjacją. Nie widzę w tym nic strasznego bo w wielu przykładach jest pokazywane takie coś:
for(int i=1; i<=9; i++){
for(int j=0; j<=9; j++)

}
A nie np. takie
int i, j;
for(i=1; i<=9; i++){
for(j=0; j<=9; j++)

}
To oczywiście tylko moja(uczącej się osoby) opinia