Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Zadanie: tablica i liczby pseudolosowe


Rekomendowane odpowiedzi

Opublikowano
/*Napisz program, który wylosuje 999 liczb całkowitych z zakresu od 4 do 10 włącznie, wypisze te wartości na ekran, po czym zsumuje je i wynik wypisze na ekran. 
Program ma wykorzystywać tablicę, która zostanie najpierw wypełniona liczbami losowymi z określonego przedziału, a następnie wynik zostanie obliczony na podstawie zawartości całej tablicy.*/

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int losowanie()
{
	int liczba = (rand() % 7) + 4;
	return liczba;
}

int main()
{
	srand(time(NULL));

	int tablica[999];
	int wynik = 0;

	for (int i = 0; i < 999; i++)
	{
		losowanie() >> tablica[i];
		cout << tablica[i] << ", ";
		
		wynik += tablica[i];
	}

	cout << "\n\nSuma wszystkich cyfr wynosi: " << wynik << endl;

	system("PAUSE");
	return 0;
}

Możecie mi wytłumaczyć co jest w tym zadaniu źle ?

Konsola:

4417814360433421399314.png

 

Według mnie program tak powinien wyglądać :/

Opublikowano

losowanie() >> tablica;

wtf ? Co to jest ? Przeczytaj dokładnie jeszcze raz kurs o funkcjach bo takiego czegoś nie można zrobić... Da się tylko przypisać zmiennej wartość z funkcji ale nie da się użyć operatora >> w tym przypadku...

 

tablica = losowanie();

 

I na co robić coś takiego :

 

int liczba = (rand() % 7) + 4;

return liczba;

 

A nie prościej :

 

return ((rand() % 7) + 4);

 

I wywal system("PAUSE");

 

Bo program po wykonaniu bez żadnego błędu powinien sam się wyłączyć . A jeśli chcesz aby po wykonaniu programu sam si3 nie zamykał to odpalaj go przez cmd.

nostaleh.png
Opublikowano

Operatora >> używa się do zapisu do strumieni - plików, konsoli itp.(tzn. akurat teraz, bo tak ogólnie to jest to operator przesunięcia bitowego w prawo i dlatego ci się to w ogóle kompiluje). Do przypisywania wartości zmiennym używa się zapisu:

zmienna = wartosc;
Opublikowano

Tak właściwie, to po kiego grzyba pchasz tutaj na siłę funkcję? Nie lepiej zrobić coś takiego:­

 
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <time.h>

using namespace std;

int main()
{
	int tablica[999], x, y=0, s=0;
	srand(time(NULL));
	
	while(y<=998)
	{	
		x=rand()%10+1;
		if((x>=4)&&(x<=10))
		{
			printf("%d\n", x);
			tablica[y]=x;
			s=s+tablica[y];
                        y++;
		}
		
	}
	printf("\nSuma wszystkich liczb z tablicy to: %d", s);
}

KIbanner.jpg

Opublikowano

 

Tak właściwie, to po kiego grzyba pchasz tutaj na siłę funkcję? Nie lepiej zrobić coś takiego:­

 
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <time.h>

using namespace std;

int main()
{
	int tablica[999], x, y=0, s=0;
	srand(time(NULL));
	
	while(y<=998)
	{	
		x=rand()%10+1;
		if((x>=4)&&(x<=10))
		{
			printf("%d\n", x);
			tablica[y]=x;
			s=s+tablica[y];
		}
		y++;
	}
	printf("\nSuma wszystkich liczb z tablicy to: %d", s);
}

 

Ponieważ się uczę i chcę utrwalać wiedzę.

Opublikowano

 

Tak właściwie, to po kiego grzyba pchasz tutaj na siłę funkcję? Nie lepiej zrobić coś takiego:­

 
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <time.h>

using namespace std;

int main()
{
	int tablica[999], x, y=0, s=0;
	srand(time(NULL));
	
	while(y<=998)
	{	
		x=rand()%10+1;
		if((x>=4)&&(x<=10))
		{
			printf("%d\n", x);
			tablica[y]=x;
			s=s+tablica[y];
		}
		y++;
	}
	printf("\nSuma wszystkich liczb z tablicy to: %d", s);
}

 

 

 

Ciebie to chyba coś pomyliło. Po kiego ma się to stosować?

1. Używasz dodatkowych 2 bibliotek.

2. Już tutaj widać, że program z funkcjami jest łatwiejszy.

