Problem z tablicą

0

Cześć,
Dopiero się uczę programowania, więc prosiłbym o wytłumaczenie mojego błędu w jakiś prosty zrozumiały dla mnie sposób.
Stworzyłem mały programik do obliczania średniej, użyłem int jako ilość ocen, którą ma podać użytkownik, który miał wyznaczyć ilość pól w tabeli. I wywala błąd właśnie przy zdefiniowanej zmiennej tabeli. Bardzo bym prosił, by ktoś pokazał mi jak powinno być to prawidłowo wykonane.

#include <iostream>
#include <windows.h>
#include <stdio.h>

using namespace std;

int ilosc;
float oceny[ilosc-1], suma, srednia;

int main()
{
    cout << "Witaj w programie liczacym srednia!" << endl << "Kliknij ENTER jesli chcesz kontynuowac.";
    getchar();
    cout << endl <<  "Trwa wczytywanie..." << endl;
    Sleep(5000);
    cout << "Prosze, podaj ilosc Twoich ocen: ";
    cin >> ilosc;
    for(int i=0; i<5; i++)
    {
        cout << "Prosze podaj " << i+1 << "ocene: ";
        cin >> oceny[i];
        suma = suma + oceny[i];
    }
    cout << "Wszystkie oceny zostaly podane do systemu!" << endl << "Trwa obliczanie sredniej...";
    Sleep(3000);
    srednia = suma/ilosc;
    cout << "Twoja srednia wynosi " << srednia << ".";
    return 0;
}

EDIT: Oczywiście to wczytywanie w programie jest prowizoryczne - w celu ćwiczeń.
EDIT2: Zapomniałem jeszcze w pętli zmienić i<ilosc, ale to tylko drobiazg.

0

Dlaczego ilosc-1 ?
A jak ktoś poda jedną ocenę to będzie taka tablica oceny[0] zadeklarowana ?

0

Rzeczywiście może się trochę zagalopowałem, ale to chyba nie jest problemem, że program nie chce ruszyć. A no tak, przecież nawet jakby do ilosc dodać 5 to wyjdzie oceny[5], zaczynając od 0 to 5 i tak nie zostanie wliczona.

0

Tablice zadeklaruj ze stałą wartością np
MAX _OCEN = 20

0
gk1982 napisał(a):

Tablice zadeklaruj ze stałą wartością np
MAX _OCEN = 20

Mógłbyś do tego kod napisać?
Dopiero zaczynam się uczyć tych tablic i wolę się upewnić co gdzie wpisać.

1

Jasio dostał 5 jabłek. Zjadł 3. Ile jabłek ma Jasio?

Inicjuj zmienne przed użyciem.

0

int MAX_OCEN = 20;
float oceny[MAX_OCEN];

0
#include <iostream>
#include <windows.h>
#include <stdio.h>

using namespace std;
float suma, srednia;

int main()
{
    cout << "Witaj w programie liczacym srednia!" << endl << "Kliknij ENTER jesli chcesz kontynuowac.";
    getchar();
    cout << endl <<  "Trwa wczytywanie..." << endl;
    Sleep(5000);
    cout << "Prosze, podaj ilosc Twoich ocen: ";
    int ilosc;
    cin >> ilosc;
    float oceny[ilosc];
    for(int i=0; i<ilosc; i++)
    {
        cout << "Prosze podaj " << i+1 << " ocene: ";
        cin >> oceny[i];
        suma = suma + oceny[i];
    }
    cout << "Wszystkie oceny zostaly podane do systemu!" << endl << "Trwa obliczanie sredniej...";
    Sleep(3000);
    srednia = suma/ilosc;
    cout << "Twoja srednia wynosi " << srednia << ".";
    return 0;
}

@Delor, to miałeś na myśli? Dlaczego te zmienne nie mogą zostać poza funkcją programu?

1
  1. Używaj odpowiednich tagów do wpisywania kodu - będzie czytelniejszy
  2. Czy uczysz się z bardzo popularnych filmów pewnego pana o nazwisku na Z ?
  3. To nie jest do końca poprawnym kodem C++
cin >> ilosc;
float oceny[ilosc];

Ta konstrukcja jest obsługiwana przez niektóre kompilatory jako rozszerzenie, ale formalnie rozmiar tak deklarowanej tablicy musi być znany w momencie kompilacji programu.
4. Zamiast o tablicy ucz się o std::vector

0
Bartłomiej Golenko napisał(a):
  1. Używaj odpowiednich tagów do wpisywania kodu - będzie czytelniejszy
  2. Czy uczysz się z bardzo popularnych filmów pewnego pana o nazwisku na Z ?
  3. To nie jest do końca poprawnym kodem C++
cin >> ilosc;
float oceny[ilosc];

