AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Funktionen und Prozeduren

Ein Thema von Slashmob · begonnen am 5. Jan 2012 · letzter Beitrag vom 8. Jan 2012
Antwort Antwort
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Funktionen und Prozeduren

  Alt 7. Jan 2012, 15:46
Ok, danke soweit. Das hat mir schon viel geholfen das zu verstehen. Im Prinzip besteht die Aufgabe darin mit pos,copy und delete zu arbeiten.

Nun soll ich ja eine Prozedur schreiben, die mir die Absolutwerte der Koordinaten erstellt.

Delphi-Quellcode:
procedure berechne_absolutwerte(deltax,deltay:double);
    // berechnet die Absolutwerte mit Hilfe der incrementellen
       var x,y: integer;
       begin
            x:=x+deltax;
            y:=y+deltay;
       end;
Was wäre hier die einfachste Art x und y zu berechnen.
Muss ich hier in der Textdatei nach den Werten von X und Y und den Deltawerten suchen?
Das wird wohl ohne Parser nicht gehen, weil du ja auch auf das prüfen mußt:

X100X80 // hier Fehler melden

BTW:
Was ist hier denn falsch??
X96Y151 // hier Fehler melden

Du mußt auch zuerst den Kommentar entfernen und dann erst den Trim machen, da zwischen Code und Kommentar ein Leerzeichen sein kann (also so, wie es K.-H. gemacht hat).

MFG
Thomas
  Mit Zitat antworten Zitat
Slashmob

Registriert seit: 28. Okt 2011
45 Beiträge
 
#2

AW: Funktionen und Prozeduren

  Alt 7. Jan 2012, 16:26

Das wird wohl ohne Parser nicht gehen, weil du ja auch auf das prüfen mußt:

X100X80 // hier Fehler melden

BTW:
Was ist hier denn falsch??
X96Y151 // hier Fehler melden

Du mußt auch zuerst den Kommentar entfernen und dann erst den Trim machen, da zwischen Code und Kommentar ein Leerzeichen sein kann (also so, wie es K.-H. gemacht hat).

MFG
Thomas
BTW:
Was ist hier denn falsch??
X96Y151 // hier Fehler melden

Gute Frage.Glaube ist korrekt so.

X100X80 // hier Fehler melden
Wie überprüf ich das?

Denk ich jetzt zu kompliziert oder geht das auch einfacher??
Delphi-Quellcode:
procedure berechne_absolutwerte(deltax,deltay:double);
    // berechnet die Absolutwerte mit Hilfe der incrementellen
       var x,y: integer;
       begin
            Position_X:=pos('X',s); // Stelle vom Zeichen 'X' im String
            Position_Y:=pos('Y',s); // Stelle vom Zeichen 'Y' im String
            x:=Position_X + strtoint(Position_X+1); // X-Koordinaten, ist Zahl nach dem Zeichen 'X'
            y:=Position_Y + strtoint(Position_Y+1); // Y-Koordinaten, ist Zahl nach dem Zeichen 'Y'
            Position_deltax:=pos('DELTAX',s); // Stelle von 'DELTAX' im String
            Position_deltay:=pos('DELTAY',s); // Stelle von 'DELTAY' im String
            deltax:= Position_deltax + strtoint(Position_deltax+1); // Deltax-Zahlenwert nach 'DELTAX'
            deltay:= Position_deltay + strtoint(Position_deltay+1); // Deltay-Zahlenwert nach 'DELTAY'

            x:=x+deltax;
            y:=y+deltay;
       end;
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Funktionen und Prozeduren

  Alt 7. Jan 2012, 17:30
Der Wert kann ja auch aus mehrstellig sein.

Ich habe mir mal folgendes überlegt, ist kein echter Parser, dürfte hier aber genügen. Der Code geht so vor, daß gültige Einträge aus dem String rausgelöscht und in einem anderen aufsummiert werden. Ist am Schluß der Eingabestring nicht leer, dann war ein Fehler aufgetreten.

Die entsprechenden Zahlenwerte werden als Integer zurückgeliefert. Diese kannst du ja bedarfsweise als Abs(Value) dem Result hinzufügen.

Mein Code soll nur als Anregung dienen !!!
==========================================

Delphi-Quellcode:
function CodeOnlyAndUpperCaseAndBlankReplace(const S: string): string;
var
  Index: integer;
begin
  Result:= S;
  Index:= Pos('//', Result);
  if Index > 1 then
    Result:= Copy(Result, 1, Index-1)
  else
    if Index = 1 then Result:= '';
  Index:= 1;
  while Index <= Length(Result) do
  begin
    if Result[Index] <= ' then
    begin
      Delete(Result, Index, 1);
      Dec(Index);
    end;
    Inc(Index);
  end;
  Result:= UpperCase(Result);
