elastyna utworzono 21 marca 2016 utworzono 21 marca 2016 (edytowane) Zadanie:Wpisz do tablicy stu elementowej liczby od -9 do 9,wypisz liczbę która najczęściej występuje. Jak do tej pory napisałem tyle: #include<iostream> #include<cstdlib> #include<cmath> #include<ctime> using namespace std; main() { int tab[99];//wylosowane liczby int liczby[19];//liczby od -9 do 9 int naj[19];//tablica która zlicza int g=-9; for(int i=0;i<99;i++)//losowanie do tablicy stu elemntowej liczb od -9 do 9 { tab[i]=-9+rand()%(9+9+1); cout<<tab[i]<<endl; } for(int i=0;i<19;i++)//zliczanie { for(int j=0;j<100;j++) { liczby[i]=g; if(liczby[i]==tab[j]) naj[i]++; cout<<naj[i]<<endl; } g++; } cin.get(); cin.get(); return 0; } Ale trochę sam się zgubiłem w tym co piszę, chcę to zrobić na trzech tablicach, niestety ten program nie działa. int tab[99];//wylosowane liczby int liczby[19];//liczby od -9 do 9 int naj[19];//tablica która zlicza int g=-9; for(int i=0;i<99;i++)//losowanie do tablicy stu elemntowej liczb od -9 do 9 { tab[i]=-9+rand()%(9+9+1); // cout<<tab[i]<<endl; } for(int c=0;c<19;c++) //wypełnianie tablicy od -9 do 9 { liczby[c]=g; g++; cout<<liczby[c]<<endl; } for(int f=0;f<19;f++) { for(int j=0;j<99;j++) { if(liczby[f]==tab[j]) {naj[f]++;} } cout<<naj[f]<<endl; } jeszcze wymyśliłem coś takiego, ale również nie chce działać
Matematyk0 komentarz 21 marca 2016 komentarz 21 marca 2016 Niech zgadnę - w wyniku wywala liczby z kosmosu, grube miliony? Nie wyzerowałeś tablicy do zliczania. To podstawa jeżeli chcesz to tak robić. Najłatwiej by było po wylosowaniu pozliczać je do jednej tablicy: int zliczanie[19]; //tablica do zliczania liczb for (int i = 0; i < 19; i++) zliczanie[i] = 0; //wyzerowanie tablicy, inaczej wywali jakieś chore liczby for (int i = 0; i < 100; i++) zliczanie[tab[i]+9]++; //zwieksza o jeden ilosc liczby, ktora jest zapisana w tab[i], +9, bo indeksy od 0 int max = 0, maxi; //najwieksza liczba wystapien liczb (max) i jaka to liczba (maxi) for (int i = 0; i < 19; i++) if (zliczanie[i] > max) { max = zliczanie[i]; maxi = i; } cout << "Najczesciej powtarza sie " << maxi-9 << ", ilosc wystapien: " << max << endl; Jeżeli niczego nie popieprzyłem, powinno działać.
Xainty komentarz 21 marca 2016 komentarz 21 marca 2016 #include <iostream> #include <cstdlib> #include <ctime> int main() { srand(time(NULL)); const int size = 100; const int size2 = 20; int tab[size]; int tab2[size2]; int tab3[size2]; int najwiecej_razy = 0; for (int i = 0; i < size2; i++) { tab2[i] = 0; tab3[i] = i - 9; } for (int i = 0; i < size; i++) { tab[i] = (rand() % 19) - 9; switch (tab[i]) { case -9: tab2[0]++; break; case -8: tab2[1]++; break; case -7: tab2[2]++; break; case -6: tab2[3]++; break; case -5: tab2[4]++; break; case -4: tab2[5]++; break; case -3: tab2[6]++; break; case -2: tab2[7]++; break; case -1: tab2[8]++; break; case 0: tab2[9]++; break; case 1: tab2[10]++; break; case 2: tab2[11]++; break; case 3: tab2[12]++; break; case 4: tab2[13]++; break; case 5: tab2[14]++; break; case 6: tab2[15]++; break; case 7: tab2[17]++; break; case 8: tab2[18]++; break; case 9: tab2[19]++; break; } } for (int i = 0; i < size2; i++) if (tab2[i] > tab2[najwiecej_razy]) najwiecej_razy = i; printf("Liczba %d wystapila najwiecej razy (%d)", tab3[najwiecej_razy], tab2[najwiecej_razy]); getchar(); return 0; }
Matematyk0 komentarz 21 marca 2016 komentarz 21 marca 2016 Xainty, mój sposób zliczania (zliczanie[tab[i]+9]++) jest ciut prostszy i szybszy niż 19 case'ów ;p
Xainty komentarz 21 marca 2016 komentarz 21 marca 2016 Matematyk, jest wiem, bez zastanowienia pisałem i dałem odpowiedź bo nie widziałem, że już ktoś odpisał ;)
Matematyk0 komentarz 21 marca 2016 komentarz 21 marca 2016 I tak najważniejsze, żeby działało, później można się bawić w optymalizację :P
elastyna komentarz 24 marca 2016 Autor komentarz 24 marca 2016 (edytowane) {int tab[99];//wylosowane liczbyint liczby[19];//liczby od -9 do 9int naj[19];//tablica która zliczaint g=-9,s=-9;for(int i=0;i<99;i++)//losowanie do tablicy stu elemntowej liczb od -9 do 9{tab[i]=-9+rand()%(9+9+1);// cout<<tab[i]<<endl;}for(int c=0;c<19;c++) //wypełnianie tablicy od -9 do 9{liczby[c]=g;g++;naj[c]=0;// cout<<liczby[c]<<endl;}for(int f=0;f<19;f++){for(int j=0;j<99;j++){if(liczby[f]==tab[j]) {naj[f]++;}}cout<<s<<"= "<<naj[f]<<endl;s++;}Tak ostatecznie napisałem, zlicza na pewno dobrze, a znalezienie najczęściej występującej liczby to już żaden problem.
Xainty komentarz 24 marca 2016 komentarz 24 marca 2016 (edytowane) Nie używaj couta tylko printfa, cout jest dużo dużo wolniejszy. tab[i]=-9+rand()%(9+9+1); btw co to za dziwny sposób losowania liczb? :P Co mają znaczyć te działania w nawiasie? :D
Matematyk0 komentarz 24 marca 2016 komentarz 24 marca 2016 Nie używaj couta tylko printfa, cout jest dużo dużo wolniejszy. cout jest łatwiejszy do ogarnięcia niż printf ;) co to za dziwny sposób losowania liczb? :P Co mają znaczyć te działania w nawiasie? :D Sposób liczenia ile tych liczb ma wylosować - 9 na minusie, 9 na plusie i zero - po co od razu 19, palców brakuje do policzenia :D
Xainty komentarz 25 marca 2016 komentarz 25 marca 2016 (edytowane) cout jest łatwiejszy do ogarnięcia niż printf ;) Ale jest "nieelegancki", wolniej sie wykonuje przez co program jest mniej optymalny, po co się uczyć od początku złych nawyków? :P Printf nie jest wcale jakiś skomplikowany. Sposób liczenia ile tych liczb ma wylosować - 9 na minusie, 9 na plusie i zero - po co od razu 19, palców brakuje do policzenia :D Dziwne podejście :P wylosowana_liczba = (rand() % ile_liczb_w_przedziale ) + startowa_liczba;
Matematyk0 komentarz 25 marca 2016 komentarz 25 marca 2016 Zawsze można używać puts/putc, co jest jeszcze szybsze ;p
elastyna komentarz 26 marca 2016 Autor komentarz 26 marca 2016 Co do samego losowania, to tak mnie uczyli w szkole pisać :P
Matematyk0 komentarz 26 marca 2016 komentarz 26 marca 2016 Mnie uczyli, że jak nie wiesz jak policzyć - dodawaj tak jak tu, funkcja i tak zadziała ;)
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.