AGB  ·  Datenschutz  ·  Impressum  







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

Programm für Octalzahlen in Dezimalzahlen

Ein Thema von SirMaurice · begonnen am 7. Dez 2018 · letzter Beitrag vom 11. Dez 2018
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.686 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Programm für Octalzahlen in Dezimalzahlen

  Alt 9. Dez 2018, 15:41
noch ein Tipp von mir zu deinem Code: wenn du dir angewöhnst zur Einrückung immer 2 stat wie bei dir
bisher 1 Zeichen zu benutzen, dann ist es nicht nur Delphi/Pascal STandard, sondern erhöht auch die
Lesbarkeit ungemein.
Selber einrücken ist ja sowas von letztes Jahrtausend. Und selbst für Delphi 5 gab es schon den Code Formatter DelForEx. (Wobei ich mich gerade frage, wo man den ggf. noch herbekommt.)

Edit: Internet Archive ist einfach nur gut:

https://web.archive.org/web/20080913.../UK/Delforexp/

Der Download-Link auf der Seite funktioniert auch.
Thomas Mueller

Geändert von dummzeuch ( 9. Dez 2018 um 15:47 Uhr)
  Mit Zitat antworten Zitat
SirMaurice

Registriert seit: 7. Dez 2018
Ort: Berlin
16 Beiträge
 
Delphi 5 Enterprise
 
#2

AW: Programm für Octalzahlen in Dezimalzahlen

  Alt 9. Dez 2018, 16:30
Danke für die Tipps, wäre auch mal nett sowas von seinem Lehrer zu erfahren.
Ich habe versucht das untenstehende umzusetzen, leider funktioniert absolut gar nichts.
Bevor der Quellcode kommt: Von meinem Lehrer ist leider absolut gar keine Hilfe zu erwarten.

Weiterhin habe ich noch versucht mit einer case of Struktur zu arbeiten, hat auch nicht funktioniert.

Code:
procedure TForm1.BBerechnen2Click(Sender: TObject);
var
 i: integer;
 Position, Ergebnis: cardinal;
begin
  Position:= 1;
  Ergebnis:= 0;

  for i:= length(EOct.Text) downto 1 do begin
   
    if EOct.Text[i]='0' then
       Ergebnis:= Ergebnis +Position;
     Position:= Position * 8;

    if EOct.Text[i]='1' then
       Ergebnis:= Ergebnis +Position;
     Position:= Position * 8;

    if EOct.Text[i]='2' then
       Ergebnis:= Ergebnis +Position;
     Position:= Position * 8;

    if EOct.Text[i]='3' then
       Ergebnis:= Ergebnis +Position;
     Position:= Position * 8;

    if EOct.Text[i]='4' then
       Ergebnis:= Ergebnis +Position;
     Position:= Position * 8;

    if EOct.Text[i]='5' then
       Ergebnis:= Ergebnis +Position;
     Position:= Position * 8;

    if EOct.Text[i]='6' then
       Ergebnis:= Ergebnis +Position;
     Position:= Position * 8;

    if EOct.Text[i]='7' then
       Ergebnis:= Ergebnis +Position;
     Position:= Position * 8;

end;
 EDez.text := inttostr(Ergebnis);
end;


Zitat:
PS: ist Delphi 5 das, was die Schule besitzt? Weil das ja eigentlich schon
recht alt ist und Schullizenzen gar nicht so teuer sind...
Unsere Schule hat noch Delphi 10, jedoch ist es wohl nicht nötig mit einem aktuellen Compiler zu arbeiten.

Danke noch mal an alle Antwortgebenden.
  Mit Zitat antworten Zitat
gammatester

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

AW: Programm für Octalzahlen in Dezimalzahlen

  Alt 9. Dez 2018, 17:58
Ich habe versucht das untenstehende umzusetzen, leider funktioniert absolut gar nichts.
Wie soll denn das auch funktionieren? Wenn Du schon meinen Vorschlag der Vorwärtsberechnung nicht benutzen willst, solltest Du wissen, daß Dein Ansatz (mindestens) zwei fundamentale Fehler hat.
  • Du verwendest Deine Eingabe-Oktalziffern überhaupt nicht für die Rechung! Wie soll da etwas Vernünftiges herauskommen? Die Ziffern werden nur für völlig identische if-Anweisungen benutzt!
  • Pro Schleifendurchlauf darf nur einmal mit 8 multipliziert werden, nicht 8 mal. Bei Dir wird Position pro Zeichen mit 8^8 = 16777216 multipliziert!
  Mit Zitat antworten Zitat
