-
41. Data: 2012-10-19 20:06:16
Temat: Re: coś lajtowego - konsola
Od: kenobi <p...@g...com>
Ja mam ciagle problem z tymi funkcjami do
konwersji string <-> int/long/double i nie dorobilem sie ciagle calkiem dobrego
sposobu.
Chyba znowu zmienie sposob uzywania tego i
wprowadze dwie funkcje Str( int ) i Int( char* )
moze to bedzie lepiej dzialac :/
-
42. Data: 2012-10-19 20:43:40
Temat: Re: coś lajtowego - konsola
Od: Baranosiu <r...@w...pl>
Dnia 19.10.2012 kenobi <p...@g...com> napisał/a:
> W konsoli siedzi jakas fajna magia, Pamietam
> w dziecinstwie mialem C64 i raz wsrod gier na
> tasmach natknalem sie na kompilator fortha (lub
> fortrana) Asma i basic kojarzylem ale fortha (czy
> fortrana) to raczej nie Byla tam konsola, czarny
> ekran i zlote/zolte lub niebieskie/szare litery, nie
> mialem instrukcji i moglem tylko wyszukiwac slowa
> hexedytorem i probowac na slepo cos wpisywac.
To Fig-Forth ;)
> Konsola ma magie, bo jest konsola, sa tajemniecze
> polecenia i mozna robic rone rzeczy - chyba wiekszosc
> tej magii rozwalil dos, ktorego polecenia byly durne
> a konsola b kiepska (do dzis nie wiem kto to
> w sumie zrobil ).
Magia magią, ale podstawowa zaleta (no może poza kontekstami typu
edycja zdjęć) to wygoda i szybkość (paradoksalnie wielu ludzi wsiada
na "okienka" tylko po to, aby z czasem odkryć, że używanie skrótów
klawiszowych to jest to co pozwala im szybko i efektywnie pracować z
programem :D). Czy DOS rozwalił magię? To był pierwotnie "klon"
systemu CP/M przeniesiony na inną architekturę (a CP/M wzorowany był
na systemach z komputerów PDP-11 i temu podobnych). MS-DOS aż całkiem
taki durny nie był, po prostu gdy Bill Gates podpisał kontrakt z IBM
na stworzenie systemu operacyjnego, to zamiast stworzyć coś od
podstaw, postanowił kupić od bodajrze Tima Patersona jego
eksperymentalny port systemu CP/M na procesory 8086 (to był system,
który powstał tylko do celów testowania jakiejś karty rozszerzeń,
która miała właśnie 8086 na pokładzie) :D
> Pozatym (poza dosem i
> interpreterem basica z c64) za wielu konsoli
> nie znam i nie pamietam. Sa jakies inne slawne
> konsole? (pamietam jeszcze lego i basic z zx spectrum
> ale widzialem tylko przez moment, konsoli amigi np nie
> kojarze, linuxa tez nie bardzo,( to co pamietam to
> bylo nieststy troche podobne do dosa,) terminale
> unixa juz jakby lepiej, przez mudy irca itp rzeczy
> (ktore ja znam tylko z czasow studiow na fizyce, gdyby
> nie to nie mialbym o tym pojecia) )
Konsola jak konsola, dla mnie osobiście jest tak samo wygodna jak
interfejsy graficzne i jakiejś specjalnej "magii" nie czuję choć... w
ramach samokształcenia z układów PLD montuję sobie emulator terminala DEC
VT220 :D Układ Lattice MachXO256 będzie robił za kartę graficzną z
wyjściem VGA, a obsługę klawiatury PS/2, portu szeregowego, kodów
sterujących w standardzie ANSI i całej komunikacji z Unixem będzie
załatwiała Atmega644P. Jak to dokończę, to pewnie "magia" wróci na
jakiś czas (dopóki mi się zabawka nie znudzi :D).
W Windowsie też masz konsolę (i można sobie MinGW+MSYS zainstalować do
programowania i używania, albo CygWina jak ktoś woli). Konsol było i
jest dużo, ale to już raczej wykracza poza tematykę grupy :D
-
43. Data: 2012-10-20 01:25:10
Temat: Re: coś lajtowego - konsola
Od: Baranosiu <r...@w...pl>
Dnia 19.10.2012 kenobi <p...@g...com> napisał/a:
> mozna zrobic ten operator przeciazalnym itp,
> jest to troche problematyczne glownie z tego
> powodu ze dotychczas operatory rzutowania
> nie robily tego typo rzeczy, ale raczej
> sklaniam sie ku temu zeby to bylo w jezyku,
> powod jest takie ze gdyby to bylo sporo
> roznego rodzaju kodow w c daloby sie napisac
> bez biblioteki a brak tego wlasnie burzy tą
> ew elegancje - niezrecznosc w porownaniu np
> z konwersjami double na long itp wynka wlasine z tego ze to nie jest
> obslugiwane na poziomie srzetu (a mogloby byc)
Jeśli potrzebujesz przeciążania, to możesz zastosować C++ i samemu
zdefiniować sposób rzutowania takich rzeczy jak (char[])1000 - nie ma
z tym najmniejszego problemu (za wyjątkiem tego, że trzeba to zrobić
raz na całe swoje życie :D). Sam język czym mniej robi "za plecami"
programisty tym lepiej :D Na przykład w Ada gdy zdefiniujesz:
type Minuta is new Integer range 0..59;
type Sekunda is new Integer range 0..59;
to typy Minuta i Sekunda nie są ze sobą zgodne (mimo że obydwa są
typami całkowitymi o tym samym zakresie) i bardzo dobrze, że tak jest,
bo przecież minuta to 60 sekund i równość jest dopiero gdy
licznik_sekund = 60 * licznik_minut ale skąd kompilator czy procesor
mają to wiedzieć jeśli im się tego jawnie nie "powie"? Nawet takie
"beztypowe" języki jak Python nie zaakceptują ciągu instrukcji:
A="10"
B=A*2
bo coś takiego po prostu świadczy o błędzie programisty i język POWINIEN
wymagać zrobienia B=int(A)*2 bo wtedy jest pewność, że programista wie
co robi.
Automatyczne konwersje typów char[]<->int w procesorze nie sprzyjałoby
tzw. elegancji kodu lecz byłoby tylko "wytrychem" na lenistwo bądź
niewiedzę programisty (to oczywiście moje zdanie). Czy konwersja
pomiędzy char[] a int jest problematyczna przy pisaniu programu?
Przecież wystarczy raz w programie zdefiniować SAMEMU jak ma być
robione to rzutowanie (i nawet nie trzeba robić implementacji, można
skorzystać z gotowych funkcji) i można konstrukcji typu (char[])100
używać, ale jak to jawnie zdefiniujesz, to kompilator wie, że ty
"wiesz co robisz" :D Pozatym to ty możesz sam określić kiedy w
konwersji jest błąd a kiedy nie jest, bo jak program zapyta "podaj
cenę" i użytkownik wpisze "25gr" to Ty jako programista możesz zrobić
z tego 0.25zł a procesor... albo wyrzuciłby błąd napotkawszy nieznane
znaki, albo "olałby" jednostkę i traktowałby to jako 25zł :D
Z mojego doświadczenia: jeśli konwersja typów w programie jest "na
porządku dziennym" (za wyjątkiem I/O czyli interakcji z
użytkownikiem), to znaczy, że w programie jest dużo błędów
projektowych (nie został przemyślany, tylko programista bez projektu
zasiadł do pisania i "jakoś tak samo wyszło"). Znajomość języka
programowania a umiejętność programowania to dwie różne sprawy,
pozatym język programowania potrafi przyzwyczaić do pewnych schematów
myślenia.
W swoich początkach (ponad 20 lat temu) gdy zaczynałem od BASIC, to
mojej głowie było obce myślenie w kategoriach rekurencji, list, grafów,
podprocedeur, zmiennych lokalnych itd. bo... BASIC tego nie miał, więc
nauczyłem się "żyć bez tego" i jakieś rzeczy typu deklarowanie
zmiennych czy wskaźniki w innych językach programowania uważałem za
zbędny balast, który "spowalnia wklepywanie programu do komputera".
Obecnie... nie umiałbym napisać w BASIC nic poważniejszego, nie
"zapanował bym" nad projektem gdyby cały program musiał być "płaski" i
"beztypowy" :D Statystycznie najwięcej błędów znajduję u siebie w tych
miejscach, gdzie język nie wymaga ode mnie surowej dyscypliny :D
> tak ze mz mogloby wejsc
> - jest to dosyc fundamentalna operacja i
> wlasnie sporo klopotu jest z robieniem tego
> samemu, uprosciloby tez kody w polaczeniu
> z domyslnymi rzutowaniami - chco sa i troche
> problematyczne kwestie np jesli to by mialo byc
> na tak niskim poziomie to bledne konwersje
> musialyby chyba rzucac wyjatkami podobnymi do
> tych na fpu - no ale to jest wogole odrebny temat
FPU rzuca wyjątkami w przypadku rzeczy typu dzielenie przez zero czy
arcsin(-2), nie zajmuje się konwersjami między typami liczbowymi (i ich
reprezentacjami znakowymi :D) Nie ma najmniejszego kłopotu z robieniem
tego samemu, bo w bibliotece standardowej praktycznie każdego języka
masz gotowce dobrze zdefiniowane, wystarczy z nich
skorzystać. Procesor nie jest od tego aby wnikał czy dana liczba jest
zapisana po arabsku czy po rzymsku i czy napis 10e3 to zapis
szesnastkowy 0x10e3 czy liczba rzeczywista 10000, od rozstrzygania
takich rzeczy jest programista (bo w różnych przypadkach może być
różnie :D).
-
44. Data: 2012-10-20 08:57:18
Temat: Re: coś lajtowego - konsola
Od: kenobi <p...@g...com>
>
>
> A="10"
>
> B=A*2
>
>
>
> bo coś takiego po prostu świadczy o błędzie programisty i język POWINIEN
>
> wymagać zrobienia B=int(A)*2 bo wtedy jest
no ja mowie wlasnie o czyms takim, domyslne
konwersje tylko czasem a nie zawsze
np dla loguj(x)
jest to troche problematyczne ale nawet juz
int(float) jest podobnie problematyczne (4ry
tryby zaokraglania, nawet +(int, int) ma
wiecej niz jedna wersje - nalezy pomyslec co
mozna z tym zrobic (ja bym chcial zeby to bylo
wygodne i konfigurowalne )
druga rzecz to podzial funkcji na zewnetrzne
(biblioteczne) i wewnetrzne (intrinsincowe, o ile
tak mozna nazwac) te odpowiadajace zwyklym operatorom matematycznych sa tez funkcjami
tylko wewnetrznymi, imo takie podstawowe
konwersje tez powinny nalezec do tej kategorii
(w sumie troche odrebna sprawa czy te wewnetrzne
tez dostawczac w formie dolaczanej biblioteki czy
nie - ale podzial na te dwie kategorie uwazam
za istotny i mz konwersja ciag <-> int/double
raczej powinna miec status intrinsincowego
operatora)
-
45. Data: 2012-10-20 10:38:43
Temat: Re: coś lajtowego - konsola
Od: kenobi <p...@g...com>
W dniu piątek, 19 października 2012 09:46:06 UTC+2 użytkownik kenobi napisał:
> Poniewaz zmeczyly mnie optymalizacje postanowilem
>
> zajac sie czyms lzejszym i np zrobic sobie w programie
>
> wlasna konsole
>
>
>
> https://dl.dropbox.com/u/42887985/console.zip
>
>
(konsole tu sie wlacza przez control+end
dorobilem polecenia back np back xge back ijk
ktory przelicza trojznakowego stringa a-z na kolor aaa - bialy zzz - czarny
dorobilem tez gracza melodyjek
beep zblihbljehbjh
z tym ze odgrywa litery systemowym beeperem
na przypadkowych herzach i pytanie jak to
polepszyc ?
-
46. Data: 2012-10-21 00:55:00
Temat: Re: coś lajtowego - konsola
Od: Baranosiu <r...@w...pl>
Dnia 20.10.2012 kenobi <p...@g...com> napisał/a:
>>
>>
>> A="10"
>>
>> B=A*2
>>
>>
>>
>> bo coś takiego po prostu świadczy o błędzie programisty i język POWINIEN
>>
>> wymagać zrobienia B=int(A)*2 bo wtedy jest
>
> no ja mowie wlasnie o czyms takim, domyslne
> konwersje tylko czasem a nie zawsze
> np dla loguj(x)
Możesz podejść do tego tak jak na przykład jest w Javie, masz typ
'int' (prosty "niskopoziomowy") i masz klasę 'Integer' która ma
wszystkie "bajery" typu .toString() .pharseInt(String) itd. Nic nie
stoi na przeszkodzie aby to tak samo zrealizować w C++ (łącznie z
"automatycznym" konwertowaniem).
> jest to troche problematyczne ale nawet juz
> int(float) jest podobnie problematyczne (4ry
> tryby zaokraglania, nawet +(int, int) ma
> wiecej niz jedna wersje - nalezy pomyslec co
> mozna z tym zrobic (ja bym chcial zeby to bylo
> wygodne i konfigurowalne )
To że coś jest problemem dla Ciebie, nie znaczy że w ogólności jest
problemem :D Nie wymagaj od języka programowania, aby rozwiązywał za
Ciebie problemy, z którymi akurat Ty JESZCZE nie umiesz sobie
skutecznie poradzić. Wszystko o czym piszesz jest banalnie proste do
zrealizowania w C++ ale... po prostu trzeba się nauczyć skutecznego
używania języka w jakim programujesz. Innej opcji nie ma (a już
najgorsze co można zrobić, to "zepsuć" język i "odciąć" możliwość
własnego definiowania konwersji typów tylko dlatego, że ktoś chciałby
mieć automat działający w jeden konkretny sposób :D).
> druga rzecz to podzial funkcji na zewnetrzne
> (biblioteczne) i wewnetrzne (intrinsincowe, o ile
> tak mozna nazwac) te odpowiadajace zwyklym operatorom matematycznych sa tez
funkcjami
> tylko wewnetrznymi, imo takie podstawowe
> konwersje tez powinny nalezec do tej kategorii
> (w sumie troche odrebna sprawa czy te wewnetrzne
> tez dostawczac w formie dolaczanej biblioteki czy
> nie - ale podzial na te dwie kategorie uwazam
> za istotny i mz konwersja ciag <-> int/double
> raczej powinna miec status intrinsincowego
> operatora)
Zapewniam Cię, że taki język jak C++ nie ma ani jednej funkcji
"wewnętrznej", wszystkie funkcje są albo zdefiniowane przez
programistę, albo przez biblioteki. Język natomiast (pomijam
bibliotekę standardową) definiuje podstawowe typy (nie klasy!) danych
oraz podstawowe operatory dla tych typów (i tak być musi, bo typy
wbudowane nie są klasami).
Jeśli potrzebujesz lepszej funkcjonalności dla typu wbudowanego
char[], to zwyczajnie zastosuj KLASĘ 'string', albo zdefiniuj swoją
klasę pochodną od string i zdefiniuj w niej rzutowanie z inta i... po
sprawie (wrzuć to w swoją bibliotekę i używaj we wszystkich pisanych
przez siebie programach, jak potrzebujesz wydajności, to zrób wszystko
na 'inline'). Idea obiektowości jest taka, że definiujesz klasę raz, a
używasz jej wszędzie w różnych kontekstach. To jest proste jeśli się
włoży nieco wysiłku w naukę języka i oferowanych przez niego
możliwości.
Ty chcesz aby konstrukcja char* A = 1235; powodowała wpisanie pod
adres A napisu "1235" podczas gdy ja chcę, aby oznaczało to "od tego
momentu zmienna A wskazuje na komórkę pamięci o adresie 1235". Ty
chcesz zmiany semantyki języka bo nie umiesz (lub nie chce Ci się)
napisać prostego rzutowania jednocześnie eliminując z języka
mechanizm tylko dlatego, że w chwili obecnej z niego nie korzystasz :D
Nie idę na układ ograniczania funkcjonalności języka tylko dlatego, że
"ktoś ma z czymś problem" :D
-
47. Data: 2012-10-21 10:07:30
Temat: Re: coś lajtowego - konsola
Od: kenobi <p...@g...com>
teraz uzywam funkcji Int() i Str() - z lenistwa
opartych narazie na atoi i itoa,
-
48. Data: 2012-10-21 17:29:15
Temat: Re: coś lajtowego - konsola
Od: Baranosiu <r...@w...pl>
Dnia 21.10.2012 kenobi <p...@g...com> napisał/a:
> teraz uzywam funkcji Int() i Str() - z lenistwa
> opartych narazie na atoi i itoa,
I jeśli to wystarcza, to jest ok. Jeśli używasz takiego rzutowania
bardzo często, to zdefiniuj automatyczną konwersję, która będzie
korzystała z już napisanych przez Ciebie Int() i Str() a jeśli atoi i
itoa okażą się niewystarczające, to wewnątrz Int() i Str() zmienisz
implementację tej konwersji (na przykład korzystając z strtol i
obsługą "błędów konwersji") i to tyle. Przy okazji zysk z tego masz
taki, że jak się gdzieś pomylisz z użyciem, to kompilator wyrzuci błąd
i go poprawisz, a gdyby kompilator robił to "za plecami", to nawet nie
wiedziałbyś, że coś może być nie tak i na przykład szukałbyś błędu w
metodzie rysowania kwardaru a nie w samej konwersji :D
-
49. Data: 2012-10-22 08:18:41
Temat: Re: coś lajtowego - konsola
Od: g...@s...invalid (Adam Wysocki)
Baranosiu <r...@w...pl> wrote:
> Źródła wrzucaj, a nie binarki, bo inaczej część ludzi nie odważy się
> uruchomić nie wiedząc co jest w środku :D
Nie przetłumaczysz. Próbowałem.
Co do braku Win pod ręką, kenobi niestety nie zdaje sobie sprawy z tego, że
poza Windows jest jeszcze jakiś inny świat i inne systemy.
--
Gof
http://www.chmurka.net/
-
50. Data: 2012-10-22 08:31:28
Temat: Re: coś lajtowego - konsola
Od: g...@s...invalid (Adam Wysocki)
kenobi <p...@g...com> wrote:
> z tym ze odgrywa litery systemowym beeperem
> na przypadkowych herzach i pytanie jak to
> polepszyc ?
Tak:
http://lmgtfy.com/?q=note+frequency+table
--
Gof
http://www.chmurka.net/