Aktualności: C64 Power - online od stycznia 2000 !

Autor Wątek: Pytanie, basic  (Przeczytany 9418 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline ruter

  • Level 3
  • ***
  • Wiadomości: 228
Pytanie, basic
« dnia: 15 Grudnia 2011, 15:08 »
Mam takie oto pytanie: czy da się jakoś zmienić znak zapytania na inny, kiedy INPUT pyta o zmienną, a jeśli tak, to jak?



Offline Raf

  • Master of disaster
  • Administrator
  • Level 7
  • **********
  • Wiadomości: 7339
  • Wolność, własność, sprawiedliwość
Pytanie, basic
« Odpowiedź #1 dnia: 15 Grudnia 2011, 15:28 »
y.. z tego co pamietam to da sie zalatwic znak zapytania czytajac ekran nie przez input a przez open/input# czy jak to tam szlo ;)
"Cokolwiek powiesz albo napiszesz, znajdzie się ktoś, kto słyszy lub czyta coś zupełnie innego i jeszcze bezczelnie wmawia Ci to"

Offline BagoZonde

  • Level 6
  • ******
  • Wiadomości: 1056
    • http://www.commocore.com
Pytanie, basic
« Odpowiedź #2 dnia: 15 Grudnia 2011, 15:45 »
Dobre pytanie, też je sobie zadałem wiele lat temu ;). No to come back do Basica ;).
Tutaj masz na szybko listing, pisałem z głowy:

0 IM$=""
5 PRINTCHR$(147);"PODAJ SWE IMIE: ";
10 GET A$ : IF A$="" THEN 10
15 IF A$=CHR$(13) THEN 30
20 PRINT A$;:IM$=IM$+A$
25 GOTO 10
30 PRINTCHR$(13);"DZIEKUJE ";IM$;"!"


Swoją drogą przypomina miejscami php (chodzi o średniki, heh).
Polecam zainteresować się assemblerem, wbrew pozorom można się go nauczyć bardzo naturalnie.

Można jeszcze w powyższym listingu dorobić kursor, który może nawet migać, ale to już sobie zrobisz.

P.S. na przyszłość formułuj trafniej temat wątku, chyba, że ma to być cała saga z bejzikiem to zwracam honor ;).

Offline Mef

  • Level 3
  • ***
  • Wiadomości: 221
  • ~ Racing the Beam! ~
Pytanie, basic
« Odpowiedź #3 dnia: 15 Grudnia 2011, 20:30 »
BagoZonde:
0 IM$=""
5 PRINTCHR$(147);"PODAJ SWE IMIE: ";
10 GET A$ : IF A$="" THEN 10
15 IF A$=CHR$(13) THEN 30
20 PRINT A$;:IM$=IM$+A$
25 GOTO 10
30 PRINTCHR$(13);"DZIEKUJE ";IM$;"!"

Choć rozwiązanie BagoZonde jest dłuższe do wklepania, to jednak daje możliwość przeskoczenia do innych operacji w trakcie wykonywania pętli, podczas gdy INPUT zatrzymuje wykonywanie wszystkiego innego dopóki nie uzyska odpowiedzi. Poza tym, w odróżnieniu od prostackiego INPUTu możesz w ten sposób sprawdzać dane w locie i nie natknąć się na błędy ?EXTRA IGNORED czy ?REDO FROM START których komunikaty są kompletnie z tyłka jeśli piszesz sobie programik w ojczystym języku.

Polecam tą ( pozornie dłuższą) metodę.
Tak przy okazji, nie zapomnę jak wkurzała mnie za dzieciaka niekompetencja twórców podręcznika do Komodowego Basica którzy nie raczyli napisać, że w linii zawierającej sprawdzenia w stylu 10 GET A$ : IF A$="" THEN 10 nie może być już żadnych dalszych instrukcji po dwukropku (mimo, że logika mówi inaczej).
"Stand rigid for the next battle
Peace means reloading your guns
The love for life is all hatred in disguise
A carnival creation with masks undone"

Offline ruter

  • Level 3
  • ***
  • Wiadomości: 228
Pytanie, basic
« Odpowiedź #4 dnia: 15 Grudnia 2011, 20:31 »
Heh, twój program przypomniał mi, jak czytałem 'Przygody z komputerem i bez komputera', gdzie był komputer, co robił psikusy \"\"
Dzięki Bago! Program co prawda długi, ale funkcjonalny, niestety przy wpisaniu tekstu, gdzie mają być tylko cyfry nic, co by blokowało jak ?redo from start nie ma.
Co do wątku, to będzie to cała saga, jak to ująłeś...Jak pojawi się problem, to od razu uderzam na forum \"\"

Offline BagoZonde

  • Level 6
  • ******
  • Wiadomości: 1056
    • http://www.commocore.com
Pytanie, basic
« Odpowiedź #5 dnia: 15 Grudnia 2011, 20:44 »
Hehe, długi program? Nie przesadzacie koledzy?
Coś mi się wydaje, że dłuższe procedurki dopiero przed Wami ;).

W BASIC-u może być jeden warunek w linii, i w taki sposób załatwione jest ELSE w powyższym listingu. To miejsce, gdzie logika zderza się z możliwościami języka. Zobacz jak to jest w assemblerze rozwiązane i powiedz mi coś potem o logice. Zasady to zasady, nie kwestionujemy \"\".

Offline BagoZonde

  • Level 6
  • ******
  • Wiadomości: 1056
    • http://www.commocore.com
