1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Turbo Pascal Übersetzer

Discussion in 'Programmieren' started by LeGarcon, Jan 6, 2009.

Thread Status:
Not open for further replies.
  1. LeGarcon

    LeGarcon ROM

    Hallo, liebe Turbo Pascal Gemeinde.

    Wir sollen im schulunterricht Informatik ein Programm unserer Wahl mit Turbo Pascal programmieren. Wir, meine Gruppe und ich, haben uns für ein (hoffentlich) simples Übersetzungsprogramm Deutsch-Englisch/Englisch-Deutsch entschieden.
    Wir arbeiten hier mit der Turbo Pascal Version 1.5.

    Unsere erste Überlegung war, die Übersetzung über eine programmexterne Textdatei laufen zu lassen. Sprich: Die Übersetzungen in einer.txt-Datei abzulegen und nach Bedarf abzufragen - aus der Textdatei ins Programm.

    Das ist eine rein theorethische Überlegung. Bei uns hapert es noch an der praktischen Umsetzung.
    Da wir unsere Quellen mitangeben müssen, will ich hier nicht nach kompletten Problemlösung, sondern, wenn möglich, Hilfestellungen und Anregungen fragen.

    Ich wäre auch für andere Lösungsvorschläge offen.
    Danke schoneinmal für alle Hilfestellungen, die mir hier entgegengebracht werden.

    Mit freundlichem Gruß,
    LeGarcon.
     
  2. -nixnick-

    -nixnick- Halbes Megabyte

    das ist doch eine aufgabe, die euch in der schule aufgegeben wird, richtig?
    und was ist der sinn einer solchen aufgabe?
    sich SELBER zu informieren und EIGENSTÄNDIG lösungen zu finden, um somit ein funktionierendes programm zustande zu bringen.
    also finde ich es relativ sinnlos, diese aufgabe an uns weiterzugeben.
    ich gebe euch einen tipp:
    onkel google hat ungefähr 1,5 mio. ergebnisse für "Turbo pascal." das zweite davon ist bereits ein ummfassendes tutorial.
     
  3. Die Idee mit der Text-Datei ist nicht schlecht aber Rechnerzeitaufwendig. Besser wäre es die Text-Datei als Tabelle in den Speicher zu laden und mit einem Pointer zu versehen. Weiss nicht, ob das in Pascal geht, da der Speicher bei der Initialisierung sicher im Ram allokiert(reserviert) werden muss und bei Programmende wieder freigegeben werden muss(Hinweis: Befehl allocate?)
     
  4. Fettbemme

    Fettbemme Halbes Megabyte

    @LeGarcon

    Ein paar Anmerkungen,

    Eure Wahl mit Turbo Pascal 1.5 ist vielleicht nicht die optimale Wahl. Der "Knochen" müsste schon recht alt sein. Ich würde so auf ~1990 tippen. Bei der 1.5er Version müsste es das gute alte Turbo Pascal für Windows 1.5 gewesen sein.
    Solch alte Compiler können durchaus hinderliche Grenzen haben wenn es um das Speichermanagement geht oder die Heapverwaltung. Gerade wenn Ihr mit Tabellen oder Listen arbeiten möchtet könnte das zu Problemen führen.
    Ich würde auf jeden Fall zu einem aktuellen Compiler / Entwicklungsumgebung raten. Wenn Ihr nicht daran gebunden seit, gibt es z.B. FreePascal oder Turbo Delphi (wenn es Windows als Target sein darf). Es gibt auch von Delphi legale Versionen die für schulische 7 nicht kommerzielle Zwecke genutzt werden dürfen.

    Die letzte Frage ist nur noch aus Neugier, da mir nicht ganz klar ist wie die EXAKTE Zielsetzung des Übersetzungsprogrammes ist. Soll Euer Programm Text übersetzen, oder sollt Ihr ein "Wortübersetzer" (Eingabe von z.B. "Feuer" und es wird "fire" genannt als ergebnis) schreiben?
     
  5. LeGarcon

    LeGarcon ROM

    #2:

    Es ist mir bewusst, dass es sich um eine Schulaufgabe handelt. Und das der Sinn einer Schulaufgabe es ist, eigene Lösungen zu finden. Aber wie ich extra in meiner Frage angegeben habe: Ich will keine Komplettlösungen haben, sondern lediglich Anregungen zur Lösung. Danke.

    #3:
    Wir haben im Unterricht, wie bereits erwähnt, lediglich mit der Version 1.5 gearbeitet und dort vor allem die Grundlagen erlernt. Die Befehle/Vorgehensweisen die du vorschlägst, sind mir leider nicht geläufig.
    Aber dennoch danke für die Hilfe!

    #4:
    Ich würde liebend gerne auf ein anderes, möglicherweise unkomplizierteres Programm umsteigen. Da wir aber, wie ich oben erwähnte, nur mit Version 1.5 arbeiten und als Ausweichprogramm nur das relativ unbekannte Prolog zur Verfügung gestellt bekommen, ist meiner Gruppe ein Ausweichen auf einen anderen Compilier nicht möglich. Leider.

    Wir haben uns unser Programm als "Wortübersetzer" vorgestellt. An exemplarischen Vokabeln soll der Benutzer die Wortübersetzung erhalten. So wie es ein normales Wörterbuch tut, oder wie man es bei http://dict.leo.org als Dienst angeboten bekommt.
    In meinen Augen ist das die einfachere Variante.

    Wie gesagt:
    Unsere Idee besteht darin, die Vokabeln auf Textdatein auszulagern und dann ins Programm zu holen. Ob dass das günstigste ist, weiß ich nicht.
    Wir haben auch bereits den Tipp bekommen, die ganze Angelegenheit über Arrays zu regeln.
    Hat also vielleicht noch jemand Vorschläge oder Ähnliches!?

    Mit freundlichem Gruß,
    LeGarcon.
     
    Last edited: Jan 7, 2009
  6. kazhar

    kazhar Viertel Gigabyte

    das mit der textdatei ist relativ einfach. schreib einfach eine liste mit 1 wortpaar pro zeile; 1. wort ist deutsch, 2. wort ist englisch.

    die datei liest du beim programmstart in den speicher ein und baust daraus z.b. eine verkettete liste (einfache variante) oder einen binären baum (deutlich schnellere, aber auch komplexere variante) auf.

    wenn du übersetzen willst hangelst du dich durch die liste/den baum zum gesuchten wort und gibst dann dessen übersetzung aus.
     
  7. Fettbemme

    Fettbemme Halbes Megabyte

    Nun ganz so einfach ist es nicht, wenn man die Fälle der "Doppelbedeutungen 7 Zusammensetzungen" mit behandeln möchte. Es gibt im deutschen und in englischen viele Begriffe, die doppelte Bedeutungen haben oder zusammensetzungen einem Wort andere Bedeutungen geben. Von daher ist (wenn man es richtig macht) eine 1:1 Zuteilung nicht korrekt. Ehrlich gesagt, würde ich das aber nicht behandeln, sondern nur in der Präsentation / Dokumentation / Ergebnisvorstellung erwähnen, dass dieses NICHT realisiert wurde. Es ist aus meiner sicht kein Manko, da solche Art von "Querverweisen" das Projekt unnötig aufblasen würde.
    Das ist für ein schulisches Projekt mit begrenztem Wissensschatz im Programmieren doch arg oversized....

    Es wird beides funktionieren. Bei Arrays wirst Du aber sicher schnell an die Grenze kommen, da die Begrenzung des Datensegmentes bei 64k Bytes liegen dürfte. Dann müsstest du Dich mit den von mir erwähnten Heap arbeiten, und alle Datenstrukturen dynamisch aufbauen.
    Ehrlich gesagt, würde ich es über ein Textfile machen, und das halt zeilenweise durchsuchen. Das ist zwar nicht performant, erfüllt aber seinen Zweck.
     
  8. LeGarcon

    LeGarcon ROM

    Danke für eure Antworten. Wir sind jetzt dabei das ganze umzusetzen und stoßen schon am Anfang auf Probleme. Hier einmal der bereits stehende Quelltext:

    Code:
    program Translaitorizor;
    uses WinCrt;
    var  Liste: text;
         Buch:array[1..20] of Eintrag;
         Entscheidung: integer;
    type Eintrag=record 
         Deutsch=string;
         Englisch=string;
         Liste=file of type;
         end;
    
    begin
    writeln('Übersetzungsprogramm Deutsch-Englsich und Englsich-Deutsch');
    writeln('Wenn sie eine deutsche Vokabel übersetzten wollen drücken sie A');
    writeln('Wenn sie eine englische Vokalbel übersetzen wollen drücken sie B');
    readln(Entscheidung);
    assign(Liste,'a:/Projektarbeit/liste.txt');
    append(Liste);
    end.
    Wir finden den Fehler nicht. Er sagt uns bereits bei den Variablen, dass ein Bezeichnungsfehler bestehen würde. Ich wäre um Hilfe dankbar.
     
  9. kazhar

    kazhar Viertel Gigabyte

    1) du kannst datentypen erst verwenden nachdem du sie definiert hast.
    also erst type dann var
    2) in record definitionen gibts kein '=' sondern nur ':'
    also Deutsch: string;
    3) das genau willst du mit dem 'file of type' im record?
    'type' ist kein datentyp sondern ein 'befehl' um datentypen zu erzeugen.
    4) (reine kosmetik) man öffnet dateien mit reset() zum lesen nicht mit append() (öffnet eine datei zum hinten dran schreiben)
    edit:
    5) Entscheidung ist eine zahl (integer) da kann man kein 'A' oder 'B' reinschreiben. mach von mir aus char (1 zeichen) draus
     
    Last edited: Jan 14, 2009
  10. LeGarcon

    LeGarcon ROM

    Hier unser neuster Code:

    Code:
    type Eintrag=record 
         vokabel.deutsch:string;
         vokabel.englisch:string;
         end;
    var  Buch:array[1..20] of Eintrag;
         Entscheidung:char;
         Vokabel:char;
    
    begin
         writeln('Übersetzungsprogramm Deutsch-Englsich und Englsich-Deutsch');
         writeln(' ');
         writeln(' ');
         writeln('Wenn Sie eine deutsche Vokabel übersetzten wollen drücken Sie <D>');
         writeln('Wenn Sie eine englische Vokalbel übersetzen wollen drücken Sie <E>');
         writeln(' ');
         readln(Entscheidung);
    
         if (Entscheidung='D') or (Entscheidung='d') then begin
            writeln('Übersetzung: Deutsch-Englisch');
            writeln(' ');
            end;
         if (Entscheidung='E') or (Entscheidung='e') then begin
            writeln('Übersetzung: Englisch-Deutsch');
            writeln(' ');
            end;
    
         writeln('Bitte geben Sie nun Ihre zu übersetzende Vokabel an:');
         readln(Vokabel);
    end.
    Wir haben, auf Grund unserer gegebenen Struktur, uns zu dem Schritt entschieden, die Idee zu ändern.
    Wir wollen daraus jetzt eine Übungsprogramm schreiben, an dem der Benutzer eine Vokabel vorgegeben bekommt und die richtige zuordnen muss. - Unser Lehrer empfahl uns diesen Schritt.

    Unsere Frage: Wie verfahren wir jetzt weiter? Wie gestalten wir die Liste ... etc.

    Danke für die Hilfen.
     
  11. kazhar

    kazhar Viertel Gigabyte

    ich würde mir an eurer stelle erst mal die grundlegende syntax ansehen :rolleyes:

    wer kommt den auf die glorreiche idee?
     
  12. LeGarcon

    LeGarcon ROM

    Code:
    program Translaitorizor;
    uses WinCrt;
    var  Entscheidung:char;
         Vokabel:char;
    
    procedure deutsch(eingabe:char);
       begin
          writeln('Bitte geben sie die zu übersetzende Vokabel an:');
          read(eingabe);
          if eingabe='Fussball' then begin;
             writeln('Übersetzung: football');
             writeln(' ');
             end
          else
             begin
             writeln(' ');
             writeln('Diese Vokabel ist nicht verfügbar');
             end;
       end;
    begin
         writeln('Übersetzungsprogramm Deutsch-Englsich und Englsich-Deutsch');
         writeln(' ');
         writeln(' ');
         writeln('Wenn Sie eine deutsche Vokabel übersetzten wollen drücken Sie <D>');
         writeln('Wenn Sie eine englische Vokalbel übersetzen wollen drücken Sie <E>');
         writeln(' ');
         readln(Entscheidung);
    
         if (Entscheidung='D') or (Entscheidung='d') then begin;
            writeln('Übersetzung: Deutsch-Englisch');
            writeln(' ');
            deutsch(Vokabel);
            end;
         if (Entscheidung='E') or (Entscheidung='e') then begin;
            writeln('Übersetzung: Englisch-Deutsch');
            writeln(' ');
            end;
    end.
    Unsere neuste Idee ist sicher die einfachste, aber auch hier stellen sich uns Probleme in den Weg:

    Wenn man nach der Eingabe "D"/"d" zur Übersetzung des Wortes "Fussball" entscheidet, kommt die, eigentlich für andere Fälle gedachte, Nachricht "Diese Vokabel ist nicht verfügbar". Mir ist schleierhaft, wie ich diese Fehlernachricht umgehen kann und die tatsächliche Übersetzung zum Vorschein bringen kann.

    Danke für die Hilfe.
    LeGarcon.
     
  13. kazhar

    kazhar Viertel Gigabyte

    char speichert genau ein zeichen.
     
Thread Status:
Not open for further replies.

Share This Page