Autor Wątek: Pytania od bardzo początkującego  (Przeczytany 42886 razy)

mad1

  • **
  • Wiadomości: 82
Odp: Pytania od bardzo początkującego
« Odpowiedź #15 dnia: 2013.11.25, 13:50:03 »
Mam następny problem, zrobiłem sobie posty programik do rysowania, który przesuwa mi się o jeden piksel w zależności jaki klawisz nacisnę. Jednocześnie w komponowałem to wyświetlanie aktualnej pozycji "kursora", chodzi o zmienne odpowiadające pozycji w poziomie i pionie (x,y). Rysowanie zaczynam od punktu 0,0 czyli lewego dolnego punktu ekranu. Wszystko działa ładnie i pokazuje prawidłową pozycję "kursora" dopóki nie przekroczę 100 a następnie zejdę wstecz poniżej 100. Wtedy mam wynik  x=990 zamiast x=99. Coś nie tak jest z formatem tej liczby.  Można coś zrobić by nie pokazywał tego zera, lub przynajmniej wyświetlał liczbę w formacie x=099?

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4448
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Pytania od bardzo początkującego
« Odpowiedź #16 dnia: 2013.11.25, 14:01:18 »
Mam wrażenie że nie jest zmazywana poprzednia wartość liczbowa. Spróbuj dodać spacje po wyświetleniu liczby, np tak:
PRINT x;" co najmniej jedna spacja "

RafalM

  • *****
  • Wiadomości: 1133
  • Miejsce pobytu:
    Sulejówek
Odp: Pytania od bardzo początkującego
« Odpowiedź #17 dnia: 2013.11.25, 14:23:55 »
Cytuj
Mam wrażenie że nie jest zmazywana poprzednia wartość liczbowa. Spróbuj dodać spacje po wyświetleniu liczby, np tak:
PRINT x;" co najmniej jedna spacja "

A najlepiej 2 spacje bo zaraz będzie taki sam problem przy zmniejszeniu z 10 do 9 :)

Gdybyś natomiast chciał mieć zera z przodu to ja bym to robił tak:

-zamieniam liczbę na tekst
-dopisuje dwa zera z przodu
-biorę trzy znaki z tekstu licząc od końca

mad1

  • **
  • Wiadomości: 82
Odp: Pytania od bardzo początkującego
« Odpowiedź #18 dnia: 2013.11.25, 20:54:20 »
Panowie, dzięki, taki banał, że też na to nie wpadłem.

mad1

  • **
  • Wiadomości: 82
Odp: Pytania od bardzo początkującego
« Odpowiedź #19 dnia: 2014.01.04, 13:06:05 »
Cześć ponownie,
mam pytanko jak mogę zmierzyć(wydrukować) czas jaki minął od wywołania jakiejś instrukcji(podprogramu) do wciśnięcia danego klawisza. Jak mogę prosto to zrobić w BASICU? czy jest jakaś instrukcja, która mierzy czas lub  jak zdefiniować taką zmienną pod, którą kryje się czas działania danego programu? Nie chodzi mi ile czasu program ma działać lecz ile trwał.

trojacek

  • *****
  • Wiadomości: 6524
  • Miejsce pobytu:
    Warszawa
Odp: Pytania od bardzo początkującego
« Odpowiedź #20 dnia: 2014.01.04, 13:23:22 »
Pod adresami 23672, 23673 i 23674 masz 24-bitowy licznik ramek (zwiększany o 1 co 1/50 sekundy).
Tu masz przykład, jak tego używać:
http://edu.i-lo.tarnow.pl/inf/retro/006_zx_spect_inst/0018.php

Ale uwaga - ten licznik działa tylko wtedy, gdy są włączone przerwania. Jeżeli wywołujesz kod maszynowy, który wyłącza przerwania (DI) - to licznik się zatrzymuje do czasu ich ponownego włączenia (EI). Skoro jednak używasz BASIC-a, to nie powinno być tego problemu.

matofesi

  • *****
  • Wiadomości: 1965
  • Miejsce pobytu:
    Toruń/Poland
Odp: Pytania od bardzo początkującego
« Odpowiedź #21 dnia: 2014.01.04, 15:33:59 »
FRAMES zatrzymuje się też w niektórych procedurach w ROMie - BEEP, save/load i chyba obsługa drukarki. Jeśli w BASICu używa się tych procedur odczyty również będą niedokładne. No i samo odczytanie trzybajtowego licznika i przeliczenie na sekundy to dla interpretera na tyle duża operacja, że sama z siebie może dodać kilka ramek ;)

