132 / 192
Mar 2019

Globalne zmienne w przeciwieństwie do lokalnych są inicjalizowane zerem - więc nie chodzi tu o wartość początkową. Suma powinna być zerowana po to, aby dodawanie odbyło się dla danych z tego konkretnego zestawu (a nie dodatkowo z jeszcze z poprzednich).

Heaya banana wszystkim (żarcik taki). Zmądrzałem od wczoraj i doszedłem do kilku nowych rzeczy. Pomogło rozpisanie wszystkiego na kartce. Teraz moim problemem jest to że się że program dodaje wyniki z podpętli.
#include

using namespace std;
int main()
{
int test, n,m,x;
int suma=0;
int doba=86400;
int tablica[10000];
int czas;
int wynik;

	cin>>test;
	for(int i=0; i<test; i++)
	{
		cin>>n>>m;
		for(int z=0; z<n; z++)
		{
			cin>>czas;
			tablica[z]=czas;				
		}
		
		for(int z=0; z<n; z++)
		{
		suma+=doba/tablica[z];
		}
 	
			
	
		if(suma%m==0){x=suma/m;}
		else{x=suma/m+1;}
		cout<<x<<endl;
	}

}

9 days later

Hej
Zrobiłem testy i wyszły, sam też nie widzę błędu w tym zadaniu. Jednak kompilator mówi mi, że jest błąd. Mógłbym wiedzieć o co chodzi? Z góry dzięki!

#include
#include

using namespace std;

int n,a[1000000],b; // zestaw testowy
int zaproszeni;
int pudelko, czas[1000000];
float c,lpud;

int main()
{
cout << "Podaj liczbê zestawów testowych: " << endl;
cin >> n;
for (int i = 0; i < n; i++)
{

cout << "Podaj liczbê zaproszonych ob¿artuchów: " << endl;
cin >> zaproszeni;
cout << "Podaj liczbê ciastek w pude³ku: " << endl;
cin >> pudelko;


for (int i=1; i<=zaproszeni; i++)
{
    cout << "Podaj czas jedzenia " << i << "ego ob¿artucha" << endl;
    cin >> czas[i-1];
}
for (int i=1; i<=zaproszeni; i++)
{
    cout << "Czas jedzenia " << i << "ego ob¿artucha to: " << czas[i-1] << endl;

}
 for (int i=1; i<=zaproszeni; i++)
{
    a[i-1]=86400/czas[i-1];
    cout << "Liczba ciastek " << i << "ego ob¿artucha to: " << a[i-1] << endl;
 b=a[i-1]/pudelko;
 c=c+a[i-1];
}

lpud = (c/pudelko);
cout << c << endl;
if ((int)lpud - lpud == 0)
cout << lpud << endl;
if ((int)lpud - lpud != 0)
cout << ceil(lpud) << endl;
c=0;
}

return 0;

}

Jak mogły Ci wyjść testy jeśli twierdzisz, że kod nie przeszedł kompilacji?
Twój kod jest bardzo zawikłany i niepotrzebnie skomplikowany. W tym zadaniu można sobie poradzić bez użycia tablic a Ty wprowadzasz dwie tablice. Po co rozpoczynasz licznik w pętli od i=1 a później dajesz indeks tablicy i-1? Jeśli licznik będzie startował od 0 to indeks tablicy i licznik będą zgodne (to nie jest błąd ale niepotrzebne zamieszanie). Lepiej nie używaj polskich znaków bo widzisz jak to wychodzi. Zresztą po co to wypisujesz? Zwróć uwagę w treści zadania co masz prawo (i obowiązek) wypisać. Wypisanie czegoś więcej jest błędem.

Dzięki za odpowiedź!
Zdaję sobie sprawę, że kod mógłby być prostszy - jest to mój praktycznie samodzielny pierwszy program (biorę udział w kursie C++ na stronie pana Mirosława Zelenta) i to jest takie pierwsze “poważniejsze” zadanie domowe. A kod skopiowałem prosto z Codebloxa i chodzi o to, że tam wprowadzałem przykładowe dane, przeliczałem i działało :frowning:

