App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Frage zur Definition eines eigenen Datentypes
- Ersteller Dizzy_Ti
- Erstellt am
Dizzy_Ti
Vice Admiral Special
Hi,
ich programmiere gerade eine Klasse für große Zahlen (3000 Zeichen).
Dafür verwende ich einen Char Array und in jedes Feld kommt eine Ziffer.
Im Konstruktur wird die Zahl übergeben mit der Datentyp vorbelegt werden soll.
So wird zum Beispiel die 100 richtig abgespeichert und die restlichen nachfolgenen Stellen werden mit 0 belegt.
Mein Problem zur Zeit ist, dass ich Probleme mit der Ausgabe habe.Meine erste Idee ist es nach der ersten Zahl zu suchen die nicht 0 ist und alle 0 die davor sind wegzustreichen.
Dies klappt auch gut.Das Problem ist, dass ich wenn ich zwei Zahlen meines Datentypes (z.B 1+2) addieren will nicht 3 ausgegeben wird sondern 3 + die restlichen folgenden Nullen.Wie kann ich die unwichtigen 0 streichen lassen, ohne das dannach zuwenig Nullen angezeigt werden?
ich programmiere gerade eine Klasse für große Zahlen (3000 Zeichen).
Dafür verwende ich einen Char Array und in jedes Feld kommt eine Ziffer.
Im Konstruktur wird die Zahl übergeben mit der Datentyp vorbelegt werden soll.
So wird zum Beispiel die 100 richtig abgespeichert und die restlichen nachfolgenen Stellen werden mit 0 belegt.
Mein Problem zur Zeit ist, dass ich Probleme mit der Ausgabe habe.Meine erste Idee ist es nach der ersten Zahl zu suchen die nicht 0 ist und alle 0 die davor sind wegzustreichen.
Dies klappt auch gut.Das Problem ist, dass ich wenn ich zwei Zahlen meines Datentypes (z.B 1+2) addieren will nicht 3 ausgegeben wird sondern 3 + die restlichen folgenden Nullen.Wie kann ich die unwichtigen 0 streichen lassen, ohne das dannach zuwenig Nullen angezeigt werden?
PseudoReal
Grand Admiral Special
hmmm, das ist ne gute frage.
aber wäre es nicht sinnvoller nen array anzulegen bei dem in jeden feld sagen wir 8bit oder 16bit zahlen vorhanden sein müssen.
zahl 257
a1 a0
[1] [256]
aber wäre es nicht sinnvoller nen array anzulegen bei dem in jeden feld sagen wir 8bit oder 16bit zahlen vorhanden sein müssen.
zahl 257
a1 a0
[1] [256]
Dizzy_Ti
Vice Admiral Special
ja sinnvoller wäre das schon, aber dadurch wird es auch schwieriger die Rechenarten richtig umzusetzen.
mj
Technische Administration, Dinosaurier, ,
- Mitglied seit
- 17.10.2000
- Beiträge
- 19.529
- Renomée
- 272
- Standort
- Austin, TX
- Mein Laptop
- 2,4kg schwer
- Prozessor
- eckig... glaub ich
- Mainboard
- quadratisch, praktisch, gut
- Kühlung
- kühler?
- Speicher
- ja
- Grafikprozessor
- auch
- Display
- viel bunt
- HDD
- ist drin
- Optisches Laufwerk
- ist auch drin (irgendwo)
- Soundkarte
- tut manchmal tuuut
- Gehäuse
- mit aufkleber!
- Netzteil
- so mit kabel und so... voll toll
- Betriebssystem
- das eine da das wo dingenskirchen halt, nech?
- Webbrowser
- so ein teil da... so grün und so
- Verschiedenes
- nunu!
Die Nullen werden ausgegeben, weil du keinerlei Information darüber hast ob eine Null jetzt zum Ergebnis gehört oder Overhead ist. Warum verwendest du nicht einfach ein NaN anstelle einer Null? Oder ein X oder irgendwas anderes, was bei einer normalen, arithmetischen Operation niemals vorkommen wird? Dann hast du das Null-Problem bei der Ausgabe nicht mehr und kannst alle NaN oder X oder wasauchimmer abschippeln und die Nullen lassen.
Dizzy_Ti
Vice Admiral Special
Danke für die Antwort Die Lösung war so leicht, dass ich einfach gar nicht daran gedachte habe
jpwookenny
Vice Admiral Special
Wir haben letztes Semester in Java mal so eine Klasse für beliebig große natürlichte Zahlen gebaut.
Da haben wir (auch eine selbstgebaute Klasse) doppelt verkettete Listen verwendet.
Damit ist eine Ausgabe der ganzen zahl oder die Addition von 2 Zahlen recht einfach und die Länge der Zahlen können zur Laufzeit beliebig varieren.
Da haben wir (auch eine selbstgebaute Klasse) doppelt verkettete Listen verwendet.
Damit ist eine Ausgabe der ganzen zahl oder die Addition von 2 Zahlen recht einfach und die Länge der Zahlen können zur Laufzeit beliebig varieren.
Dizzy_Ti
Vice Admiral Special
Code:
uint3000 test(120);
uint3000 test2(20);
test2=test-test2-test2;
ShowMessage("Test:"+test.ausgabe(false));
ShowMessage("Test2:"+test.ausgabe(false));
//test=test-test2;
ShowMessage("Lösung:"+test.ausgabe(true))
Arggg Problem doch nicht ganz gelöst.
80-20-20=40 rechnet er richtig aus, aber 100-20-20 kriegt das 88 raus.
Hier der Code von der Subtraktion
Code:
uint3000 uint3000::operator- (uint3000 &rhs)
uint3000 re();
AnsiString eins=rhs.ausgabe(true);
AnsiString zwei=this->ausgabe(true);
int lange1=eins.Length();
int lange2=zwei.Length();
int zahler=0;
int zw=0;
int merk=0;
zahler=eins.Length();
if (lange1==lange2)
{
zahler=eins.Length();
// ShowMessage ("Gleich gross");
}
if (lange1<lange2)
{
//ShowMessage("Rhs wird angepasst");
rhs.transform_in_right_length(rhs,(zwei.Length()-eins.Length()),eins.Length());
zahler=zwei.Length();
}
if (lange2<lange1&&equal)
{
this->transform_in_right_length((lange1-lange2),lange2);
zahler=lange1;
// ShowMessage("Lhs wird angepass");
}
//zahler=zahler-1;
// beide Werten sind nun angepasst
// von hinten nach vorne rechnen
// wenn Wert eins kleiner als 0 dann rechne ich von 10 - den Wert
// ShowMessage(this->ausgabe(false)); //120
// ShowMessage(rhs.ausgabe(false)); //020
for (int i=2999;i>=0;i--)
{
// ShowMessage("I:"+AnsiString(i));
if (zahler>=0)
{
// ShowMessage("This:"+AnsiString( int(this->value[zahler-1])));
// ShowMessage("Rhs:"+AnsiString(int(rhs.value[zahler-1])));
if (this->value[zahler-1]<rhs.value[zahler-1])
{
// ShowMessage("Kleiner");
zw=this->value[zahler-1]%10;
zw+=10;
re.value[i]=(zw-rhs.value[zahler-1]);
rhs.value[zahler-2]=rhs.value[zahler-2]+1;
}
else
{
re.value[i]=this->value[zahler-1]-(rhs.value[zahler-1]);
}
zahler--;
if (zahler==0)
{
merk=i;
break;
}
}
}
int ze=2999; ; int merk2=0;
int mk=merk;
int temp=0;
for (int i=0;i<(2999-merk+1);i++)
{
re.value[i]=re.value[mk];
//ShowMessage(AnsiString(int(puffer[mk])));
// ShowMessage(int(re.value[i]));
// ze--;
mk++;
merk2=i;
}
int o=merk2+1;
re.value[o]='x';
this->setvalue(zwei); // Zu Test zwecken
rhs.setvalue(eins); // Zu Test zwcken
// ShowMessage("RHS:"+rhs.ausgabe(false));
// Wert von This bleibt trotzdem gleich
return re;
Code:
void uint3000::setvalue(AnsiString val)
{
int einzelstelle=0;
int merk=0;
int zahler=0;
for (int i=1;i<=val.Length();i++)
{
// ShowMessage(val.SubString(i,1));
einzelstelle=val.SubString(i,1).ToInt();
//ShowMessage(einzelstelle);
this->value[zahler]=einzelstelle;
merk=i;
zahler++;
//ShowMessage( AnsiString(int(value[i])));
}
// ShowMessage("Ge"+AnsiString(zahler));
for (int i=zahler;i<3000;i++)
{
// ShowMessage(i);
this->value[i]='x';
}
}
Zuletzt bearbeitet:
Dizzy_Ti
Vice Admiral Special
Hmm wie kann man den eine eigene Divisionsmethode programmieren bei diesem Datentyp, der eine Ganzzahl zurückliefert?
Ähnliche Themen
- Antworten
- 469
- Aufrufe
- 77K
- Antworten
- 0
- Aufrufe
- 69K