CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Symbol dziesiętny

Symbol dziesiętny

dział ogólny

Re: Symbol dziesiętny

Nowy postprzez Cyfrowy Baron » środa, 20 czerwca 2012, 21:54

oneiro napisał(a):Dlaczego, mam całą masę zminny tak ustawionych (tj w tym miejscu) np.:


Zmienną umieściłeś w sekcji public formularza, więc jest ona zmienną tegoż formularza i nie można jej użyć poza jakąkolwiek funkcją (lub zdarzeniem) tego lub innego formularza. Program nie rozpoznaje tej zmiennej i n

oneiro napisał(a):Dlaczego, mam całą masę zminny tak ustawionych (tj w tym miejscu) np.:

int liczba = 10;
char znak='-';


To nie to samo. Te zmienne deklarujesz w pliku źródłowym, nie zostały przypisane do formularza, nie są jego własnością, nie mają właściciela i nie są dostępne po plikiem nagłówkowym, na którym zostały zadeklarowane.
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: Symbol dziesiętny

Nowy postprzez oneiro » środa, 20 czerwca 2012, 23:35

Jeszcze jedno, natrafiłem na przypadek, gdzie mam liczbę całkowitą w Edit

Poniższy kod:

Kod: Zaznacz cały
  for(int x = 0; x < ARRAYSIZE(Form1->sep); x++)
  if( Form1->Edit1->Text.LastDelimiter( Form1->sep[x] ) && Form1->sep[x] != Form1->point)
  {
   Edit1->Text = StringReplace(Edit1->Text, Form1->sep[x], Form1->point, TReplaceFlags() << rfReplaceAll);
   break;
  }
  a = Edit1->Text.ToDouble();

się wywala, bo LastDelimiter nie znajduje separatora. Myślę, żeby jeszcze wrzucić jeden warunek, jeśli w ciągu z edita nie ma znaku "," lub "." (funkcja POS) to nie wywołuj pętli tylko od razy przepisz wartość z pola edit do zmiennej, ale może da się to jakoś łatwiej zaprogramować?
Avatar użytkownika
oneiro
Homos antropiczny
Homos antropiczny
 
Posty: 96
Dołączył(a): niedziela, 17 czerwca 2012, 23:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder v6
Gadu Gadu: 0
    Windows XPFirefox

Re: Symbol dziesiętny

Nowy postprzez oneiro » środa, 20 czerwca 2012, 23:44

Może źle się wyraziłem,

Mam plik formularza Unit1.cpp, za sekcją include daję od razu zmienną z przypisaną wartością np. "int a=3";
W Unit1.h deklaruję jeszcze raz to samo to "int a"
- jeśli zasięg zmiennej w całym unit1.cpp to w sekcji private
- jeśli zasięg całego programu to public.

Czyli z tego co napisałeś, wystarczy zadeklarować zmienną w pliku nagłówkowym, tak? A w pliku cpp (kodzie) od razu odwoływać się do niej, a wartość przypisać w jakiejś funkcji uruchamianej przy starcie programu (czyli np. w pliku project.cpp jesli nie zminiłem nazwy).

Jeśli tak, to czemu kompilator pozwala mi zadeklarować zmienną jeszcze raz w kodzie jako globalna zmienna i jaki ma to wpływ na program.

PS. Provate z public chyba Ci się pomyliły w ostatniej wiadomości
Avatar użytkownika
oneiro
Homos antropiczny
Homos antropiczny
 
Posty: 96
Dołączył(a): niedziela, 17 czerwca 2012, 23:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder v6
Gadu Gadu: 0
    Windows XPFirefox

Re: Symbol dziesiętny

Nowy postprzez polymorphism » czwartek, 21 czerwca 2012, 10:49

Zmienne globalne tworzysz tak:
KOD cpp:     UKRYJ  
int a = 3; // definicja zmiennej w jakimś pliku CPP

