Zapis kolejnych wartości do tablicy

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
teslabox
Posty: 80
Rejestracja: 24 mar 2010 15:27
Wersja środowiska: LabVIEW 2010

Zapis kolejnych wartości do tablicy

Post autor: teslabox »

Witam wszystkich Forumowiczów!

Jak wykonać zapis kolejnych wartości do tablicy w taki sposób:
1 losowanie: 7
2 losowanie: 3
3 losowanie: 5
4 losowanie: 1
5 losowanie: 8

Tablica:
[0] 7
[1] 3
[2] 5
[3] 1
[4] 8

Póki co udało mi się tylko zrobić zapis tylko bieżącej wartości do bieżącej komórki tablicy. W kolejnej iteracji wszystko jest zerowane i zapis jest do kolejnej komórki itd.: (VI w załączniku)
Tablica:
[0] 7
[1] 0
[2] 0
[3] 0
[4] 0

[0] 0
[1] 3
[2] 0
[3] 0
[4] 0

[0] 0
[1] 0
[2] 5
[3] 0
[4] 0

itd.
Załączniki
Saving current values in the array.vi
Zapis bieżącej wartości do tablicy
(10.52 KiB) Pobrany 443 razy
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Zapis kolejnych wartości do tablicy

Post autor: PiDi »

1. Czemu pętla while? Skoro masz ustaloną liczbę losowań, użyj pętli for.
Się wykona ID No razy
Się wykona ID No razy
pętla for.png (1.67 KiB) Przejrzano 12558 razy
2. Po co jakieś wygibasy z robieniem własnego indeksowania iteracji przez feedback node? Iteration terminal robi to za Ciebie, a jak potrzebujesz wartość indeksu od 1, to dodajesz.
Się wyświetli liczba iteracji + 1
Się wyświetli liczba iteracji + 1
pętla for.png (2.34 KiB) Przejrzano 12558 razy
3. Inicjalizacja tablicy przed pętlą to dobry pomysł - pod warunkiem, że potem podmieniasz wartości (Replace Array Subset), a nie wrzucasz nowych (Insert Into Array). A jeśli chcesz swoją tablicę zapamiętywać, to potrzebny jest shift register.
Się zapamięta tablica między iteracjami.
Się zapamięta tablica między iteracjami.
pętla for.png (4.76 KiB) Przejrzano 12558 razy
ObrazekObrazekObrazekObrazek
MicMac89
Posty: 122
Rejestracja: 05 wrz 2011 20:40
Wersja środowiska: LabVIEW 2011

Re: Zapis kolejnych wartości do tablicy

Post autor: MicMac89 »

Jeśli zależy Ci na wygenerowaniu tablicy bez konieczności podglądu jej w trakcie wykonywania pętli, można skorzystać z ciekawej funkcjonalności pętli w LabVIEW. Otóż jeśli stworzysz tunel wyjściowy z pętli, klikniesz na niego prawym przyciskiem myszy i wybierzesz Enable Indexing wówczas po wykonaniu pętli otrzymasz tablicę, której elementy to rezultaty otrzymane po wykonaniu każdej iteracji obliczeń. Otrzymujesz w ten sposób elegancki i przejrzysty kod programu.
Załączniki
Indexing tunnel
Indexing tunnel
Creating an array.png (16.95 KiB) Przejrzano 12547 razy
Certified LabVIEW Associate Developer
teslabox
Posty: 80
Rejestracja: 24 mar 2010 15:27
Wersja środowiska: LabVIEW 2010

Re: Zapis kolejnych wartości do tablicy

Post autor: teslabox »

Dzięki PiDi za podpowiedź.

Co do poglądu generowanych liczb, to właśnie zależny mi na tym, aby je móc podglądać na bieżąco.
Aplikacja, którą podesłałem, to tylko zaemulowany fragment większej aplikacji, która współdziała ze sprzętem - stąd to generowanie liczb.
Dodatkowo niezbędne jest aby przechowywane liczby były w porządku rosnącym. Jest co prawda bloczek "Sort 1D Array.vi", ale nei działa mi w trybie gdy cały czas zmieniają się liczby w tablicy :/ (jak wpiszę je na sztywno i potem posortuje to sortowanie działa).
Załączniki
Saving current random values to the array.vi
(12.2 KiB) Pobrany 443 razy
MicMac89
Posty: 122
Rejestracja: 05 wrz 2011 20:40
Wersja środowiska: LabVIEW 2011

