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

Lekcja 18 praca domowa

Ostatnio zmodyfikowano 2012-09-19 20:58
Autor Wiadomość
koza101101
Temat założony przez niniejszego użytkownika
Lekcja 18 praca domowa
» 2012-09-19 19:53:13
Treść zadania: 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.

Mój kod:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    srand( time( NULL ) );
    int wliczby[ 999 ];
    int i, x = 0;
    int y = 1;
    int suma = 0;
    do
    {
        wliczby[ i ] =( rand() % 7 ) + 4;
        i++;
    } while( i < 998 );
   
    i = 0;
    cout << "Wylosowane liczby to : ";
    do
    {
        cout << wliczby[ i ] << endl;
        i++;
    } while( i < 998 );
   
    do
    {
        suma = suma + wliczby[ x ] + wliczby[ y ];
        x = x + 2;
        y = y + 2;
    } while( y != 998 );
   
    cout << "\nSuma tych liczb to : " << suma;
   
    return 0;
}

Program się kompiluje, lecz kilka sekund po uruchomieniu programu (konsola jest pusta) program się wyłącza (Program Untitled.exe przestał działać. [Windows 7]). Myślałem że wychodzę poza zakres tablicy, lecz problem tkwi w czymś innym.
P-65223
DejaVu
» 2012-09-19 20:01:33
Na bank wychodzisz poza zakres tablicy w ostatniej pętli.
P-65226
koza101101
Temat założony przez niniejszego użytkownika
» 2012-09-19 20:14:52
   
C/C++
do
{
    suma = suma + wliczby[ x ] + wliczby[ y ];
    x = x + 2;
    y = y + 2;
} while( y < 998 );

Teraz powinno być ok? Program dalej nie działa. Nawet gdy wpiszę (y < 990).
P-65229
DejaVu
» 2012-09-19 20:32:56
Wiesz... powinieneś zastanowić się samodzielnie jak rozwiązać problem i co jest jego przyczyną. Gwarantuję Ci jednak, że jeżeli aplikacja Ci się wysypuje to tylko i wyłącznie dlatego, że jest źle napisana (czyli wychodzisz poza zakres tablicy). Przemyśl swoje rozwiązanie, wykomentuj część kodu, aby namierzyć który fragment kodu jest odpowiedzialny za wysypywanie się aplikacji. Samodzielność rozwiązywania problemów to podstawa - tego trzeba się po prostu nauczyć :)
P-65235
AKZ
» 2012-09-19 20:39:06
Nie działa, dlatego że zmienną x tworzysz wewnątrz funkcji main(), czyli jest to zmienna na stosie. Wszystkie zmienne na stosie, którym sami nie podamy wartości, mają wartość losową. Ty nie zainicjowałeś zmiennej x, dlatego w pierwszej pętli
do...while
, w której próbujesz przypisać losowe wartości kolejnym elementom tablicy, wartości są przypisywane do złych elementów tablicy. Zmień:
int i, x = 0;

na
int i = 0, x = 0;


Poza tym musisz zmienić warunek w każdej pętli na
i < 999
, albo na
i <= 998
, bo nigdy nie przypiszesz wartości do ostatniego elementu tablicy (zastanów się dlaczego).
Możesz też skrócić skrypt wypisując w konsoli wartości kolejnych elementów tablicy, zaraz po tym jak przypiszesz im losową wartość.
To samo możesz zrobić z sumowaniem. Możesz to zapisać jako:
suma += wliczby[ i ];

lub jak wolisz
suma = suma + wliczby[ i ];


Musisz jednak to zrobić przed postinkrementacją zmiennej i (i++)
Wynik sumowania wypiszesz po pętli.

Mam nadzieję, że pomogłem :)
P-65237
koza101101
Temat założony przez niniejszego użytkownika
» 2012-09-19 20:55:44
"Ty nie zainicjowałeś zmiennej x"
A nie zmiennej i?

Dzięki tobie z problemem się uporałem ;)
P-65244
AKZ
» 2012-09-19 20:58:10
Masz rację, chodziło o zmienną i. Przejęzyczenie (o ile może być ono pisane) :)
P-65247
« 1 »
  Strona 1 z 1