13 / 37
Nov 2017

@brahoo!!
Chodzi o czytelność i “przyjemność” czytania twojego kodu. Kompilator jest bardzo cierpliwy i wyrozumiały i nawet jeżeli cały kod umieścisz w jednej linii [jeśli potrafisz] i da się taki kod skompuilować to kompilator zrobi to bez protestu. Co innego Ty lub inny czytający twój kod. Ty sam jak i każdy czytelnik twojego kodu, stwierdzi, że jest on zyupełnie nieczytelny.
Jeżeli w programie [kodzie] stosujesz jakąś zasadę stawiania nawiasów, to stosuj tą zasadę konsekwentnie w każdym, najmniejszym fragmencie kodu. Jeżeli nawiasy są zbędne, nawet w instrukcji if // else, czy dowolnym innym miejscu, to [moim skromnym zdaniem] nie stawiaj klamr w ogóle i na siłę, dla samej zasady czy dlatego [jak to kiedyś, ktoś dowodził], że mogą się kiedyś, przy zmianach kodu, takie nadmiarowe klamry przydać [sic!].
Jezeli klamry stawia twoje IDE, to zastanów się, czy nie należy zmienić ustawień preferencji IDE, lub przejść na inne, w końcu to nie Ty jesteś niewolnikiem swojego IDE, tylko iIDE ma służyć tobie i twojej wygodzie.

Ale ja nie mówię, że kompilator nie skopiuje takiego kodu, ale raczej zawsze stawiamy klamry, bo:

  • Zapobiegają błędom “nie do odnalezienia” podczas dodawania drugiej instrukcji do if:
if (warunek)
    instrukcja;

// instrukcja wykona sie gdy warunek jest true

if (warunek)
    instrukcja;
    instrukcja2;

// instrukcja wykona sie gdy warunek jest true. instrukcja2 wykona sie zawsze

  • W (prawie) każdej książce i przykładzie stosuje się taką konwencję - przyzwyczajony do niej czytasz je ławiej, szybciej zrozumiesz nie swój kod

  • Każdy profesionalny programista używa tej formy nie tylko ze względu na ustawienia IDE, ale też obowiązujące style programowania i ustawienia narzędzi do sprawdzenia jakości kodu - lepiej uczyć sie od lepszych.

  • Innym łatwiej będzie czytało się Twój kod, bo sami też tak piszą

  • Ułatwia konsekwentne stawianie wcięć w kodzie - blok {} => wcięcie

Kontagumenty typu: to 2 wciśnięcia w klawiature więcej albo: przecież to działa i bez tego to po co je stawiać, jakoś do mnie nie przemawiają.

To prawdopodobnie byłem ja.

14 days later

Wciąż nie rozumiem. Dlaczego to nie działa?

#include

using namespace std;

int a,b,iloczyn,ile;

int main()
{
cin>>ile;
for(int i=1; i<=ile; i++)
{
cin>>a>>b;
iloczyn = a*b;

    while (a!=b)
    {
        if(a>b) a=a-b;
        else b=b-a;
    }

    cout<<iloczyn/a;
}

}

26 days later

Witam. Mam podobny, a prawie, że identyczny kod co kolega wyżej. Błą polega na przekroczeniu czasu na zadanie.

20 days later

Cześć! Zabrałem się za to zadanie jako pierwsze i dopiero zaczynam przygodę ze spojem, nie mówiąc o programowaniu :slight_smile: Ja do tego zadania podszedłem zupełnie inaczej, niż koledzy powyżej. Pytanie czy nie jest to przekombinowane? Oprócz tego sędzia pokazuje mi błąd, którego nie mogę znaleźć, mógłby ktoś doświadczony nakierować? Generalnie za wszelkie uwagi z góry dzięki :slight_smile:

#include

using namespace std;
int grup1(int &);
//**************************************************************************************************
int main()
{
int gr1, gr2;

cout << "Podaj liczbe dzieci w obu grupach: " << endl;
cin >> gr1 >> gr2;

for(int i = 1; ; i++)
{
	int c = grup1(gr1);			// Podmiana zmiennej tak, żeby przy każdym obiegu pętli przyjmowała wartość pierwotną. Tak więc zmienna c przyjmuje wartosc gr1. 
	c *= i;
	
	if(c % gr2 == 0)
	{
		cout << "Liczba cukierkow: " << c << endl;
		return 0;
	}
	else if(gr2 % c == 0)
	{
		cout << "Liczba cukierkow: " << gr2 << endl;
		return 0;
	}
}

}
//**************************************************************************************************
int grup1(int &grupa1)
{
grupa1 *= 1;
return grupa1;
}

na wyjściu ma być dokładnie to, co sobie autor zadania zażyczył !

czy w treści zadania napisano, że na wyjściu ma być jakikolwiek tekst poza liczbami ?

czy przeczytałeś dokładnie treść zadania ? niezależnie od twojej odpowiedzi przeczytaj dokładnie jeszcze raz (albo więcej), bo obecnie twój program robi niedokładnie to, co podano w treści

Wszystko rozumiem, skupiłem się na ozdobnikach, a pominąłem elementy zadania, dzięki :slight_smile:

5 months later

Hej, czy może ktoś podpowiedzieć na czym polega problem przekroczenia czasu?
Mam podobny kod co kolega powyżej i ten sam komunikat :confused:

image

A wpisywałeś liczby, które podałem?

2
11 11
10 20

Zapętla Ci się coś w nieskończoność i dlatego przekracza czas.
Co dokładnie? Nie mam pojęcia gdyż tak słabego formatowania kodu nie widziałem od czasów kiedy zaczynałem samo-naukę programowania, nie idzie ogarnąć co jest gdzie do czego. Przykład:

cout <<d << endl;
}
}
while(a!=b);
}

Heh, ten farfocel nie wiem skąd tam się znalazł ;D

Ja zacząłem miesiąc temu, więc liczę, że kiedyś będę podobnie fajny jak Ty :wink:

A za pomoc dzięki, posprawdzam.

Nie życzyłbym tego najgorszemu wrogowi, ale jak wolisz :slight_smile:

W tym konkretnym przypadku nie zalecałbym używać astyle a samemu popracować nad stylem :wink:

5 months later

Witam, mam ogromną prośbę - zerknąłby ktoś i powiedział co tutaj nie gra? -> https://ideone.com/RTmgqK38
Dane wyjściowe w tym kodzie się nie zgadzają (na ideone), mimo iż na kompilatorze działa. Nie umiem zrozumieć co przeoczyłem. Z góry dzięki za pomoc.

skoro masz prosty program (i to napisany przez ciebie) oraz dane, dla których daje błędne wyniki, to jest to tylko twój problem - na pomoc możesz liczyć wtedy, gdy program daje dla testów dobre wyniki, ale sędzia nie zalicza rozwiązania

2 months later

Witam! Proszę o pomoc - na kompilatorze jak i na ideone dostaję dobre wyniki, ale na spoju sędzia nie zalicza rozwiązania. Długo szukałem jakiegokolwiek błędu w kodzie, ale nie mogłem go znaleźć.
kod -> https://ideone.com/tW6kK831

Twój kod nie przechodzi takiego testu:

1
12 30

3 months later

Cześć! Sędzia zwraca ocenę mojego kodu jako błędną odpowiedź. Spójrzcie proszę, czy dostrzegacie błąd? Ideone go nie widzi.
[Przedszkolanka]