Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Lekcja 18 Zadanie

Ostatnio zmodyfikowano 2017-02-04 16:32
Autor Wiadomość
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.


C/C++
#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;
}
P-157268
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.
P-157276
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

C/C++
#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;
}
P-157316
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.
P-157319
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ć?
P-157321
carlosmay
» 2017-02-04 14:59:13
» Kurs C++ » Poziom 1Operacje matematyczne lekcja
Przy 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.
P-157327
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
P-157331
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:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    srand( time( nullptr ) );
    // używamy nazwanych zmiennych, samo magiczne 1000 nic nie mówi o swoim przeznaczeniu
    constexpr std::size_t rozmiar { 1000 }; // const std::size_t rozmiar = 1000;
    int liczby[ rozmiar ];
    std::size_t licznik { }; // int licznik = 0;
    int suma { };
    int nr { 1 };
    int start { 4 };
    int stop { 10 };
    do
    {
        liczby[ licznik ] =( rand() %( stop - start + 1 ) ) + start; // można poczytać o <random>
        cout << nr << ". " << liczby[ licznik ] << endl;
        suma += liczby[ licznik++ ]; // tej sytuacji musi być post-
        ++nr; // w tej sytuacji pre- jest wydajniej (można też dać post- w linii wypisawania wartości)
    } while( licznik < rozmiar );
   
    cout << suma;
   
    return EXIT_SUCCESS; // mówi nam jaki jest stan wyjściowy programu,
    // w C++ można opuścić zwracanie wartości do systemu
}
P-157333
« 1 »
  Strona 1 z 1