Author Topic: Как перевернуть массив?  (Read 1425 times)

0 Members and 1 Guest are viewing this topic.

winwebber

  • Освоившийся
  • **
  • Posts: 46
    • View Profile
Как перевернуть массив?
« on: March 06, 2019, 08:12:29 PM »
Казалось простой вопрос но КАААК? у меня уже горит.
1
2
3
4
=>
4
3
2
1
Заранее благодарен

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
Re: Как перевернуть массив?
« Reply #1 on: March 06, 2019, 09:11:42 PM »
Code: (clickermann) [Select]
STRSEPARATE("1:2:3:4", ":", $array)

$size = ARRSIZE($array)

FOR($i = 0, $i < $size/2)
   $temp = $array[$i]
   $array[$i] = $array[$size-$i-1]
   $array[$size-$i-1] = $temp
END_CYC

WHILE($size != 0)
   PRINT(ARRPOP($array))
   $size = ARRSIZE($array)
END_CYC

HALT
« Last Edit: March 06, 2019, 10:03:15 PM by Космич »
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Как перевернуть массив?
« Reply #2 on: March 06, 2019, 09:12:50 PM »
Переворачиваем массив $arr
Code: (clickermann) [Select]
$sz = ARRSIZE($arr)-1
FOR($i=0,$i<$sz/2)
   $tmp = $arr[$i]
   $arr[$i] = $arr[$sz-$i]
   $arr[$sz-$i] = $tmp
END_CYC

Пример:
Code: (clickermann) [Select]
LOGCLEAR

FOR($a=1,$a<=100) // формируем массив чисел
   ARRPUSH($arr, $a)
END_CYC

LOGWRITE ("=== ДО ===========")
FOR($a=0,$a<ARRSIZE($arr))
   LOGWRITE ($arr[$a])
END_CYC
LOGWRITE ("==================")

$sz = ARRSIZE($arr)-1
FOR($i=0,$i<$sz/2)
   $tmp = $arr[$i]
   $arr[$i] = $arr[$sz-$i]
   $arr[$sz-$i] = $tmp
END_CYC

LOGWRITE ("=== После ========")
FOR($a=0,$a<ARRSIZE($arr))
   LOGWRITE ($arr[$a])
END_CYC
LOGWRITE ("==================")

HALT

winwebber

  • Освоившийся
  • **
  • Posts: 46
    • View Profile
Re: Как перевернуть массив?
« Reply #3 on: March 07, 2019, 11:03:27 AM »
Oraven , всем спасибо, кто отвечал.
У меня твой вариат почи подошел, но немного подернизировал потому что терял в твоем варианте последниитри точки (координаты), вот что у меня получилось.
Code: [Select]
SCANPICTURE($arr,0,0, 1980,1040,"./bmp/line.bmp")
print("Before")
WHILE (arrsize($arr) > 0)
 $y_term = arrpop($arr)
 $x_term = arrpop($arr)
 print ($x_term,",",$y_term)
END_CYC   
print("After")
SCANPICTURE($arr,366,188, 1084,1043,"./bmp/line_messaging.bmp")
////is network list loaded
$sz = ARRSIZE($arr)-1
FOR($i=0,$i<$sz/2)
   $tmp = $arr[$i]
   $arr[$i] = $arr[$sz-$i]
   $arr[$sz-$i] = $tmp
END_CYC
WHILE (arrsize($arr) > 0)
 $x_term=arrpop($arr)
 $y_term=arrpop($arr)
 print ($x_term,",",$y_term)
END_CYC
Code: [Select]
10:59:35 AM Before
10:59:35 AM 459,1010
10:59:35 AM 459,914
10:59:35 AM 459,818
10:59:35 AM 459,733
10:59:35 AM 459,648
10:59:35 AM 459,563
10:59:35 AM 459,478
10:59:35 AM 459,393
10:59:35 AM 459,308
10:59:35 AM 459,223
10:59:35 AM After
10:59:37 AM 459,223
10:59:37 AM 459,308
10:59:37 AM 459,393
10:59:37 AM 459,478
10:59:37 AM 459,563
10:59:37 AM 459,648
10:59:37 AM 459,733
10:59:37 AM 459,818
10:59:37 AM 459,914
10:59:37 AM 459,1010