Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

[Pascal] Redundanzen vermeiden!

Mitglied: edv-guru

edv-guru (Level 1) - Jetzt verbinden

03.04.2006, aktualisiert 11.05.2006, 4039 Aufrufe, 2 Kommentare

Hallo,
Ich habe da ein ganz primitives Pascal-Programm, das in der Dos-Konsole, je nachdem ob die rauf/runter/esc taste gedrückt wird, eine zeile heraufgeht/heruntergeht/beendet oder Höher/Tiefer geht's nicht anzeigt.
Jetzt soll ich durch herausheben Redundanzen vermeiden, hab aber keine Ahnung wie,weil ich keine Pascal spreche.
Hier mal so wie es funktionieren soll:

01.
uses crt,dos; 
02.
 
03.
var                 
04.
  znr : byte;      {Zeilennr.} 
05.
  t : byte;         
06.
  zt : string;      
07.
  znr_str : string;{Zeilennr. als String} 
08.
  meldung : string; 
09.
 
10.
begin             
11.
 clrscr; 
12.
 t := 0; 
13.
 znr:=1; 
14.
 meldung='';        
15.
 
16.
 
17.
{Ascii-Wert von Escape-Taste ==> 27} 
18.
  while t <> 27 do begin 
19.
    str(znr,znr_str); 
20.
    zt:=' Zeile '+znr_str; 
21.
    gotoxy(1,znr); 
22.
    write(zt,meldung); 
23.
  {warten auf eingabe} 
24.
  while not keypressed do; 
25.
 
26.
  while keypressed do begin 
27.
    t:=ord(readkey); 
28.
  end; 
29.
 
30.
   if t=72 then begin 
31.
      {str(znr,znr_str); 
32.
      zt:=' Zeile '+znr_str;} 
33.
      if znr=1 then begin 
34.
      zt:=zt+' Hoeher gehts nicht '; 
35.
      {Setze an Zeilenanfang} 
36.
      gotoxy(1,znr); 
37.
      write(zt,meldung); 
38.
     end else begin 
39.
      gotoxy(1,znr); 
40.
      zt:='                              '; 
41.
      write(zt,meldung); 
42.
      znr:=znr-1; 
43.
      str(znr,znr_str); 
44.
      zt:=' Zeile '+znr_str; 
45.
      gotoxy(1,znr); 
46.
      write(zt,meldung); 
47.
     end; 
48.
   end; 
49.
 
50.
    if t=80 then begin 
51.
     {str(znr,znr_str); 
52.
      zt:=' Zeile '+znr_str;} 
53.
     if znr=25 then begin 
54.
      zt:=zt+' Tiefer gehts nicht '; 
55.
      {Setze an Zeilenende} 
56.
      gotoxy(1,znr); 
57.
      write(zt,meldung); 
58.
     end else begin 
59.
      gotoxy(1,znr); 
60.
      zt:='                              '; 
61.
      write(zt,meldung); 
62.
      znr:=znr+1; 
63.
      str(znr,znr_str); 
64.
      zt:=' Zeile '+znr_str; 
65.
      gotoxy(1,znr); 
66.
      write(zt,meldung); 
67.
     end; 
68.
   end; 
69.
  end; 
70.
end. 
71.
 
Und jetzt soll mittels einführen einer Variable namens meldung die redundanz entfernt werden.Dazu habe ich dieses Grundgerüst:

01.
uses crt,dos; 
02.
 
03.
var                 
04.
  znr : byte;      {Zeilennr.} 
05.
  t : byte;         
06.
  zt : string;      
07.
  znr_str : string;{Zeilennr. als String} 
08.
  meldung : string; 
09.
 
10.
begin             
11.
 clrscr; 
12.
 t := 0; 
13.
 znr:=1; 
14.
 meldung='';        
15.
 
16.
 
17.
  while t <> 27 do begin 
18.
    str(znr,znr_str); 
19.
    zt:=' Zeile '+znr_str; 
20.
    gotoxy(1,znr); 
21.
    write(zt,meldung); 
22.
 
23.
  {warten auf eingabe} 
24.
  while not keypressed do; 
25.
 
26.
  while keypressed do begin 
27.
    t:=ord(readkey); 
28.
  end; 
29.
 
30.
   if t=72 then begin 
31.
       
32.
      if znr=1 then begin 
33.
      zt:=zt+' Hoeher gehts nicht '; 
34.
       
35.
      end else begin 
36.
       
37.
      gotoxy(1,znr); 
38.
      write('                                          '); 
39.
      znr:=znr-1; 
40.
      end; 
41.
   end; 
42.
 
43.
    if t=80 then begin 
44.
      if znr=25 then begin 
45.
        zt:=zt+' Tiefer gehts nicht '; 
46.
      end else begin 
47.
        gotoxy(1,znr); 
48.
        write('                                       '); 
49.
        znr:=znr+1; 
50.
      end; 
51.
   end; 
52.
  end; 
53.
end.
Hat jemand eine Idee? Wäre echt ganz toll ;)

Thx,
EDV-Guru
Mitglied: 8644
11.05.2006 um 16:59 Uhr
Hi EDV-Guru,