end;

function GetValue(var S: string; const Searchstr: string; var Value: integer): boolean;
var
  I, Index: integer;
  Substr: string;
begin
  Result:= false;
  Value:= 0;
  Index:= Pos(Searchstr, S);
  if Index > 0 then
  begin
    Substr:= '';
    I:= Index+Length(Searchstr);
    while I <= Length(S) do
    begin
      if S[I] in ['-', '0'..'9'] then
        Substr:= Substr+S[I]
      else
        Break;
      Inc(I);
    end;
    Result:= TryStrToInt(Substr, Value);
    if Result then
      Delete(S, Index, Length(Searchstr+Substr));
  end;
end;

procedure TForm1.Button10Click(Sender: TObject);
var
  S, T, Result, Searchstr: string;
  Value: integer;
  Error: boolean;
begin
  Result:= '';
  S:= 'DELTAX1DELTAY-63 // Test';
  Error:= false;

  S:= CodeOnlyAndUpperCaseAndBlankReplace(S);
  T:= S;

  Searchstr:='DELTAX';
  if (not Error) and GetValue(S, Searchstr, Value) then
  begin
    Result:= Result+Searchstr+IntToStr(Value);
    T:= S; Error:= GetValue(T, Searchstr, Value);
  end;

  Searchstr:='DELTAY';
  if (not Error) and GetValue(S, Searchstr, Value) then
  begin
    Result:= Result+Searchstr+IntToStr(Value);
    T:= S; Error:= GetValue(T, Searchstr, Value);
  end;

  Searchstr:='X';
  if (not Error) and GetValue(S, Searchstr, Value) then
  begin
    Result:= Result+Searchstr+IntToStr(Value);
    T:= S; Error:= GetValue(T, Searchstr, Value);
  end;

  Searchstr:='Y';
  if (not Error) and GetValue(S, Searchstr, Value) then
  begin
    Result:= Result+Searchstr+IntToStr(Value);
    T:= S; Error:= GetValue(T, Searchstr, Value);
  end;

  Searchstr:='HF';
  if (not Error) and GetValue(S, Searchstr, Value) then
  begin
    Result:= Result+Searchstr+IntToStr(Value);
    T:= S; Error:= GetValue(T, Searchstr, Value);
  end;

  if Length(S) <> 0 then Error:= true;

  if Error then
    Showmessage('Error: '+S)
  else
    Showmessage('Code: '+Result);
end;

end.

Geändert von Bjoerk ( 7. Jan 2012 um 17:34 Uhr)
  Mit Zitat antworten Zitat
Slashmob

Registriert seit: 28. Okt 2011
45 Beiträge
 
#4

AW: Funktionen und Prozeduren

  Alt 8. Jan 2012, 12:39
Hab nochmal paar Verständnisfragen.
Ich kann der Aufgabenstellung nicht ganz entnehmen wie der Ablauf des Programms ist.

Button2 führt ja quasi die "Säuberung" durch.
Aber was soll Button1 namens "Memo auf Datei" machen?
Wofür brauch ich das Memofeld in diesem Programm?

Und ich verstehe dies hier nicht:
Delphi-Quellcode:
function extrahiere_werte(s:string):boolean; // diese Prozedur speichert die exrahierten Werte global
       var
           test_zaehler, // nur zwei positionen besetzt?
           position1,
           position2,
           i : integer; // Index
           resultat : boolean;
           hilfsstring : string;
           strecke,
           x,y,deltax,deltay : double;
       begin
            result:=resultat;
       end;
Wäre um Tipps dankbar.
Gruß Slash

Geändert von Slashmob ( 8. Jan 2012 um 13:24 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Funktionen und Prozeduren

  Alt 8. Jan 2012, 15:23
Keine Ahnung was damit gemeint sein soll. Du sammelst die Resultstrings einfach in einer Stringlist und speicherst diese dann in einer Datei. Fertig. Zusätzlich kann man das ganze natürlich noch in einem Memo anzeigen lassen (Die einzelnen Werte liegen ja bereits vor).
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Funktionen und Prozeduren

  Alt 8. Jan 2012, 19:17
Ich hab da was gefunden:
http://warpserv.fh-bielefeld.de/ltil...saufgabe_5.pdf

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Slashmob

Registriert seit: 28. Okt 2011
45 Beiträge
 
#7

AW: Funktionen und Prozeduren

  Alt 8. Jan 2012, 19:37
Ich hab da was gefunden:
http://warpserv.fh-bielefeld.de/ltil...saufgabe_5.pdf

Gruß
K-H
Ja, das ist die Aufgabe.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 05:42 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