Przemyśl co ma być na wyjściu programu (jest to w przykładzie) a co jest u Ciebie. Należy to potraktować DOSŁOWNIE

Innymi słowy wrzuć kod do Ideone, wrzuć mu przykładowe dane wejściowe do standardowego wejścia i uruchom program. Wyjdzie tak samo jak powinno?

24 days later

Witam,
Ktoś pomoże? Na ideone wychodzi tak jak jest w przykładzie. a niestety sędzia wywala “Błędna odpowiedź” https://ideone.com/PhEbBL9
Dodam tylko ze zmienialem zmienna, która odpowiada za czas jedzenia jednego ciastka zeby nie byla powyzej liczby sekun całego dnia ale nic.

Funkcję sum wywołuj tylko jeden raz i usuń parametr c, który jest zbędny. W treści zadania nie ma nic o sprawdzaniu poprawności wejścia. Usuń wszystkie takie konstrukcje:

 if ((1 <= quantityMonsters) && (quantityCookiesInBox <= 10000) && (1 <= quantityCookiesInBox) && (quantityCookiesInBox <= 1000000000))

Tyle powinno wystarczyć do AC. Możesz też zrobić to zadanie bez tablic i typów zmiennoprzecinkowych :wink:

BTW. W C++ raczej nie powinno się używać funkcji exit. Możesz zakończyć działanie funkcji main używając return.

Bardzo dziękuje, zadziałało. Wydawało mi się, że jeśli jest napisane jaki przedział liczbowy jest dla danej zmiennej to siłą rzeczy trzeba zrobić sprawdzanie poprawności.
Jeśli chodzi o to że mógłbym to zdanie zrobić bez tablic to, tak wiem, Tzn. później wpadłem na taki pomysł, ale pozostałem przy tablicy, bo chciałem trochę poćwiczyć.
Co do returna, tak. zmieniłem, ponieważ gdy za pierwszym razem wkleiłem kod z exitem to wyświetlił się komunikat o braku kompilacji. Zapomniałem o tym wspomnieć.
Jeszcze raz dziękuje za pomoc.

Przedział liczbowy to informacja względem której możesz wybrać typ zmiennej, lub algorytm itp. Istnieją zadania w których masz sprawdzać poprawność danych, ale wtedy jest to dokładnie opisane.
Błąd kompilacji mógł wystąpić, ponieważ nie dołączyłeś nagłówka < cstdlib > (tam znajduje się std::exit).

Ok, będę pamiętał :slight_smile:
Hmmm… dziwne, w VS nie mialem cstdlib a i tak exit dział.
Nie mniej, jeszcze raz BARDZO dziękuje za pomoc!

1 month later

Popatrzyłem na Twój kod i się przeraziłem. 83 linie kodu, gdy można to zrobić w mniej niż 30. Nie zrozum mnie źle,nie krytykuję go. Tworzenie klas ma tutaj pewnie jakieś walory edukacyjne, ale bardzo wydłuża kod i obniża, moim zdaniem, czytelność programu. Sorry, nie byłem w stanie zmusić się, by go przeczytać. Ale możliwe, że znajdziesz innych chętnych.

też popatrzyłem, potem przeczytałem, i jestem pełen podziwu, jak bardzo można skomplikować program

błąd jest dość prosty, proponuję, abyś wrócił do treści zadania i przeczytał je bardzo uważnie

3 months later

Hej, męczę się z obżartuchami już trochę i nie umiem rozkminić, dlaczego moja odpowiedź jest niepoprawna, ktoś z Was będzie tak dobry coś mi zasugerować?

Dziękuję, i proszę o wybaczenie, jeśli coś przeoczyłem tu na forum.