Funkcja sumujaca Edity(Rekurencja)

0

Mam taką funkcje

 void suma(int a=1, int b=15, int f=19)
{
   String c;
   int d=0;
      for (int i=a; i < b; i++)
          {c = dynamic_cast<TEdit *>(FindComponent("Edit" + (String)i))->Text;
            d=d - StrToInt(c);}
      for (int i=b; i <b+3; i++)
          {
          c = dynamic_cast<TEdit *>(FindComponent("Edit" + (String)i))->Text;
          d=d + StrToInt(c);
          }
   
   dynamic_cast<TLabel *>(FindComponent("Label" + (String)f))->Caption = IntToStr(d);
}

Pewne Edity sa sumowane pewne odejmowane ... i wartosci jest wpisywana do Labela okreslonego.
Chce zrobic za pomoca rekurencji, aby zaoszczedzic na kodzie.... i robie w ten sposob

void suma(int a=1, int b=15, int f=19)
{
   String c;
   int d=0;
      for (int i=a; i < b; i++)
          {c = dynamic_cast<TEdit *>(FindComponent("Edit" + (String)i))->Text;
            d=d - StrToInt(c);}
      for (int i=b; i <b+3; i++)
          {
          c = dynamic_cast<TEdit *>(FindComponent("Edit" + (String)i))->Text;
          d=d + StrToInt(c);
          }
   if (b<204)
    {
    suma(a+17,b+17,f+1);
    }
   dynamic_cast<TLabel *>(FindComponent("Label" + (String)f))->Caption = IntToStr(d);
}
 

Mam 204 Edity wiec funkcja powinna sie wykonywac dopoki b bedzie mniejsze od 204 ... Zreszta pisze logiczne to powinno byc... program sie kompiluje ale przy uzyciu funkcji zawiesza sie i wyskakuje blad ... cos w styl ` is not integer value.... i odsyla mnie do linijki z rekurencja .... jak dla mnie to powinno dzialac ... no ale moze ma ktos pomysl czemu program sie sypie....

0

@MajQel, już raz ci to proponowałem przy poprzednim problemie.
Gdyby skorzystałeś nie było by też tego problemu.
Stwórz tabelkę TEdit *Tb[17]; w klasie.
W konstruktorze ją wypełnij.
Tb[0]=Edit1;
Tb[1]=Edit2;
I żadnych cudactw z wyszukiwaniem wg nazwy.

0

No widzisz wlasnie nie bo tutaj chodzi o cos calkowicie innego. Z problemem juz sobie poradzilem... zwyczajnie podalem nierealny warunek .... W kazdym badz razie staram sie pracowac na tym co mniej wiecej umiem.... przynajmniej wiem co w programie jest co.... i wydaje mi sie ze zaoszczedzam mnostwo miejsca piszac funkcje rekurencyjna .... a co do poprzedniego problemu.... poki co sobie odpuscilem ale w kazdym badz razie skorzystam raczej z pierwszej opcji jaka zaproponowales (ten przykladowy kod).

0

Grubo się mylisz, bo tak by wyglądała twoja suma przy zastosowaniu tego co wcześniej powiedziałem:

void suma()
  {
   for(int m=0;m<12;++m)
      {
       int d=0;
       for (int i=0;i<14;++i) d+=StrToInt(Ed[m][i]->Text);
       for (int i=14;i<17;++i) d-=StrToInt(Ed[m][i]->Text);
       Lb[m]->Caption=IntToStr(d);
      }
  }

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