3. Używasz using namespace std mimo, że nie używasz niczego co ma przed sobą std.

4. Guzik mu się ta wiedza przyda, bo zna tylko 2 biblioteki.

5. Cstdio jest przestarzałe.

 

 

Coś jeszcze? Zacznij czytać najpierw temat nim coś napiszesz, bo autor nie szuka drogi na skróty tylko rozwiązania - ale jak widać Ty tego nie rozumiesz, że ktoś uczy się np. tablicy, korzystania z funkcji, ale ważne, żeby tutaj wpierdolić to o czym nie ma zielonego pojęcia, a nauka tego to tylko przepisywanie na ślepo kodu, które chyba jest najgorszą metodą nauki.

pyhvh7E.png


 


Opublikowano

Ciebie to chyba coś pomyliło. Po kiego ma się to stosować?

1. Używasz dodatkowych 2 bibliotek.

2. Już tutaj widać, że program z funkcjami jest łatwiejszy.

3. Używasz using namespace std mimo, że nie używasz niczego co ma przed sobą std.

4. Guzik mu się ta wiedza przyda, bo zna tylko 2 biblioteki.

5. Cstdio jest przestarzałe.

 

 

Coś jeszcze? Zacznij czytać najpierw temat nim coś napiszesz, bo autor nie szuka drogi na skróty tylko rozwiązania - ale jak widać Ty tego nie rozumiesz, że ktoś uczy się np. tablicy, korzystania z funkcji, ale ważne, żeby tutaj wpierdolić to o czym nie ma zielonego pojęcia, a nauka tego to tylko przepisywanie na ślepo kodu, które chyba jest najgorszą metodą nauki.

 

1. Używam 2 dodatkowych bibliotek, bo mam je na stałe zamontowane w kodzie startowym C++, ignorancie. Odpowiedź robiona na szybko, chodziło o sam kod.

2. Nie wydaje mi się, żeby użycie funkcji było w tym zadaniu łatwiejsze.

3. Używam "using namespace std", ponieważ zalecił to mój nauczyciel informatyki, również mam to zapisane w kodzie startowym C++. Powtórzę się - chodziło o sam sposób wykonania zadania.

4. "Znać dwie biblioteki" a "zamieścić je w kodzie źródłowym" to dwie zupełnie inne sprawy.

5. Nie wiem, nie znam się, nauczyciel polecił - również się uczę.

 

I temat przeczytałem doskonale, natomiast widzę, że to Ty masz problem z czytaniem ze zrozumieniem. Przeczytaj sobie treść zadania, znajdź mi chociaż jedno zdanie, wskazujące, że "musi użyć funkcji". Twoje "nie szuka drogi na skróty" - no pewnie, że nie! Sam ją sobie utrudnia pchając tutaj na siłę funkcję, która jest trudniejsza w użyciu. Autor sam odpisał na moje pytanie: "Ponieważ się uczę i chcę utrwalać wiedzę." No i doskonale, co nie oznacza, że tego zadania nie można zrobić w zupełnie inny, w moim mniemaniu łatwiejszy sposób. Nie tak agresywnie.   :) 

­

KIbanner.jpg

Opublikowano

        x=rand()%10+1;

        if((x>=4)&&(x<=10))

        {

            printf("%d\n", x);

            tablica[y]=x;

            s=s+tablica[y];

y++;

        }

 

WTF?!

I ty go chcesz uczyć jak ma coś robić lepiej?

Opublikowano

1. Używam 2 dodatkowych bibliotek, bo mam je na stałe zamontowane w kodzie startowym C++, ignorancie. Odpowiedź robiona na szybko, chodziło o sam kod.

2. Nie wydaje mi się, żeby użycie funkcji było w tym zadaniu łatwiejsze.

3. Używam "using namespace std", ponieważ zalecił to mój nauczyciel informatyki, również mam to zapisane w kodzie startowym C++. Powtórzę się - chodziło o sam sposób wykonania zadania.

4. "Znać dwie biblioteki" a "zamieścić je w kodzie źródłowym" to dwie zupełnie inne sprawy.

5. Nie wiem, nie znam się, nauczyciel polecił - również się uczę.

 

