Zapis kolejnych wartości do tablicy
Zapis kolejnych wartości do tablicy
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.
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 453 razy
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: Zapis kolejnych wartości do tablicy
1. Czemu pętla while? Skoro masz ustaloną liczbę losowań, użyj pętli for.
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.
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.
Re: Zapis kolejnych wartości do tablicy
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
- Creating an array.png (16.95 KiB) Przejrzano 12894 razy
Certified LabVIEW Associate Developer
Re: Zapis kolejnych wartości do tablicy
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).
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 457 razy
Zapis kolejnych wartości do tablicy
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
Zapis kolejnych wartości do tablicy
Tak, dokładnie o to.
Zapis kolejnych wartości do tablicy
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.
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 486 razy
Ostatnio zmieniony 12 kwie 2012 15:56 przez MicMac89, łącznie zmieniany 3 razy.
Certified LabVIEW Associate Developer
Zapis kolejnych wartości do tablicy
Czy mógłbym prosić o zapisanie VI w wersji LabVIEW 2010?
Zapis kolejnych wartości do tablicy
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 434 razy
Certified LabVIEW Associate Developer
Re: Zapis kolejnych wartości do tablicy
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?
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 507 razy