StringGrid - wyswietlanie średniej w ostatniej kolumnie.

0

Witam,

mam problem aby program w stringGrid w cell[1,10] pokazywal obliczona srednia z pozostalych pol.
Komorki od [0,0] do [0,10] oraz [0,0] do [10,0] to nazwy pol, z reszty ma byc wyliczona srednia.
wazne! w nie wszystkich polach bedzie cos wpisane /jest opcja edycyjna/

1

No i co w związku z tym mamy życzyć pomyślnego rozwiązania problemu czy coś? Wypadało by zadać jakieś pytanie nie uważasz?

0

i co nie wiesz jak się średnią liczy czy nie wiesz jak sprawdzić czy w polu coś jest?

0

moze faktycznie niezbyt przejrzyscie napisalam.
nie moge sie nawet poczatkujaca nazwac:) (z kilka zajec bylo tylko - delphi) mam zrobic program na zaliczenie. robie dzienniczek. pokombinowalam, popatrzylam i cos zrobilam.
marzylo mi sie aby w stringrid wyliczal srednia.a ze przewertowalam google i te forum i nie znalazlam odp., takze pytam.
if StringGrid1.RowCount<>' ' then /gdy jest cos wpisane wtedy oblicza
begin
Suma := Suma + StrToInt(StringGrid.Cells[i, j] / czy tak moze byc?
no i ta nieszczesliwa srednia... ktora nie wiem jak w tym przypadku obliczyc. prosze o to, aby mnie sprawdzic i poprawic, no i ta srednia pokazac jak sie liczy.
z gory dziekuje za jakakolwiek odp.

0

if StringGrid1.RowCount<>' ' then

TStringGrid.RowCount nie jest przypadkiem typu liczbowego?

0
  1. RowCount nie jest typu string tylko integer. Jeżeli chcesz sprawdząć czy w komórce jest jakiś tekst to odwołuj się do własności Cells. A najlepiej to czy tekst jest prawidłową liczba sprawdzisz procedurą Val lub funkcją TryStrToInt. W pomocy Delphi albo wyszukując w google znajdziesz opisy ich użycia.
  2. Własnośc Cells przyjmuje jakby dwie wartości [Kolumna, Wiersz]. Oba indeksowane od zera. Także takie chyba iterowanie po dwoch zmiennych w pętli robisz jest bez sensu. Nie wiem jak prezentują się dane u Ciebie. Ale powinno się raczej po wyzerowaniu zmiennej Suma zrobić Suma := Suma + StrToInt(JakisStringGrid.Cells[ZmiennaOdPierwszegoWierszaOcenyDoOstatniegoWierszaOcen, WierszDanychUcznia]). A na końcu JakisStringGrid.Cells[KolumnaZeSrednia, WierszDanychUcznia] := FloatToStr(Suma div IloscOcen);.
    Przede wszystkim należało by doczytać kompendium Delphi na stronie 4p albo jakiś kurs, jeżeli po zajęciach na uczelni są jakieś braki. Programowanie to nie zgadywane, musisz wiedzieć iozumieć co piszesz i jak to ma działać.
0
Suma:=0;
for y:=1 to StringGrid1.RowCount-1 do for x:=1 to StringGrid1.ColCount-1 do if (x<>1)or(y<>1) then Suma:=Suma+StrToInt(StringGrid.Cells[y,x]);
StringGrid.Cells[1,1]:=FloatToStr(Suma/((StringGrid1.RowCount-1)*(StringGrid1.ColCount-1)-1));
0

olesio
to nie uczelnia a policealna szkola:) nie poszlam tam na typowe programowanie w c ani pascalu tylko na grafike, niestety tylko byla otwarta ogolna informatyka. stad moja obecnosc tutaj.
ale samo programowanie, przedmiot trzeba zaliczyc, coz poczac. jakis program na zliczenie trzeba dac. moglabym skopiowac jakas gierke z netu,ale nie chcialam.w delphi chociaz troche moge sama pokombinowac.
_13th_Dragon
dziekuje bardzo za kod! niestety pokazuje mi sie komentarz ' '' is not a valid integer value '. pewnie kod dobry, tyle ze ja nie moge wpisac nic w stringgrid zeby mi srednia wyliczyl bo wlasnie ten komunikat sie pokazuje. cos poknocilam?

0

Też kończyłem studium policealne. Wprawdzie technik informatyk. Ale wiadomo jeżeli system nauki jest zaoczny, to trzeba się sporo uczyć samodzielnie, jeśli ambinie podchodzimy do tego czy chcemy tylko "prześlizgnąć" przez sesje, czy też czegoś nauczyć. Na pewno ucząc się uważnie na podstawie tego co miałaś na zajęciach da się coś tam w Delphi sklecić, a wiadmo w google materiałów masa. Co do błędu to oczywiscie oznacza on, że pobrany tekst z komórki StringGrida nie jest prawidłową wartością liczbową. Pisałem Tobie jak to sprawdzić. Natomiast aby móc wpisywać cokolwiek do aktywnych komórek StringGrida należy we własności Options ustawić goEditing na True.

0

Options ustawić goEditing na True - tak to mam.

0

mam-edytuje. wczesniej- bez kodu na srednia- moglam ze spokojem wpisywac 'oceny' teraz z kodem, jak chce cos wpisac pokazuje mi komunikat ktory zostal przeze mnie okreslony wyzej

0

Czyli najpewniej kod sprawdzjący średnią masz dopisany w zdarzeniach (zakładka Events Oject Inspectora( dla Twojego StringGrida. Usuń te zdarzenia, a kod sprawdzanie średniej przypisz pod jakis na przykład button. Poza tym, jak pisałem, używając procedury Val lub funkcji TryStrToInt możesz zrobić program idiotoopornym i powodować aby nie zliczał średniej z komórek StringGrida, które nie są prawidłowymi liczbami całkowitymi.

0

dziekuje serdecznie za pomoc i zycze milej nocy :)

0

Może lepiej zostawić to w zdarzeniach, ale dodać try:

try
  Suma:=0;
  for y:=1 to StringGrid1.RowCount-1 do for x:=1 to StringGrid1.ColCount-1 do if (x<>1)or(y<>1) then Suma:=Suma+StrToInt(StringGrid.Cells[y,x]);
  StringGrid.Cells[1,1]:=FloatToStr(Suma/((StringGrid1.RowCount-1)*(StringGrid1.ColCount-1)-1));
except
  StringGrid.Cells[1,1]:='N/A';
end;

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