AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Variablentypen bei ord() erzeugen Fehler

Offene Frage von "KodeZwerg"
Ein Thema von Nox · begonnen am 12. Jul 2018 · letzter Beitrag vom 13. Jul 2018
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
Nox

Registriert seit: 12. Jul 2018
22 Beiträge
 
#1

Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 20:52
Hallo,

ich hab mich seit einiger Zeit mit dem Verschlüsseln und Entschlüsseln von Daten beschäftigt und komme bei der Entschlüsselung einfach mit den Variablentypen nicht weiter.
Warum ist die Variable ein Typ Double und nicht String oder Integer(durch die Zuweisung der Variable)?
Ich poste im Anhang einmal den kompletten Quellcode damit die Funktionsweise verstanden werden kann und einen Screenshot der Fehlermeldung mit Fehlerstelle.
Ich bin noch neu im Bereich Programmierung, es kann sein das es ein ziemlich dummer Fehler ist, jedoch ist die Frage ernst gemeint, da ich nicht weiterkomme.


Fehlerstelle:

Code:
procedure TForm1.Button3Click(Sender: TObject);
var
zurueckZahlInt:Integer;
zurueckZahlStr:String;
zurueck:String;
//Faktor variablen
str1: String;
int1: Integer;
faktorumgewandelt:Integer;
begin
//Faktor umwandeln
str1:= Edit1.Text; //faktor auslesen
int1:= ord(str1[1]); //faktor umwandeln
faktorumgewandelt:=int1;
  //ENTSCHLÜSSELN
