Entwickler-Ecke

C# - Die Sprache - ASCII to float C#


MelBel - Fr 06.12.13 13:14
Titel: ASCII to float C#
Hey Leute!
Ich habe nach einer Hilfe für meine Aufgabe gesucht und hab euch gefunden! :)
Ich hoffe ihr könnt mir weiterhelfen.

Meine Aufgabe lautet:

Schreiben Sie eine Funktion, die einen String ("ASCII-Werte") in einen double-Wert umwandelt. Aus historischen Gründen heißt diese Funktion atof, also ASCII nach float, obwohl das Ergebnis eine double ist.
Schreiben Sie atof so, dass auch Werte der Form 123.45e-6 akzeptiert werden, bei denen einem Gleitkomma Wert optional der Buchstabe e oder E und ein Exponent, wieder optional mit Vorzeichen, folgen kann.

Jetzt bin ich aber echt auf dem Schlauch, denn der Prof hat uns die Aufgabe einfach hingeknallt ohne zu erklären wie man den float-Befehl überhaupt benutzt.
Ich "glaube" ich hätte da einen Ansatz

C#-Quelltext
1:
2:
string bla = "123.32";
float fnum = float.Parse(bla);

Davor würde ich dann "bla" definieren, bzw zu einer Eingabe auffordern.

Ich hoffe ihr könnt mir weiterhelfen! :)

LG MelBel

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


jfheins - Fr 06.12.13 13:20

Dein "Ansatz" ist zwar grundsätzlich richtig, ich bezweifele aber dass das als Antwort durchgeht. Vermutlich möchte der Prof dass du die Parse-Funktion selbst schreibst.

Was meinst du eigentlich mit dem " float Befehl"? Es gibt einen Typen namens float, dieser hat zahlreiche Methoden. Aber einen "float-Befehl" gibt es so gesehen eigentlich nicht :wink:


MelBel - Fr 06.12.13 13:40

Gut das mit dem float-Befehl war mein Fehler, dachte es wäre irgendsowas in der Richtung ;)



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
using System;

class Program
{
    static void Main()
    {
  
  string bla = "132.32";
  float fnum = float.Parse(bla);
  Console.WriteLine(bla);



Also soweit bin ich gekommen, wobei ich die Zahl in dem Beispiel "132.32" variieren kann und selbst eingegeben wird.
Wie meinst du das mit Parse-Funktion selbst schreiben?

Wie könnte ich "atof" so schreiben, dass auch der Exponent mit einem E folgt?


LG MelBel

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


Ralf Jansen - Fr 06.12.13 13:46

Du sollst vermutlich das tun was die Parse Methode macht ohne Parse zu verwenden.
Übrigens heißt die Aufgabe einen double zu erstellen und eben nicht float.


Fragen mit denen du den Aufgabensteller nerven solltest um rauszufinden was du wirklich tun sollst

1.) Aus welchem Kulturkreis kommt der Eingabestring oder soll das einstellbar sein bzw. die Systemeinstellungen verwenden (die Parse Funktion berücksichtig die Kultur und in deutsch ist ein Punkt nunmal ein Tausendertrennzeichen)
2.) Wie soll die Funktion auf nicht parsbare strings reagieren (Exceptions, Rückgabewert, bestimmter Zahlenwert der Fehler signalisiert (z.B. infinity) etc.)
3.) Bis zu welchem Grad dürfen vorhandene oder erhältliche Bibliotheken verwendet werden (wie zum Beispiel die Parse Methode oder andere Klassen wie zum Beispiel Convert oder Klassen aus dem Math Namespace).

und eine irrelevante Nerd Bonusrückfragen

4.) Woher soll der ASCII string kommen? In .Net ist alles Unicode das kennt ASCII nicht mal mehr.


MelBel - Fr 06.12.13 14:04

Hey Ralf,
also ich hab gerade andere Kommilitonen (die wissen auch nicht wie die Aufgabe geht):

1) Also es wird der "deutsche Kulturkreis" berücksichtig. Punkte = Tausendertrennzeiche

2) Da denk ich, denkst du zu kompliziert, auf die parsbare strings soll ein Fehler kommen und die Eingabe wiederholt werden.

3) Die Bibliotheken dürfen dahingehen benutzt werden, die wir bis zu dem Zeitpunkt gelernt haben, dürfen aber auch theoretisch alle verwendet werden

4) Kein Ahnung :D

LG MelBel


Ralf Jansen - Fr 06.12.13 14:11

zu 1.) Dann solltest du eine Überladung der Parse (oder TryParse) Methode verwenden die einen IFormatProvider annimmt um zu sagen das du deutsch(de-de) möchtest.

zu 2.) Das denke ich nicht ;) Du solltest eine Methode atof schreiben laut Aufgabenstellung geht da ein string rein und ein double kommt raus. Du mußt dir also Überlegen wie du dem Nutzer der Funktion zurückmeldest ob der Double auch gültig ist. Die angesprochene TryParse Methode die du anstatt Parse verwenden kannst ist da ein schönes Beispiel wie das aussehen kann.


MelBel - Mo 09.12.13 20:32

Aaaaaaalso

Ich bin zum Prof gegangen und hab ihn mal gefragt.
Bevor ich ihn überhaupt die Frage stellen konnte, sagte er sofort, dass er die falsche Aufgabe uns gegeben hätte, weil er die Semester verwechselt hat. War anscheinend für das Semester über uns.
Daher war alles "umsonst" :D

Aber ich danke euch trotzdem Allen! :)