[OT] QBasic

Jun 12, 2014 36 Replies

Pyta³em w ró¿nych miejscach, ale brak odpowiedzi, dlatego pozwoli³em sobie tu.



Kto¶ pamiêta/zna ten jêzyk. Jak to jest z tablicami (DIM) w tym jêzyku? Podobno ograniczone s± do 64k. Da siê posortowaæ w tym jêzyku tablicê o wielko¶ci 7x100000?



Robert


Jakoś nie wierzę.

Bardzo zły pomysł.

Kiedy to było? Już zapomniałem.

Przy takiej wielkości używa się już baz danych do sortowania (szybciej będzie zaindeksować).

On 2014-06-12 12:46, RoMan Mandziejewicz wrote: (ciap)

Proponuję dBaseII

Włodek ;-)

A masz gdzieś instalkę? ;) Dałby radę.

FoxBase 2.0 nie uruchamia się na nowszych systemach...

W dniu 2014-06-12 12:59, RoMan Mandziejewicz pisze:

No to Firebird.

Że co? ...a, no chyba że w QBasic.. ;-)

pzdr bartekltg

W dniu 2014-06-12 12:31, Robert Wańkowski pisze:

Pamiętam tylko, że pojawiło się cos takiego w czasach, gdy dość intensywnie używałem Turbo Pascala i Turbo C, ale bliższej znajomości z QBasicem nie zawarłem :) To program dosowy, więc pewnie ma albo ograniczenie wszystkich danych łącznie do 64k, albo "postarali się" i każda tablica ma swój segment:offset w adresie i jest tak jak piszesz, czyli max 64k na każdą tablicę. Tak czy inaczej, pamięci DOSa będzie trochę mało, żeby te Twoje tablice pomieścić. Jeśli czas sortowania nie jest krytyczny, można spróbować jakiegoś algorytmu sortowania danych w plikach. Te algorytmy były rozwijane i optymalizowane w czasach, gdy pamięci RAM miały bardzo małą pojemność i w powszechnym użyciu było sortowanie polegające na przepisywaniu rekordów między plikami, zapisywanymi najpierw na taśmach magnetycznych, później na dyskach. Czyli pozostaje szukanie algorytmu pt. jak posortować plik z dużą ilością danych i nie zajeździć przy tym napędu taśmy :) Tu jakiś pierwszy z brzegu przykład:

formatting link

Że masz zastrzeżenia co do tego, że indeksowanie bazy jest szybsze od jej fizycznego posortowania? ;)

Zapomnij o QBasic. Nawet w dużych systemach nie sortuje się już baz fizycznie, zawsze przez indeks - tak jest szybciej. Choć niekoniecznie użytkownik/programatoł (programista wie) musi o tym wiedzieć.

W dniu 2014-06-12 13:57, ajt pisze:

Rodzaj sortowania bąbelkowego? Dość ciekawe. Może dla zabawy rozpiszę sobie to choćby we wspomnianym QBasicu, i zapodam mu jakieś dane do "przegryzienia" - choćby listę kontrahentów z bazy SQL.

A jak duża ta baza, bo możesz potrzebować sporo czasu ;)

W dniu 2014-06-12 14:36, RoMan Mandziejewicz pisze:

No i o to chodzi ;) Bo może być, że czas przetwarzania rośnie z kwadratem ilości rekordów.

Sortowanie bąbelkowe powoli się bąbelkowało - z tego co pamiętam, był to jeden z najwolniejszych algorytmów.

Coś więcej o systemie powiesz? Z reguły każda implementacja Basic-a jest inna. Na pewno da się posortować tablicę tej wielkości, z tym zastrzeżeniem, że jeśli RAMu nie starczy, to będzie to trwało odpowiednio długo. K.

"Bazy"? Zbiór danych;>

To jest zależne od rozmiaru pojedyńcxzego klocka.

Posortowanie intów (czy kwaternionów na doublach;)) będzie znacznie szybsze (do tego znacząco mniej pamięciożerne, a potem użycie tej struktury znów będzie znacznie szybsze*) Jeśli natomiast klockiem jest kilobajtowi struktura, a do tego jej porównanie jest szybkie, to posortowanie listy indeksów/wskaźników będzie szybsze, bo omijamy spore kopiowania.

Nikt nie mówił o _bazie_. Pytacz ma małą (no, chyba, że siedzi na atmedze 'tablicę'. Baz się nie sortuje, bo najczęściej klocek jest tam duży, a potrzebujemy _wielu_ indeksów.

Bazy danych i ich zastosowania to szczególny dział programowania. I poza nim cały czas sortuje się bezpośrednio dane gdy jest to szybsze, bo nierzadko jest to szybsze.

Zresztą, nie ma co wierzyć, każdy może sam sprawdzić.

*) posortowane dane służą w uproszczeniu do dwóch rzeczy, wyszukania czegoś i przetworzenia w kolejności jakiegoś porządku.

Głupie wyszukiwanie binarne będzie miało 2 razy więcej cache miss w przypadku posortowania indeksów. Przetwaranie sekwencyjne to przejście jednej tablicy po kolei i drugiej praktycznie losowo (to też dobrze zobaaczyć). Tak będzie zawsze, oczywiście dla odpowiednio dużych klocków samo sortowanie będzie na tyle dłuższe, że pochłonie jakikolwiek zysk z naddatkiem.

pzdr bartekltg

"John Smith"

System to XP, RAM ile¶ tam GB. Niby taki program dzia³a. Zapisujê warto¶æ 33 i j± oczytujê.

DIM Tablica(100000, 8) Tablica(100000, 8) = 33 PRINT Tablica(100000, 8)

Ale w wielu miejscach czyta³em w tym tonie podobne stwierdzenia: "Najmniejsza tablica moze zajmowac 1 bajt, najwieksza 64KB. Z danych tych mozna wyliczyc, ze tablica typu SINGLE PRECISION moze miec najwyzej 16384 elementy (64x1024/4). Deklaracja DIM kub(30,30,30) usiluje stworzyc tablice o 29791 elementach (31x31x31), a to jest ok. 13000 elementow wiecej niz pozwala na to jezyk QBasic."

formatting link
Dlatego chcia³em zapytac m±drzejszych czy obliczenia i sorotwanie na takiej ilo¶ci danych zrobiê w QBasic-u. Gdyby kto¶ chcia³ znaæ szczegó³y do czego to potrzebne to tu:
formatting link
sie link po³ama³:
formatting link
Robert

W dniu 2014-06-12 16:52, Robert Wańkowski pisze:

Czy ty czasem nie mylisz QBasic (DOS) z VBasic (Visual Basic, Windows)?

JK

7x100000

I umiejętności programisty... I użytych narzędzi. Bo sortowanie takiej tablicy w pamięci banalne nie jest.

Pytacz chciał to robić w QBasicu... Ja, mając takie narzędzia jak mam, niemal z zamkniętymi oczami zassałbym dane do bazy (bo jakoś one są zapisane, nieprawdaż?) i za chwilę byłyby posortowane „z palca” - komendami xBase, nawet bez pisania programu. Ewentualnie program musiałbym napisać do samego zaimportowania danych.

Różnie bywa, zależy od skali.

[...]

"JK"

Nie, problem próbowano rozwi±zaæ w Excelu (VB), ale to sortowanie jest specyficzne i muszê to zrobiæ sam. A potrafiê jedeynie co¶ napisaæ w Basic-u.

Robert

To czemu qbasic?

A piszą to o Twojej wersji QBasica? Bo ta uwaga możę dotyczy interpretera w MS-DOS?

BTW, Dla danych powyżęj pewnej wielkośći lepiej użyć pamięci dynamicznej. Visual Basic na pewno to umożliwiał, Q chyba też:

formatting link

To jest o tym dosowym starociu.

Problem chyba tu już opisywałeś.

Jeśli wybór QBasica bierze się z tego, że ten język znasz to ściągnij choćby to:

formatting link
darmowa wersja visual basica, starsza, ale dzięki temu pójdzie pod windows XP.

Na zachętę:

formatting link
formatting link
żadnych problemów z ograniczeniem wielkości. Ile RAMu i przestrzeni adresowej, taka tablica.

pzdr bartekltg

Siedemset tysiety klocków czy tablica dwuwymiarowa 7x100 000, tego dalej nie wiem.

Takiej? Jeśli mieści się w pamięci, jest trywialne. Autor napsiał, że ma kilka GB dostępnej.

Czyli jednak moja uwaga 'a, no chyba, ze w Qbasicu' była słuszna.

W czymkolwiek innym, gdzie nie masz ograniczeń co do wielkości tablicy zwykłe sortowanie będzie szybsze. Choćby o komunikacje.

I machać taką garstką danych tam i z powrotem, miedzy 10 programami, wyciągać kombajn jak baza danych... Autor wyraźnie chce przetwarzać te dane dalej.

Skala była podana. <1M elementów. Jeśli byłoby ich na TBajty, rzeczywiście baza danych byłaby wartym rozważenie rozwiązaniem. Sortowanie z użyciem dysku nie jest bardzo trudne, ale napisanie już będzie czasochłonne (jest fajny algorytm z dwoma przebiegami zapisu i odczytu, obecnie chyba najszybszy do takich zdań przy niazbyt wielkich danych (TB) ).

pzdr bartekltg

"bartekltg"

I tu chyba trafiłeś. Myślałem że jak coś się nazywa QBasic to niezależnie pod jakim system będzie działać to możliwości będa takie same.

Ten mój QBasic jakiś nowszy. Cytaty z jego helpa "QB64 is a BASIC compatible Editor and C++ compiler that creates working Executable files from Qbasic BAS files that can be run on 32 or 64 bit PC's using WINDOWS(XP, Vista and newer), LINUX or MAC(OSX only). The goal is to be

100% compatible with QuickBasic 4.5 plus add hundreds of new abilities such as program icons and custom sized windows and a great Editor with a new Help Menu." Po wpisaniu LPRINT 10*8 drukarka USB (Win XP) wydrukowała wynik.

Robert

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required