wer kann diese python-routine mal umsetzen in basic.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
funkheld
User
Beiträge: 258
Registriert: Sonntag 31. Oktober 2010, 09:26

hallo, guten tag.
wer kann mir mal diese pythonroutine umsetzen in eine normale basicprocedur.
ich benutze purebasic.

danke.

gruss

Code: Alles auswählen

def calculate_checksum(block):
    """
    Calculate the checksum for a 256 bytes block
    """
    # Constants
    SEED_CRC = 0xFFFF    # Seed for CRC
    MASK_CRC = 0x1021    # Mask of CRC-16-CCITT (ISO 3309 / x^16 + x^12 + x^5 + 1)

    crc_tmp = SEED_CRC   # Initialize CRC
    for i in block:
        crc_tmp = crc_tmp ^ (ord(i) << 8)
        for j in range(8):
            if (crc_tmp & 0x8000):
                crc_tmp = (crc_tmp << 1) ^ MASK_CRC
            else:
                crc_tmp = crc_tmp << 1
    crc_tmp = (crc_tmp & 0xFFFF) ^ 0xFFFF  # Make the CRC ones' complement
   
    return chr(crc_tmp // 256) + chr(crc_tmp % 256)
BlackJack

@funkheld: Warum versuchst Du's nicht selbst mal?
funkheld
User
Beiträge: 258
Registriert: Sonntag 31. Oktober 2010, 09:26

habe mal vor etwas in python zu machen mit 62 jahren.
aber so einen einstieg wie du meinst wie ich ihn für einen cpc464 gefunden habe mit der funktion, hmmm...

da brauche ich eure hilfe.
ich progge erstmal in purebasic.

wenn mich ein python-progger fragt, wie ich ihn helfen kann, eine procedure umzustellen, weil er purebasic zur zeit nicht kann, verlange ich nicht als gegenfrage von ihm , lern purebasic.
das ist nicht mein ding. ich helfe.

aber danke für die antwort.

gruss
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich würde es ähnlich wie BlackJack sehen. Du kennst Dich in der Zielsprache doch besser aus als in Python nehme ich mal an - also solltest Du Dich da einfach rantasten. Die Routine soll ja etwas tun und Du wirst sie ja wohl auch irgend wie getestet haben.

Als erstes würde ich also mal einfach anfangen, eine "Umgebung" in PureBasic zu schaffen, in der Du eine Funktion mit dem Test-Parameter(n) aufrufen kannst und dir Dir den Rückgabewert anzeigt.

Dann gehst Du eben Schritt für Schritt vor. Das meiste an dem Ding sind doch einfach arithmetische Berechnungen; das sollte in Basic selbst syntaktisch nicht viel anders aussehen denke ich mal. Also musst Du Dir nur ggf. mal näher angucken, was die Schleifen da genau machen. Ich denke, das sollte hinzubekommen sein.

Was auch immer hilft: lass Dir doch per "print" in der Python Funktion die einzelnen Ergebnisse nach jedem Schritt ausgeben. Wenn das in Basic genauso aussieht und funktioniert, bist Du quasi fertig :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
funkheld
User
Beiträge: 258
Registriert: Sonntag 31. Oktober 2010, 09:26

per "print" in der Python
hmmm., wo soll ich print eingeben? das ist schon das erste problem...

hmmmm..., ich habe kein python mehr drauf.
habe vor 3 tagen mal dieses 3..... draufgehabt um zu schauen.
befehle von 2.6 gelesen :roll: ...
habe kopfschmerzen bekommen....,warum stimmen einige befehle nicht...., grübel.
das war nicht klar, warum man da denn schon wieder was umgemodelt hat.
also die sprache ist nichts für anfänger...., eben mal zwischendurch um eine formal aufzulösen.

ich glaube ich bin auch im falschen forum gelandet...,... es riecht mir so nach studenten...und anderen...fachschulabsolventen :D

nee, da halte ich mich erstmal fern.
ich bin einer der nur eine frage gestellt hatte.

bleibt mal unter euch, bis ich mich besonnen habe.

ich frage mal woanders nach...

danke.

gruss
Zuletzt geändert von funkheld am Montag 1. November 2010, 14:32, insgesamt 2-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

funkheld hat geschrieben: ich glaube ich bin auch im falschen forum gelandet...,... es riecht mir so nach studenten...und anderen...fachschulabsolventen :D
Hui... Klassenkampf oder Sozialfaschismus? :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
funkheld
User
Beiträge: 258
Registriert: Sonntag 31. Oktober 2010, 09:26

bleibt so wie ihr seid.... :D

wenn es um eine gestellte frage geht..., ist es ein klassenkampf bei so einer antwort.... :roll:
Das meiste an dem Ding sind doch einfach arithmetische Berechnungen;
wer so eine antwort gibt ..., ist kein zweifel angebracht. sage nur angeberei.
Zuletzt geändert von funkheld am Montag 1. November 2010, 14:34, insgesamt 1-mal geändert.
BlackJack

@Hyperion: Minderwertigkeitskomplexe!? :twisted:
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

BlackJack hat geschrieben:@Hyperion: Minderwertigkeitskomplexe!? :twisted:
Hehe - nee, sicherlich nicht! Ich bin eben ein Freund vielschichtiger sozialer Kontakte; "Kastendenken" ist mir da zuwider ;-) Aber ich weiß ja, dass funkheld es nicht "böse" meinte :-) (Aber bei so einer Vorlage, muss man doch was dazu schreiben :mrgreen: )

