Czy da radę skrócić ten kod do pętli?

0

Cześć, mam pytanie czy da radę skrócić ten kod napisany w SPEL+ do pętli? Widać powtarzający się kod i zmienia się tylko cyfra.

Function main
	Motor On
    Integer i
    Speed 100
    Power High
    'Jump Point_Start
    Jump Point_Box1_Up
    Jump Point_Box1
    SimSet Robot.Pick, Box_1
    Jump Point_Box1_Up
    Jump Point_Box1_Above
    Jump Point_Box1_RPosition
    SimSet Robot.Place, Box_1
    Jump Point_Box1_Above
    Jump Point_Box2_Up
    Jump Point_Box2
    SimSet Robot.Pick, Box_2
    Jump Point_Box2_Up
    Jump Point_Box2_Above
    Jump Point_Box2_RPosition
    SimSet Robot.Place, Box_2
    Jump Point_Box2_Above
    Jump Point_Box3_Up
    Jump Point_Box3
    SimSet Robot.Pick, Box_3
    Jump Point_Box3_Up
    Jump Point_Box3_Above
    Jump Point_Box3_RPosition
    SimSet Robot.Place, Box_3
    Jump Point_Box3_Above
    Jump Point_Box4_Up
    Jump Point_Box4
    SimSet Robot.Pick, Box_4
    Jump Point_Box4_Up
    Jump Point_Box4_Above
    Jump Point_Box4_RPosition
    SimSet Robot.Place, Box_4
    Jump Point_Box4_Above
Fend

Próbowałem poprzez stworzenie zmiennej int = i i stworzenie pętli w formie "for i=1 to 4" w miejsce liczb wstawiłem zmienną "i" i zakończyłem kod "next i". Niestety nie zadziałało, ma ktoś jakiś pomysł?
Z góry dziękuję.

1

Potrzebujesz tablicy

I wtedy nie Box_i tylko Bix[i]. Nie wiem co to za jezyk w ogole ale nawet w assemblerze da sie tablice obslugiwac (tylko ze "recznie").

0

W taki sposób?

Function main
	Motor On
    Integer Boxi(0, 1, 2)
    Speed 100
    Power High
    For Boxi = 0 To Boxi = 2
    Jump Point_Boxi_Up
    Jump Point_Boxi
    SimSet Robot.Pick, Boxi
    Jump Point_Boxi_Up
    Jump Point_Boxi_Above
    Jump Point_Boxi_RPosition
    SimSet Robot.Place, Boxi
    Jump Point_Boxi_Above
    Next i
Fend

Wyskakuje błąd " Array number of dimensions does not match the declaration" Próbowałem na różne sposoby określić tą tablicę i cały czas ten sam błąd.

1

Jak juz mowilem - nie znam jezyka.
W jakims normalnym jezyku to tak:

boxes = arrayOf(box1, box2, box3)
for (i = 0; i < boxes.length; i++) {
  ...
  boxes[i]
  ...
}
0

Szkoda, że ten język nie jest normalny :D Nic nie przynosi efektów.

0
Integer Boxi(0, 1, 2)
    Speed 100
    Power High
    For Boxi = 0 To Boxi = 2

to nie wyglada jakbys trzymal w tablicy boxy tylko jakies inty...

0

Tablice w spel+:

typ_danych nazwa(rozm1,[,rozm2 [,rozm3 ]])

przykłady:

Integer position(10)
Real coords(20,20,20)

W taki sposób zapisany kod też nie działa

Function main
	Motor On
    Integer Boxi(3)
    Speed 100
    Power High
    For Boxi = 0 To Boxi = 3
    Jump Point_Boxi_Up
    Jump Point_Boxi
    SimSet Robot.Pick, Boxi
    Jump Point_Boxi_Up
    Jump Point_Boxi_Above
    Jump Point_Boxi_RPosition
    SimSet Robot.Place, Boxi
    Jump Point_Boxi_Above
    Next Boxi
Fend
0

No to to jest tablica 0x1x2 czyli jakas pustka XD
Integer Boxi(0, 1, 2)

I to ma byc tablica boxow a nie intow...

I nastepna rzecz - uzywasz drugi raz tej samej nazwy:
Integer Boxi(0, 1, 2)
For Boxi = 0 To Boxi = 2

PEBCAK jak nic.

0

Używam drugi raz ponieważ chcę użyć pętli która ma taką składnię w tym języku:

For var = initValue To finalValue [Step increment] 
    statements
Next [var]
0

Ale nazwij to inaczej...
I tam nie ma drugiego = nigdzie w tym

0

bez drugiego = wywala błąd składni, jak mam nazwać bo nie rozumiem chyba :/

0

Jak masz

For var = initValue To finalValue [Step increment] 
    statements
Next [var]

to znaczy ze petla wyglada jakos tak

for i = 0 to 50 i+1 (?????)
  statements
Next i
0
for i = 0 to 50 i+1 (?????)
  statements
Next i

nie może tak wyglądać, błąd składni. Napiszę chyba do wsparcia technicznego, oni siedzą z tym na codzień.

0

Nie mam pojecia jak wyglada [Step increment]

0

Zastanawiam się tylko czemu wywala mi bład "Array number of dimensions does not match the declaration" tak jakby liczby z tablicy nie zgadały się z deklaracją w pętli, może inaczej zapisuje się taką tablice.

0

To jest w ogole niepoprawny zapis i zapomnij o nim

Integer Boxi(3)
For Boxi = 0 To Boxi = 3

Tutaj nie ma prawa sie nazwa powtarzac.


stivens napisał(a):

Jak juz mowilem - nie znam jezyka.

W jakims normalnym jezyku to tak:

boxes = arrayOf(box1, box2, box3)
for (i = 0; i < boxes.length; i++) {
  ...
  boxes[i]
  ...
}
0

A w ten sposób?

Function main
    Motor On
    Integer Boxes(Boxi1, Boxi2, Boxi3)
    Speed 100
    Power High
    For Boxes = 0 To Boxes = 2
    Jump Point_Boxi_Up
    Jump Point_Boxi
    SimSet Robot.Pick, Boxi
    Jump Point_Boxi_Up
    Jump Point_Boxi_Above
    Jump Point_Boxi_RPosition
    SimSet Robot.Place, Boxi
    Jump Point_Boxi_Above
    Next Boxi
Fend
0

Po pierwsze to odpowiedz mi prosze (na wczesniej zadane pytanie): jakiego typu jest Box_1?
I jak wg. dokumentacji wypelnia sie tablice w tym SPEL+

0

Boxy to obiekty stworzone w symulatorze, mają określone wymiary i pozycje.

0

Zatem Box_1 nie jest integerem. Dlaczego Boxes jest typu tablica integerow?
Integer Boxes(Boxi1, Boxi2, Boxi3)

0

Tutaj masz jakis przyklad w C.
I zauwaz ze kilka rzeczy zwyczajnie w Twoim odpowiedniku sie nie zgadza (miedzy innymi wlasnie typ boxes)

#include <stdio.h>

typedef struct {
  int x;
  int y;
  int z;
} Coord_t;

typedef struct {
  char type;
  Coord_t position;
} Box_t;

int main() {
  Box_t box_1 = {
    .type = 'C',
    .position = {
      .x = 30,
      .y = 10,
      .z = 2
    }
  };
  
  Box_t box_2 = {
    .type = 'D',
    .position = {
      .x = 100,
      .y = 10,
      .z = 2
    }
  };
  
  Box_t boxes[] = {box_1, box_2};
  
  for (int i = 0; i < 2; i++) {
    printf("[%c] (%d|%d|%d)\n",
      boxes[i].type, boxes[i].position.x, boxes[i].position.y, boxes[i].position.z);
  }

  return 0;
}

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