SirMaurice

Registriert seit: 7. Dez 2018
Ort: Berlin
16 Beiträge
 
Delphi 5 Enterprise
 
#4

AW: Programm für Octalzahlen in Dezimalzahlen

  Alt 9. Dez 2018, 18:16
Ich weiß deinen Vorschlag zu schätzen, jedoch weiß ich nicht so ganz wie ich das umsetzen soll. Wir haben in der Schule einfach gesagt bekommen: Macht das mal. Ende. Die Rückwärtszählung war in der Aufgabe enthalten.
Außerdem möchte ich erwähnen, dass ich in meiner Schullaufbahn noch nie etwas vom Horner-Schema gehört habe. Ich hab mich ein bisschen zu dem Thema informiert, jedoch ist mein Wissen auch nach der Recherche mehr so naja.
  Mit Zitat antworten Zitat
gammatester

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

AW: Programm für Octalzahlen in Dezimalzahlen

  Alt 9. Dez 2018, 19:01
Die Rückwärtszählung war in der Aufgabe enthalten.
Na dann mal die Basisfunktion mit korrekter Implementation Deiner Methode. Ich habe Position in Potenz umbenannt, weil das die adäquate Bezeichnung ist und nicht so irreführend wie Positiion.
Delphi-Quellcode:
{-----------------------------------------------------------}
function oct2dec(const os: string): cardinal;
  {-Umwandlung des Strings os, der eine Oktalzahl enthält, in eine Dezimalzahl}
var
  Ergebnis, Potenz: cardinal;
  i: integer;
  d: byte;
  c: char;
begin
  Potenz := 1;
  Ergebnis := 0;
  for i:=length(os) downto 1 do begin
    {Umwandlung nächste Oktalziffer in Dezimalvariable d}
    c := os[i];
    if c in ['0'..'7'] then d := ord(c)-ord('0')
    else begin
      {Fehlerbehandlung: hier}
      ShowMessage(c+' ist keine gültige Oktalziffer');
    end;
    {Aufsummieren}
    Ergebnis := Ergebnis + Potenz*d;
    {nächste Achter-Potenz}
    Potenz := Potenz*8;
  end;
  oct2dec := Ergebnis;
end;
Dies kannst Du in Dein Programm einbauen und rufst die Funktion zB mit dez := oct2dec(EOct.Text) auf.

Hier noch Tip, der wichtiger ist als schöne Formatierung (die nicht vor Logik-Fehlen schützt): Versuche die Berechungen von der Oberfläche/Eingabe/Ausgabe zu trennen. Dann ist die Routine allgemein einsetzbar und hängt nicht von Deinen Editfeldern ab (in der Funktion oben sollte man deshalb besser einen Fehlercode liefern oder ein Exception werfen.)

Geändert von gammatester ( 9. Dez 2018 um 19:22 Uhr) Grund: 9 -> 7
  Mit Zitat antworten Zitat
SirMaurice

Registriert seit: 7. Dez 2018
Ort: Berlin
16 Beiträge
 
Delphi 5 Enterprise
 
#6

AW: Programm für Octalzahlen in Dezimalzahlen

  Alt 9. Dez 2018, 20:36
Danke für die Hilfe. Ich muss noch mal kurz erwähnen, dass mir einige Bezeichnungen unbekannt sind. Ich werde mal nachlesen was diese machen.

Ich wollte tatsächlich eine zweite Unit für die Rechnung erstellen, mein Lehrer meinte jedoch, dass ich dies nicht tun soll.

Vielen Dank nochmal.

Geändert von SirMaurice ( 9. Dez 2018 um 20:38 Uhr) Grund: Erweiterte Antwort
  Mit Zitat antworten Zitat
gammatester

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

AW: Programm für Octalzahlen in Dezimalzahlen

  Alt 9. Dez 2018, 20:57