I temat przeczytałem doskonale, natomiast widzę, że to Ty masz problem z czytaniem ze zrozumieniem. Przeczytaj sobie treść zadania, znajdź mi chociaż jedno zdanie, wskazujące, że "musi użyć funkcji". Twoje "nie szuka drogi na skróty" - no pewnie, że nie! Sam ją sobie utrudnia pchając tutaj na siłę funkcję, która jest trudniejsza w użyciu. Autor sam odpisał na moje pytanie: "Ponieważ się uczę i chcę utrwalać wiedzę." No i doskonale, co nie oznacza, że tego zadania nie można zrobić w zupełnie inny, w moim mniemaniu łatwiejszy sposób. Nie tak agresywnie.   :) 

­

 

 

1. Jaki ignorancie? Nie trzeba używać tych bibliotek, a nawet nie powinny być używane przy takim zadaniu (no może cstdio, ale to przeżytek).

2. Czyli lepsze jest użycie dwóch bibliotek z których jedną ledwo zna?

3. No to świetnie, przepisujesz, bo ktoś Ci tak powiedział, ale gdzie w swoim kodzie jest to coś co używa std?

4. Czyli używasz ich zbytecznie? Program zaczyna być coraz lepszy.

5. Słyszałeś o takiej bibliotece jak iostream? Jeżeli nie to polecam się nauczyć chociażby std::cout czy std::cin;

 

 

Oczywiście, że nie, ale ten program co napisałeś to nie jest ani dobre rozwiązanie, ani w ogóle jakiś dobry program (a przecież można wyeliminować tyle zbędnych rzeczy). Trudniejsza w użyciu? Przecież wyraźnie widzisz, że się uczy. W C++ istnieje mnóstwo rozwiązań na dane zadanie, (z jednej strony wspaniałe z drugiej...) ale nim dasz odpowiedź zobacz czego dana osoba się uczy:

cpp0x.pl 

Sam polecam Ci to poczytać, może zrozumiesz czym jest takie using namespace std, bo jak widać to niewiele rozumiesz.

 

 

WTF?!

I ty go chcesz uczyć jak ma coś robić lepiej?

 

 

No właśnie powiedź mu coś.

pyhvh7E.png


 


Opublikowano

nie wszystko, co mówi nauczyciel jest dobre, wręcz przeciwnie, większość to głupoty, bo gdyby taki nauczyciel programowania był dobry to by w szkole nie pracował ;x

Opublikowano

@NopeDotAvi2 Akurat w szkole nie pracuje, przyjeżdża prywatnie na zajęcia z grupą chętnych, informatyk z pasji. :)­

 

@Szymon2727 Z cin/cout akurat zrezygnowałem na rzecz printf/scanf, ponieważ działają szybciej. Polecił mi to nauczyciel.

A co do Twojego "och-ach, doucz się, niewiele rozumiesz, właściwie to nic, och-ach", to powiem tyle: pocałować mnie możesz w mały paluszek. :D

Stronę cpp0x znam akurat od dawna, wiem, że tam standardowej przestrzeni nazw się z założenia nie używa, więc "using namespace std" tam się nie pojawia, a przed każdą komendą tego wymagającą dopisywane jest "std::".

 

@Sopelek997 Nikogo nie chcę uczyć, podałem tylko inny sposób rozwiązania tego zadania, oczekując kulturalnego porównania przez innych użytkowników i wskazania "w czym i dlaczego" jeden program jest lepszy od drugiego, a dlaczego nie. Na kulturalną rozmowę jednak liczyć tutaj nie ma co, bo, jak widzę, ego co-poniektórych znacznie przekracza zdrową miarę. :)

KIbanner.jpg

Opublikowano

ale ty kompletnie nic nie wiesz... nawet nie wiesz jak wylosować liczbę z przedziału od 4-10 (losujesz od 1-10), możliwe, że zostawisz puste miejsca w tablicy, używasz printf/scanf zamiast cout/cin (https://isocpp.org/wiki/faq/input-output#iostream-vs-stdio), mówisz, że użycie funkcji jest niepotrzebne (kod powinno się dzielić na jak najmniejsze części).

Opublikowano

@NopeDotAvi2 Akurat w szkole nie pracuje, przyjeżdża prywatnie na zajęcia z grupą chętnych, informatyk z pasji. :)­

 

@Szymon2727 Z cin/cout akurat zrezygnowałem na rzecz printf/scanf, ponieważ działają szybciej. Polecił mi to nauczyciel.

A co do Twojego "och-ach, doucz się, niewiele rozumiesz, właściwie to nic, och-ach", to powiem tyle: pocałować mnie możesz w mały paluszek. :D