trojacek

  • *****
  • Wiadomości: 6524
  • Miejsce pobytu:
    Warszawa
Odp: Pytania od bardzo początkującego
« Odpowiedź #22 dnia: 2014.01.04, 15:35:45 »
Racja!
Ale co do narzutu instrukcji BASIC-owych na wynik obliczeń - myślę, że tak mały błąd można śmiało pominąć. Przecież to ułamek sekundy.

mad1

  • **
  • Wiadomości: 82
Odp: Pytania od bardzo początkującego
« Odpowiedź #23 dnia: 2014.01.04, 16:39:34 »
Dzięki trojacek za link, to co chciałem osiągnąłem :)

mad1

  • **
  • Wiadomości: 82
Odp: Pytania od bardzo początkującego
« Odpowiedź #24 dnia: 2014.01.05, 21:01:01 »
Panowie mam problem z programem. Założenie jest takie, że program każe nam wcisnąć losowy klawisz z zakresu a-b. W zależności czy dobrze wciśniemy drukuje nam "OK" lub "błąd" kiedy źle. Problem w tym, że czasami drukuje "błąd" mimo, że został naciśnięty klawisz który wylosował nam komputer. Co tu może być źle? możecie przetestować i coś poradzić?
30 LET d=97+RND*25
60 PRINT AT 1,0;"Wcisnij '";CHR$ d;"'"
120 IF INKEY$=CHR$ d THEN PRINT "OK": PAUSE 100: CLS : GO TO 30
150 IF INKEY$<>"" THEN PRINT "Blad": PAUSE 100: CLS : GO TO 30
160 GO TO 60

trojacek

  • *****
  • Wiadomości: 6524
  • Miejsce pobytu:
    Warszawa
Odp: Pytania od bardzo początkującego
« Odpowiedź #25 dnia: 2014.01.05, 21:18:45 »
Aha, a co jeśli RND*25 nie jest liczbą całkowitą (a często tak będzie)? Wtedy d też nie będzie liczbą całkowitą. CHR$ sobie z tym poradzi, ale Twój warunek już nie.
« Ostatnia zmiana: 2014.01.05, 21:29:27 wysłana przez trojacek »

mad1

  • **
  • Wiadomości: 82
Odp: Pytania od bardzo początkującego
« Odpowiedź #26 dnia: 2014.01.05, 21:33:20 »
Trojacek, dzięki, znowu można na was polegać, wygląda na to że masz rację:) wtedy tak 1/7 raza był błąd. Ale dziwię się bo mimo wszystko litera zostawała przypisywana(choć nie musiała być liczbą całkowitą) do wygenerowanej liczby (d).
-----
coś jest chyba nadal nie tak :/

trojacek

  • *****
  • Wiadomości: 6524
  • Miejsce pobytu:
    Warszawa
Odp: Pytania od bardzo początkującego
« Odpowiedź #27 dnia: 2014.01.05, 21:39:26 »
Bo funkcja CHR$ sobie sama zaokrągla!

Phonex

  • *****
  • Wiadomości: 1232
  • Miejsce pobytu:
    Warszawa
Odp: Pytania od bardzo początkującego
« Odpowiedź #28 dnia: 2014.01.05, 21:46:08 »
To chyba nie to.
Program dwa razy odczytuje klawisz.
Jeśli naciśnięcie klawisza będzie PO TYM, gdy program już wykona linię 120 (warunek niespełniony bo jeszcze nie naciśnięty) to w linii 150 sprawdzi tylko że klawisz nie jest pusty i stwierdzi "Blad".
Można to rozwiązać na dwa sposoby:

1. Dopisać w linii 70 LET i$=INKEY$ i sprawdzać potem i$.
2. W linii 150 sprawdzać warunek przeciwny czyli INKEY$<>CHR$ d.

trojacek

  • *****
  • Wiadomości: 6524
  • Miejsce pobytu:
    Warszawa
Odp: Pytania od bardzo początkującego
« Odpowiedź #29 dnia: 2014.01.05, 21:51:10 »
Ooo, fakt, ja jak zwykle zbyt pobieżnie przejrzałem kod i nie zgłębiłem problemu.
I mi teraz wstyd.