Twój błąd od początku polegał na tym, że miałeś niezsynchronizowane tablice float z tabelą StringGrid. Po pierwsze źle liczyłeś tablice bo od 1, a gdy to poprawiłeś, to nie poprawiłeś odwołania do tabeli StringGrid i błąd dalej występował. a wystarczyło liczyć tablice float od zero i przesunąć odwołanie do StringGrid z I + 1 na i + 2 i wszystko byłoby dobrze.
ale ty tymczasem tworzysz coś takiego i myślisz, że już jest dobrze:
A guzik tam załatwione!
to:
- Kod: Zaznacz cały
for(int i=1;i<41;i++)
{
i to:
- Kod: Zaznacz cały
waga[i]=StrToFloat(Form1->StringGrid1->Cells[i+1][0]);
tablica waga[x] przyjmuje na początku wartość 1 gdyż int na starcie równa się 1. Pętla liczy do 40 (i < 41) nie przekracza rozmiaru tablicy, ale też nie liczy od pierwszego elementu, który pozostaje niewypełniony, gdyż tablica waga może zawierać się tylko w zakresie od 0 do 40, a ty tymczasem liczysz ją od 1 do 40, czyli 1 element tablicy jest nadmiarowy, pusty, niewykorzystany. Potrzebujesz tablicy zawierającej 40 elementów a zadeklarowałeś tablicę zawierającą 41 elementów.
ten fragment kodu powinien wyglądać tak:
- Kod: Zaznacz cały
for(int i = 0; i < 40; i++)
{
if(Form1->StringGrid1->Cells[i + 2][0] != "") // i + 2
{
waga[i] = StrToFloat(Form1->StringGrid1->Cells[i + 2][0]);
}
else // ten fragment jest zbędny gdyż else jest przeciwieństwem if: if(Form1->StringGrid1->Cells[i + 2][0] == "")
/* if else moze mieć tylko dwa stany w tym przypadku albo jest tekst albo go nie ma */
{
waga[i]=0,00;
}
}
w dalszej części kodu popełniasz te same błędy.
A co to ma być:
- Kod: Zaznacz cały
wynik=(ocena[1]*waga[1]+ocena[2]*waga[2]+ocena[3]*waga[3]+ocena[4]*waga[4]+ocena[5]*waga[5]+ocena[6]*waga[6]+ocena[7]*waga[7]+ocena[8]*waga[8]+ocena[9]*waga[9]+ocena[10]*waga[10]+ocena[11]*waga[11]+ocena[12]*waga[12]+ocena[13]*waga[13]+ocena[14]*waga[14]+ocena[15]*waga[15]+ocena[16]*waga[16]+ocena[17]*waga[17]+ocena[18]*waga[18]+ocena[19]*waga[19]+ocena[20]*waga[20]+ocena[21]*waga[21]+ocena[22]*waga[22]+ocena[23]*waga[23]+ocena[24]*waga[24]+ocena[25]*waga[25]+ocena[26]*waga[26]+ocena[27]*waga[27]+ocena[28]*waga[28]+ocena[29]*waga[29]+ocena[30]*waga[30]+ocena[31]*waga[31]+ocena[32]*waga[32]+ocena[33]*waga[33]+ocena[34]*waga[34]+ocena[35]*waga[35]+ocena[36]*waga[36]+ocena[37]*waga[37]+ocena[38]*waga[38]+ocena[39]*waga[39]+ocena[40]*waga[40])/wagi;
Należy zastosować pętle tak jak podał
polymorphism. Po jaką cholerę tworzysz taki ciąg?!
Nie tak:
- Kod: Zaznacz cały
Form1->StringGrid1->Cells[45][p]=CurrToStrF(wynik,ffFixed,2);
lecz tak:
- Kod: Zaznacz cały
Form1->StringGrid1->Cells[45][p] = FloatToStrF(wynik, ffFixed, 2);
Prosisz o pomoc, a gdy udzielamy Tobie wskazówek i pokazujemy błędy, które powinieneś poprawić, to Ty dalej robisz po swojemu. Po co wiec pytasz?
Twój kod jest niepoprawny i wszyscy, którzy mają o tym pojęcie widzą to na pierwszy rzut oka. Za chwile, znów coś nie będzie działało, a Ty znów będziesz się dziwił i pytał dlaczego nie działa.
Popraw ten kod, bo to co napisałeś to czysta
H E R E Z J A.