Stronę cpp0x znam akurat od dawna, wiem, że tam standardowej przestrzeni nazw się z założenia nie używa, więc "using namespace std" tam się nie pojawia, a przed każdą komendą tego wymagającą dopisywane jest "std::".

 

@Sopelek997 Nikogo nie chcę uczyć, podałem tylko inny sposób rozwiązania tego zadania, oczekując kulturalnego porównania przez innych użytkowników i wskazania "w czym i dlaczego" jeden program jest lepszy od drugiego, a dlaczego nie. Na kulturalną rozmowę jednak liczyć tutaj nie ma co, bo, jak widzę, ego co-poniektórych znacznie przekracza zdrową miarę. :)

 

 

Ja nie muszę nigdzie Cie całować, by powiedzieć że źle programujesz. Działają szybciej? Ej to czemu w tym programie nie zrobiłeś alokowania pamięci? Chociaż kto wie, czy umiesz... To czemu z cpp0x w ogóle nie korzystasz? Rozumiem jak byś nie znał, że pierwszy raz widzisz, ale tam się ucz programowania, a nie na tych całych grupkach. O zgrozo... Ty wiesz! No to powiedź mi geniuszu, gdzie w kodzie używasz czegoś z std?

 

Z resztą Adi zauważył ciekawy błąd:

 

 x=rand()%10+1;

 

Wcale nie, bo:

 

x = (std::rand()%7)+4;

 

(std jest z przyczyn wiadomych)

pyhvh7E.png


 


Opublikowano

 

Z resztą Adi zauważył ciekawy błąd:

 

 x=rand()%10+1;

 

Wcale nie, bo:

 

x = (std::rand()%7)+4;

 

(std jest z przyczyn wiadomych)

 

Tak, tu się zgodzę. Jak najbardziej, teraz mogę darować u siebie "if'a". :)

@GrAvItY1 Ta... Spoko. :P

KIbanner.jpg

Opublikowano

A poza tym

 

using namespace std;

 

doprowadza do konfliktu nazw więc nie powinno się tego używać.

 

Nie chodzi o to, że to jest złe, ale po kiego c***a to w programie stawia jak nie ma przed sobą std.

 

Tak, tu się zgodzę. Jak najbardziej, teraz mogę darować u siebie "if'a". :)

@GrAvItY1 Ta... Spoko. :P

 

No i już mamy potwierdzenie, że ten program o kant du...

 

Po za tym:

 

suma += tablica[indeks]

 

Przypomniała mi się taka praca domowa pewnego ucznia szkoły średniej - zrobił tak samo, a miał napisać tak jak ja napisałem.

pyhvh7E.png


 


Opublikowano

Z cin/cout akurat zrezygnowałem na rzecz printf/scanf, ponieważ działają szybciej. Polecił mi to nauczyciel.

 

Jest to kwestia zależna od implementacji, sytuacji w których się je wykorzystuje i innych czynników. Żeby stwierdzenie to nie pozostało pustą formułką, z chęcią poinformuje że np. u mnie pomiędzy tymi przykładowymi kodami:

#include <iostream>
int main() {
    for (int i = 0; i < 10000; ++i) std::cout << i;
}
#include <cstdio>
int main() {
    for (int i = 0; i < 10000; ++i) printf("%d", i);
}

występuje dwukrotna różnica w czasie... na korzyść std::cout. Zapewne w jakiejś innej sytuacji byłoby wręcz przeciwnie, ale pokazuje to że argument nie ma sensu.

 

Ba - po dopisaniu:

std::ios_base::sync_with_stdio(false);

na początku wersja z std::cout jest dosłownie sześćdziesiąt razy szybsza.

Opublikowano
Tak, tu się zgodzę. Jak najbardziej, teraz mogę darować u siebie "if'a". :)

 

Nie tyle darować, co wczesniej nie miałeś nawet gwarancji, że te 999 liczb zostanie kiedykolwiek wylosowane.

Oczywiście w tym przypadku prawdopodobieństwo takiego zdarzenia jest bardzo małe, ale w innych przypadkach mogłoby być inaczej.

Opublikowano

Proszę byście nie odbiegali tak bardzo od tematu, rozumiem - dyskusja jest również ważna, ale w tym temacie autor szukał pomocy i już ją raczej dostał. 

Jeżeli chcecie to możecie założyć nowy temat do dyskusji - oczywiście konstruktywnej oraz nie mającej na celu atakowanie kogoś.

Wszelakie zażalenia proszę pisać na PW, nie w temacie.

8LTfBGw.jpg

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...