KOD cpp:     UKRYJ  
extern int a; // deklaracja zmiennej, która została zdefiniowana "gdzieś" w programie. To dajesz wszędzie tam, gdzie chcesz się odwoływać do tej zmiennej (z reguły są to pliki H)

Choć warto wspomnieć, że zmienne globalne to generalnie zuo, należy ich unikać, jeśli to możliwe.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
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: Symbol dziesiętny

Nowy postprzez Cyfrowy Baron » czwartek, 21 czerwca 2012, 17:39

polymorphism napisał(a):
KOD cpp:     UKRYJ  
extern int a; // deklaracja zmiennej, która została zdefiniowana "gdzieś" w programie. To dajesz wszędzie tam, gdzie chcesz się odwoływać do tej zmiennej (z reguły są to pliki H)


Tak, ale w tym przypadku to zbędna komplikacja. To się przydaje, gdy tworzysz taka zmienną w jakimś module w postaci dodatkowego pliku zawierającego np. zbiór funkcji, których nie chcesz trzymać w tym samym pliku co zdarzenia formularza.




oneiro napisał(a):Mam plik formularza Unit1.cpp, za sekcją include daję od razu zmienną z przypisaną wartością np. "int a=3";
W Unit1.h deklaruję jeszcze raz to samo to "int a"


W takim przypadku masz dwie zmienne o identycznej nazwie - jedną globalną - to ta w pliku źródłowym Unit1.cpp poza jakąkolwiek funkcją oraz drugą publiczną będącą własnością klasy formularza zadeklarowaną w pliku nagłówkowym w sekcji public. Nie możesz jednak inicjować zmiennej w pliku nagłówkowym, czyli taki zapis:

KOD cpp:     UKRYJ  
public:
        int a = 3; /* ERROR */


jest niepoprawny.

Jeżeli masz dwie zmienna o identycznej nazwie - co jest możliwie tylko w sytuacji, gdy są tą zmienne z różnych przestrzeni - to program zawsze użyje zmiennych w kolejności najpierw zmienna lokalna, potem zmienna prywatna (private) lub publiczna (public - przy czym nie można tworzyć dwóch zmiennych o identycznej nazwie jednocześnie w sekcji private i public), zmienna globalna jest używana dopiero gdy program nie ma dostępu do zmiennej z innych przestrzeni.
Można wymusisz by program używał zmiennej globalnej przed innymi stosując tzw. przesłanianie zmiennych. Do przesłaniania zmiennych służą dwa dwukropki, przykład:

Plik nagłówkowy np. Unit1.h
KOD cpp:     UKRYJ  
private:
        int a;

Plik źródłowy np. Unit1.cpp
KOD cpp:     UKRYJ  
int a = 3;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 a = 4; /* inicjacja zmiennej publicznej */

 Edit1->Text = ::a; /* przesłonięto zmienną publiczną - zmienna globalna - wartość 3 */
 Edit1->Text = a; /* zmienna publiczna - wartość 4*/

 ::a = 5; /* przesłonięto zmienną publiczną - zmienna globalna - wprowadzono nową wartość do zmiennej globalnej */
}


W podanym przez Ciebie przykładzie program używał tylko zmiennej publicznej, zmienna globalna nie była używana.



oneiro napisał(a):Czyli z tego co napisałeś, wystarczy zadeklarować zmienną w pliku nagłówkowym, tak? A w pliku cpp (kodzie) od razu odwoływać się do niej,


Tak! :o Co Ty pierwszy raz programujesz w języku obiektowym?

oneiro napisał(a):a wartość przypisać w jakiejś funkcji uruchamianej przy starcie programu (czyli np. w pliku project.cpp jesli nie zminiłem nazwy).


Nie projekt.cpp lecz raczej np. Unit1.cpp, ale tak. Wartość zmiennej możesz zmieniać w dowolnej funkcji lub zdarzeniu. Zapoznaj się z tym artykułem: Przekazywanie obiektów i funkcji pomiędzy formularzami.

