CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Kłopot ze zmiennymi

Kłopot ze zmiennymi

dział ogólny

Kłopot ze zmiennymi

Nowy postprzez JotEmKa » środa, 1 września 2010, 00:35

Witam,
jestem laikiem, więc pewnie pytanie bardzo banalne. Sama jednak nie potrafię sobie jeszcze z tym poradzić.
1) Pod jednym przyciskiem w aplikacji pobieram dwie daty, pod drugim przyciskiem pobieram sobie zmienną a..
Wszystkie trzy zmienne mam zadeklarowane globalnie (data jako TDateTime).
Pod trzecim przyciskiem wyliczam sobie ilość dni pomiędzy obiema datami i przypisuję sobie wynik do innej zmiennej - i to działa dobrze, natomiast zmienną a mnożę przez inną zmienną uzyskaną w wyniku działań pod trzecim przyciskiem i tutaj pojawia się problem. Okazuje się, że zmienna a ma wartość 0. Co mogę zrobić, żeby zmienna a miała taką samą wartość przez cały czas działania programu?

2) Mam problem również z tymi pobranymi datami. W funkcji if sprawdzam, czy datado nie jest mniejsza od datyod i tutaj wszystko gra.
KOD cpp:     UKRYJ  
if (rokod>rokdo ||  (rokod==rokdo && miesiacod>miesiacdo) || (rokod==rokdo && miesiacod==miesiacdo && dzienod>=dziendo))

W ten sam sposób chcę sprawdzić, czy dataod nie jest mniejsza od daty dzisiejszej (systemowej) i okazuje się, że cały czas system wskazuje, że jest mniejsza, chyba, że ustawię ją na rok 2011.
KOD cpp:     UKRYJ  
if (rokod<st.wYear || (rokod==st.wYear && miesiacod<st.wMonth) || (rokod==st.wYear && miesiacod==st.wMonth && dzienod<=st.wDay))

Proszę o pomoc.
"Wszyscy wiedzą, że coś nie da się zrobić. I wtedy pojawia się ten jeden, który nie wie, że się nie da, i on właśnie to coś robi."
Albert Einstein
Avatar użytkownika
JotEmKa
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): poniedziałek, 30 sierpnia 2010, 16:09
Podziękował : 10
Otrzymał podziękowań: 0
System operacyjny: Windows XP SP3
Kompilator: Borland C++ Builder 6
Gadu Gadu: 0
    Windows XPFirefox

Re: Kłopot ze zmiennymi

Nowy postprzez Cyfrowy Baron » środa, 1 września 2010, 08:51

Podałaś mało kodu.

Operator || używany przez Ciebie w warunku znaczy tyle co lub, ale to pewnie wiesz.

W ten sam sposób chcę sprawdzić, czy dataod nie jest mniejsza od daty dzisiejszej (systemowej) i okazuje się, że cały czas system wskazuje, że jest mniejsza, chyba, że ustawię ją na rok 2011.
KOD cpp:     UKRYJ  
if (rokod<st.wYear || (rokod==st.wYear && miesiacod<st.wMonth) || (rokod==st.wYear && miesiacod==st.wMonth && dzienod<=st.wDay))


W tym warunku brak dataod, ale domyślam się, że chodzi o poszczególne składniki, czyli rokod, miesiacod i dzienod. Jak rozumiem dataod jest większa od daty dzisiejszej.

Warunek jest prawidłowy. Sprawdź czy struktura st. zawiera wartości takie jakich oczekujesz, czyli takie jakie sądzisz, że zawiera, oraz jakie wartości zawierają zmienne rokod, miesiacod i dzienod.



Pod trzecim przyciskiem wyliczam sobie ilość dni pomiędzy obiema datami i przypisuję sobie wynik do innej zmiennej - i to działa dobrze,


jak to wyliczasz?



Wszystkie trzy zmienne mam zadeklarowane globalnie (data jako TDateTime).
[...]
natomiast zmienną a mnożę przez inną zmienną uzyskaną w wyniku działań pod trzecim przyciskiem i tutaj pojawia się problem.


Jak rozumiem mnożysz TDataTime przez TDataTime, lub TDataTime przez int. Możesz je dodawać i odejmować, ale nie mnożyć. Co właściwie chcesz uzyskać mnożąc date przez datę lub liczbę. Pomnóż wartość przez wartość i dodaj lub odejmij do/od daty. Zapoznaj się z tym wątkiem: http://programowanie.cal.pl/forum/viewtopic.php?f=2&t=691
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: Kłopot ze zmiennymi

Nowy postprzez JotEmKa » środa, 1 września 2010, 12:55

Przykładowo podaję dwie daty: 2010-09-03 oraz 2010-09-04, dzisiejsza data to 2010-09-01, a system odpowiada mi, że nie może działać wstecz. Sprawdziłam pobieranie daty, faktycznie jest dzisiejsza.
KOD cpp:     UKRYJ  
 SYSTEMTIME st;
    GetSystemTime(&st);
    String rokdzis=st.wYear;
    String miesiacdzis=st.wMonth;
    String dziendzis=st.wDay;
    TDateTime dataod=Rez_rokodCB->Text+"-"+Rez_miesiacodCB->Text+"-"+Rez_dzienodCB->Text;
    TDateTime datado=Rez_rokdoCB->Text+"-"+Rez_miesiacdoCB->Text+"-"+Rez_dziendoCB->Text;
    TDateTime datadzis=rokdzis+"-"+miesiacdzis+"-"+dziendzis;
   if(Rez_rokodCB->Text<st.wYear||
   (Rez_rokodCB->Text==st.wYear && Rez_miesiacodCB->Text<st.wMonth) ||
   (Rez_rokodCB->Text==st.wYear && Rez_miesiacodCB->Text==st.wMonth && Rez_dzienodCB->Text<=st.wDay))
        ShowMessage("Nie można rezerwowac wstecz!"+datadzis);

W związku z tym, że (jak wyczytałam - kurcze nie mogę znaleźć tej strony, ale będę szukać, jeśli będzie trzeba) daty w formacie TDateTime można od siebie normalnie odejmować, robię to tak:
Później pod trzecim przyciskiem mnożę sobie moją iloscDni * cena(dana pobrana pod drugim przyciskiem, jest int)
KOD cpp:     UKRYJ  
iloscDni=datado-dataod;
do_zaplaty=iloscDni*cena;

może jeszcze taka mała podpowiedź, że zmienna cena po pobraniu musiała zostać zapisana jako String (pomimo, że jest cyfrą) i zamieniona na int, ponieważ w innym przypadku program szalał, zrobiłam to tak:
KOD cpp:     UKRYJ  
String cena1=Query3->FieldByName("cena_p")->AsString;
int cena = atoi(cena1.c_str());
Avatar użytkownika
JotEmKa
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): poniedziałek, 30 sierpnia 2010, 16:09
Podziękował : 10
Otrzymał podziękowań: 0
System operacyjny: Windows XP SP3
Kompilator: Borland C++ Builder 6
Gadu Gadu: 0
    Windows XPFirefox

Re: Kłopot ze zmiennymi

Nowy postprzez Cyfrowy Baron » środa, 1 września 2010, 13:34

Zbyt wiele rzeczy jest tutaj źle!

KOD cpp:     UKRYJ  
TDateTime dataod=Rez_rokodCB->Text+"-"+Rez_miesiacodCB->Text+"-"+Rez_dzienodCB->Text;



Jak to możliwe, że kompilator nie zgłasza błędu przy próbie skompilowania tego kodu?! :shock: Jak możesz przypisywać typ AnsiString lub UnicodeString bezpośrednio do obiektu typu TDateTime?! :o Kiedyś używałem środowiska C++Builder 6, ale nawet w tamtej wersji nie można tego tak zrobić!



