C "Nennen sie die drei wesentlichen Datentypen"

m4x

Cadet 4th Year
Registriert
Sep. 2004
Beiträge
119
Guten Tag,

der Titel dieses Themas bezieht sich auf eine Frage einer Kurzarbeit aus dem Fach Informatik an meiner Schule (BOS).

Die Frage lautete genau:

Nennen Sie die drei wesentlichen Datentypen in C für Variablen (und geben sie jeweils ein Beispiel für deren Deklaration an).

Der Teil in Klammern ist für mein Problem erstmal unrelevant.

Als Lösung gibt der Lehrer char, int und float an.
Meine Antwort waren int, float und double .

Mir ist bewusst, dass ich der Fragenstellung nach falsch geantwortet habe, da mir auch der char nicht mit dem richtigen Beispiel einfiel.
Aber diese Frage ist doch dann auch nicht richtig formuliert, da die Datentypen ja immer auf den Anwendungsfall ankommen und man meiner Meinung nach nicht sagen kann, dass es genau drei wesentliche Datentypen gibt die da eben diese aus der Lösung wären.

Habe ihn schon darauf angesprochen und er meinte, "das sind die Hauptdatentypen", woraufhin ich ihn fragte ob er mir das belegen könne, weil auf wiki z. B. stehen da eben noch mehr.
Antwort war: "Schauen Sie in ihre Unterlagen"
Dort hatten wir damals die Datentypen aufgeteilt auf "Zeichen" und "Ziffern" und die Ziffern nochmal auf Ganzzahl und Kommazahl.

Also mehr als int, char, float, double haben wir nicht aufgeschrieben.

Jetzt soll ich ihm belegen, dass char, int, float nicht nur alleine die "wesentlichen" Datentypen sind.
Falls ihrs bis hierher geschafft habt, schreibt mal eure Meinung dazu.
Danke. :)
 
Zuletzt bearbeitet:
Ich lege Wert auf die Feststellung, dass es sich um meine Meinung handelt:

Laut Aufgabenstellung sollst du drei "wesentliche" Typen nennen. Ich finde, dass dies ein durchaus dehnbarer Begriff ist, den ich so verstehe, als ob hier Klassentypen der Standardbibliothek gemeint sind. Damit wäre deine Antwort meiner Meinung nach richtig.
Man könnte hier natürlich so argumentieren, als dass du keinen Typen aus dem Bereich der "Zeichen-Typen" hast. Aber dies wurde ja nicht explizit verlangt.
Zudem: Du nennst ja elementare Datentypen. Dies sind für mich die wesentlichen. Siehe auch: http://de.wikipedia.org/wiki/Datentyp#Elementare_Datentypen
Die Sache ist nur die: Wie will man das belegen? Hier müsste jemand in einer "renommierten" Lektüre etc. genau diese Formulierung etc. finden. Ich bezweifle, ob dies eintreffen wird.

Ich kann diese Korrektur jedenfalls nicht nachvollziehen.

Gruß,

badday
 
Zuletzt bearbeitet:
Jetzt soll ich ihm belegen, dass char, int, float nicht nur alleine die "wesentlichen" Datentypen sind.
Das wird schwer, ich würde zumindest noch boolean (->Wahrheitswert) dazu nehmen, weil sich das nicht aus einem der anderen drei herleiten lässt. Double ist aber absoluter Käse, das ist einfach nur ein float mit höherer Genauigkeit (bzw. Bitzahl). Mit boolean/char/int/float lassen sich aber alle Datentypen konstruieren (String als char[], short/long/double als int/float mit kleinerem/größerem Wertebereich etc.).
 
m4x schrieb:
Jetzt soll ich ihm belegen, dass char, int, float nicht nur alleine die "wesentlichen" Datentypen sind.
Verweis ihn einfach auf die C-Specs. Lustiger Weise spezifiziert sie wirklich genau drei verschiedene Arten von Datentypen. „object types“, „function types“ und „incomplete types“.

Wen man die Aufgabenstellung wohlwollend betrachtet kann man sich am besten an den Schlüsselwörtern von C orientieren. Dann könnte man char, float, double, int und void* als wesentliche Datentypen ableiten. Jetzt könnte man sich natürlich noch darüber streiten ob man enum, union und struct als eigenständige Datentypen führt. Pointer hat man jetzt natürlich völlig unter den Tisch fallen lassen, _Bool, _Complex, und _Imaginary sowieso.
 
Zuletzt bearbeitet:
Danke für eure Antworten!