@funkheld: War meine Antwort denn wirklich nicht hilfreich? Ich meine diese Python-Funktion ist ja nicht vom Himmel gefallen, oder?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

funkheld hat geschrieben:ich glaube ich bin auch im falschen forum gelandet
Dieser Ansicht schließe ich mich an. Du suchst Hilfe bei der Programmierung in BASIC, da ist das Python-Forum sicherlich nicht die erste Wahl.

Bezüglich der defekten Shift-Taste an deiner Tastatur kann ich dir übrigens die Newsgroup de.comp.hardware.misc empfehlen.
funkheld
User
Beiträge: 258
Registriert: Sonntag 31. Oktober 2010, 09:26

ich glaubte das jeder mal mit basic angefangen hat und dieses von python dann mal in diese anfängersprache umsetzen kann.
Guido van Rossum heuert beim Suchmaschinen-Anbieter an
also ist python doch keine sprache, die mal als hausmann verwenden kann und diese als hausmann auch schwer versteht, wenn überhaupt.
er hat die für euch erfunden.
Er schloss 1982 mit einem Master an der Universität Amsterdam ab, arbeitete später unter anderem für das National Institute of Standards in Technology in den USA und entwickelt seit Anfang der 1990er-Jahre die Skriptsprache Python.
wer kann mit so einem denkvermögen schon an uns einfache basicprogrammierer denken...oder...
er wusste schon wofür er die sprache brauchte, er hatte nämlich bedarf für sich privat.

gruss
Zuletzt geändert von funkheld am Montag 1. November 2010, 15:22, insgesamt 3-mal geändert.
funkheld
User
Beiträge: 258
Registriert: Sonntag 31. Oktober 2010, 09:26

Ich meine diese Python-Funktion ist ja nicht vom Himmel gefallen, oder?
eben, sonst würde es mich beflügeln.... :D

gruss
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

funkheld hat geschrieben:ich glaubte das jeder mal mit basic angefangen hat und dieses von python dann mal in diese anfängersprache umsetzen kann.
Nur weil es Basic heißt, muss das schon lang keine Sprache sein in der man anfangen möchte. - Da würde ich sogar noch Pascal bevorzugen.
funkheld hat geschrieben:also ist python doch keine sprache, die mal als hausmann verwenden kann und diese als hausmann auch schwer versteht, wenn überhaupt.
IMHO finde ich Python eigentlich recht einfach, wenn man mal von ein paar speziellen Dingen absieht, die gibt es aber in anderen Programmiersprachen um einiges schlimmer.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

funkheld hat geschrieben:ich glaubte das jeder mal mit basic angefangen hat
Stimmt heute sicherlich nicht mehr so. (ok, bei mir noch :-D )
und dieses von python dann mal in diese anfängersprache umsetzen kann.
BASIC ist aber fast schon eine Sprachfamilie, das Wort "Dialekte" trifft es da heute nicht mehr. Ein VBA hat mit einem COMMODORE BASIC V2.0 nichts mehr gemein, außer evtl. einigen Schlüsselwörtern ;-) Insofern ist es durchaus nicht unbedingt einfach und mal eben so aus der Hand geschüttelt.

funkheld hat geschrieben: also ist python doch keine sprache, die mal als hausmann verwenden kann und
Ist Ansichtssache; allerdings bin ich (und viele hier auch) durchaus der Meinung, dass es sehr wohl eine gute Sprache für Anfänger ist. Aber zu dem Thema hatten wir schon genug Diskussionen :-D

@Problem again:
Hier mal ein kommentierter Quellcode:
http://paste.pocoo.org/show/284367/

In Kapitel 10.9 findest Du ganz unten eine schöne Übersicht, über Pythons Operatoren.

Damit in der PureBasic-Doku entsprechend abgleichen.

Also so schwer sieht's nicht aus; auch wenn mir unklar ist, was da genau gemacht wird :-D
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Hyperion hat geschrieben:Also so schwer sieht's nicht aus; auch wenn mir unklar ist, was da genau gemacht wird :-D
Sagt doch der Funktionsname :D - "calculate_checksum"
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

funkheld hat geschrieben:ich glaubte das jeder mal mit basic angefangen hat und dieses von python dann mal in diese anfängersprache umsetzen kann.
Bei mir war es zuerst Assembler, dann Basic auf dem C=64, dann Forth, dann C, dann Pascal, dann COBOL, PL/1, RPG, C++, ...

BASIC ist etwas lange her und ich erinnere mich an den damals verwendeten Dialekt auch nur noch mit Grausen (kein "else").
BlackJack

@funkheld: Python ist sehr wohl eine für Anfänger geeignete Programmiersprache. Ich weiss nicht was Rossum's Arbeitgeber oder seine Ausbildung damit zu tun hat!? BASIC wurde ja auch nicht von Hobbyprogrammierern erfunden, sondern im akademischen Umfeld entwickelt. Privatleute hatten zu der Zeit ja gar keine Rechner zur Verfügung.

Python war am eigenen Bedarf von Rossum ausgerichtet -- was eine *einfache* Sprache zwischen Shell-Skript und C sein sollte, in der man eben mal schnell was Skripten kann.

Das die Sprache auch für Anfänger geeignet ist, zeigt IMHO das Angebot von Literatur für Kinder und der Einsatz in Schulen ganz gut.

Ich gehöre ja auch zu den Leuten die mit BASIC angefangen haben. Gleicher Dialekt wie /me. :-) Also "back to the roots" -- hier ist das ganze in Commodore BASIC V2:

Code: Alles auswählen

10 REM@ £PROTOCOL
20 REM@ £BOOLEAN T
30 REM@ £WORD R,X
40 REM@ £BYTE BS(,I,J
50 REM@ £CONSTANT MC
60 REM@ £FASTFOR:£FASTARRAY:£SHORTIF
70 MC=4129:DIM BS(255)
80 PRINT "CHECKSUMS FOR...":PRINT
90 PRINT "ZEROES:";:GOSUB 150:PRINT R
100 FOR I=0 TO 255:BS(I)=I:NEXT
110 PRINT "0..255:";:GOSUB 150:PRINT R
120 END
130 REM -------------------------
140 REM CALCULATE CHECKSUM FOR 256 BYTES.
150 R=-1
160 FOR I=0 TO 255:X=BS(I)*256:R=((NOT(R AND X))AND(R OR X))
170 FOR J=1 TO 8:T=(R AND 2^15)<>0:R=R*2:IF T THEN R=((NOT(R AND MC))AND(R OR MC))
180 NEXT:NEXT:R=NOT R:RETURN
Die Sache hat einen kleinen Haken: Das BASIC kennt nicht nur kein ``ELSE`` sondern bei den bitweisen Operatoren auch kein "Exklusives Oder". Ausserdem lassen sich die vorhandenen bitweisen Operatoren nur auf Zahlen im Wertebereich von vorzeichenbehafteten 16-Bit-Ganzzahlen anwenden, also im Grunde nur auf 15-Bit-Werte.

Das fehlende "exklusive Oder" kann man mit den vorhanden Operationen nachbilden, aber für die 16-Bit-Operationen musste ich dann leider den BasicBoss-Compiler anwerfen. Für den sind die Kommentarzeilen am Anfang -- der kennt nämlich neben dem `INTEGER`- auch einen vorzeichenlosen `WORD`-Datentyp.
Benutzeravatar
snafu
User
Beiträge: 6744
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

BlackJack hat geschrieben:hier ist das ganze in Commodore BASIC V2:
Was für eine schreckliche Sprache. :lol:
BlackJack

@snafu: Deswegen haben viele dann ja auch auf Assembler zurückgegriffen. :-) Sieht gleich viel schöner aus:

Code: Alles auswählen

	.importzp ptr1, tmp1
	.export _calculate_checksum
	mask = $1021

; uint16_t __fastcall__ calculate_checksum(uint8_t *block);
.proc _calculate_checksum
.code
	sta ptr1
	stx ptr1+1
	lda #$ff
	sta tmp1
	sta tmp1+1
	ldy #0
loop:
	lda (ptr1),y
	eor tmp1+1
	sta tmp1+1
	
	ldx #7
inner_loop:
	lda tmp1+1
	php
	asl tmp1
	rol
	sta tmp1+1
	plp
	bpl skip
	
	lda tmp1
	eor #<mask
	sta tmp1
	lda tmp1+1
	eor #>mask
	sta tmp1+1
skip:
	dex
	bpl inner_loop
	
	iny
	bne loop
	
	lda tmp1+1
	eor #$ff
	tax
	lda tmp1
	eor #$ff
	
	rts
.endproc
Der Code erwartet die Adresse des Datenblocks (lo/hi) in den Registern A und X und hat dort am Ende auch das Ergebnis zu stehen.
Benutzeravatar
C4S3
User
Beiträge: 292
Registriert: Donnerstag 21. September 2006, 10:07
Wohnort: Oberösterreich

@funkheld:
Es wäre doch einfacher gewesen in einem der deutschen PB Foren zu fragen ob den Code wer übersetzen kann, der sich mit Python auskennt. In der "Lounge" können einige Leute Python und auch im PureBoard dürfte es welche geben.
Weil, PB ist und bleibt halt eine Nischensprache. Dass jemand hier im Forum das kann, ist schon Zufall. ;)

Könntest du bitte mal zeigen, WAS du in diese Funktion reinsteckst und WAS dabei rauskommen soll?
Ich kann mir da im Moment keinen Reim draus machen, sorry. :oops:

edit:
ich seh' gerade ...
http://www.purebasic.fr/german/viewtopi ... =3&t=23435
Hast es ja schon gepostet.
Gruß!
Antworten