Jeżeli chcesz przypisać datę do obiektu typu TDateTime to musisz ją enkodować, a format daty też nie jest dowolny, czyli to nie jest tak, że Ty sobie użyjesz jako separatora kreski.

KOD cpp:     UKRYJ  
TDateTime data = EncodeDate(Rez_rokodCB->Text.ToInt(),
                            Rez_miesiacodCB->Text.ToInt(),
                            Rez_dzienodCB->Text.ToInt());


datado i datadzis też jest źle, przy czym aktualną datę można pobrać na dwa sposoby:

KOD cpp:     UKRYJ  
TDateTime datadzi = Now();

KOD cpp:     UKRYJ  
TDateTime datadzi = TDateTime::CurrentDate();




Jeżeli w swoim programie bazujesz tylko na dacie, bez czasu to nie ma sensu używanie typu TDateTime, zamiast tego użyj typu TDate.



KOD cpp:     UKRYJ  
ShowMessage("Nie można rezerwowac wstecz!" + datadzis)


Nie można typu TDateTime dodawać do typu String, gdyż to się wogóle nie powinno skompilować. Trzeba dokonać formatowania za pomocą funkcji FormatString,



Prawidłowo ten pierwszy kod to powinien wyglądać tak:

KOD cpp:     UKRYJ  
 TDate dataod = EncodeDate(Rez_rokodCB->Text.ToInt(), Rez_miesiacodCB->Text.Toint(), Rez_dzienodCB->Text.ToInt());
 TDate datado = EncodeDate(Rez_rokdoCB->Text.ToInt(), Rez_miesiacdoCB->Text.ToInt(), Rez_dziendoCB->Text.ToInt());
 TDate datadzis = Now();

 USHORT year, month, day;
 datadzis.DecodeDate(&year, &month, &day);

   if(Rez_rokodCB->Text < year ||
   (Rez_rokodCB->Text == year && Rez_miesiacodCB->Text < month) ||
   (Rez_rokodCB->Text == year && Rez_miesiacodCB->Text == month && Rez_dzienodCB->Text <= day) )
        ShowMessage("Nie można rezerwowac wstecz!\nAktualna data: " + datadzis.FormatString("dddd dd-mmmm-yyyy"));




KOD cpp:     UKRYJ  
String cena1=Query3->FieldByName("cena_p")->AsString;
int cena = atoi(cena1.c_str());


Kombinujesz jak koń pod górę. Można to zrobić tak:

KOD cpp:     UKRYJ  
int cena1 = Query3->FieldByName("cena_p")->AsString.ToInt();


lub ze zdefiniowaniem wartości domyślnej. Jeżeli tabela zwróci wartość inną od liczby lub nic nie zwróci, by nie generować wyjątku:

KOD cpp:     UKRYJ  
int cena1 = Query3->FieldByName("cena_p")->AsString.ToIntDef(0); // wartość domyślna 0


lub podobnie jak Ty:

KOD cpp:     UKRYJ  
String cena1 = Query3->FieldByName("cena_p")->AsString;
int cena = cena1.ToInt();


lub tak:


KOD cpp:     UKRYJ  
String cena1 = Query3->FieldByName("cena_p")->AsString;
int cena = IntToStr( cena1 );


Proponuję byś się zapoznała z tym: ► patrz serwis: Cyfrowy Baron dział: porady -> zmienne.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
JotEmKa
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: Kłopot ze zmiennymi

Nowy postprzez polymorphism » środa, 1 września 2010, 13:43

Tak się wtrące na chwilę.
Cyfrowy Baron napisał(a):

Jak to możliwe, że kompilator nie zgłasza błędu przy próbie skompilowania tego kodu?! :shock: Jak możesz przypisywać typ AnsiString lub UnicodeString bezpośrednio do obiektu typu TDateTime?! :o (...)



Mam dokumentację z szóstki, tam jeden z konstruktorów klasy TDateTime przyjmuje AnsiStringa:
KOD cpp:     UKRYJ  
__fastcall TDateTime(const AnsiString& src, TDateTimeFlag flag = DateTime);

