Strona 1 z 1
Zapis kolejnych wartości do tablicy
: 12 kwie 2012 11:31
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.
Re: Zapis kolejnych wartości do tablicy
: 12 kwie 2012 12:37
autor: PiDi
1. Czemu pętla while? Skoro masz ustaloną liczbę losowań, użyj pętli for.
- Się wykona ID No razy
- pętla for.png (1.67 KiB) Przejrzano 12906 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
- pętla for.png (2.34 KiB) Przejrzano 12906 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.
- pętla for.png (4.76 KiB) Przejrzano 12906 razy
Re: Zapis kolejnych wartości do tablicy
: 12 kwie 2012 15:05
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.
Re: Zapis kolejnych wartości do tablicy
: 12 kwie 2012 15:15
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).
Zapis kolejnych wartości do tablicy
: 12 kwie 2012 15:37
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?
Zapis kolejnych wartości do tablicy
: 12 kwie 2012 15:39
autor: teslabox
Tak, dokładnie o to.
Zapis kolejnych wartości do tablicy
: 12 kwie 2012 15:49
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.
Zapis kolejnych wartości do tablicy
: 13 kwie 2012 08:50
autor: teslabox
Czy mógłbym prosić o zapisanie VI w wersji LabVIEW 2010?
Zapis kolejnych wartości do tablicy
: 13 kwie 2012 17:10
autor: MicMac89
Jasne, nie ma sprawy. W razie jakichkolwiek niejasności pisz śmiało.
Re: Zapis kolejnych wartości do tablicy
: 17 kwie 2012 12:13
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?