oneiro napisał(a):PS. Private z public chyba Ci się pomyliły w ostatniej wiadomości


Chyba tak. Zasada jest taka zmiennej publicznej możesz używać w dowolnym pliku projektu o ile prawidłowo ja zaadresujesz, a zmienną prywatną możesz używać tylko w obrębie klasy formularz w której ja zadeklarowałeś.



oneiro napisał(a):się wywala, bo LastDelimiter nie znajduje separatora.


Nie wywala się. Po prostu uruchamiasz program z poziomu środowiska i debuger zgłasza ci informację - nie błąd - że funkcja nie znalazła znaku, ale w takiej sytuacji po prostu funkcja zwraca wartość 0, czyli false w przeciwnym razie zwraca wartość większą od 0, czyli true. Gdyby to ta funkcja wywoływała błąd to już w sytuacji gdy w Edit1 zamiast prawidłowo separatora byłby ten nieprawidłowy, program powinien się wywalić. Uruchom program poza środowiskiem i zobacz, czy wtedy też się wywala.
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: Symbol dziesiętny

Nowy postprzez oneiro » czwartek, 21 czerwca 2012, 17:40

Mogę jeszcze dowiedzieć się, czemu nie działa takie coś:

Kod: Zaznacz cały
String sep[] = {".", ","};
Form1->Edit1->Text.Pos(Form1->sep[1]);


a takie coś działa:

Kod: Zaznacz cały
String sep[] = {".", ","};
Form1->Edit1->Text.Pos(',');


Wyskakuje błąd:

---------------------------
Debugger Exception Notification
---------------------------
Project Project2.exe raised exception class ERangeError with message ''. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------




PS. Wiem, że globalne zmienne są nie wskazane, ale niektóre wartości muszę mieć dostępne wszędzie, np. parametry funkcji i opcje.
Avatar użytkownika
oneiro
Homos antropiczny
Homos antropiczny
 
Posty: 96
Dołączył(a): niedziela, 17 czerwca 2012, 23:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder v6
Gadu Gadu: 0
    Windows XPFirefox

Re: Symbol dziesiętny

Nowy postprzez Cyfrowy Baron » czwartek, 21 czerwca 2012, 17:46

oneiro napisał(a):Mogę jeszcze dowiedzieć się, czemu nie działa takie coś:


Dlatego, że sep to tablica lokalna:

KOD cpp:     UKRYJ  
String sep[] = {".", ","};


A coś takiego:

KOD cpp:     UKRYJ  
Form1->sep[1]


nie istnieje. Powinno być:

KOD cpp:     UKRYJ  
String sep[] = {".", ","};
Form1->Edit1->Text.Pos( sep[1] );


Dlaczego używasz adresu Form1? Czy zapoznałeś się z artykułem do którego podałem ci link? Dlaczego adresowałeś sep na Form1?
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: Symbol dziesiętny

Nowy postprzez oneiro » czwartek, 21 czerwca 2012, 17:58

Dzięki Baron, za wyjaśnienie, nie wiedziałem, że jest różnica między zmienną publiczną, a globalną, w sumie to źle programowałem.
Ale najlepsze jest to, że wyniki porwałem z Matlabem, Derive i zawsze były identyczne (tj w granicach błędu numerycznego).

Czy pierwszy raz programuję obiektowo - tak, wciąż się uczę (przeczytanie podręcznika to nie to samo, co programowanie)

PS. Program uruchomiłem poza środowiskiem Borland - wyskakuje okienko z przyciskiem [OK], ale nie idzie dalej, rozwiązałem problem poprzez dodatkowy warunek sprawdzający, czy jest jakikolwiek separator w ciągu.
Avatar użytkownika
oneiro
Homos antropiczny
Homos antropiczny
 
Posty: 96
Dołączył(a): niedziela, 17 czerwca 2012, 23:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder v6
Gadu Gadu: 0
    Windows XPFirefox

Re: Symbol dziesiętny

Nowy postprzez polymorphism » czwartek, 21 czerwca 2012, 17:59

To się przydaje, gdy tworzysz taka zmienną w jakimś module w postaci dodatkowego pliku zawierającego np. zbiór funkcji, których nie chcesz trzymać w tym samym pliku co zdarzenia formularza.

To nie ma zupełnie znaczenia gdzie ją tworzysz i po co. Po prostu odniosłem wrażenie, że mowa o zmiennych globalnych, więc podałem jak powinno wyglądać poprawne ich definiowanie.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
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: Symbol dziesiętny

Nowy postprzez Cyfrowy Baron » czwartek, 21 czerwca 2012, 18:01

polymorphism napisał(a):rozwiązałem problem poprzez dodatkowy warunek sprawdzający, czy jest jakikolwiek separator w ciągu.


LastDelimiter to robi, więc co robi ten dodatkowy warunek?!

Podaj cały kod, bo wciąż coś robisz źle...

polymorphism napisał(a):To nie ma zupełnie znaczenia gdzie ją tworzysz i po co.


Nie ma... Ja z kolei dodałem, że w tym konkretnym przypadku to zbędna komplikacja...
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: Symbol dziesiętny

Nowy postprzez oneiro » czwartek, 21 czerwca 2012, 18:12

Dlaczego używasz adresu Form1? Czy zapoznałeś się z artykułem do którego podałem ci link? Dlaczego adresowałeś sep na Form1?


Zapomniałem dodać, że wrzuciłem do unit1.h w TForm1 w części publicznej
Kod: Zaznacz cały
String sep;  //tworzę zmienną publiczną, nie globalną, tak?


Inicjalizację stringa w zdarzeniu tworzenia formularza OnCreate
Kod: Zaznacz cały
String sep[] = {".", ","};    //Podejrzewam, że tutaj coś namieszałem


ALe w sumie
Kod: Zaznacz cały
Form1->sep[1];
sep[1];


zwracają te same wartości (w unit1.cpp) i próbowałem tak i tak - nie działa.

Podejżewam, że namieszałem ze zminnymi, ale w sumie z Form1 i bez niej funkcje sep zwracają te same wartości.
Avatar użytkownika
oneiro
Homos antropiczny
Homos antropiczny
 
Posty: 96
Dołączył(a): niedziela, 17 czerwca 2012, 23:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder v6
Gadu Gadu: 0
    Windows XPFirefox

Re: Symbol dziesiętny

Nowy postprzez oneiro » czwartek, 21 czerwca 2012, 18:18

Plik H
KOD cpp:     UKRYJ  
class TForm1 : public TForm
{
__published:    // IDE-managed Components
private:        // User declarations
..
..
..
public:         // User declarations
...
...
String sep;
};


PS. Wszędzie dałem Form1-> gdyż kod będę kopiować do innych unitów i żeby łatwiej pozmieniać wpisałem możliwie uniwersalny kod, potem będę zmieniać numery form i pól tekstowych.


PLIK CPP
KOD cpp:     UKRYJ  
void __fastcall TForm1::FormCreate(TObject *Sender)
{
point = use_facet<numpunct<char> >(locale("")).decimal_point();
String sep[] = {".", ","};
}
//a
 for(int x = 0; x < ARRAYSIZE(Form1->sep); x++)
  if(Form1->Edit1->Text.LastDelimiter( Form1->sep[x] ) && Form1->sep[x] != Form1->point)
  {
   Edit1->Text = StringReplace(Edit1->Text, Form1->sep[x], Form1->point, TReplaceFlags() << rfReplaceAll);
   break;
  }
  a = Edit1->Text.ToDouble();