Den Unterschied von float und double kenne ich.
Habe schonmal ein bisschen mit Visual Basic und SQL experimentiert, weswegen ich ja auch so verwundert war, warum wir nur 4 Datentypen aufschreiben und den Rest sozusagen untern Tisch kehren.
Das es boolean gibt hab ich auch gesagt (habs zumindest so im Wiki gelesen), dass hat er aber bestritten und gemeint den gibts nur in Pascal.
Möchte ja mit dem auch keinen rießen Streit anfangen (mit den Punkten der Aufgabe hätte ich 12 Pkt (Note 2) und halt keine 11 Pkt (Note 2-)), aber durch meine Grundkenntnisse was Datentypen angeht hat mich das jetzt schon etwas verwundert bzw. stuzig gemacht.

Die C-Specs werd ich mir mal noch anschauen und ihm dann zeigen.
 
Das es boolean gibt hab ich auch gesagt (habs zumindest so im Wiki gelesen), dass hat er aber bestritten und gemeint den gibts nur in Pascal.
Der erste Teil ist richtig der zweite Teil ist falsch. boolean gibt es in C (in den älteren Varianten) tatsächlich nicht. Da muss man int dafür "missbrauchen". Einen bool'schen Datentyp gibt es aber in vielen anderen modernen Hochsprachen (z. B. Java, C#, ...) und nicht nur in Pascal.

Die Aufgabe steht und fällt mit dem Wort "wesentlich". Den Begriff "wesentlicher Datentyp" habe noch nie gesehen. Was unterscheidet einen "wesentlichen" von z. B. einem "elementaren" Datentyp?
Meine Meinung: Ein Datentyp ist wesentlich, wenn die Sprache ein Schlüsselwort dafür bietet und somit Teil der Sprache sind. Das ist bei den von dir genannten Typen der Fall.
 
Zuletzt bearbeitet:
hmm also für mich sind deine Typen auch in Ordnung. Ich mutmaße mal das dein Lehrer eben sowas hören wollte wie primitiver Darstellungstyp von Zeichen, wobei da char auch schon zweifelhaft ist, dann einen für Ganzzahlen und ein Fließkommatyp.
 
Trägt zwar nur indirekt zum Thema bei, aber ich würde mich mit deinem Lehrer nicht anlegen. Ich weiß, ich werde auch zu gerne zu sowas verleitet, aber da der Typ keine sachliche Diskussionsgrundlage besitzt (verweist dich auf seine Unterlagen--->"Es ist einfach so"), würde ich ihm im Nachhinein entweder zustimmen, dann bist du für ihn "formbar" und er versteht das noch und du "respektierst" ihn, oder du sagst einfach garnichts, finde dich einfach damit ab.
Es ist auf keinen Fall sinnvoll ihn irgendwie in seinem Machtbereich einzuschränken, er kann dir sonst dauerhaft deine Noten versauen.
 
Einen Float braucht man alle heilige Zeit. Wichtig sind char, int und double. Ein float bringt nur etwas, wenn die Genauigkeit keine Rolle spielt und der Codeteil sehr performancekritisch ist. Meiner Meinung nach ist die Aussage einfach falsch.
 
Wobei ich auch den Lehrer verstehen kann. Wenn in den Unterlagen zu dem Thema eine Unterscheidung in Zeichentypen und Zahlentypen gemacht wird, wobei Zahlentypen noch in Ganzzahl und Gleitkommazahlen unterteilt werden, dann ist eben in dem Kontext die richtige Antwort char, int und float.
Schön wäre es natürlich, wenn sich der Lehrer auf eine Diskussion einlassen und nicht mit Halbwahrheiten um sich werfen würde.
 
So wie ich das verstehe ging es darum Datentypen von unterschiedlicher Art zu benennen. Also nicht short+int+long oder float+double+x, sondern eben ein Zeichentyp (char), ein Ganzzahltyp (short, int, long) und ein Fließpunkttyp (float, double). Alternativ hätte wohl auch noch Zeigertyp (void*) oder eben einen Wahrheitswert (boolean) nehmen können. Ob man nun noch struct, union oder string noch mitnimmt ist eher Geschmackssache.
 
Bei der Lösung 'int, float und void*' hättest Du noch folgendermaßen diskutieren können:

int -> Ordinaltyp (ebenso: char und long)
float -> Fließkommazahl (ebenso: double)
void* -> Zeiger (untypisiert)
 
@m4x

