c++ TłumokMatematyczny: Czemu program mi zwraca takie duze liczby chociaz napisalam ze zakres jest od 0−50 http://cpp.sh/6oteb #include <iostream> #include <ctime> #include <cstdlib> int maxi, mini, i; using namespace std; int main() { cout<<"Program szuka metoda optymalna najmniejsza i najwieksza wartosc"<<endl; int t[19]; srand(time(NULL)); t[i]=rand()%51; for(i=0;i<19;i++) cout<<t[i]<<endl; maxi=t[0]; mini=t[0]; for (i=0;i<19;i=i+2) { if (t[i+1]>t[i]) { if(t[i+1]>maxi) maxi=t[i+1]; if(t[i]<mini) mini=t[i]; } else { if(t[i]>maxi) maxi=t[i]; if(t[i+1]<mini) mini=t[i+1]; } } cout<<"Wartosc max="<<maxi<<endl<<"Wartosc min="<<mini<<endl; return 0; }
17 maj 15:26
fil: co to tu robi #include <iostream> #include <ctime> #include <cstdlib> int maxi, mini, i; using namespace std; int main() { cout<<"Program szuka metoda optymalna najmniejsza i najwieksza wartosc"<<endl; int t[19]; srand(time(NULL)); t[i]=rand()%51; for(i=0;i<19;i++) cout<<t[i]<<endl; maxi=t[0]; mini=t[0]; for (i=0;i<19;i=i+2) { if (t[i+1]>t[i]) { if(t[i+1]>maxi) maxi=t[i+1]; if(t[i]<mini) mini=t[i]; } else { if(t[i]>maxi) maxi=t[i]; if(t[i+1]<mini) mini=t[i+1]; } } cout<<"Wartosc max="<<maxi<<endl<<"Wartosc min="<<mini<<endl; return 0; }
17 maj 15:28
TłumokMatematyczny: no... chcialam dać zakres że program powinien losowac od 0 do 50
17 maj 15:29
Maciess: To się kompiluje wgl? Losujesz tylko raz a chyba powinno chyba przypisywać każdemu elementowi tablicy wartośc [0,50].
17 maj 15:59
TłumokMatematyczny: Wszedles w link w ogole? Tablica ma być 19−elementowa i ma być zadeklarowana − bez inicjacji. Elementy mają zostać wylosowane do tablicy w zakresie od 0 do 50 i wyświetlone na ekranie,
17 maj 16:01
TłumokMatematyczny: No i wyświetla się 19 elementów ale nie z zakresu 0−50...
17 maj 16:06
fil: no mowie, to co zaznaczylem masz w zlym miejscu
17 maj 16:07
TłumokMatematyczny: To gdzie to w takim razie powinno być?
17 maj 16:08
fil: Po drugie program nie zadziala tak jak nalezy nawet po tej zmianie, bo nadal nie bedzie szukal min/max w zbiorze liczb
17 maj 16:09
fil: for (int i = 0; i < 19; i++) { t[i] = std::rand() % 51 std::cort << t[i] << ' '; }
17 maj 16:10
fil: i powinno byc: int maxi = 0; int mini = 50;
17 maj 16:11
fil: tam std::cout ofc
17 maj 16:12
Zbieżność: I chyba int maxi, mini, i; powinieneś zadeklarować w main
17 maj 16:13
fil: To juz mowilem dawno temu −− jednak tak "nauczyciel" pokazal
17 maj 16:13
TłumokMatematyczny: @fil w dobre miejsce wpisalam? #include <iostream> #include <ctime> #include <cstdlib> int maxi=0, mini=50, i; using namespace std; int main() { cout<<"Program szuka metoda optymalna najmniejsza i najwieksza wartosc"<<endl; int t[19]; for (int=0;i<19;i++){ t[i]=rand()%51 cout<<t[i]<<' '; maxi=t[0]; mini=t[0]; for (i=0;i<19;i=i+2) { if (t[i+1]>t[i]) { if(t[i+1]>maxi) maxi=t[i+1]; if(t[i]<mini) mini=t[i]; } else { if(t[i]>maxi) maxi=t[i]; if(t[i+1]<mini) mini=t[i+1]; } } cout<<"Wartosc max="<<maxi<<endl<<"Wartosc min="<<mini<<endl; return 0; }
17 maj 16:34
Marcin: kto nauczył Cię tak zawziętego korzystania ze zmiennych globalnych?
17 maj 17:05
fil: Nadal zle
17 maj 17:29
ICSP: t jest tablicą o 19 elementach Drugą pętlę iterujesz od 0 do 18 oznacza to, że linijka if( t[i+1] > t[i] ) dla ostatniego elementu wygląda następująco if(t[19] > t[18]) W tym momencie kompilator powinien rzucić wyjątek(odwołanie się do nieistniejącego elementu tablicy) Ten program w ogóle Ci się kompiluje?
17 maj 17:40
Mariusz: ICSP z tego co napisałeś wynika że skompilować może i się skompiluje ale podczas wykonania może dojść do błędu segmentation fault
17 maj 17:55
ICSP: faktycznie ten wyjątek jest typu unchecked, więc zostaje rzucony w trakcie działania programu.
17 maj 17:58
fil: Ten ktory wyslala? Nie skompiluje sie
17 maj 18:07
fil: Przy okazji −− sama pisalas to znajdywania min/max?
17 maj 18:08
Mariusz: fil bo to kwestia domknięcia nawiasów i wstawienia średników ale błąd który wskazał ICSP pojawia się w trakcie wykonania programu
17 maj 18:20
fil: mam wrazenie ze nawet nie kompiluje przed wstawieniem tego kodu tutaj
17 maj 18:39
fil: Zreszta, dziwny sposob na szukanie min/max w zbiorze
17 maj 18:41
Mariusz: mini=t[0]; maxi=t[0]; for(int i=1;i<19;i++) { if(t[i] > maxi) maxi = t[i]; if(t[i] < mini) mini = t[i]; } No ale tutaj iterujemy co jeden indeks
17 maj 18:58
fil: sporo jest sposobow, mozna tez uzyc std::maxelement(), std::minelement(), albo nawet std::minmaxelement()
17 maj 19:01
Mariusz: No tak ale to są gotowce a nie o to tutaj chodzi Wg mnie ma to być ćwiczenie na a) użycie instrukcji iteracyjnych i warunkowych b) zaprojektowanie poprawnego algorytmu obliczającego min/max zbioru
17 maj 19:09
TłumokMatematyczny: Ten kod jest połączeniem kodu nauczyciela i mojego... taka moja twórczość która rzadko kiedy wychodzi
17 maj 19:15
TłumokMatematyczny: i o co chodzi z tymi zmiennymi globalnymi że ich tak nie lubicie
17 maj 19:21
Shizzer: Między innymi dlatego, że występuje konflikt nazw pomiędzy zmiennymi lokalnymi a globalnymi. Mając projekt, który ma w sobie tysiące linii kodu i wiele niepotrzebnych zmiennych globalnych ciężko utrzymać ze względu na te konflikty nazw właśnie. Lepiej oprzeć projekt o zmienne lokalne, które kompilator "usuwa" po opuszczeniu funkcji. Generalnie lepiej, żebyś już od teraz nauczyła się, że zmienne globalne to zło i korzystała ze zmiennych lokalnych (tych deklarowanych wewnątrz funkcji), ale dopóki nie tworzyłaś i nie korzystałaś z własnych funkcji może ciężko to trochę zrozumieć
17 maj 19:30
TłumokMatematyczny: Hmm, czyli mówicie że powinnam wprowadzić więcej zmiennych?
17 maj 19:38
Shizzer: Nie. Wystarczy zmienne z nad funkcji main przenieść do wewnątrz funkcji main na jej początek
17 maj 19:39
fil: Po pierwsze −− popracuj nad czytelnoscia kodu
17 maj 19:41
TłumokMatematyczny: Co mam zrobić aby był bardziej czytelny?
17 maj 19:42
fil: dziel na bloki logiczne, rob wciecia w kodzie, nazywaj zmienne (najlepiej po angielsku) za co odpowiadaja, co to jest "maxi" albo "mini"
17 maj 19:48
fil: I oczywiscie jak chcesz isc dalej w programowanie, przestan uzywac "using namespace std;"
17 maj 19:49
TłumokMatematyczny: <taking notes> Okej, dziękuję za rady.
17 maj 19:50
fil: i jak, dziala ci ten program poprawnie?
17 maj 20:02
TłumokMatematyczny: Nie działa ale to nieważne... Może siądę do tego za pare dni jak dostanę olśnienia
17 maj 20:09
Mariusz: Jeżeli rozwiniemy pomysł znajdowania minimum bądź maximum to dostaniemy sortowanie przez wybór , więc później może to się przydać przy sortowaniu
18 maj 08:06
fil: Juz nie pamietam jakie dokladnie algorytmy sortowania przerabia sie w liceum
18 maj 09:02
Mariusz: W pierwszej iteracji szukamy minimum dla zbioru 0..n−1 i znaleziony element zamieniamy z tym o indeksie 0 W drugiej iteracji szukamy minimum dla zbioru 1..n−1 i znaleziony element zamieniamy z tym o indeksie 1 itd Można też analogicznie dla maximum tylko wtedy zbiór będzie iterowany w odwrotnej kolejności
18 maj 09:51
fil: Osobiscie implementowalem tylko bubble sorta, quick sorta, insertion sorta i selection sorta, na codzien jesli trzeb posortowac jakies dane, uzywam std::sort()
18 maj 10:02
TłumokMatematyczny: Po tej lekcji z algorytmem wyszukiwania liczb ekstremalnych, mam właśnie temat o sortowaniu bąbelkowym, a potem temat o rzutowaniu zmiennych, sortowaniu przez wybieranie i wstawianie
18 maj 10:10
Mariusz: Z sortowań opartych na porównywaniu kluczy mamy sortowanie bąbelkowe sortowanie przez wybieranie sortowanie przez wstawianie sortowanie Shella sortowanie przez scalanie (ono lepiej się nadaje do sortowania list czy plików niż tablic) sortowanie przez podział sortowanie przez kopcowanie Z innych sortowań to np sortowanie przez zliczanie
20 maj 10:36
fil: Moim faworytem jednak jest bogo sort. Trzeba miec leb aby cos takiego wymyslec emotka
20 maj 11:08
Mariusz: Oto jedna z wersji sortowania stogowego cpp.sh/8625a
20 maj 11:46
fil: Dziala Ci ten link? Czy to z mojej strony sa problemy?
20 maj 15:51
fil: Dziala, wlasnorecznie pisales czy skads brales?
20 maj 15:52
Mariusz: http://www.home.umk.pl/~abak/wdimat/s/HeapExSort.html Napisałem na podstawie tego opisu tylko usunąłem rekurencję z funkcji przywracającej kopiec
20 maj 17:55
fil: http://cpp.sh/7yehz −−−− tutaj moje sortowania, ktore kiedys implementowalem
20 maj 18:04
Mariusz: fil a sortowanie listy np przez łączenie naturalne ? Mógłbyś mi opisać jak ono działa
23 maj 10:03
fil: Mariusz nie powiem ci, bo szczerze malo o niej wiem, jedynie wiem ze chyba pomocnicze pliki tekstowe sie zaklada do sortowania
23 maj 21:48
fil: i pobiera po dwa elementy z pliku i sprawdza sie czy i < i + 1
23 maj 21:48
Mariusz: Koleś z innego forum opisał mi ją ale chciałem sprawdzić co o tej metodzie wiesz https://forum.pasja-informatyki.pl/219457/sortowanie-linii-w-pliku?show=224549#a224549 Powyżej masz odnośnik do wątku w którym opisał ten algorytm Pseudokod w jednym z komentarzy trzeba trochę poprawić ale przedstawił tam ideę tego algorytmu Tak oryginalny algorytm przeznaczony jest do sortowania plików ale można go przystosować do sortowania list http://matematyka.pisz.pl/forum/388089.html Tutaj chciałem oszczędzić jednego wywołania funkcji scalającej i miałem problem z destruktorem A w ostatnim wpisie napisałem pomysł na usprawnienie tego algorytmu
24 maj 00:05
fil: Widze ze profesjonalnie, zajmujesz sie programowaniem na codzien czy glownie matematyka? Bo z twoich wspisow wynika ze obie rzeczy na bardzo wysokim poziomie sa opanowane
24 maj 13:02
Mariusz: Jeśli chodzi o programowanie to trochę się tego uczyłem ale nie jestem w tym dobry
24 maj 13:48
fil: A jaki staz (w latach)? Ja dopiero rok siedze w temacie
24 maj 18:04
Mariusz: No już 12 rok idzie jak skończyłem naukę a jeśli chodzi o maturę to w tym miesiącu minęła okrągła rocznica 20 lat
24 maj 18:07
Mariusz: Tak na dobrą sprawę stażu nie mam bo ledwie ukończyłem szkołę i już wiedziałem że nie jestem w tym dobry A co do matematyki to gdy chodziłem do szkoły średniej to w programie nauczania było o wiele więcej np z analizy matematycznej były jeszcze całki pojedyncze Oczywiście na studiach informatycznych były pewne tematy z matematyki których nie było w szkole średniej O równaniach różniczkowych sam trochę doczytałem
24 maj 18:22
25 maj 10:56