Zapis kolejnych wartości do tablicy

Post autor: MicMac89 »

Sortowanie wylosowanych liczb w tablicy po każdej iteracji również nie stanowi problemu, bo jak rozumiem o to Ci teraz chodzi, tak?
Certified LabVIEW Associate Developer
teslabox
Posty: 80
Rejestracja: 24 mar 2010 15:27
Wersja środowiska: LabVIEW 2010

Zapis kolejnych wartości do tablicy

Post autor: teslabox »

Tak, dokładnie o to.
MicMac89
Posty: 122
Rejestracja: 05 wrz 2011 20:40
Wersja środowiska: LabVIEW 2011

Zapis kolejnych wartości do tablicy

Post autor: MicMac89 »

Sortowanie działa, jednak do sortowania(od najmniejszej wartości do największej) podajesz tablicę 20-elementową(na początku), która jest inicjalizowana zerami. Efekt jest taki, że nie widzisz rezultatów sortowania (rozciągnij wskaźnik z tablicą posortowaną na panelu czołowym). Czy chcesz sortować wyniki w porządku malejącym?

Druga sprawa jest taka, że w opisany przez Ciebie sposób rozpychasz tablicę, gdyż wstawiasz w określone miejsce nową wartość, co przesuwa resztę w dół. Jak rozumiem po zapełnieniu całej tablicy chcesz ją nadpisywać od nowa? Zamiast Insert, użyj Replace Array Subset

Trzecia sprawa to brak konieczności stosowania Flat Sequence, Data Flow i tak wykona je po kolei, zaś obecnie kod jest mniej nieefektywny.

P.S. Widzę, że chcesz to zrobić jak w C/C++ jednak tutaj wykonuje się to w trochę inny sposób.
Załączniki
Saving current random values to the array 2.vi
(11.19 KiB) Pobrany 437 razy
Ostatnio zmieniony 12 kwie 2012 15:56 przez MicMac89, łącznie zmieniany 3 razy.
Certified LabVIEW Associate Developer
teslabox
Posty: 80
Rejestracja: 24 mar 2010 15:27
Wersja środowiska: LabVIEW 2010

Zapis kolejnych wartości do tablicy

Post autor: teslabox »

Czy mógłbym prosić o zapisanie VI w wersji LabVIEW 2010?
MicMac89
Posty: 122
Rejestracja: 05 wrz 2011 20:40
Wersja środowiska: LabVIEW 2011

Zapis kolejnych wartości do tablicy

Post autor: MicMac89 »

Jasne, nie ma sprawy. W razie jakichkolwiek niejasności pisz śmiało.
Załączniki
Saving current random values to the array 2.vi
Propozycja rozwiązania
(7.93 KiB) Pobrany 419 razy
Certified LabVIEW Associate Developer
teslabox
Posty: 80
Rejestracja: 24 mar 2010 15:27
Wersja środowiska: LabVIEW 2010

Re: Zapis kolejnych wartości do tablicy

Post autor: teslabox »

Witam po krótkiej przerwie, aczkolwiek pracowitej.

Wykonałem modernizację poprzedniego VI do sortowania tablicy dwuwymiarowej o 9 kolumnach i N wierszach - sortowanie odbywa się tylko i wyłącznie wg pierwszej kolumny (niech N na razie będzie równe 10). Dodałem także zapis danych do pliku, filtrację danych, które mają być zapisane, itd, ale to działa poprawnie, więc nie będę się na tym skupiał.

Chodzi mi mianowicie o to, że w tablicy po prawej stronie są posortowane dane wg ID (pierwsza kolumna rosnąco w dół). Problem polega na tym, że chciałbym aby podczas sytuacji, gdy już istnieje dany ID (np. 4), to żeby VI w tablicy nadpisywał jego wartości (kolumny od 2 do 9) w miejsce poprzednich, a nie tworzył kolejny wiersz z ID np. 4 i nowymi wartościami dla tego ID.
Czy jest możliwość niekasowania wartości danego ID, gdy chociaż raz się pojawi?
Załączniki
Saving current random values to the array 3.vi
(49.32 KiB) Pobrany 467 razy
ODPOWIEDZ