Autor Beitrag
ak
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 240

Suse Windows 9 XP
D6 Professional
BeitragVerfasst: Do 06.03.03 00:09 
Wie kann ich einen String (z.B. strzahl:=edit1.text) der 30 Stellen hat in einen integer umwandeln, so dass ich mit ihm rechnen kann??
Hat da jemand ne Idee?

Gruß AK

P.S. bin neu hier und begrüsse mal alle members hier
Borlox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 191

Win XP
Delphi 6 Enterprise
BeitragVerfasst: Do 06.03.03 00:19 
Du musst einfach StrToInt() noch hinzufügen!

strzahl:=StrToInt(edit1.text);

Das hat natürlich den Nachteil, dass es einen schweren Fehler gibt, wenn mal ein Buchstabe mit im Feld steht!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 06.03.03 00:19 
Es gibt keinen ganzzahligen Datentypen, der standardmäßig bei Delphi dabei ist und der eine derart große Zahl darstellen kann.

Dazu benötigst Du einen neuen Datentypen. Die Frage danach tauchte hier im Forum schon mal auf. Müsstest Du mal suchen.
MfG,
Peter

<edit>
Hier ist der Thread!
</edit>

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
ak Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 240

Suse Windows 9 XP
D6 Professional
BeitragVerfasst: Do 06.03.03 11:02 
Hallo Peter Lustig,

Ich habe diese Aufgabe in einem Einstellungstest bekommen und hatte dafür nur 30 Minuten Zeit. Es geht hier "nur" um 30 stellige Integerzahlen und nicht wie in deinem auch sehr hilfreichem Link um Zahlen bis 500 Stellen. Da der Quelltext in deinem Link sehr sehr gross ist, denke ich mal dass es da noch ne andere Lösung geben muss.
Wäre für jeden Tip dankbar.

Gruß AK
ak Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 240

Suse Windows 9 XP
D6 Professional
BeitragVerfasst: Do 06.03.03 11:06 
Titel: bigInt
Der vorgegebene Code in meinem Einstellungstest hatte 2 Funktionen zum umwandeln, einmal von "BigIntinString" und einmal von "StringinBigInt".
Dann noch eine dritte Funktion zum addieren der beiden BigIntegers.
Als Type war BigInt und ein Fragezeichen (Type BigInt = ?), welchen Typ ich da am besten verwende weiss ich auch noch nicht.

Gruß AK
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Do 06.03.03 11:21 
Hallo!

Das ist aber ein gemeiner Test. Und dazu so fern der Praxis!

Ich glaube, ich hätte angefangen, mir zu überlegen, wie viel Bit ich für die Darstellung einer 30-stelligen Dezimal-Zahl benötige. Um einen Wertebereich von 10^30 Kombinationsmöglichkeiten mit einer binären Zahl abzudecken, muss man also eine Potenz finden für die gilt 2^x>=10^30. Diese Potenz gibt einem dann die Anzahl der Bit, die der Datentyp benötigen würde.

Das Addieren wäre ja noch einfach, aber wie man dann einen Textstring in diesen Typ umwandelt... Keine Ahnung!

Ihr hattet nicht zufälligerweise eine Internetverbindung nach draussen zur Verfügung? Vielleicht war das so ein Test ala "Schauen wir mal, ob sie sich einen abbrechen bei der Realisierung oder lieber sofort so klug sind und sich die Quellen aus dem Netz holen. Man muss ja nicht wissen, wie es geht, man muss nur wisssen, wo es steht.". :wink:

Cu,
Udontknow
ak Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 240

Suse Windows 9 XP
D6 Professional
BeitragVerfasst: Do 06.03.03 12:27 
Naja es war auf einem Laptop, und die Internetverbindung habe ich nicht gecheckt, ich denka mal nicht dass es darum ging.
Hier mal die original Aufgabe, vielleicht war ja auch nur das Prinzip und die Addier-Routine gefragt. Der "Prüfer" meinte auch dass ich mir die aufgabenstellung genau durchlesen sollte, und meinte, "ich wäre nicht der erste der daran gescheitert ist". Hier also die original Aufgabe:

"Entwerfen Sie eine Unit für das Durchführen der Grundrechenarten mit 30-stelligen Ganzen Zahlen. Skizzieren sie dabei kurz das Prinzip und implementieren sie eine entsprechende Addier-Routine"

aber ohen dem umwandeln der Strings aus dem Textfeld kann ich nicht addieren....hmmmm....

Gruß AK
dude
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Do 06.03.03 12:55 
aber BigInt gibt es doch gar nicht ![/code]
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Do 06.03.03 12:56 
@AK:
Ha! Es ist nicht von DEZIMAL-Zahlen die Rede! Du kannst also einfach Binärzahlen als Eingabe verlangen! Eine solche Umsetzung von String in ein Array ist einfach.

@Dude: Dieser Datentyp plus Umwandlungsfunktionen sollte erstellt werden .

Cu,
Udontknow


Zuletzt bearbeitet von Udontknow am Do 06.03.03 12:59, insgesamt 3-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 06.03.03 12:56 
Zitat:
Ich habe diese Aufgabe in einem Einstellungstest bekommen und hatte dafür nur 30 Minuten Zeit. Es geht hier "nur" um 30 stellige Integerzahlen und nicht wie in deinem auch sehr hilfreichem Link um Zahlen bis 500 Stellen. Da der Quelltext in deinem Link sehr sehr gross ist, denke ich mal dass es da noch ne andere Lösung geben muss.
Konnte ich ja nicht wissen! :schmoll:

Der Vorschlag von Udontknow ist eigentlich schon ziemlich gut. Wenn ich mich nicht verrechnet habe, brauchst Du 100 Bits plus eins fürs Vorzeichen. Also:
Type BigInt = Array[0..100] OF Boolean;

Eine Addition implementierst Du so, wie Du es auch bei einer schriftlichen Addition machst!

Waren die Funktionen zur Umwandlung von und nach String jetzt gegeben oder musste man die noch schreiben? In der Aufgabenstellung steht zumindest nicht, dass man das muss!

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Do 06.03.03 13:04 
So wie ak das jetzt geschrieben hat, muss man gar nicht die Eingabe bzw. Umwandlung realisieren. Man muss einfach nur einen Datentyp erstellen und die Rechenoperation "addieren" implementieren.

Cu,
Udontknow
ak Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 240

Suse Windows 9 XP
D6 Professional
BeitragVerfasst: Do 06.03.03 13:12 
Nee nee auf dem Laptop waren bei den 2 Umwandlungsfunktionen (BigInt in String und umgekehrt) Fragezeichen gewesen ( den Funktionen fehlte das "wehsentliche", nur das "drumherum" war da). Also denke ich mal, dass diese auch entwickelt werden mussten. Da das Formular ja auch schon da war, sollte die Funktionalität dann bestimmt getestet werden.

Gruß
ak Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 240

Suse Windows 9 XP
D6 Professional
BeitragVerfasst: Do 06.03.03 13:13 
aber bis jetzt ist es schon sehr hilfreich :-)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 06.03.03 13:18 
Bei der Aufgabenstellung und zusammen mit dem Hinweis der Prüfers, die Aufgabenstellung genau durchzulesen und mit der begrenzten Zeit glaube ich nicht, dass Du eine solche Routine schreiben musst.
Sonst stände da ja nicht: "Schreiben Sie eine Routine zur Addition" sondern "Schreiben Sie eine Routine zur Addition und Umwandlung von und nach String".
Die Fragezeichen in den entsprechenden Funktionen standen wahrscheinlich nur da, damit man keinen Hinweis bekommt, wie der Datentyp aussieht!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Do 06.03.03 13:20 
Achso. Naja, da aber eben ind er Aufgabe keine Rede davon war, daß es Dezimalzahlen in Strings sein müssen, die die Funktionen annehmen bzw. ausgeben, ist, wie schon gesagt, eine Umwandlung recht einfach. Wenn wir mal Peter Lustigs Ansatz nehmen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function BigIntToStr(Value:BigInt):String;
var i:integer;
begin
  Result:='';
  for i:=Low(Value) to High(Value) do
    if Value[i] then
      Result:=Result+'1'
    else
      Result:=Result+'0';
end;


Cu,
Udontknow
ak Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 240

Suse Windows 9 XP
D6 Professional
BeitragVerfasst: Do 06.03.03 13:24 
@Peter Lustig, ich denke du hast recht, 30 minuten sind wirklich ein bisschen wenig für alles.
Gut jetzt haben wir den Typen : Type BigInt = Array[0..100] OF Boolean;

jetzt fehlt "nur" noch die Addierroutine, wobei ich gegen eine komplette Umandlungsroutine nicht haben würde :-) .

Gruß
ak Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 240

Suse Windows 9 XP
D6 Professional
BeitragVerfasst: Do 06.03.03 13:32 
@udontknow, ich teste gerade mal deine Umwandlungsroutine. Thanx
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Do 06.03.03 13:33 
Ohne Gewähr:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function Addieren(Val1,Val2):BigInt;
var i:integer;
var Uebertrag:Boolean;
begin
  Uebertrag:=False;
  for i:=Low(Val1) to high(Val1) do
  begin
    Result[i]:=(Val1[i] xor Val2[i]) xor Uebertrag);
    Uebertrag:=Val1[i] and Val2[i] or ((Val1[i] or Val2[i]) and Uebertrag);
  end;
end;


Cu,
Udontknow
ak Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 240

Suse Windows 9 XP
D6 Professional
BeitragVerfasst: Do 06.03.03 13:48 
Wie würde denn eine StrToBigInt Funktion aussehen???

Gruß
ak Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 240

Suse Windows 9 XP
D6 Professional
BeitragVerfasst: Do 06.03.03 13:58 
Ich habe mal folgendes versucht (mal etwas code):

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
BigInt = Array[0..100] OF Boolean;
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function BigIntToStr(Value:BigInt):String;
var i:integer;
begin
Result:='';
for i:=Low(Value) to High(Value) do
if Value[i] then
Result:=Result+'1'
else
Result:=Result+'0';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
wert1 :BigInt;

begin
wert1:= ? ;
edit2.Text:=BigIntToStr(wert1);
end;

end.

--------------------------------
Wie kann ich in der button1 click procedure dem wert1 etwas zuweisen???

entweder komt die fehlermeldung :
[Error] Unit1.pas(43): Integer constant too large
oder
[Error] Unit1.pas(43): Incompatible types: 'BigInt' and 'Int64'

bin etwas ratlos.

Gruß