purebasic.info
http://purebasic.info/phpBB3ex/

Простейшие операции над массивами
http://purebasic.info/phpBB3ex/viewtopic.php?f=1&t=1954
Страница 1 из 3

Автор:  C_File [ Пт дек 09, 2011 7:39 pm ]
Заголовок сообщения:  Простейшие операции над массивами

Столкнулся с проблемой в решении простейших вопросов (которые решают на других языках чуть ли не 1 строкой)

есть массив типа( в данном случае список)

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  NewList Number.s()
 
  AddElement(Number())
  Number() = "Сергей"
   
  AddElement(Number())
  Number() = "Дима"
   
  AddElement(Number())
  Number() = "Сергей"
 
  AddElement(Number())
  Number() = "Леша"
 




Задача
1. отсортировать список и убить повторяющиеся элементы
2. упорядочить массив по алфавиту
3. перемешать элементы массива

Автор:  Пётр [ Пт дек 09, 2011 8:24 pm ]
Заголовок сообщения: 

C_File писал(а):
отсортировать список
http://purebasic.com/documentation/sort/index.html
C_File писал(а):
упорядочить массив по алфавиту
Это таже сортировка.

C_File писал(а):
перемешать элементы массива
http://purebasic.com/documentation/sort ... array.html
http://purebasic.com/documentation/sort ... elist.html

Автор:  C_File [ Пт дек 09, 2011 9:24 pm ]
Заголовок сообщения: 

Спасибо Петр с сортировкой разобрался, но как убить повторяющиеся элементы не понял...

на рнр это
array_unique(название массива)

Автор:  pablov [ Сб дек 10, 2011 12:48 pm ]
Заголовок сообщения: 

C_File писал(а):
но как убить повторяющиеся элементы не понял...

Написать свою функцию и выложить в "OpenSource" :D

Автор:  C_File [ Сб дек 10, 2011 1:27 pm ]
Заголовок сообщения: 

логика этой функции мне понятна) тока вот что то реализовать толково не могу...не поможите? :D
думаю многим будет полезна эта приблуда :wink:

Автор:  pablov [ Сб дек 10, 2011 1:58 pm ]
Заголовок сообщения: 

C_File писал(а):
логика этой функции мне понятна)

Выкладывай логику

Автор:  C_File [ Вс дек 11, 2011 2:18 am ]
Заголовок сообщения: 

ну вообщем я набросал код он вроде бы даже работает, но он мне не нравитЦо)))
так сказать попробуйте его улучшить)

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Dim mydim.s (7)
Dim fin.s (7)
 
  mydim(0)="ssss"
 mydim(1)="aaaa"
 mydim(2)="aaaa"
 mydim(3)="ssss"
 mydim(4)="bbbb"
 mydim(5)="aaaa"
 mydim(6)="aaasaa"
 mydim(7)="aaasaa"
 
 
 
 
  Procedure loop (numer.s)
      Shared  mydim.s(), fin.s()
      kolvo=0
      For a=0 To ArraySize(mydim())
        Debug "num="+numer+"  mydim="+mydim(a)
     If numer.s=mydim(a)  :  kolvo+1:error=0
     Else : error=0
    EndIf
    If kolvo >1: For i = 0 To ArraySize(fin()) :
        If numer.s=fin(i) : error=1:ProcedureReturn  error: EndIf
        Next i
            error=0: ProcedureReturn  error
        EndIf
   Next    
 ProcedureReturn  error
  EndProcedure
   
 
   i=0
   For a=0 To ArraySize(mydim())
     res=loop(mydim(a)): Debug Str(res)
     If res=0
        fin(i)=mydim(a) :i+1
      EndIf
         Next  
     
 
Debug "final"
 
   For i = 0 To ArraySize(fin())
     Debug fin(i)
     
   Next
 


Автор:  lakomet [ Вс дек 11, 2011 4:12 am ]
Заголовок сообщения: 

C_File
Так попробуй
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Procedure RemoveDuble(List *Spisok$())
     If ListSize(*Spisok$())
          SortList(*Spisok$(), #PB_Sort_Ascending)
          FirstElement(*Spisok$())
          sample$ = *Spisok$()
          While  NextElement(*Spisok$())
               If sample$ = *Spisok$()
                    DeleteElement(*Spisok$())
               Else
                    sample$ = *Spisok$()
               EndIf
          Wend
     EndIf
EndProcedure
 
NewList Spisok$()
 
For i = 0 To 100
     AddElement(Spisok$())
     Spisok$() = "slovo" + Str(Random(4))
Next
 
ForEach Spisok$()
     Debug Spisok$()
Next
 
RemoveDuble(@Spisok$())
 
Debug "****************************************"
 
ForEach Spisok$()
     Debug Spisok$()
Next


Автор:  C_File [ Пн дек 12, 2011 8:41 pm ]
Заголовок сообщения: 

lakomet Спасибо за столь элегантное решение! Именно такая логика и жаждала воротится в коде!

Автор:  mr BAM [ Пн янв 16, 2012 7:47 pm ]
Заголовок сообщения: 

Всем здравствуйте!
Массив интересует динамический

Задача такая
1. обработка массива данных
2. размер массива меняется
3. после обработки мусор из памяти убирать

знаю что возможно
1. создавать динамический массив
2. обнулять или уничтожать память

подскажите как новичку сделать в БЕйсике

Автор:  Пётр [ Пн янв 16, 2012 7:58 pm ]
Заголовок сообщения: 

mr BAM писал(а):
Массив интересует динамический
Об этом можно прочитать тут. http://www.pure-basic.narod.ru/docs/boo ... s_List.htm

mr BAM писал(а):
2. размер массива меняется
Для этого нужно использовать оператор ReDim. http://purebasic.ru/manual.php?id=1062&lng=rus

mr BAM писал(а):
3. после обработки мусор из памяти убирать
Можно с помощью ReDim, уменьшить размер массива до 0, или вообще удалить массив функцией FreeArray(). http://purebasic.ru/manual.php?id=41&lng=rus

Автор:  Vbs/Stertor [ Пт авг 03, 2012 9:29 pm ]
Заголовок сообщения: 

Цитата:
убить повторяющиеся элементы

Попробуйте так:
\\-----функция защищает массив от переполнения повторяющимися и пустыми строками
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Procedure addmassive(List listname.s(),vals.s)
  Protected metka=#False
  If vals
    ForEach listname()
      check.s=LCase(listname())
      If check=LCase(vals):metka=#True:EndIf
    Next
    If metka=#False
      AddElement(listname())
      listname()=vals
    EndIf
  EndIf
 ; ProcedureReturn
EndProcedure

Цитата:
после обработки мусор из памяти убирать

Код:
1
2
 
ClearList(listname)


Автор:  SereZa [ Ср сен 04, 2013 10:58 pm ]
Заголовок сообщения: 

нет ли возможности рассортировать структурированный массив почти как #PB_Sort_String, только чтобы сначала все варианты, начинающиеся с букв, а после цифры. то есть абв123. в стандарте же он сначала цифры, потом буквы 123абв.

Автор:  Никита Однороб [ Чт сен 05, 2013 6:18 am ]
Заголовок сообщения: 

SereZa, написать процедуру своей сортировки

Автор:  SereZa [ Ср ноя 18, 2015 7:47 pm ]
Заголовок сообщения:  Re: Простейшие операции над массивами

процедуру так и не написал.

теперь понадобилось удалить какую-то ячейку из массива. это мне
1. создавать второй массив,
2. копировать в цикле из первого во второй, а как дойдет до нужной удаляемой ячейки - проигнорировать,
3. продолжить копирование с -1 по ячейкам во втором массиве,
4. потом редим в первый массив на -1 от оригинального размера массива,
5. копировать второй массив в первый,
6. редим в 0 второй массив?

эээ... и все ради одной ячейки? йокараный бабай...

Страница 1 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/