000
27.09.2003, 19:17 Uhr
Anfänger00
|
Ich hab eine Klasse geschrieben mit der ich 32-stellige zahlen addieren kann. Das ist nur das Problem,das ich das nicht in einer schleife machen kann:
C++: |
for(....) { a+c; // a ist mein datentyp c ist char* } // da wird das nur 5 mla oder so gemacht und dann wird die Zahl einfach zu groß
|
oder a+c+c,das Programm stürzt ab.oder a+c;a+e;a+f,darf immer nur eine variable verwendet werden,sonst stürzt es auch ab.
Das ganze schut so aus:
C++: |
header : class longdez { protected: char Ziffer[32]; unsigned short RealZahl[32]; unsigned short BufferZahl[32]; char vAusgabe[32];
public: longdez (); // Konstruktor void Wert(char*,unsigned short[32]); // Macht aus char eine Zahl void Zeichen(); // Macht aus einer Zahl einen Buchstaben const char* Ausgabe(); void plus(short,short); //kann die 32 bit Zahl erhöhen void minus(short,short); longdez operator=(char*); longdez operator+(char*); longdez operator+(longdez); }; ________________________________________________________________
defininitions.cpp:
#include <iostream> #include "Objekt.h" #define typnull "00000000000000000000000000000000" using namespace std;
longdez::longdez() { Wert(typnull,this->RealZahl); Zeichen(); };
void longdez::Wert(char* Text,unsigned short x[32]) { for(int i=0;i<32;i++) { switch(Text[i]) { case '0': {x[i]=0;break;} case '1': {x[i]=1;break;} case '2': {x[i]=2;break;} case '3': {x[i]=3;break;} case '4': {x[i]=4;break;} case '5': {x[i]=5;break;} case '6': {x[i]=6;break;} case '7': {x[i]=7;break;} case '8': {x[i]=8;break;} case '9': {x[i]=9;break;} default : {x[i]=0;break;} }}};
void longdez::Zeichen() { for(int i=0;i<32;i++) { switch(this->RealZahl[i]) { case 0: {this->Ziffer[i]= '0';break;} case 1: {this->Ziffer[i]= '1';break;} case 2: {this->Ziffer[i]= '2';break;} case 3: {this->Ziffer[i]= '3';break;} case 4: {this->Ziffer[i]= '4';break;} case 5: {this->Ziffer[i]= '5';break;} case 6: {this->Ziffer[i]= '6';break;} case 7: {this->Ziffer[i]= '7';break;} case 8: {this->Ziffer[i]= '8';break;} case 9: {this->Ziffer[i]= '9';break;} default:{this->Ziffer[i]= '0';break;} } } this->Ziffer[32]= '\0'; strcpy(this->vAusgabe,this->Ziffer); };
const char* longdez::Ausgabe() { const char* show; show=this->vAusgabe; return show; }
void longdez::plus(short variable,short x) { for(int i=variable;i>=0;i--) { if(this->RealZahl[i]>9-x) { this->RealZahl[i]=this->RealZahl[i]+x-10; x=1; } else {this->RealZahl[i] += x;break;} }};
int mystrlen(const char* buffer) { int x=0; while(buffer[x] != '\0')x++; //Strings in C sind Nullterminiert return x-1; }; longdez longdez::operator=(char* Ztext) { int x = 32; for(int i=mystrlen(Ztext); i>=0; i--) {this->Ziffer[x--] = Ztext[i]; switch(Ztext[i]) { case '0': {this->RealZahl[x]=0;break;} case '1': {this->RealZahl[x]=1;break;} case '2': {this->RealZahl[x]=2;break;} case '3': {this->RealZahl[x]=3;break;} case '4': {this->RealZahl[x]=4;break;} case '5': {this->RealZahl[x]=5;break;} case '6': {this->RealZahl[x]=6;break;} case '7': {this->RealZahl[x]=7;break;} case '8': {this->RealZahl[x]=8;break;} case '9': {this->RealZahl[x]=9;break;} default : {this->RealZahl[x]=0;break;} }} Zeichen(); longdez give; strcpy(give.vAusgabe,this->Ziffer); for(int i=0;i<32;i++) { give.RealZahl[i]=this->RealZahl[i]; } return give; };
longdez longdez::operator+(char* Ptext) { int x = 32; for(int b;b<32;b++) { this->Ziffer[ b ]='0'; }
for(int i=mystrlen(Ptext); i>=0; i--) {this->Ziffer[--x] = Ptext[i];} Wert(Ziffer,this->BufferZahl); for(int i=31;i>=0;i--) { plus(i,this->BufferZahl[i]); } Zeichen(); /* longdez give; strcpy(give.vAusgabe,this->Ziffer); for(int i=0;i<32;i++) { give.RealZahl[i]=this->RealZahl[i]; } return give; */ };
|
Ihr habt zwei Möglickeiten mir zu helfen: a)ihr findet den Fehler b)ihr kritisiert den Quatsch und habt ne bessere Idee
Ich hoffe,das das nicht zu viel quellcode ist.
THX Dieser Post wurde am 27.09.2003 um 19:48 Uhr von Pablo Yanez Trujillo editiert. |