Funkcja Tablicowa

O jezykach programowania w platformach i nie tylko.
Centuś
Uczestnik
Uczestnik
Posty: 4
Rejestracja: 01 sie 2013, 19:58

Funkcja Tablicowa

Nieprzeczytany post autor: Centuś »

Pisze ea na wskażnik rysujący linie. Rysuje on linie i je usuwa jeśli cena je przebije.
Próbuje stworzyc tablice gdzie bedzie dodawana do tablicy wartosć lini "valLBUY1" jeżeli
wcześniej nie występowała w tablicy. A jeśli już wystąpiła to zmienna " int juz_istnieje=0; Nie moge znaleść tego w necie więc sam kombinuje.
Po punktach to wygląda to tak.

1. valLBUY1 to wartość lini
2. zadeklarowana tablica double a1[];
3. Sprawdzanie czy valLBUY1 już istnieje ( dwa sposoby)

3a
if(( ArrayBsearch(a1, valLBUY1, WHOLE_ARRAY, 0,MODE_ASCEND) != valLBUY1 ) to chyba znaczy że jeśli znaleziono ale różne.


3b przez petle
int wielkość_tablicy = ArraySize(a1);

for(int i = wielkość_tablicy; i >= 0; i--)
{
if (a1==valLBUY1)
{
Comment("Już było");
juz_istnieje=0;
}
else
{

Comment("nie ma");
juz_istnieje=1;
}

4. Jeśli nie znaleziono w tablicy to dodać do tablicy jako ostatni element przez powiększenie tablicy



if (juz_istnieje==1)
{
if (ArrayResize(a1, (wielkość_tablicy+1)) // powiekszenie tablicy o 1
{

Alert ("dodane");

a1[ArraySize(a1)-1]=valLBUY1; // wstawienie w pusty elemęt
}
}
if ( a1[wielkość_tablicy-1]== valLBUY1) Comment(" potwierdzenie dodania"); // sprawdzenie zostało dodane



Wiem że to wydaje sie proste ale jak to zapisać aby nie było błędu.
Prosze o pomoc
  • int juz_istnieje=0;
    double a1[];

    int start()
    {
    double valLBUY1 = ObjectGet( "linia name", OBJPROP_PRICE1);
    int wielkość_tablicy = ArraySize(a1);

    for(int i = wielkość_tablicy; i >= 0; i--)
    {

    if (a1==valLBUY1)
    {
    Comment("Już było");juz_istnieje=0;
    }
    else
    {

    Comment("nie ma"); juz_istnieje=1;
    }

    }


    if (juz_istnieje==1)
    {
    if (ArrayResize(a1, (wielkość_tablicy+1))
    {
    wielkość_tablicy = ArraySize(a1);
    Alert ("dodane");
    a1[ArraySize(a1)-1]=valLBUY1;
    }
    }
    if ( a1[wielkość_tablicy-1]== valLBUY1) Comment("dodane");

green7
Maniak
Maniak
Posty: 2060
Rejestracja: 16 sty 2008, 18:44

Re: Funkcja Tablicowa

Nieprzeczytany post autor: green7 »

Jeju aleś namotał. To nie ma prawa działać. Wartość zmiennej juz_istnieje zależy zawsze od 0 elementu tablicy. Zastanów się dlaczego ....


Sprawdzanie czy valLBUY1 jest już w tablicy powinno wyglądać mniej więcej tak:

Kod: Zaznacz cały


int juz_istnieje=0;
for(int i = ArraySize(a1); i >= 0; i--)
{
  if (a1[i]==valLBUY1)
  {
    Comment("Już było");
    juz_istnieje=1;
    break;
  }
}
Green
Obrazek
Obrazek

Centuś
Uczestnik
Uczestnik
Posty: 4
Rejestracja: 01 sie 2013, 19:58

Re: Funkcja Tablicowa

Nieprzeczytany post autor: Centuś »

Wielkie dzięki . Faktycznie zamotałem.
Została tylko funkcja poszerzenia tablicy. do nowego elemetu. Jak to zapisze
Problem w tym że funkcja ArrayResize wpada w petlę i cały czas się powiększa o 1.
Nie wiem jak zrobić aby była jedna tylko operacja powiększenia pętli. kto ma pomysł ?
int wielkość_tablicy = ArraySize(a1);
if (ArrayResize(a1,wielkość_tablicy+1 )== true)

a1[wielkość_tablicy-1]=valLBUY1;

nawet wtedy gdy zapiszę to w całści
int juz_istnieje=0;
for(int i = ArraySize(a1); i >= 0; i--)
{
if (a1==valLBUY1)
{
Comment("Już było");
juz_istnieje=1;
break;
}
else
juz_istnieje=2;
}
if (juz_istnieje==2)
{
if (ArrayResize(a1,wielkość_tablicy+1 )== true)
{
a1[wielkość_tablicy-1]=valLBUY1;
}
}

green7
Maniak
Maniak
Posty: 2060
Rejestracja: 16 sty 2008, 18:44

Re: Funkcja Tablicowa

Nieprzeczytany post autor: green7 »

A po kiego Ci te juz_istnieje=2 ?
Co to ma oznaczać ? Bo juz_istnieje==0 to znaczy, że elementu brak, juz_istnieje == 1 znaczy że jest. A to 2 ma oznaczać ? jakiś 3ci stan ??

Po cholerę .... Robisz pętlę jak podałem wyżej a po niej sprawdzasz czy element istnieje czy nie jeśli nie to rozszerzasz tablicę. Czyli coś w stylu:

Kod: Zaznacz cały

 if (juz_istnieje == 0)
 {
   ArrayResize(a1, ArraySize(a1)+1);
   a1[ArraySize(a1)-1] = valLBUY1;
 }
Oczywiście zamiast ArraySize możesz użyć zmiennej, podstawionej wcześniej. Tyle, że Ty masz tam błędy w podstawieniach i wstawiasz do złego elementu.
Green
Obrazek
Obrazek

ODPOWIEDZ