i opis:
    When called with an AnsiString as the src parameter and a TDateTimeFlag as the flag parameter, the resulting object’s value is converted from the AnsiString. The flag parameter indicates whether the string contains a date, a time, or both. The default for the flag is DateTime.
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
JotEmKa
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Kłopot ze zmiennymi

Nowy postprzez Cyfrowy Baron » środa, 1 września 2010, 13:51

To by wyjaśniało, dlaczego ten kod można skompilować, ale w C++Builder 2010 funkcja oczekuje tylko typu unsigned short. Można więc jeszcze ewentualnie bez encodowania:

KOD cpp:     UKRYJ  
TDate data = TDate(Rez_rokodCB->Text.ToInt(),
                   Rez_miesiacodCB->Text.ToInt(),
                   Rez_dzienodCB->Text.ToInt());


Przypuszczam, że w C++Builder 6 też tam można zrobić i będzie to chyba bardziej przejrzyste.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
JotEmKa
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: Kłopot ze zmiennymi

Nowy postprzez JotEmKa » środa, 1 września 2010, 14:46

No cóż, na swoją obronę powiem tylko: "Wszyscy wiedzą, że coś nie da się zrobić. I wtedy pojawia się ten jeden, który nie wie, że się nie da, i on właśnie to coś robi" Albert Einstein :)
Problem z datami został rozwiązany, dziękuję wszystkim.
Ze zmienną cena1 postąpiła wedle wskazówek:
KOD cpp:     UKRYJ  
int cena1 = Query3->FieldByName("cena_p")->AsString.ToInt();

Podejrzewam, że znowu w kodzie coś pokręciłam, ponieważ cena_doba nadal nie przechodzi pod zdarzenie trzeciego przycisku, więc załączam odpowiedni fragment:
W zdarzeniu przycisku 2
KOD cpp:     UKRYJ  
Query1->SQL->Text="SELECT1";
                Query1->Open();
                if(!Query1->IsEmpty())
                        {
                        Query2->SQL->Text="SELECT2";
                        Query2->Open();
                        if(!Query2->IsEmpty())
                                {
                                ShowMessage("W tym terminie nie ma wolnego pokoju!");
                                }
                        else
                                {
                                id=Query1->FieldByName("id_pokoj")->AsString.ToInt();
                                ShowMessage( "jest pokoj:"+id);
                                Rez_LBpoczrez->Caption= dataod;
                                Rez_LBkonrez->Caption= datado;
                                Query3->SQL->Text= "SELECT3";
                                Query3->Open();
                                cena_doba=Query3->FieldByName("cena_p")->AsString.ToInt() ;
                                }
                        }
                else
                ShowMessage ("W tym terminie nie ma wolnego pokoju!");

W zdarzeniu przycisku3, do_zaplaty zawsze wyswietlane jest jako 0.
Zmienne globalne:
KOD cpp:     UKRYJ  
int iloscDni, cena_doba;
float do_zaplaty;

KOD cpp:     UKRYJ  
iloscDni=datado-dataod;
  do_zaplaty=iloscDni*cena_doba;
  Rez_LBkoszt->Caption=do_zaplaty;
"Wszyscy wiedzą, że coś nie da się zrobić. I wtedy pojawia się ten jeden, który nie wie, że się nie da, i on właśnie to coś robi."
Albert Einstein
Avatar użytkownika
JotEmKa
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): poniedziałek, 30 sierpnia 2010, 16:09
Podziękował : 10
Otrzymał podziękowań: 0
System operacyjny: Windows XP SP3
Kompilator: Borland C++ Builder 6
Gadu Gadu: 0
    Windows XPFirefox

Re: Kłopot ze zmiennymi

Nowy postprzez Cyfrowy Baron » środa, 1 września 2010, 15:08

W zdarzeniu przycisku3, do_zaplaty zawsze wyswietlane jest jako 0.


