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
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
20 maj 17:55
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
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