//Apole
 for(int x = 0; x < ARRAYSIZE(Form1->sep); x++)
  if( Form1->Edit16->Text.LastDelimiter( Form1->sep[x] ) && Form1->sep[x] != Form1->point)
  {
   Edit16->Text = StringReplace(Edit16->Text, Form1->sep[x], Form1->point, TReplaceFlags() << rfReplaceAll);
   break;
  }
  Apole = Edit16->Text.ToDouble();
//b
 for(int x = 0; x < ARRAYSIZE(Form1->sep); x++)
  if( Form1->Edit2->Text.LastDelimiter( Form1->sep[x] ) && Form1->sep[x] != Form1->point)
  {
   Edit2->Text = StringReplace(Edit2->Text, Form1->sep[x], Form1->point, TReplaceFlags() << rfReplaceAll);
   break;
  }
  b = Edit2->Text.ToDouble();
// i tak dalej, jeszcze z 7 zmiennych
 


To jest kod bez extra warunku, niestety nie chce mi działać
Avatar użytkownika
oneiro
Homos antropiczny
Homos antropiczny
 
Posty: 96
Dołączył(a): niedziela, 17 czerwca 2012, 23:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder v6
Gadu Gadu: 0
    Windows XPFirefox

Re: Symbol dziesiętny

Nowy postprzez Cyfrowy Baron » czwartek, 21 czerwca 2012, 18:23

oneiro napisał(a):
KOD cpp:     UKRYJ  
String sep;  //tworzę zmienną publiczną, nie globalną, tak?


Tak, to jest zmienna publiczna - ZMIENNA.

oneiro napisał(a):
KOD cpp:     UKRYJ  
String sep[] = {".", ","};    //Podejrzewam, że tutaj coś namieszałem


To jest tablica lokalna typu AnsiString i nie ma nic wspólnego ze zmienną publiczną. To co chciałeś zrobić z tablica trzeba zrobić tak:

Plik nagłówkowy Unit1.h
KOD cpp:     UKRYJ  
public:
        String sep[2]; /* bo tablica będzie zawierała dwa elementy */


Plik źródłowy Unit1.cpp
KOD cpp:     UKRYJ  
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 sep[0] = ".";
 sep[1] = ",";
}


Inny plik źródłowy np. Unit2.cpp
KOD cpp:     UKRYJ  
/* w jakimś zdarzeniu lub funkcji */
Form1->Edit1->Text.Pos( Form1->sep[1] );




Jeżeli chcesz wyświetlić w Edit wartość liczbową z dokładności do iluś tam miejsc po przecinki to używaj do konwersji zmiennej typu float lub double funkcji FloatToStrF - patrz: 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: Symbol dziesiętny

Nowy postprzez Cyfrowy Baron » czwartek, 21 czerwca 2012, 18:41

oneiro napisał(a):To jest kod bez extra warunku, niestety nie chce mi działać


To

oneiro napisał(a):
KOD cpp:     UKRYJ  
public:         // User declarations
        String sep;


nie jest tablica lecz ZMIENNA.

oneiro napisał(a):
KOD cpp:     UKRYJ  
void __fastcall TForm1::FormCreate(TObject *Sender)
{
String sep[] = {".", ","};


To jest TABLICA LOKALNA - a to znaczy, że jest dostępna tylko lokalnie, czyli tutaj wewnątrz zdarzenia OnCreate dla formularza Form1, poza tym zdarzeniem program nie ma dostępu do tej tablicy, czyli:

oneiro napisał(a):
KOD cpp:     UKRYJ  
if(Form1->Edit1->Text.LastDelimiter( Form1->sep[x] ) && Form1->sep[x] != Form1->point)


ten warunek odwołuje się do ZMIENNEJ publicznej sep, a nie do TABLICY LOKALNEJ sep.

Podałem rozwiązanie w poprzednim poście, ale podam jeszcze raz:

Plik nagłówkowy np. Unit1.h
KOD cpp:     UKRYJ  
public:
//           ..........
        String sep[2];


Plik źródłowy np. Unit1.cpp
KOD cpp:     UKRYJ  
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 point = use_facet<numpunct<char> >(locale("")).decimal_point();

 sep[0] = ".";
 sep[1] = ",";
}