Ta konstrukcja jest obsługiwana przez niektóre kompilatory jako rozszerzenie, ale formalnie rozmiar tak deklarowanej tablicy musi być znany w momencie kompilacji programu.
4. Zamiast o tablicy ucz się o std::vector
AD1. Właśnie teraz zauważyłem pomarańczowe okienko odnośnie formatowania postu, dzięki wielki.
AD2. Tak, uczę się. Oglądałem w poniedziałek filmik właśnie odnośnie tablic u niego i teraz po świętach chcę sobie powtórzyć materiał i właśnie wpadło mi do głowy pomysł, że użytkownik mógłby sam wprowadzać ilość ocen.
AD3. Troszkę niezrozumiale dla mnie to napisałeś. Tzn., że nie mogę tak jakby "w locie" przypisać tej tablicy wielkości? Musi być ona z góry ustalona?
AD4. Dzięki, sprawdzę.

0

OK, więc pierwsze co możesz zrobić dla swojej przyszłej kariery programistycznej - przestań oglądać te filmy. Zelent uczy wielu rzeczy które są kompletnie przestarzałe i na dodatek wyrabia w początkujących programistach złe nawyki. Jednym z najgorszych złych nawyków jest deklarowanie zmiennych "poza funkcją" (czyli jako tak zwanych zmiennych globalnych).

Ad "7"
Dokładnie tak. Zgodnie ze standardem C++ nie możesz w ten sposób "w locie" określić sobie rozmiaru tablicy. G++ (i pewnie CLang) to obsługuje jako rozszerzenie, ale już kompilator z VIsual Studio potraktuje to jako błąd.

0
Bartłomiej Golenko napisał(a):

OK, więc pierwsze co możesz zrobić dla swojej przyszłej kariery programistycznej - przestań oglądać te filmy. Zelent uczy wielu rzeczy które są kompletnie przestarzałe i na dodatek wyrabia w początkujących programistach złe nawyki. Jednym z najgorszych złych nawyków jest deklarowanie zmiennych "poza funkcją" (czyli jako tak zwanych zmiennych globalnych).

Ad "7"
Dokładnie tak. Zgodnie ze standardem C++ nie możesz w ten sposób "w locie" określić sobie rozmiaru tablicy. G++ (i pewnie CLang) to obsługuje jako rozszerzenie, ale już kompilator z VIsual Studio potraktuje to jako błąd.

To mógłbyś polecić jakiegoś YouTube'ra, który uczy bardziej teraźniejszego kodu?
Bardzo bym chciał uczyć się z filmów bo czasem czytania mam dość.
Jestem w pierwszej klasie technikum i uczę się z filmów tylko dlatego, że niektórzy nauczyciele sprawiają wrażenie jakby w ogóle nie wiedzieli co robią i przypadkiem dostali tytuł inżyniera.
EDIT: Czyli w C++ powinno się definiować zmienne od razu przed ich użyciem?

0

Nie polecę Ci żadnego youtubera z bardzo prostej przyczyny - nie znam żadnego dobrego, uczącego na poziomie "podstawowym" (co nie znaczy że takich nie ma !).
Poza tym - ja jestem z pokolenia które chyba zdecydowanie woli czytać niż oglądać ;)

Zmienne MUSISZ zdefiniować przed ich pierwszym użyciem. Jeśli to pierwsze użycie polega na odczytaniu zawartości zmiennej, to musisz ją wcześniej zainicjalizować (nadać jej wartość).
W C++ generalnie definiujesz zmienne lokalne tuż przed ich pierwszym użyciem.

0
Bartłomiej Golenko napisał(a):

Nie polecę Ci żadnego youtubera z bardzo prostej przyczyny - nie znam żadnego dobrego, uczącego na poziomie "podstawowym" (co nie znaczy że takich nie ma !).
Poza tym - ja jestem z pokolenia które chyba zdecydowanie woli czytać niż oglądać ;)

Zmienne MUSISZ zdefiniować przed ich pierwszym użyciem. Jeśli to pierwsze użycie polega na odczytaniu zawartości zmiennej, to musisz ją wcześniej zainicjalizować (nadać jej wartość).
W C++ generalnie definiujesz zmienne lokalne tuż przed ich pierwszym użyciem.

No to może jakaś strona Internetowa? Na której jest wszystko, ładnie wytłumaczone? Mógłbyś zdradzić w jaki sposób Ty się uczyłeś programowania?

0

Ja programowania uczyłem się w czasach komputerów 8 bitowych... generalnie nie polecam mojej ścieżki (różne dialekty BASIC-a, potem Action! i assembler 6502 w którym z powodu braku dokumentacji "zgadywałem" znaczenie niektórych rozkazów)...

https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list
Do tej listy dorzuć sobie
Symfonia C++/Opus Magnum C++ (Grębosz) - ale poczytaj wcześniej żeby sprawdzić czy pasuje Ci styl (nie czytaj opinii ludzi którzy już potrafią programować, bo im zazwyczaj styl Grębosza nie pasuje ;) ).

1 użytkowników online, w tym zalogowanych: 0, gości: 1