//Datei auslesen
//Datei zuweisen
AssignFile(Verschluesselt,'C:\Users\Noah\Desktop\hallo.txt');
//Datei öffnen
ReWrite(Verschluesselt);
//Datei auslesen
ReadLn(Verschluesselt,zurueckZahlStr);                    //hier wird die verschlüsselte Zahl meines Wissens einem Integer zugeordnet
zurueckZahlInt:=StrToInt(zurueckZahlStr);
//verschlüsselter Text zurückführen (durch Faktor)
zurueckZahlInt:=zurueckZahlInt/faktorumgewandelt;                          //hier funktioniert der Typ nicht (plötzlich Double)
zurueck:=Chr(zurueckZahlInt);
end;
Vielen Dank fürs Angucken Noah!
Miniaturansicht angehängter Grafiken
unbenannt.png  
Angehängte Dateien
Dateityp: pas unit1.pas (3,4 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 21:05
Der Operator / erzeugt eine Fließkommazahl. Für Integerdivisionen ohne Rest gibt es div.

ZB: 8/3 = 2.666666666666666667 und 8 div 3 = 2

Selbst wenn kein Rest bleibt liefert / eine Fließkommazahl

ZB: 9/3 = 3.000000000000000 und 9 div 3 = 3

Wenn Du / brauchst und weiter mit Integer rechnen willst, benutze trunc(a/b) oder round(a/b)

Geändert von gammatester (12. Jul 2018 um 21:12 Uhr)
  Mit Zitat antworten Zitat
Nox

Registriert seit: 12. Jul 2018
22 Beiträge
 
#3

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 21:17
Vielen Dank das macht Sinn und ich benötige ja eh nie eine Kommazahl!
Jetzt hätte ich aber eine andere Frage ... hat jemand eine Ahnung, warum das Program jedes mal crasht beim entschlüsseln? eigentlich sind da doch keine Fehler drinnen oder?
Das Problem geht scheinbar von ReadLn aus....
LG Noah

Geändert von Nox (12. Jul 2018 um 21:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 21:26
Leg Dir ein Array of Byte an und füttere es mit dem String dann Schreibe das Array in ein File.
So in etwa:
Delphi-Quellcode:
var
  MyRec: Array of Byte;
begin
  for i := 1 to length(InputString) do
    MyRec[i-1] := Ord(InputString[i]);
end;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#5

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 21:27
Delphi-Quellcode:
ReWrite(Verschluesselt);
//Datei auslesen
ReadLn(Verschluesselt,zurueckZahlStr);
Mit rewrite legt man eine Datei neu an! Aus Deinem Kommentar entnehme ich, daß Du eigentlich lesen willst. Dafür gibt es 'Reset(Verschluesselt)'.
  Mit Zitat antworten Zitat
Nox

Registriert seit: 12. Jul 2018
22 Beiträge
 
#6

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 22:11
Leg Dir ein Array of Byte an und füttere es mit dem String dann Schreibe das Array in ein File.
So in etwa:
Delphi-Quellcode:
var
  MyRec: Array of Byte;
begin
  for i := 1 to length(InputString) do
    MyRec[i-1] := Ord(InputString[i]);
end;
Die Idee ist super aber es hat auch mit der anderen Möglichkeit schonmal ohne crash geklappt nur das bei der Rückverschlüsselung nur noch ein Buchstabe herauskommt.
Dieser ist der Anfangsbuchstabe des verschlüsselten Textinhalts.
Kann es sein das nur ein Buchstabe in Ascii übersetzt wird?
  Mit Zitat antworten Zitat
Nox

Registriert seit: 12. Jul 2018
22 Beiträge
 
#7

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 22:12
Delphi-Quellcode:
ReWrite(Verschluesselt);
//Datei auslesen
ReadLn(Verschluesselt,zurueckZahlStr);
Mit rewrite legt man eine Datei neu an! Aus Deinem Kommentar entnehme ich, daß Du eigentlich lesen willst. Dafür gibt es 'Reset(Verschluesselt)'.
Das hatte ich übersehen vielen Dank!

HAben sie vielleicht eine Idee für mein neustes Problem? tut mir leid aber auch da hab ich schon gefühlt tausend Kombinationen ausprobiert aber es geht einfach nicht (Frage in der anderen Antwort).

LG Noah
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 22:22
So wie ich das sehe wird nur ein einziger Char in ein Integer umgewandelt weswegen ich ein Array Vorschlug.
(da der Code keine Formatierung besitzt kann ich auch was überlesen haben, sorry falls das so ist)
So in etwa könnte man das wieder lesbar machen mit der Array Methode von oben.
Delphi-Quellcode:
var
  s: String;
begin
  s := '';
  for i := 0 to Size(MyRec)-1 do
    s := s + Char(MyRec[i]);
end;
Gruß vom KodeZwerg

Geändert von KodeZwerg (12. Jul 2018 um 22:27 Uhr) Grund: -1 vergessen
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#9

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 22:23
HAben sie vielleicht eine Idee für mein neustes Problem? tut mir leid aber auch da hab ich schon gefühlt tausend Kombinationen ausprobiert aber es geht einfach nicht (Frage in der anderen Antwort).
Welches neueste Problem? Nur ein Tipp: Der Code ist schwer lesbar, auch deshalb weil (zu mindest mir) nicht klar ist, was eigentlich gemacht werden soll. Da hilft, es ein gute Beschreibung der Aufgabe zu mache, und eventuell etwas was Pseudo-Code.
  Mit Zitat antworten Zitat
Nox

Registriert seit: 12. Jul 2018
22 Beiträge
 
#10

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 22:48
Welches neueste Problem? Nur ein Tipp: Der Code ist schwer lesbar, auch deshalb weil (zu mindest mir) nicht klar ist, was eigentlich gemacht werden soll. Da hilft, es ein gute Beschreibung der Aufgabe zu mache, und eventuell etwas was Pseudo-Code.
Bei der Entschlüsselung wird nur ein Buchstabe angezeigt.
Dieser ist der Anfangsbuchstabe des Textes des vorher verschlüsselten Textdokumentes.
Die Frage ist jetzt eigentlich nur wie ich nicht nur einen sondern alle Buchstaben einlesen ver- und entschlüsseln kann.

Die Formatierung war eigentlich auf eine viel kleineres Projekt ausgelegt tut mir sehr leid ich versuche das zu verbessern!

Es soll eine Textdatei ausgewählt werden können.
Diese wird danach eingelesen und als String in das Projekt importiert.
Nun soll mit hilfe der Funktion ord() zu jedem Buchstaben der Ascii Code (ich glaube das ist Ascii) in eine Variable geschrieben werden.
Um Die Verschlüsselung zu erreichen soll eine einzugebene Zahl als Multiplikator dienen um jegliche Ascii Zahlen (umgewandelte Buchstaben) zu "verschlüsseln".
das Ergebnis dieser Multiplikation soll im gleichen Textdokument gespeichert werden und den Originaltext ersetzen.

Beim Entschlüsseln soll durch eingabe des zuvor frei gewählten Faktors die "Verschlüsselung", also die Multiplikation, rückgängig gemacht werden und die Original Ascii Zahlen wiederhergestellt werden.
Durch Chr() sollen die umgewandelten buchstaben nun wiederherstellbar sein und im selben Textdokument, die verschlüsselten Zahlen ersetzend, gespeichert werden.

Ich hoffe das Funktionsprinzip ist nun eher verständlich!

LG Noah
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz