CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Tablice w klasach. Dziwny problem

Tablice w klasach. Dziwny problem

dział ogólny

Re: Tablice w klasach. Dziwny problem

Nowy postprzez Cyfrowy Baron » wtorek, 7 września 2010, 11:27

To T to zwyczaj wzięty z Delphi (podejrzewam, że od "type"), i nikt poza programistami Delphi i C++ Buildera nie stosuje go.


No, a my tutaj w większości zajmujemy się C++Builder'em. Ja osobiście tak przyzwyczaiłem się do tej litery T, że jej brak bywa dla mnie mylący.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Tablice w klasach. Dziwny problem

Nowy postprzez Krzysiu555 » wtorek, 7 września 2010, 22:39

Tak. Powinienem był najpierw dokładnie przejrzeć. faktycznie dwa razy zadeklarowana. spodziewałem się jakiegoś podstępu.

Dzięki za sugestie co do nazewnictwa klas i funkcji ;)
Avatar użytkownika
Krzysiu555
Intelektryk
Intelektryk
 
Posty: 161
Dołączył(a): sobota, 23 sierpnia 2008, 16:55
Podziękował : 2
Otrzymał podziękowań: 1
System operacyjny: Windows 7 Professional 64
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 0
    Windows 7Firefox

Re: Tablice w klasach. Dziwny problem

Nowy postprzez Krzysiu555 » czwartek, 9 września 2010, 21:16

mam nadzieję że nie zamęczę was tymi pytaniami...;\

otóż potrzebuję znaleźć kartę niefunkcyjną w REKA gracza. tj. taką której liczba oczek jest z przedziału 5-10. mam taki kod:
KOD cpp:     UKRYJ  
for(int i=0;i<REKA->Count;i++)
                {
                        if(REKA->Values[REKA->Names[i]] < 11 && REKA->Values[REKA->Names[i]] > 4)
                        {
                                odpowiedz =  REKA->Names[i] + "=" + REKA->Values[REKA->Names[i]];
                        }
                }

ale po jego wykonaniu odpowiedz jest puste mimo że na pewno ma taka kartę w ręku...
Avatar użytkownika
Krzysiu555
Intelektryk
Intelektryk
 
Posty: 161
Dołączył(a): sobota, 23 sierpnia 2008, 16:55
Podziękował : 2
Otrzymał podziękowań: 1
System operacyjny: Windows 7 Professional 64
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 0
    Windows 7Firefox

Re: Tablice w klasach. Dziwny problem

Nowy postprzez Cyfrowy Baron » czwartek, 9 września 2010, 22:02

Kolego, :evil: nie możesz porównywać wartości typu String z int. Patrz uważniej co robisz. Musisz dokonywać konwersji.
Przede wszystkim to: REKA->Values[REKA->Names[ i ]] zwraca wartość typu String, więc nie możesz tego porównywać z liczbą nawet jeżeli ta wartość to jest liczba, istotny jest tutaj typ zmiennej. Podstawowe pytanie, czy REKA->Values[REKA->Names[ i ]] zwraca tekst będący liczbą? Jeżeli tak, to kod powinien mieć taką postać:

KOD cpp:     UKRYJ  
 for(int i = 0; i < REKA->Count; i++)
 {
  int val = REKA->ValueFromIndex[i ].ToIntDef(0); // do konwersji użyłem funkcji ToIntDef

  if( val > 4 && val < 11 )
  {
    odpowiedz =  REKA->Strings[1]; /* tak to się robi, anie nie tak: REKA->Names[i ] + "=" + REKA->Values[REKA->Names[i ]]; bo i po jaką cholerę tak to rozpisujesz */
  }
 }
I zacznij formatować kod w taki sposób by był czytelny.

Funkcja ToIntDef(domyślna wartość) konwertuje tekst na liczbę o ile tekst zawiera tylko liczbę, w przeciwnym razie zwraca wartość domyślną podaną jako argument funkcji.
Co do konwersji to koniecznie zapoznaj się w serwisie Cyfrowy Baron z działem: porady -> zmienne.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Tablice w klasach. Dziwny problem

Nowy postprzez Krzysiu555 » czwartek, 9 września 2010, 23:37

dzięki. tym razem zapomniałem o tym.
Avatar użytkownika
Krzysiu555
Intelektryk
Intelektryk
 
Posty: 161
Dołączył(a): sobota, 23 sierpnia 2008, 16:55
Podziękował : 2
Otrzymał podziękowań: 1
System operacyjny: Windows 7 Professional 64
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 0
    Windows 7Firefox

Re: Tablice w klasach. Dziwny problem

Nowy postprzez Krzysiu555 » poniedziałek, 27 września 2010, 17:53

mam jeszcze takie pytanko (mam nadzieję że będzie proste i nie zajmę dużo czasu)
to jest fragment funkcji która odpowiada na zadaną w zmiennej karta kartę np. odpowiedz("2 trefl")
już większość mam zrobioną ale z tym nie umiem sobie poradzić. chcę by na kartę funkcja odpowiedziała byle jaką w takim samym kolorze. i tak...
KOD cpp:     UKRYJ  
                kolor = karta.AnsiLastChar(); // laicki sposób rozróżniania kolorów: kier - r, trefl - l, pik - k, karo - o pobieram kolor karty
                for(i=0;i<REKA->Count;i++)           //przeszukuje wszystkie karty u danego gracza
                {
                        if(REKA->Names[i].AnsiLastChar() == kolor)  //gdy karta jest tego samego koloru
                        {
                                odpowiedz = REKA->Names[i] + "=" + REKA->Values[REKA->Names[i]]; //jest wpisywana w zmienna odpowiedz
                        }
                }
                return odpowiedz; //zwraca wybrana karte

ale po wykonaniu dla np. karta = "5 pik" gdy gracz ma w ręku 8 pik funkcja nic nie zwraca, jest pusta.
Czyżbym znów popełniał gdzieś jakiś laicki błąd?
Avatar użytkownika
Krzysiu555
Intelektryk
Intelektryk
 
Posty: 161
Dołączył(a): sobota, 23 sierpnia 2008, 16:55
Podziękował : 2
Otrzymał podziękowań: 1
System operacyjny: Windows 7 Professional 64
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 0
    Windows 7Firefox

Re: Tablice w klasach. Dziwny problem

Nowy postprzez Cyfrowy Baron » poniedziałek, 27 września 2010, 18:44

Po pierwsze - kolor i karta - co to za typ zmiennych? Po wtóre ile razy mam Tobie pisać: skoro REKA ma taką konstrukcję:

names=values

to po jaką cholerę to rozbijasz:

KOD cpp:     UKRYJ  
odpowiedz = REKA->Names[i] + "=" + REKA->Values[REKA->Names[i]];


skoro identyczny efekt uzyskasz gdy zrobisz tak:

KOD cpp:     UKRYJ  
odpowiedz = REKA->Strings[1];




Sprawdź co zwraca: REKA->Names[i].AnsiLastChar() oraz co zawiera kolor. Wielkość liter ma znaczenie.



Po znalezieniu szukanej karty dobrze byłoby przerwać pętlę:

KOD cpp:     UKRYJ  
for(int i = 0; i < REKA->Count; i++)
{
  if(REKA->Names[i].AnsiLastChar() == kolor)
  {
     odpowiedz = REKA->Names[i] + "=" + REKA->Values[REKA->Names[i]];
     break;
  }
}



W przyszłości pokazuj całe funkcje, gdyż w tym co pokazałeś nie wiadomo co jest czym.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości

cron