Pytanie, basic
« Odpowiedź #6 dnia: 15 Grudnia 2011, 20:48 »
ruter
Blokowanie komunikatem ?REDO FROM START nie jest chyba estetyczne, nie sądzisz? Nie lepiej utworzyć sobie zmienną ze znakami, które są "dozwolone" (jeżeli jest to mniejszy zbiór niż niedozwolonych, wiadomo) i tylko je przepuszczać na zasadzie jakiejś pętli, w której porównujemy przez "filterek"? Między 15 a 20 linijką widzę doskonałe miejsce na tego typu zabieg. Taki regex na komodory ;D. Polecam trochę pogłówkować w pisaniu funkcjonalnych i co najważniejsze szybkich programów \"\". Powodzenia

Offline Mef

  • Level 3
  • ***
  • Wiadomości: 221
  • ~ Racing the Beam! ~
Pytanie, basic
« Odpowiedź #7 dnia: 15 Grudnia 2011, 21:10 »
Czy przypadkiem nie najprostsze byłoby w tym listingu porównanie:
IF STR$(IM$)<>IM$...
Jeżeli wartość liczbowa ciągu jest różna od ciągu to znaczy że zawierał on nie-cyfry.

P.S. Jakbym się mylił to statnio pisałem w BASICU jakieś 15 lat temu, więc bądźcie wyrozumiali...
"Stand rigid for the next battle
Peace means reloading your guns
The love for life is all hatred in disguise
A carnival creation with masks undone"

Offline BagoZonde

  • Level 6
  • ******
  • Wiadomości: 1056
    • http://www.commocore.com
Pytanie, basic
« Odpowiedź #8 dnia: 15 Grudnia 2011, 21:49 »
Mef
IF VAL(A$)<1 AND A$<>"0" THEN 10

Trzeba by tam jeszcze dopisać dla klawisza DEL blokadę gdy IM$ jest puste i paru innych, nie ma to jak pokazać programowi kto tu rządzi bez kompromisów ;)

Offline Mef

  • Level 3
  • ***
  • Wiadomości: 221
  • ~ Racing the Beam! ~
Pytanie, basic
« Odpowiedź #9 dnia: 15 Grudnia 2011, 22:06 »
Racja, STR$ to konwersja w drugą stronę...
Przypomniało mi się przy okazji o ile prościej wyglądało omijanie błędów na rodzimym Mikrokomputerze Meritum gdzie istniała w BASICu taka funkcja jak ON ERROR, hehehe.

Płakać mi się chce jak przypomnę sobie, że kiedyś rodzice wywalali bezceremonialnie sprawne Meritum II (czyli Meritum i ogromną jak czołg podwójną stację dyskietek z bodaj trzykilogramowym zasilaczem do kompletu) jako zwykły elektro-śmieć...
\"\"
"Stand rigid for the next battle
Peace means reloading your guns
The love for life is all hatred in disguise
A carnival creation with masks undone"

Offline BagoZonde

  • Level 6
  • ******
  • Wiadomości: 1056
    • http://www.commocore.com
Pytanie, basic
« Odpowiedź #10 dnia: 15 Grudnia 2011, 22:46 »
Nawet się nie przyznawaj, wyedytuj posta jeżeli jeszcze tam jesteś.

Znajdą Cię... ;)

Offline ruter

  • Level 3
  • ***
  • Wiadomości: 228
Pytanie, basic
« Odpowiedź #11 dnia: 17 Grudnia 2011, 11:17 »
Dobra, kiedyś słyszałem o poke, które zmieniało kolor danego znaku na ekranie, można wiedzieć, co należy wpisać aby tak się stało?

Offline Mef

  • Level 3
  • ***
  • Wiadomości: 221
  • ~ Racing the Beam! ~
Pytanie, basic
« Odpowiedź #12 dnia: 17 Grudnia 2011, 21:28 »
ruter

W skrócie:
POKE(55296+X+40*Y),Z

Ekran ma 40 na 25 znaków, razem 1000 pozycji, POKE'i idą kolejno rzędami (wierszami).
X - współrzędna Xowa znaku (0 - 39)
Y- współrzędna Ykowa (0-24)
Z - numer (kod) koloru (0-15).

P.S. Dobry pomysł na ukrycie tego bezczelnego pytajnika!
\"\"

Jeśli Ci się nie chce sprawdzać, jaki aktualnie jest, użyj:
POKE(55296+X+40*Y),PEEK(53281) - pobierze kolor z tła ekranu żeby uczynić znak "niewidzialnym" a po inpucie POKE(55296+X+40*Y),PEEK(55296+X+40*Y-1) żeby przywrócić kolor w tym miejscu do poprzedniego (pobierając wartość koloru z poprzedzającego znaku).
"Stand rigid for the next battle
Peace means reloading your guns
The love for life is all hatred in disguise
A carnival creation with masks undone"

Offline BagoZonde

  • Level 6
  • ******
  • Wiadomości: 1056
    • http://www.commocore.com
Pytanie, basic
« Odpowiedź #13 dnia: 18 Grudnia 2011, 01:20 »
Próbowałeś tą metodą usuwać ten bezczelny pytajnik z inputa? ;)

Offline Mef

  • Level 3
  • ***
  • Wiadomości: 221
  • ~ Racing the Beam! ~
Pytanie, basic
« Odpowiedź #14 dnia: 18 Grudnia 2011, 13:08 »
BagoZonde
Taaa, w teorii wszystko pięknie ładnie ale nie zadziałało ponieważ z nieznanej mi przyczyny musi tam być najpierw jakiś znak, żeby zmienić jego kolor...

Pamięc już nie ta...
"Stand rigid for the next battle
Peace means reloading your guns
The love for life is all hatred in disguise
A carnival creation with masks undone"