Po pierwsze sprawdź czy zmienna ilosdni ma wartość większą od 0, gdyż mnożąc cokolwiek przez 0 zawsze otrzymasz 0.
Po wtóre przeprowadzaj konwersje:

KOD cpp:     UKRYJ  
Rez_LBkoszt->Caption = do_zaplaty;


Kompilator nie zgłasza błędu, gdyż konwersja jest dokonywana niejawnie, ale jest to nieprawidłowe. Zmienna do_zaplaty jest typu float, więc należy dokonać jej konwersji na String:

KOD cpp:     UKRYJ  
Rez_LBkoszt->Caption = FloatToStr( do_zaplaty );

lub:

KOD cpp:     UKRYJ  
Rez_LBkoszt->Caption = FloatToStrF( do_zaplaty, ffCurrency, 2 );


Kolejna sprawa, jeżeli chcesz, by zmienna float przechowywała wartości zmiennopozycyjne (ułamki), a mnożysz zmienne typu int by ten wynik otrzymać, to i tak otrzymasz liczbę całkowitą. To może być przyczyną tego, że otrzymujesz wartość 0, gdyż w przypadku gdy mnożenie iloscDni * cena_dobra daje wynik mniejszy od 1 to zmienna float w tym przypadku przyjmie wartość 0, gdyż mnożysz int przez int, a wynik wpisujesz w float.
Masz dwie możliwości. Zmienne iloscdni i cena_dobra zmień na typ float lub double, lub zrób to tak:


KOD cpp:     UKRYJ  
  iloscDni = datado - dataod;
  do_zaplaty = (double)iloscDni * (double)cena_doba;
  Rez_LBkoszt->Caption = FloatToStrf( do_zaplaty, ffCurrency, 2);



Ponawiam apel. Zapoznaj się z tymi informacjami w serwisie Cyfrowy Baron porady -> zmienne.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
JotEmKa
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: Kłopot ze zmiennymi

Nowy postprzez JotEmKa » środa, 1 września 2010, 15:33

Z artykułem zapoznałam się w międzyczasie, dziękuję, pomaga zrozumieć kilka rzeczy.
Niestety nie pomógł mi z moim problemem.
Zrobiłam to tak:
KOD cpp:     UKRYJ  
iloscDni = datado - dataod;
  do_zaplaty = (double)iloscDni * (double)cena_doba;
  Rez_LBkoszt->Caption = FloatToStrf( do_zaplaty, ffCurrency, 2, 2);

teraz wyświetla mi 0,00 zł

Sprawdziłam ilosDni, jest liczbą, różnicą dni między datami.
Ostatnio edytowano środa, 1 września 2010, 15:37 przez JotEmKa, łącznie edytowano 1 raz
"Wszyscy wiedzą, że coś nie da się zrobić. I wtedy pojawia się ten jeden, który nie wie, że się nie da, i on właśnie to coś robi."
Albert Einstein
Avatar użytkownika
JotEmKa
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): poniedziałek, 30 sierpnia 2010, 16:09
Podziękował : 10
Otrzymał podziękowań: 0
System operacyjny: Windows XP SP3
Kompilator: Borland C++ Builder 6
Gadu Gadu: 0
    Windows XPFirefox

Re: Kłopot ze zmiennymi

Nowy postprzez Cyfrowy Baron » środa, 1 września 2010, 15:35

Trzeba ustalić w którym momencie pojawia się błąd.

Czy sprawdziłaś jakie wartości przechowują zmienne iloscDni i cena_doba? Jakie!?
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: Kłopot ze zmiennymi

Nowy postprzez JotEmKa » środa, 1 września 2010, 15:40