Danke für die Hilfe. Ich muss noch mal kurz erwähnen, dass mir einige Bezeichnungen unbekannt sind. Ich werde mal nachlesen was diese machen.
Oft gibt es ja mehrere Möglichkeiten. ZB kann man für die Umwandlung des Oktalzeichens auch d := strtoint(c) schreiben, was vielleicht bekannter ist.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.045 Beiträge
 
Delphi 12 Athens
 
#8

AW: Programm für Octalzahlen in Dezimalzahlen

  Alt 10. Dez 2018, 21:27
Zitat von gammatester:
Hier noch Tip, der wichtiger ist als schöne Formatierung (die nicht vor Logik-Fehlen schützt)
Ja und nein: natürlich schützt schöne Formatierung nicht vor Logikfehlern, sie erleichtert aber oft das Aufspüren solcher Fehler, da sich Dinge dann einfach leichter lesen lassen.

Und zum Case, falls deine kaskadierenden ifs so etwas umsetzen sollten noch ein kurzes Beispiel:

Delphi-Quellcode:
var
  c : Char;
begin
  case c of
    'a': Aufruf1;
    'b': Aufruf2;
    'c'..'e': Aufruf3;
    else
      Aufruf4;
  end;
end;
Dabei ist Aufruf1 bis Aufruf4 jeweils eine Prozedur/Methode oder Funktion die du aufufen möchtest.
'c'..'e' bedeuitet, dass dieser Fall für c, d und e gilt und der else Zewig wird für alle Fälle abgedeckt
in denen c nicht im bereich a-e liegt.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#9

AW: Programm für Octalzahlen in Dezimalzahlen

  Alt 10. Dez 2018, 21:41
noch ein Tipp von mir zu deinem Code: wenn du dir angewöhnst zur Einrückung immer 2 stat wie bei dir
bisher 1 Zeichen zu benutzen, dann ist es nicht nur Delphi/Pascal STandard, sondern erhöht auch die
Lesbarkeit ungemein.
Selber einrücken ist ja sowas von letztes Jahrtausend. Und selbst für Delphi 5 gab es schon den Code Formatter DelForEx. (Wobei ich mich gerade frage, wo man den ggf. noch herbekommt.)

Edit: Internet Archive ist einfach nur gut:

https://web.archive.org/web/20080913.../UK/Delforexp/

Der Download-Link auf der Seite funktioniert auch.
Von mir auch. BITTE setz das begin in eine neue Zeile. Da bluten meine Augen.
Delphi-Quellcode:
  for i:= Length(EOct.Text) downto 1 do
    begin
Das begin gehört nach Delphi-Styleguide in die nächste Zeile. Alles andere ist einfach nur hässlich und kommt aus der C-Gegend.
  Mit Zitat antworten Zitat
gammatester

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

AW: Programm für Octalzahlen in Dezimalzahlen

  Alt 10. Dez 2018, 22:01
Wenn ich nicht etwas übersehen habe, hat außer mir niemand einen inhaltlichen Beitrag geschrieben.

Leider gibt es hier im Forum immer wieder die störende Tendenz, nicht auf die eigentlichen Fragen und Probleme einzugehen, sondern auf Äußerlichkeiten zu fokussieren (Formatierung, Bezeichner, 'letzte Jahrtausend' usw).

Das bringt für die Problemlösung 0.42% oder so. Wichtig ist ein konsistenter und konstanter Stil, und nicht das, was irgendein Programm automatisch vorschlägt.

Ich weiß, das mein Beitrag jetzt auch das Problem hat, aber nicht zu antworten ist keine Lösung.

BITTE setz das begin in eine neue Zeile. Da bluten meine Augen.
Delphi-Quellcode:
  for i:= Length(EOct.Text) downto 1 do
    begin
Das begin gehört nach Delphi-Styleguide in die nächste Zeile. Alles andere ist einfach nur hässlich und kommt aus der C-Gegend.
Welcher Style-Guide? Nach https://edn.embarcadero.com/article/10280#8.2.4 ist Deine Formatierung inkorrekt.

Geändert von gammatester (10. Dez 2018 um 22:13 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 17:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz