2 / 37
Aug 2017

Witam.
Nie wiem czemu sędzie nie zalicza mi skoro daje zawsze poprawne wyniki?

  • created

    Aug '17
  • last reply

    Feb '23
  • 36

    replies

  • 3.6k

    views

  • 23

    users

  • 4

    likes

  • 8

    links

gdyby zawsze dawało poprawne wyniki, to sędzia by zaliczył - stąd wniosek nie zawsze daje poprawne wyniki

ze względu na prostotę programu nie mam zamiaru podawać przykładu, kiedy daje zły wynik - poszukaj sam :slight_smile: - lub w przypadku wątpliwości jeszcze raz dokładnie przeczytaj treść zadania

to teraz usuń kod - niech inni mają szansę na samodzielne rozwiązanie problemu

15 days later

Pomijając fakt, że połowa kodu jest niepotrzebna, bo to jakie wartości mają zmienne to jest informacja dla Ciebie, a nie że Ty masz sprawszać testy, po pierwszym zestawie testowym, zmienna r zawsze bedzie miała wartosc 0 i juź się nie zmieni.

Przyłóź się do prawidłowego stawiania spacji. Zawsze stawiaj klamry w ifie:

if (warunek) {

}
else {

}

@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: