Hallo,
gibt es irgendwo im Netz eine Tabelle, auf der die gängigsten
Basic-Befehle dem entsprechenden C-Befehl gegenübergestellt sind?
Wo man sozusagen alles auf einen Blick hat, so weit das im direkten
Vergleich möglich ist...
Jan schrieb:> Wo man sozusagen alles auf einen Blick hat, so weit das im direkten> Vergleich möglich ist...
Das ist so nicht ohne weiteres möglich.
Es gibt zwar Entsprechungen, aber jeder der eine Programmiersprache
beherrscht findet die in kurzer Zeit auch selber raus, weil sie
eigentlich sehr naheliegend sind.
Wichtiger ist ja bei einer Portierung eines Programms von Sprache A nach
Sprache B, dass ein Programmierer aus dem Programm die zugrundeliegende
Idee herauslesen kann und diese in Sprache B formulieren kann, sofern
das übrhaupt möglich ist. Dazu muss man aber sowohl A als auch B
beherrschen.
Die Idee: Och, da nehm ich mir eine Übersetzungstabelle und ersetzt
einfach Schlüsselwort für Schlüsselwort, führt eigentlich in den meisten
Fällen zu den gleichen Problemen, die auch Dolmetscher habe: Nur mit
einem Wörterbuch bewaffnet kriegt man zwar eine Übersetzung hin, die man
eventuell noch versteht, die aber alles andere als optimal ist.
"eventuell noch versteht, die aber alles andere als optimal ist."
Mein Luftkissenboot ist voller Aale!
Die Sache ist eben dass ein BASIC viele Sachen als Befehle integriert
die auf einem C-System in der Library und nicht im Sprachkern sind. zB
hast Du in einem 8051er Basic ein eingebautes "PRINT", im 8051er C (das
idR schon einen erweiterten Sprachkern hat wg extra storage classes)
hingegen alles was Du brauchst (sfr-Zuweisungen, Kontrollstrukturen, und
wenns ganz hart kommt noch _asm) um dir deine IO selber zu stricken -
oder Du nimmst eben die mitgelieferte Standardbibliothek.
Entschuldigt das uC-lastige Beispiel im PC-Forum, aber es passte gerade
;)
Ceterum Censeo: BASIC mag seinen Charme haben aber die Grammatik ist
ekelhaft kontextsensitiv.
faustian schrieb:> Ceterum Censeo: BASIC mag seinen Charme haben aber die Grammatik ist> ekelhaft kontextsensitiv.
[OT]
Quatsch, BASIC ist harmlos. Warte erstmal, bis du es mit Perl zu tun
bekommnst... ;-)
[/OT]
...ok, dann mal konkret.
Qbasic kennt Schleifen, C kennt Schleifen, kann man also tabellarisch
vergleichen.
Qbasic kennt Variablen, C kennt Variablen, kann man also tabellarisch
vergleichen.
Qbasic kennt If-Then-Anweisungen, C kennt If-Then-Anweisungen, kann man
also tabellarisch vergleichen.
...
Mit geht es im Grunde darum, dass C-Anfänger, die Basic-erfahren sind,
die Umsetzung für C auf einen Blick ablesen können (bei den
Dingen/Befehlen, die vergleichbar sind).
Sowas in der Art.
Ganz einfach: Beide Sprachen sind Turing-mächtig, das heßt schon mal
dass Du jedes Programm in beiden Sprachen realisieren kannst.
Am besten mal einen C kurzübersicht im Netz suchen, die alle
Sprachelemente enthält.
C für sich enthält eigentlich nur Konstrukte zur Ablaufsteuerung des
Programms, f.h. Schleifen, Verzweigungen, Variablen, Konstanten, Typen.
Darüberhinaus gibt es aber im C Standard definierte Standard libraryies,
die dann die Funktionen für IO, Mathematik und viels mehr enthalten, was
bei BASIC schon zum direkten Sprachumfang gehöhrt.
Ich denke eine Tabelle die Basic programmieren am besten helfen würde
wäre eine mit den oben genannten Kontrollstrukturen sowie einer
Erklärung wie man C Typen wie Array und structs und funktionen
deklariert.
Dazu noch die eine Übersicht, welche Standardfunktionen man in welchem
include-File findet.
Ob es so was fertig gibt, bewzeifel ich, aber sowas läßt sich eigentlich
in nem halben Tag mit nem C-Tutorial aus dem Netz oder einem C Buch
realisieren
Gruß
Tom
@Tom M das habe ich massenhaft :) Perl ist absolut logisch, wenn man
sich die Syntax genauer anschaut - selbst das print ohne Komma macht
Sinn wenn man es als indirekten Aufruf einer Methode des Filehandles
begreift ;)
Jan schrieb:> ...ok, dann mal konkret.>> Qbasic kennt Schleifen, C kennt Schleifen, kann man also tabellarisch> vergleichen.>> Qbasic kennt Variablen, C kennt Variablen, kann man also tabellarisch> vergleichen.>> Qbasic kennt If-Then-Anweisungen, C kennt If-Then-Anweisungen, kann man> also tabellarisch vergleichen.
Sorry.
Aber wer diese Dinge nicht umsetzen kann, sollte besser die Finger von
der Portierung eines Programms lassen.
Und das meine ich nicht böse oder scherzhaft. Das ist mein voller Ernst.
Und nein: Diese 3 Dinge mögen für dich momentan als wichtig erscheinen,
machen aber bei einer Portierung noch nicht einmal 10% der Arbeit aus.
D.h. wenn ich dir sage, dass eine QBASIC
FOR I = 0 TO 10 STEP 1
...
NEXT I
in C als
for( i = 0; i < 11; ++i ) {
...
}
geschrieben wird, dann hast du damit so gut wie nichts erreicht.
Schlimmer noch, wenn du dafür ein Nachschlagewerk brauchst, dann
solltest du den Job der Portierung abgeben. Die restlichen Dinge in
deiner Liste sind von ähnlichem Kaliber.
Eine derartige 'Umsetztabelle' würde mehr schaden als sie Gutes tun
würde, weil sie sugeriert, dass man sich nur an dieses simple Kochrezept
halten muss um eine Programmportierung durchzuführen. Nichts könnte
falscher sein (wie zb die Autoren der 'Numerical Receipes' schmerzlich
in ihrer ersten C-Ausgabe lernen mussten)
Du kannst es drehen und wenden wie du willst:
Voraussetzung dafür, dass Jemand eine Portierung von der Sprache A nach
Sprache B machen kann, ist das er beide Sprachen einigermassen
beherrscht. Dann braucht er aber deine Tabelle nicht mehr.
Und: Die Probleme bei einer Portierung entstehen nicht in erster Linie
dadurch, dass man für das Sprachkonstrukt XYZ aus A das gleichwertige
Sprachkonstrukt GHIJ in B finden muss. Diese Denkweise ist zu naiv und
trifft den Kern des Problems nicht.
Karl heinz Buchegger schrieb:> Sorry.> Aber wer diese Dinge nicht umsetzen kann, sollte besser die Finger von> der Portierung eines Programms lassen.>> Und das meine ich nicht böse oder scherzhaft. Das ist mein voller Ernst.
hat hier irgendjemand von programmportierung gesprochen???
Jan schrieb:> Karl heinz Buchegger schrieb:>> Sorry.>> Aber wer diese Dinge nicht umsetzen kann, sollte besser die Finger von>> der Portierung eines Programms lassen.>>>> Und das meine ich nicht böse oder scherzhaft. Das ist mein voller Ernst.>> hat hier irgendjemand von programmportierung gesprochen???
Du redest dich jetzt in einen Schlamassel hinein.
Wenn du C lernen willst, dann hör auf dir eine Umsetztabelle zurecht zu
legen sondern lies ein C-Buch.
Denn zum lernen einer Programmiersprache ist so eine Tabelle noch
kontraproduktiver als für einen Programmport.
naja eine kurze vergleichende Tabelle, welches Sprachelement so ca auf
welches mappt ist für Umsteiger sicher hilfreich.
wenn man zB C kann und soll Pascal programmieren ist es schon hilfreich,
wenn man weiß, dass eine Zuweisung so aussieht := oder man
Anweisungsblöcke mit Begin End bildet.
Das kann, wenn man mit den zugrundeliegendem Programmierparadigma
vertraut ist, sicher genauso helfen, wie ein Buch/Referenz (die man
natürlich trotzdem braucht), nur dass man so das Gröbste schon mal auf
einen Blick hat.
Ich werf mal [1] ins Feld. Wer "Basic" ∗kann∗ [0], der kann sich damit
problemlos die Syntax von C aneignen. Wenn man dann noch [2] dazunimmt,
dann hat man damit das nötige Handwerkszeug, um drauflos zu
programmieren. Das ergibt zwar wahrschei^Wsicher noch keinen guten(tm)
Code, aber es sollte für den Einstieg reichen. Und genau sowas sucht der
TO so wie ich das verstanden hab.
HF
[0] Damit meine ich ausdrüklich nicht das durchschnittliche
Scriptkiddie, das überglücklich ist wenn es den 'Run'-Button gefunden
hat. Die Betonung liegt auf "kann".
[1] http://en.wikipedia.org/wiki/C_syntax
[2] http://en.wikipedia.org/wiki/ISO_C_standard_library
Vlad Tepesch schrieb:> wenn man zB C kann und soll Pascal programmieren ist es schon hilfreich,> wenn man weiß, dass eine Zuweisung so aussieht := oder man> Anweisungsblöcke mit Begin End bildet.
Und in der Tabelle stehen dann auch solche zu beachtenden Feinheiten
drin wie dass das Semikolon in C ein Statement beendet, während es in
Pascal zwei Statements trennt, weshalb in C ein Semikolon auch nach
dem letzten (oder einzigen) Statement eines Blocks nötig ist, während es
in Pascal an dieser Stelle im besten Fall überflüssig ist und in manchen
Fällen zu einem Syntaxfehler führt?
Selbst auf den ersten Blick sich eins-zu-eins entsprechende Konstrukte
in verschiedenen Sprachen sind in den Details oft eben doch nicht
identisch, und deshalb ist es gefährlich, selbiges durch eine
Übersetzungstabelle zu suggerieren.
Andreas
Vlad Tepesch schrieb:> wenn man zB C kann und soll Pascal programmieren ist es schon hilfreich,> wenn man weiß, dass eine Zuweisung so aussieht := oder man> Anweisungsblöcke mit Begin End bildet.
Sorry, aber das kann ich nicht nachvollziehen.
Wenn jemand in Pascal programmierern soll, dann wird er nicht umhin
kommen, zunächst mal ein paar Stunden mit Pascal Grundlagen zu
verbringen. Wenn er in den ersten 20 Minuten dabei nicht rauskriegt,
dass eine Zuweisung in Pascal mittels := geschrieben wird, bzw. das
Blöcke mittels begin / end gebildet werden, dann ist ihm nicht zu helfen
und er sollte isch besser fragen, ob er tatsächlich C programmieren
kann, oder ob er nur denkt, das das so ist.
Aus dieser Tabelle würde aber zb die abweichende Bedeutung des
Pascal-schen ; nicht hervorgehen, sodass er mit einer naiven C->Pascal
Umsetzung mächtig Schiffbruch erleiden würde. Etwas was nicht passieren
würde, wenn er sich zunächst die Zeit nimmt und ein wenig mit Pascal
spielt. Seine C Erfahrung wird ihm beim Durcharbeiten eines
Pascal-Buches zu Hilfe kommen und vieles wird ihm bekannt vorkommen.
Einiges wird aber anweichend von C sein, und genau das sind dann die
Dinge, auf die er sich beim Durcharbeiten konzentrieren kann: Die
bekannten Dinge werden eher überflogen, auf Ausnahmen und Abweichungen
abgeklopft. Zur Sicherheit macht man noch die Übungsbeispiele am Ende
jedes Kapitels (die ja dann eigentlich kein Problem darstellen dürften)
um sicher zu gehen, dass man im überflogenen Text nichts übersehen hat
und nach ein paar Tagen hat man sich den Grundstock einverleibt um damit
sein eigentliches Projekt starten zu können. Zu diesem Zeitpunkt ist
aber eine derartige Umsetztabelle schon längst obsolet und höchstens
einem Notizzettel mit wichtigen, kleinen Feinheiten gewichen.
Pascal und C kommen beides aus dem Algol-Eck. Ihre Unterschiede sind
mehr von der Sorte der feinen Klinge. Wenn man weiß das ein C { } sich
in Pascal begin/end schreibt, kann man deswegen noch lange nicht Pascal
programmieren. Und die restlichen Dinge, ach komm, dass ein if in Pascal
einem if in C entspricht, das ist nun wirklich nicht Raketentechnik, das
kann ich erraten, wenn ich mir als C Kenner ein Pascal Programm ansehe.
Da muss man wirklich nicht 5 Semester studieren. Bei diesem speziellen
Sprach-Beispiel sind es die Feinheiten die den Unterschied ausmachen.
Das muss aber nicht so sein! Auch in Forth gibt es das Schlüselwort IF.
Und trotzdem ist der Umstieg nach Forth wesentlich krasser, weil dort
eine völlig andere Denkweise notwendig ist.
BASCIC und C sind (je nach BASIC) nicht so unähnlich, aber doch ganz
anders. Beiden gemeinsam sind gewisse Kontrollstrukturen die sogar
ähnlich heißen, sich aber in den syntaktischen (und manchmal auch
semantischen Details) Details unterscheiden, aber die Art und Weise
(besonders in altem, zeilenbasiertem BASCI) wie programmiert wird, ist
dann doch ganz anders.
Wer allerdings eine Tabelle braucht um ein BASIC IF
10 IF A = 5 THEN B = 8
durch das C Äquivalent
if( a == 5 )
b = 8;
ersetzen zu können, der macht in meinen Augen etwas grundsätzlich
falsch.
Ich hab ja ursprünglich zu Jans Gunsten angenommen, dass er einen
Programmport machen will. Es gibt Übersetzer, die von einer Hochsprache
in eine andere Hochsprache übersetzen, aber auch da ist die Ansicht "da
nehmen wir eine Tabelle" einfach zu naiv gestrickt.
Ganz schlimm wird es allerdings, wenn es gar nicht um das Portieren
geht, sondern um das Erlernen einer Sprache. Da kommt man mit so einer
Tabelle nicht weit. Ich denke zb an die typischen C-Anfängerfallen, dass
in C Arrays beginnend bei 0 indiziert werden und die daraus folgenden
typischen Konstrukte. Meines Wissens beginnt BASIC aber bei 1 (oder
zumindest ist das konfugrierbar), womit dort typische
Array-Funktionalitäten im Detail ganz anders aussehen. Oder
String-Verarbeitung, oder ....
Die Frage von Jan ist doch berechtigt - gerade wenn man in verschiedenen
Programmiersprachen programmieren muß bzw. möchte, schleichen sich sehr
schnell syntaktische Fehler ein.
Mittels Tabelle kann man das vorab vermeiden.
Hier mal was von Microsoft, die dieses Problem im Gegensatz zu anderen
erkannt haben:
http://msdn.microsoft.com/de-de/library/zwkz3536.aspx
C, Pacal, andere Basic-Varianten kann man sich ja anhand dieser Vorgabe
selbst erstellen.
>Pascal und C kommen beides aus dem Algol-Eck.
Pascal kommt aus der Algol-Ecke. Das weiß ich, weil ich zunächst mit
Algol programmiert habe. (KRS4201)
C ist in meinen Augen ein kryptisches Gewürge mit etlichen
Stolperfallen.
Portabel ist es auch nicht richtig, weil sich zum Beispiel Quelltexte
mit der nächstfolgenden Kompilerversion nicht ohne Fehler übersetzen
lassen.
Hier hat Einer Vergleiche zwischen C und Pascal angestellt.
Dessen Schlußfolgerungen teile ich.
http://www.bernd-leitenberger.de/pascal-und-c.shtml
MfG Paul
So sehr ich Bern Leitenberger für seine Kentnisse in der Raumfahrt
schätze, seine Programmiersprachenanalyse halt ich nicht für sehr
fundiert. Sein Artikel macht kein Hehl daraus, dass er C nicht wirklich
kann.
Zum einen vergleicht er hier Äpfel mit Birnen. Kein C-Programmierer
würde eine toLower Funktion in C so schreiben wie er das tut. Ausserdem
ist seine C Version fehlerhaft. Das ist genau das, was ich weiter oben
nur schlecht ausdrücken konnte: Wenn man eine Funktion 1:1 nur duch
anpassen von Schlüsselwörtern von einer Sprache in eine andere
trnasferiert kommt genau so etwas raus.
Zudem, ich hab bis jetzt nur den ersten Teil seines Aufsatzes gelesen,
stimmt seine Erzählung der geschichtlichen Vorgänge nicht wirklich damit
überein, wie ich sie erlebt habe. Und ich bin auch ein Programmierkind
der frühen 80-er Jahre und hab noch mit K&R C gearbeitet, genauso wie
ich mit Pascal gearbeitet habe und genauso wie ich Herrn Wirth bei
seinem Vortrag gelauscht habe, als er seine brandneue Maschine, die
Lilith und das darauf laufende Modula, im großen Hörsaal vorgestellt
hat.
Leitenberger hat sich da so manche Argumentation aus dem Nichts aus dem
Ärmel gezogen und präsentiert sie nur ganz kurz, damit man nur ja nicht
zu genau hinschaut.
Karl heinz Buchegger schrieb:> So sehr ich Bern Leitenberger für seine Kentnisse in der Raumfahrt> schätze, seine Programmiersprachenanalyse halt ich nicht für sehr> fundiert. Sein Artikel macht kein Hehl daraus, dass er C nicht wirklich> kann.>> Zum einen vergleicht er hier Äpfel mit Birnen. Kein C-Programmierer> würde eine toLower Funktion in C so schreiben wie er das tut.
Da stimme ich dir zu.
Teilweise hat er aber auch nicht ganz unrecht.
Die Sprache enthält viele unlogische oder verwirrende Elemente.
Aber wer mit einem Rambomesser, anstatt einen Taschenmesser auf die Jagd
gehen will, muss halt dafür auch etwas besser aufpassen ;)
Dabei fällt mir das wieder ein:
http://www.parallelnetz.de/CHater.html
Vlad Tepesch schrieb:> Teilweise hat er aber auch nicht ganz unrecht.> Die Sprache enthält viele unlogische oder verwirrende Elemente.
Volle Zustimmung (übrigens ist C++ auch nicht besser)
Aber auch in Pascal ist nicht alles eitel Wonne und Sonnenschein. Auch
wenn er es noch so gerne so verkaufen möchte :-)
Letztenendes läuft es bei solchen Sachen immer aufs Gleiche hinaus: Die
beste Programmiersprache ist die, die man beherrscht. Und wenn sie
Tücken und Fallen hat: für einen Kenner sind die das Salz in der Suppe
:-)
Im Ernst. Diese Vergleiche von Sprache A mit Sprache B haben immer etwas
von "meiner ist länger als deiner" und drum vermeide ich es im
Normalfall da hineingezogen zu werden.
Hier in diesem Thread hab ich mich nur deswegen zu Wort gemeldet, weil
ich den Eindruck hatte, dass Jan mit falschen Vorstellungen an die Sache
rangeht, wenn das Ziel "Lernen von C" lautet. Mit einer derartigen
Gegenüberstellung alleine wird das nämlich IMHO nichts. Noch nicht mal
ansatzweise. Und wenn man dann erst mal ein paar Stunden K&R geschmökert
hat, dann braucht man diese Gegenüberstellung nicht mehr. Wozu also so
etwas schreiben oder gar suchen? Vergebliche Liebesmüh für nichts.