dalej już tak jak masz, chociaż ten kod można zoptymalizować. Przykład optymalizacji:

KOD cpp:     UKRYJ  
 for(int x = 0; x < ARRAYSIZE(Form1->sep); x++)
 {
  String sSep = Form1->sep[x];
  String sPoint = Form1->point;
 
  if(Form1->Edit1->Text.LastDelimiter( sSep ) && Form1->sep[x] != sPoint)
  {
   Edit1->Text = StringReplace(Edit1->Text, sSep, sPoint, TReplaceFlags() << rfReplaceAll);
   break;
  }
 
  //Apole
  if( Form1->Edit16->Text.LastDelimiter( sSep ) && Form1->sep[x] != sPoint)
  {
   Edit16->Text = StringReplace(Edit16->Text, sSep, sPoint, TReplaceFlags() << rfReplaceAll);
   break;
  }
 }
 
  a = Edit1->Text.ToDouble();
  Apole = Edit16->Text.ToDouble();


Wciąż nie rozróżniasz tablicy typu String (AnsiString) od zmiennej typu String (AnsiString). Nie rozróżniasz co jest lokalne, co globalne, a co publiczne.



oneiro napisał(a):PS. Wszędzie dałem Form1-> gdyż kod będę kopiować do innych unitów i żeby łatwiej pozmieniać wpisałem możliwie uniwersalny kod, potem będę zmieniać numery form i pól tekstowych.


Skoro chcesz pozmieniać numery, czyli de facto nazwy obiektów, to ten kod nie jest uniwersalny, gdyż po zmianie nazw adresy (np. Form1-> jeżeli zmieni się nazwa Form1 na inną) przestaną działać. Po zmianie nazw obiektów środowisko nie poprawi z Ciebie kodu.
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: Symbol dziesiętny

Nowy postprzez oneiro » czwartek, 21 czerwca 2012, 19:23

Wciąż nie rozróżniasz tablicy typu String (AnsiString) od zmiennej typu String (AnsiString). Nie rozróżniasz co jest lokalne, co globalne, a co publiczne.


Masz rację choć powiedziałbym że zmienną globalną od publicznej, ale zaczynam wyczuwać ten drobną różnicę, publiczna tyczy się klasy, globalna nie zależna od klasy (tak to widzę).


Jeszcze jedna wątpliwość, dlatego:
KOD cpp:     UKRYJ  
String sep;
String sep[2];


jedna jest zmienną, a druga tablicą. Tj gdyby zamiast "String" użyć np. char, int, bool itp, to rozumiem, że jedna będzie zmienną, a druga tablicą, ale przecież String bez nawiasów kwadratowych jest nie ograniczą tablicą (gdy nie podam zakresu), czyli w obu mam do czynienia z tablicą, za pierwszym razem nieorganiczną (wielkość tablicy), za drugim razem jest to tablica 2-elementowa.

I teraz wyczuwam różnicę, gdyż korzystasz z funkcji ARRAYSIZE, gdybyś korzystał z funkcji sep.length wymiar nie miałby znaczenia, gdyż po przypisaniu dwóch elementów w zdarzeniu tworzenia formularza i tak ostatecznie będzie to tablica 2-elementów.

Mógłbyś mi przybliżyć problem, dla mnie powyższy kod jest równoznaczny - dla mnie oba są tablicami (gdyż typ String to definiuje).

PS. Gdybym miał zmienną char, zamiast String, to wszytko powinno działać tak samo (Twój ostatni kod) - bo separator i tak jest jednym znakiem
Avatar użytkownika
oneiro
Homos antropiczny
Homos antropiczny
 
Posty: 96
Dołączył(a): niedziela, 17 czerwca 2012, 23:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder v6
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia stronaNastępna strona

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 33 gości