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

Tablice jednowymiarowe,

Ostatnio zmodyfikowano 2016-07-04 14:19
Autor Wiadomość
a_jasieniecki
Temat założony przez niniejszego użytkownika
Tablice jednowymiarowe,
» 2016-07-02 20:20:29
Witam! Kolejny temat z tablicami, konkret zadanie domowe, naskrobałem coś co nie sumuje mi prawidłowo wartości tablic, przy danych z zadania wyskoczyła mi jakaś dziwna suma więc zmieniłem na losowanie od jeden w zakresie jeden(:)) i dalej lipka więc wpadłem na genialny pomysł że mimo zamknięcia aplikacji dane dalej gdzieś tam siedzą więc wrzuciłem pętlę która najpierw przypisywała wszystkie wartości na 0 ale i tak dostaje jakiś chory wynik. rzucicie na to okiem?
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>


using namespace std;

int main() {
    srand( time( NULL ) );
    int liczby[ 999 ], licznik, suma;
    suma = 0;
    licznik = 0;
   
   
    do {
        licznik++;
        liczby[ licznik ] =( rand() % 1 ) + 1;
       
        cout << liczby[ licznik ] << endl;
    } while( licznik < 999 );
   
    licznik = 0;
   
    cout << "Sumowanie" << endl;
    do {
       
       
        suma += liczby[ licznik ];
        licznik++;
       
    } while( licznik < 999 );
   
    cout << suma << endl;
   
    return 0;
}
P-149625
a_jasieniecki
Temat założony przez niniejszego użytkownika
:)
» 2016-07-02 20:25:35
Naprawiłem to w ten sposób że przy inicjalizacji tablicy przypisałem wartości początkowe na 0
int liczby[ 999 ] = { 0 };
Dzięki
P-149626
karambaHZP
» 2016-07-02 21:23:58
Naprawiłem to
Tylko zatuszowałeś niedoróbkę. Program i tak nie liczy prawidłowo.

Błąd jest tutaj. Pomijasz pierwszy element tablicy przy zapisie losowanych wartości.
C/C++
licznik = 0;


do {
    licznik++; // inkrementacja licznika powinna być po przypisaniu wartości do elementu tablicy
    liczby[ licznik ] =( rand() % 1 ) + 1; // pierwsza wartość jest zapisana w liczby[1]
   
    cout << liczby[ licznik ] << endl;
} while( licznik < 999 );


Inicjalizacja tablicy zerami spowodowała, że nie dodaje teraz przypadkowej wartości z liczby[0].
Inkrementuj wartość licznika po przypisaniu wartości do tablicy, bo pomijasz pierwszy element tablicy.
Teraz sumowanie też jest nieprawidłowe, bo dodajesz o jedną wylosowaną wartość mniej.

Zapoznaj się z techniką debugowania.

P-149627
a_jasieniecki
Temat założony przez niniejszego użytkownika
Dziękuje :)
» 2016-07-04 10:33:09
Dzięki za odpowiedź myślałem że temat zamknięty i olałem dalej błędny wynik, zapominając iż w tablicy[999] jest tysiąc elementów. Sprawdziłem kilka wariacji w tym kodzie i opcja jest taka:

C/C++
int liczby[ 999 ], licznik, suma;
suma = 0;
licznik = 0

do {
   
    liczby[ licznik ] =( rand() % 1 ) + 1;
    licznik++;
   
    cout << licznik << ". " << liczby[ licznik - 1 ] << endl;
} while( licznik <= 999 );
//zmiana na mniejsze v równe badz mniejsze od 1000
P-149662
carlosmay
» 2016-07-04 11:12:26
zapominając iż w tablicy[999] jest tysiąc elementów.
Jest tyle elementów, ile jest zadeklarowane, czyli 999.
P-149664
a_jasieniecki
Temat założony przez niniejszego użytkownika
:)
» 2016-07-04 11:46:09
C/C++
do {
   
    liczby[ licznik ] =( rand() % 1 ) + 1;
   
    cout << licznik << ". " << liczby[ licznik ] << endl;
    licznik++;
} while( licznik < 999 );
//Dlaczego przy przypisaniu licznik<=999 rozszerza tablice o dodatkowe pole a przy licznik<=1000 liczy bez końca?
P-149666
carlosmay
» 2016-07-04 14:19:06
Dla licznika większego od 998 (ostatni w tablicy 999 elementów) wychodzisz poza zakres tablicy i program ma niedefiniowane zachowanie.
P-149672
« 1 »
  Strona 1 z 1