ich bin mir nicht sicher, ob ich verstanden habe, was du meinst, aber ich denke dein Zauberwort heisst Array! Ein Array ist ein Datenfeld, welches mehrere Werte eines Types (in Deinem Falle String) aufnehmen kann. Diese Werte werden dann über ihren Index angesprochen. Sprich, du benötigst noch eine Zählvariable und bei jedem Durchgang eine weitere Schleife, die das Array nach Übereinstimmungen durchsucht.

Im Klartext könnte das ungefähr so aussehen:

Variable n bei Programmstart auf 0 setzen
Bei jedem Lesen einer Zeile den Wert in das Array lesen: Feld[n] := Zeile;
Dann n inkrementieren: inc(n)
Nun eine Zählschleife, die das gesamte Array nach dem aktuellen Wert von Zeile "durchsucht". Das könnte ungefähr so aussehen:
For i := 0 To n Do Begin
If Zeile = Feld[i] Then ...
End


Falls das noch nicht hilft, mußt du dich nochmal melden, ich muß dann auf meinen Sohn warten, der gerade eine entsprechende Ausbildung macht und Pascal auf seinem Rechner hat

Psycho
Bitte warten ..
Mitglied: edv-guru
11.05.2006 um 21:02 Uhr
Danke dir für die Antwort.
Ich habe jetzt die Lösung bekommen, die darin besteht, dass der write-Befehl in eine Funktion ausgelagert wird.

P.s.:Was man nicht alles wissen muss......
P.p.s.:Normarlerweise wäre sowas in c-syntax kein problem für mich, aber Pascal ist mir doch ein wenig fremd.
Bitte warten ..
Ähnliche Inhalte
Netzwerke
Core-Switch redundanz erreichen
gelöst Frage von hash2k2Netzwerke7 Kommentare

Hallo zusammen, wir haben folgende Situation bei uns im Büro. Aktuell haben wir 7x HP 1810er Switches. Eins davon ...

Batch & Shell

Sonderzeichen Fehler aus Textdatei vermeiden

gelöst Frage von Peter32Batch & Shell16 Kommentare

Hallo, ich habe eine einzige Textdatei mit unbekanntem Namen Im Ordner "temp", mit dem Inhalt: Wenn ich mir nun ...

Batch & Shell

Leerzeichen am Zeilenende vermeiden

gelöst Frage von makroll10Batch & Shell6 Kommentare

Hallo, mit dem u.a. Batch (Auszug) erzeuge ich aus einer Access-Datenbank heraus die u.a. Datensätze. Leider wird hinter jedem ...

Visual Studio

Kaskadierung von Fehlermeldungen vermeiden

gelöst Frage von MarcoBornVisual Studio12 Kommentare

Hallo Forum, nachfolgend ein stark vereinfachter Beispiel-Code, der in der Sub-Prozedur einen Fehler erzeugt. Beim Starten der Main-Prozedur werden ...

Neue Wissensbeiträge
Router & Routing

Das pfSense Buch ist jetzt für jeden kostenlos zu beziehen

Tipp von magicteddy vor 15 StundenRouter & Routing2 Kommentare

Bisher war das Buch nur für zahlende Unterstützer verfügbar, jetzt steht für Jedermann kostenlos zur Verfügung. Siehe auch The ...

Firewall

Möglicherweise neue Sicherheitslücke in Mikrotik-Firmware

Information von LordGurke vor 2 TagenFirewall3 Kommentare

Hallo zusammen, vor ein paar Monaten gab es ja bereits eine Sicherheitslücke in der Firmware von Mikrotik-Routern, über welche ...

Erkennung und -Abwehr
Rechner hacken mit Cortana, auch Remote
Information von Lochkartenstanzer vor 3 TagenErkennung und -Abwehr3 Kommentare

heise berichtet über den Vortrag von der Blackhat Open Sesame: Picking Locks with Cortana. Einige Fehler sind schon gefixt, ...

DSL, VDSL
Bei Unitymedia eine eigene IPv4 mit DS bekommen
Tipp von matze2090 vor 3 TagenDSL, VDSL1 Kommentar

Hallo, ich hatte noch vor kurzem eine DS-Lite Verbindung bei Unitymedia. Das nachteil zu DS ist das Port Forwarding ...

Heiß diskutierte Inhalte
Windows Netzwerk
Performance bei Terminalserver
Frage von azizalexanderWindows Netzwerk20 Kommentare

Hallo zusammen, Ich wusste nicht in welches Thema meine Frage passt ich Bitte um Vergebung falls ich hier falsch ...

LAN, WAN, Wireless
Bandbreitenverteilung Netzwerk Linux NAS Qnap
Frage von Re-AnimatorLAN, WAN, Wireless18 Kommentare

Hallo Allerseits, ich habe hier im Netzwerk ein Problem mit der Bandbreite für das ich keine Erklärung habe! und ...

Exchange Server
Exchange 2013 - Unable to Relay nach extern, SuperMailer
Frage von leon123Exchange Server13 Kommentare

Hallo zusammen, ich brauch mal wieder eure Hilfe. Ich beschäftige mich gerade mit dem SuperMailer und erhalte vom Exchange ...

Windows Server
Fujitsu Server Installation
Frage von stolliWindows Server10 Kommentare

Guten Tag, Ich benötige mal wieder eure Hilfe. Ich hab mir einen gebrauchten Fujitsu Server Primergy TX120 SP3 zugelegt ...