Dane przykładowe:
Pod drugim przyciskiem cena_doba=50;
Pod trzecim przyciskiem cena_doba=0, iloscDni=2;
"Wszyscy wiedzą, że coś nie da się zrobić. I wtedy pojawia się ten jeden, który nie wie, że się nie da, i on właśnie to coś robi."
Albert Einstein
Avatar użytkownika
JotEmKa
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): poniedziałek, 30 sierpnia 2010, 16:09
Podziękował : 10
Otrzymał podziękowań: 0
System operacyjny: Windows XP SP3
Kompilator: Borland C++ Builder 6
Gadu Gadu: 0
    Windows XPFirefox

Re: Kłopot ze zmiennymi

Nowy postprzez Cyfrowy Baron » środa, 1 września 2010, 15:48

Pod drugim, pod trzecim... to mi nic nie mówi, gdyż przytoczony przez Ciebie kod nie zawiera informacji o przyciskach więc nie jestem w stanie stwierdzić co to oznacza. Sprawdź jakie wartości zawierają te zmienne dokładnie przed wywołaniem tego kodu:

KOD cpp:     UKRYJ  
  do_zaplaty = (double)iloscDni * (double)cena_doba;


czyli napisz sobie taki kod:

KOD cpp:     UKRYJ  
iloscDni = datado - dataod;

ShowMessage("iloscDni = " + (String)iloscDni, + " cena_dobra = " + (string)cena_dobra);

do_zaplaty = (double)iloscDni * (double)cena_doba;

Rez_LBkoszt->Caption = FloatToStrf( do_zaplaty, ffCurrency, 7, 2);
 
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: Kłopot ze zmiennymi

Nowy postprzez JotEmKa » środa, 1 września 2010, 16:24

cena_doba=0, iloscDni=2;
"Wszyscy wiedzą, że coś nie da się zrobić. I wtedy pojawia się ten jeden, który nie wie, że się nie da, i on właśnie to coś robi."
Albert Einstein
Avatar użytkownika
JotEmKa
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): poniedziałek, 30 sierpnia 2010, 16:09
Podziękował : 10
Otrzymał podziękowań: 0
System operacyjny: Windows XP SP3
Kompilator: Borland C++ Builder 6
Gadu Gadu: 0
    Windows XPFirefox

Re: Kłopot ze zmiennymi

Nowy postprzez Cyfrowy Baron » środa, 1 września 2010, 16:36

Więc już wiesz gdzie masz błąd. Jeżeli cena_dobra jest równa 0 to mnożąc cokolwiek przez 0 zawsze otrzymasz 0.

KOD cpp:     UKRYJ  
cena_doba=Query3->FieldByName("cena_p")->AsString.ToInt() ;


Tak więc albo kolumna cena_p nie zawiera żadnej wartości lub zawiera wartość 0, lub też nie jest to kolumna. Jakiego typu dane przechowuje ta kolumna? Na pewno są to dane typu String? Jeżeli tak to dlaczego kolumna przechowująca wartości liczbowe jest typu String a nie np. double?!
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: Kłopot ze zmiennymi

Nowy postprzez JotEmKa » środa, 1 września 2010, 17:18

wcześniej cena_doba=50 przy tych samych ustawieniach
przyjrzałam się dobrze temu co napisałam w kodzie i okazało się, że mam dwa razy zadeklarowaną zmienną cena_doba. Raz globalnie, raz lokalnie (w deklaracji lokalnej zresztą wyzerowane). Widocznie wcześniej nie usunęłam wcześniejszej deklaracji (zanim jeszcze była ona globalną zmienną).
Przepraszam wszystkich za problem i dziękuję za wyrozumienie i pomoc.
"Wszyscy wiedzą, że coś nie da się zrobić. I wtedy pojawia się ten jeden, który nie wie, że się nie da, i on właśnie to coś robi."
Albert Einstein
Avatar użytkownika
JotEmKa
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): poniedziałek, 30 sierpnia 2010, 16:09
Podziękował : 10
Otrzymał podziękowań: 0
System operacyjny: Windows XP SP3
Kompilator: Borland C++ Builder 6
Gadu Gadu: 0
    Windows XPFirefox

Następna 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ł: Google [Bot] i 3 gości