Zapis obliczen w StrinGrid

0

Witam mam taki problem że każdej kolumny liczę sumę i zapisuje ją na 1 wierszu danej kolumny a iloczyn 1 kolumnie danego wiersza, a problem polega na tym że wynik przesuwa się o 1, mógł by to ktoś naprawić ?? Dołączam grafika dla objaśnienia.
user image

 void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
int i,j;
for (i=1;i<4;i++)
for (j=1;j<8;j++)
StringGrid1->Cells[i][j]=random(9)+1;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button2Click(TObject *Sender)
{
 int i,j,s,a;
 s=0;
 for (i=1;i<4;i++)
 for (j=1;j<8;j++)
 {

  s=s+StrToInt(StringGrid1->Cells[i][j]);
  StringGrid1->Cells[i+1][0]=s;
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
{
 int i,j,s,a;
 s=0;
 for (i=1;i<4;i++)
 for (j=1;j<8;j++)
 {

  s=s*StrToInt(StringGrid1->Cells[i][j]); // dałem mnozenie(*) i wywala 0 a jak jest + to działa
  StringGrid1->Cells[0][j+1]=s;
}
}
}
0

Jak sformatujesz kod po ludzku to natychmiast zauważysz błąd.
Zmień też nazwy zmiennych, żadnych i, j ma być x, y lub r - jak Row i c jak Column, ewentualnie w, k - wiersz i kolumna

0

Pozmieniałem i nadal nie widzę błędu help.

0

Masz nie tylko rozumieć lecz również zastosować to co powiedziałem.
Jak zastosujesz i nadal nie będziesz widział błędu to wklej poprawiony kod.

0
void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
int x,y;
for (x=1;x<4;x++)
for (y=1;y<8;y++)
StringGrid1->Cells[x][y]=random(9)+1;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button2Click(TObject *Sender)
{
 int x,y,s;
 s=0;
 for (x=1;x<4;x++)
 for (y=1;y<8;y++)
 {

  s=s+StrToInt(StringGrid1->Cells[x][y]);
    StringGrid1->Cells[x+1][0]=s;
}

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
{
 int x,y,s;
 s=0;
 for (x=1;x<4;x++)
 for (y=1;y<8;y++)
 {

  s=s*StrToInt(StringGrid1->Cells[x][y]);
  StringGrid1->Cells[0][y+1]=s;
}
}
}

Poprawiony kod, a jeśli nie jest napisany po ludzku to ja już nie wiem, a co do programu to chodzi o to że losować liczby zaczynam od 1 kolumna i wiersza a kolumny chce wypisać
to dodaje 1 i wtedy przeskakuje na 2.

0

Jak sformatujesz kod po ludzku to natychmiast zauważysz błąd.

0

ok udało mi się thx, a możesz mi powiedzieć czemu mi nie chce mnożyć

void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
int x,y;
for (x=1;x<4;x++)
for (y=1;y<8;y++)
StringGrid1->Cells[x][y]=random(9)+1;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button2Click(TObject *Sender)
{
 int x,y,s;
 s=0;
 for (x=1;x<4;x++)
 {
        for (y=1;y<8;y++)
        {
        s=s+StrToInt(StringGrid1->Cells[x][y]);
        StringGrid1->Cells[x+1][0]=s;
        }
   StringGrid1->Cells[x][0]=s;
 }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{

 int x,y,s;
 s=0;
 for (x=1;x<4;x++)
 {
        for (y=1;y<8;y++)
        {
        s=s*StrToInt(StringGrid1->Cells[x][y]); //<-----------------------------------------------------------------------------
        StringGrid1->Cells[0][y]=s;
        }
 }
}
0

Nie no po kiego włączać TBrain kiedy jest forum?

void __fastcall TForm1::Button2Click(TObject *Sender)
{
 int x,y,s;
 s=0; // masz obliczyć 8 wartości i na te 8 obliczeń jedno zerowanie? WTF?
 for (x=1;x<4;x++)
 {
        for (y=1;y<8;y++)
        {
        s=s+StrToInt(StringGrid1->Cells[x][y]); // istnieje coś takiego jak s+=Wartosc;
        StringGrid1->Cells[x+1][0]=s; // po każdym dodaniu wynik w postaci liczby próbujesz wpisać do jakieś komórki która jest napisem? WTF?
        }
   StringGrid1->Cells[x][0]=s;
 }
}

Reszta to samo.

0

Wypisywanie do komórek działa poprawnie więc nie wiem czemu piszesz że wypisuje znaki, i czemu mi nie działa mnożenie jakiś błąd czy co ??

void __fastcall TForm1::Button2Click(TObject *Sender)
{
 int x,y,s;

 for (x=1;x<4;x++)
 {
        s=0;
        for (y=1;y<8;y++)
        {
        s+=StrToInt(StringGrid1->Cells[x][y]);
        }
        StringGrid1->Cells[x][0]=s;
 }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{

 int x,y,s;

 for (x=1;x<4;x++)
 {
        for (y=1;y<8;y++)
        {
        s=0;
        s*=StrToInt(StringGrid1->Cells[x][y]);
        StringGrid1->Cells[0][y]=s;
        }
 }
}
0

Funkcja Button1Click():

  1. s nie można inicjalizować 0. Jaki jest iloczyn zera i dowolnej liczby?
  2. s należy ustawić przed wejściem do wewnętrznej pętli na pierwszą wartość w zliczanym wierszu (o ile to ma to być iloczyn liczb w wierszu).
  3. Zbyteczny zapis częściowego wyniku. A te częściowe wyniki są nadpisywane w następnym przebiegu zewnętrznej pętli.
0
void __fastcall TForm1::Button1Click(TObject *Sender)
  {
   for(int y=1;y<8;++y)
        {
         int s=1;
         for(int x=1;x<4;++x) s*=StrToInt(StringGrid1->Cells[x][y]);
         StringGrid1->Cells[0][y]=IntToStr(s);
        }
  }
0

?

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