rozdzial/lekcja 19, zadanie domowe
Ostatnio zmodyfikowano 2022-04-08 06:41
jebackoze Temat założony przez niniejszego użytkownika |
rozdzial/lekcja 19, zadanie domowe » 2022-04-07 14:31:18 chcialbym prosic o ocene kodu, czy wszystko gra i buczy: #include <iostream> #include <cstdlib> #include <ctime>
void wylosujLiczby( int t[ ], int rozmiar, int start, int stop ) { srand( time( NULL ) ); int i = 0; do { t[ i ] =( std::rand() % stop - start + 1 ) + start; ++i; } while( i < rozmiar ); }
void wypiszLiczby( int t[ ], int rozmiar ) { int i = 0; do { std::cout << t[ i ] << ", "; ++i; } while( i < rozmiar ); }
int obliczSume( int t[ ], int rozmiar ) { int i = 0, suma = 0; do { suma += t[ i ]; ++i; } while( i < rozmiar ); return suma; }
int main() { int tablica[ 999 ]; wylosujLiczby( tablica, 999, 4, 10 ); wypiszLiczby( tablica, 999 ); int iSuma = obliczSume( tablica, 999 ); std::cout << "Suma liczb wynosi: " << iSuma << std::endl; return 0; }
w ramach cwiczen, przed zadaniem domowym zaczalem pisac taki kod i chcialbym prosic rowniez o ocene prawidlowosci, porownujac go do powyzszego kodu, abstrahujac od zalozen int main z zadania domowego. chodzi o efekt koncowy. kod tez wyszedl mi krotszy. #include <iostream> #include <cstdlib> #include <ctime>
void tablica( int t[ ], int rozmiarowka ) { srand( time( NULL ) ); int licznik = 0; do { t[ licznik ] =( std::rand() % 7 ) + 4; ++licznik; } while( licznik < rozmiarowka ); }
int main() { int licznik = 0, suma = 0, rozmiar; std::cin >> rozmiar; int liczba[ rozmiar ]; tablica( liczba, rozmiar ); do { std::cout << liczba[ licznik ] << ", "; suma += liczba[ licznik ]; ++licznik; } while( licznik < rozmiar ); std::cout << "\nsuma: " << suma; return 0; } |
|
pekfos |
» 2022-04-07 22:26:45 ( std::rand() % stop - start + 1 ) + start;
Kolejność obliczeń jest zła. std::cin >> rozmiar; int liczba[ rozmiar ]; Tablice zmiennego rozmiaru nie są elementem standardu C++. Nie masz też żadnej walidacji rozmiaru pobranego od użytkownika. Wartość ujemna lub zbyt duża spowoduje crash programu, gdzie nie da się w uniwersalny sposób stwierdzić ile to "zbyt dużo". Wszystkie zmienne lokalne, w tym takie tablice, korzystają z puli pamięci która ma typowo parę megabajtów. W lekcji o tablicach jest czerwona ramka o tym by tak nie robić, chociaż nie wchodzi w szczegóły co do powodów. |
|
jebackoze Temat założony przez niniejszego użytkownika |
» 2022-04-08 06:41:02 ( std::rand() %( stop - start + 1 ) ) + start; juz poprawilem, chyba z rozpedu nie ujalem tego w nawias. co do zmiennej: std::cin >> rozmiar; int liczba[ rozmiar ]; to ja wprowadzilem na potrzeby testowania zeby zobaczyc czy kod dziala i czy suma wychodzi prawidlowo. latwiej mi bylo raz wprowadzic liczbe i szybko zweryfikowac sume niz za kazdym razem w kodzie zmieniac te wartosc w kilku miejscach. moglem w sumie dac komentarz przy tej zmiennej w kodzie z wyjasnieniem. przy 999 liczbach byloby mi ciezej zweryfikowac poprawnosc wynikow (; |
|
« 1 » |