IceMan85PL Temat założony przez niniejszego użytkownika |
Lekcja 18 Zadanie » 2017-02-03 11:18:58 Witam. Mam problem z zadaniem z lekcji 18, chdy chce wypisac zawartosc tablic, wyswietla mi tablice z indeksem od 700, a nie od poczatku 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 main() { srand( time( NULL ) ); int liczby[ 1000 ]; int licznik = 0; do { liczby[ licznik ] =( rand() % 7 ) + 4; licznik++; } while( licznik < 1000 ); licznik = 0; int nr = 1; do { cout << nr << ". " << liczby[ licznik ] << endl; licznik++; nr++; } while( licznik < 1000 ); return 0; }
|
|
hit |
» 2017-02-03 14:56:59 Skąd wniosek, że od 700? Tak na marginesie losujesz 1000 liczb, a nie 999.
Edit: Tak jak myślałem. Konsola windows ma domyślnie ustawiony bufor ( wysokość ) na 300. Stąd nie widzisz pozostałych wartości, które się "nadpisują" i wyświetla tylko ostatnie 300. Możesz to zmienić wchodząc w w konsoli we właściwości -> układ i zmienić rozmiar buforu ekranu.
Możesz także wyświetlać te liczby po przecinku, a nie w wierszach. Jeśli jednak chodzi o sam temat zadania, to w tej drugiej pętli powinieneś te wartości sumować, a poza nią wyświetlić tą sumę. Będzie to tylko jeden wyświetlony rekord, a nie 1000.
|
|
rambosek |
» 2017-02-04 03:46:31 pozwoliłem sobie uzupełnić Twój kod, jednak spróbuj zrobić to sam do końca zanim to przeanalizujesz. Też od niedawna uczę się programować i zrobiłem to czysto treningowo dla siebie :P #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int main() { srand( time( NULL ) ); int liczby[ 1000 ]; int licznik = 0; int suma = 0; int nr = 1; do { liczby[ licznik ] =( rand() % 7 ) + 4; cout << nr << ". " << liczby[ licznik ] << endl; suma += liczby[ licznik ]; licznik++; nr++; } while( licznik < 999 ); cout << suma; return 0; }
|
|
carlosmay |
» 2017-02-04 10:52:03 Jeśli nie wymusza tego sytuacja, korzystaj z pre- zamiast postinkrementacji. Post- tworzy obiekt tymczasowy (dodakowa operacja kopiowania), a pre- nie; Przy dużych obiektach, może to mieć znaczenie. |
|
rambosek |
» 2017-02-04 12:57:47 carlosmay
a w którym przypadku jest tu postinkrementacja bo ja chyba nie rozumiem? I czy da się to inaczej zrobić? |
|
carlosmay |
» 2017-02-04 14:59:13 Operacje matematycznePrzy preinkrementacji zwrócona jest bezpośrednio zmodyfikowana wartość. Przy postinkrementacji wykonywana jest kopia obecnej wartości, następnie zwiększana jest oryginalna wartość, następnie zwrócona wcześniej wykonana kopia. |
|
rambosek |
» 2017-02-04 16:19:45 Wystarczy dać ++ przed zmienna a nie po? a czy mógłbyś podać jakiś przykład, gdzie rzeczywiście to ma znaczenie duże? Nie cały kod tylko przykład jakiegoś programu. Rozumiem że odczują to dopiero mega zaawansowane programy które wykonują miliony operacji? ;P |
|
carlosmay |
» 2017-02-04 16:32:27 Przykłady nie wiele dadzą. Przyjmij, że ++zmienna jest lepiej, niż zmienna++ jeśli nie ma potrzeby inkrementacji, po użyciu zmiennej. edit: #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int main() { srand( time( nullptr ) ); constexpr std::size_t rozmiar { 1000 }; int liczby[ rozmiar ]; std::size_t licznik { }; int suma { }; int nr { 1 }; int start { 4 }; int stop { 10 }; do { liczby[ licznik ] =( rand() %( stop - start + 1 ) ) + start; cout << nr << ". " << liczby[ licznik ] << endl; suma += liczby[ licznik++ ]; ++nr; } while( licznik < rozmiar ); cout << suma; return EXIT_SUCCESS; } |
|
« 1 » |