Hmm. Sowas ist immer schade, dass gerade die Leute mit Interesse "bestraft" werden. Du sollst halt das antworten was er gelehrt hat und nicht selber nachdenken. Macht zumindest den Anschein. Traurig. :(

Wenn es wirklich, char-int-float war, was er im Unterricht gelehrt hat, wird es wohl schwer dagegen zu argumentieren (vor allem wenn Nicht-Informatik-Lehrer dazukommen).

Er soll mal seine Antwort anhand des C-Standards begründen. Wird er wohl nicht machen, damit macht er sich dann angreifbar.
 
Limit schrieb:
Alternativ hätte wohl auch noch Zeigertyp (void*) oder eben einen Wahrheitswert (boolean) nehmen können. Ob man nun noch struct, union oder string noch mitnimmt ist eher Geschmackssache.

1.) Ein Pointer ist im Hintergrund bloß ein Integer je nach System mit 16, 32 oder 64 Bit. Manchmal bekommt man bei mancen Funktionen sogar einen Integer zurück und eigentlich ist ein Handle gemeint.

2.) Ein Boolean ist in Wahrheit auch als Byte abgespeichert. Abgesehen davon gibt es im klassischen C gar keinen Boolean. Das wurde afaik erst mit C++ eingeführt.

3.) Eine Struktur ist eigentlich kein Datentyp, genauso wenig wie Union. Das ist ein Zusammenfassen von mehreren Datentypen.

4.) Ein String wird zwar aus praktischen Gründen oft als Datentyp anzusehen, ist aber im Prinzip nur ein Feld von Charactern mit ein paar Zusätzen. Zumindest in C/C++ ist das so (C kennt glaube ich auch gar keinen String).
 
andr_gin schrieb:
1.) Ein Pointer ist im Hintergrund bloß ein Integer je nach System mit 16, 32 oder 64 Bit. Manchmal bekommt man bei mancen Funktionen sogar einen Integer zurück und eigentlich ist ein Handle gemeint.
Sachte mal...

Ein Zeiger repräsentiert eine Speicher-Adresse und enthält in seiner Byte-Repräsentation NICHT den tatsächlich logischen Daten-Wert - von daher ist ein Zeiger eben nicht nur 'ein Integer mit ... Bits'.

Und der Inhalt eines Handles ist von API zu API unterschiedlich: ein Dateideskriptor ist ebenso ein Handle und ist unter unixoiden Betriebssystemen ein ganzzahliger Wert, während in der Win32-API ein HANDLE ein direkter Zeiger ist.

andr_gin schrieb:
2.) Ein Boolean ist in Wahrheit auch als Byte abgespeichert. Abgesehen davon gibt es im klassischen C gar keinen Boolean. Das wurde afaik erst mit C++ eingeführt.
...und wieder: im Hintergrund wird alles in Bytes abgespeichert - es ist nun einmal die kleinste adressierbare Einheit.

andr_gin schrieb:
3.) Eine Struktur ist eigentlich kein Datentyp, genauso wenig wie Union. Das ist ein Zusammenfassen von mehreren Datentypen.
Ein struct ist tatsächlich kein elementarer Datentyp, aber dennoch ein Datentyp.


Sobald Daten eines gewissen Formats interpretiert werden, spricht man von Datentypen.
In der Fragestellung ging es jedoch um elementare ('wesentliche') Datentypen.
 
Zuletzt bearbeitet:
Mein Gott was eine riesige Diskussion.
Er will von Dir das wissen, was er vorher im Unterricht besprochen hat.
Er hat char, int und float besprochen, also will er die drei auch haben. Da kann man sich die ganzen Beweihräucherungen und "Eigentlich hab ich ja doch recht" Geschichten sparen.
Wieviel Interesse Du hast oder ob und wer welche Datentypen als wie wichtig ansieht ist doch sowas von egal.
Für euren Kurs wurden diese drei als wesentlich aufgeführt, also sind genau diese drei zu nennen, wenn danach gefragt wird.
Damit wird auch kein "Interessierter" geschädigt. Der sollte nämlich überhaupt kein Problem damit haben, die drei zu nennen und im Kopf zu sagen "aber man könnte auch ...".

-- -- muckelzwerg
 
Und genau das ist meiner Meinung nach die komplett falsche Einstellung. Man sollte versuchen die Sachen zu verstehen und nicht die Sachen auswendig zu lernen. Das nutzt einem in der Realität nämlich genau Null. Da kann man gleich die Studenten wie in der Volkschule Gedichte auswendig lernen lassen und wer die 10 Seiten ohne Einsagen kann, der kommt durch. Das ist genauso sinnvoll.
Natürlich ist int, float und double nicht die Musterantwort, aber den float als wesentlichen Datentyp zu nennen und double weg zu lassen und das als das einzig Wahre gelten zu lassen, ist einfach falsch, zumindest aus heutiger Sicht, wo man einen float zu so gut wie gar nichts mehr brauchen kann.
 
Zurück
Oben