• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

Turbo Pascal

Mitglied seit
18.11.2000
Beiträge
3.363
Reaktionen
35
Hey,
ich muss mich zu meinem persönlichen Leid mit Turbo Pascal im Studium rumplagen. Wieso, weiß ich nicht so richtig. Aber ist ja auch egal.

Auf jeden Fall häng ich bei einer Aufgabe. Ist eigentlich bestimmt ganz einfach. Nur raff ich es irgendwie nicht. Hoffe, hier kann mir einer helfen

Aufgabe: Schreiben Sie ein Pascal-Programm, das so lange einzelne Textzeichen einliest, bis zum ersten Mal ein Ausrufezeichen eingegeben wird, und das am Ende die folgenden Daten ausgibt:
- wie viele Textzeichen insgesamt (einschließlich des Ausrufezeichens am Ende) eingegeben wurden;
- wie oft direkt hintereinander die Großbuchstaben A,B und C (in dieser Reihenfolge) eingegeben wurden;


Also, Teil 1 der Aufgabe ist für mich kein Problem. Nur der 2. Teil mit dem A,B,C krieg ich nicht hin :(

Ich dachte, ich kann das vielleicht mit array machen oder so. Aber irgendwie krieg ich es nicht hin.

Wäre nett, wenn mir da jemand helfen könnte. Danke
 

Shihatsu

Administrator
Mitglied seit
26.09.2001
Beiträge
49.616
Reaktionen
10.252
ganz simple:
in counter := 0; (ka, irgendwie ging die pascal syntax)
boolean a := false
boolean b:= false

zeichen einlesen
if zeichen = a, a:= true
next zeichen
if zeichen = b && a = true
b:=true
else a = false
next zeichen
if zeichen = c && a = true && b = true
counter++
a = false
b = false
next zeichen
 
Mitglied seit
18.11.2000
Beiträge
3.363
Reaktionen
35
Hast du das so gemeint?

Code:
repeat

begin
writeln('Bitte geben Sie ein Textzeichen ein');
readln(zeichen);
anz:=anz+1;

if (zeichen='A') then a:=true;
if ((zeichen='B') and (a=true)) then b:=true else a:=false;
if ((zeichen='C') and (a=true) and (b=true)) then begin abc:=abc+1;
                                                   a:=false;
                                                   b:=false;
                                                   end;
end;

until (zeichen='!');


Klappt irgendwie nicht so ganz :(
 
Mitglied seit
16.03.2008
Beiträge
366
Reaktionen
0
Pascal ist lange her, aber: readln liest doch bis zum Enter oder nicht? Wenn ich das richtig verstanden habe brauchst du sowas wie getchar, glaube da gabs sowas ähnliches, readkey oder so.

Wäre vielleicht auch hilfreich, wenn du mal sagst was der Compiler ausgibt, hat ja heutzutage nicht mehr jeder nen Pascal Compiler drauf.
 

voelkerballtier

Coverage, Staff, Coding
Mitglied seit
01.12.2003
Beiträge
1.603
Reaktionen
0
Original geschrieben von I)eViL
Hast du das so gemeint?

Code:
repeat

begin
writeln('Bitte geben Sie ein Textzeichen ein');
readln(zeichen);
anz:=anz+1;

if (zeichen='A') then a:=true;
if ((zeichen='B') and (a=true)) then b:=true else a:=false;
if ((zeichen='C') and (a=true) and (b=true)) then begin abc:=abc+1;
                                                   a:=false;
                                                   b:=false;
                                                   end;
end;

until (zeichen='!');


Klappt irgendwie nicht so ganz :(
ja denn der code zählt nur Zeichen, die gleichzeitig 'A', 'B' und 'C' sind - also gar keins....
bei shis code weiß ich nich genau was er mit next zeichen meint, könnte aber richtig sein :)
dein ansatz wäre dahingehend zu verändern:

Code:
repeat

begin
writeln('Bitte geben Sie ein Textzeichen ein');
readln(zeichen);
Inc(anz);

if (zeichen='A') then a:=true
else
begin
    if ((zeichen='B') and a) then b:=true 
    else
    begin
        if ((zeichen='C') and b) then Inc(abc);
        b:=false;
    end;
    a:=false
end;

until (zeichen='!');
ich kann es zwar grad nich testen, müsste aber gehen, hoffe ich
 

RRA^StArFiRe

Guest
entweder du machst es so wie voelkerballtier da geschrieben hat...

oder du speicherst dir immer einfach die letzten 2 eingaben.

Code:
PROGRAM Beispiel;
USES Crt;
VAR
  zeichen ,  letztes, vorletztes : CHAR;
  anz, abc : INTEGER;
  
  
BEGIN
 anz := 0;
 abc := 0;
  repeat
  begin
  writeln('Bitte geben Sie ein Textzeichen ein');
  readln(zeichen);
  anz := anz+1;


  if ((anz > 2) and (zeichen='C') and (letztes='B') and (vorletztes='A')) then abc := abc+1;

  if (anz > 1)  vorletztes := letztes;
  letztes := zeichen;
  end
until (zeichen='!');

/* ausgabe */
END.
 
Mitglied seit
18.11.2000
Beiträge
3.363
Reaktionen
35
Danke allen. Die letzten beiden Programme funktionieren einwandfrei. Und verstanden hab ich es sogar auch:top2:

Hab aber noch ein Problem. Und zwar hab ich folgendes Programm:

Code:
program bsp;
uses wincrt;
var i,j:integer; wort:array[1..5] of string; mehrfach:boolean;

begin

writeln('Dieses Programm liest hintereinander 5 Wörter ein und gibt dann aus,');
writeln('ob irgendein Wort mehrfach vorkam');
writeln;
writeln('Bitte geben Sie das 1. Wort ein');
readln(wort[1]);
mehrfach:=false;

for i:=2 to 5 do
    begin
    writeln('Bitte geben Sie die ',i,'. Wort ein');
    readln(wort[i]);
    for j:=1 to i-1 do if wort[i]=wort[j] then mehrfach:=true;
    end;

if mehrfach then writeln('Irgendein Wort kam mehrfach vor')
else writeln('Es kam kein Wort mehrfach vor');


end.

Und zwar würd ich das gerne jetzt so umschreiben, dass ich prüfen kann, ob irgendein Anfangsbuchstabe bei den eingegebenen Wörtern mehrfach vorkam. Den Anfangsbuchstabe eines Wortes ermittelt man ja normalerweise so: anfang:=wort[1];

Da ich das aber mit dem array drin hab, check ich nicht, wie ich das machen soll. Hab schon tausend Sachen probiert. Aber hat bisher nichts geklappt. Ist sicher nicht viel zu verändern. Aber ich schnalls nicht:8[:

Danke euch
 

RRA^StArFiRe

Guest
speicher dir einfach in der überprüfungsschleife das wort zwischen.

wortneu := wort;
wortalt := wort[j];

anfangneu := wortneu[0];
anfangalt := wortalt[0];

bzw doppelarray wort[0] müsste auch funktionieren.
 
Mitglied seit
18.11.2000
Beiträge
3.363
Reaktionen
35
Wieso komm ich nicht selbst auf solche Ideen? :8[:

Aber geil, ich liebe dich:top2: Danke:D
 
Mitglied seit
18.11.2000
Beiträge
3.363
Reaktionen
35
Eine Frage hätte ich leider noch.

Wie mache ich das eigentlich, wenn ich nen paar Zahlen einlese und das Programm dann die kleinste angegebene Zahl ausgeben soll, die noch über z.B. der Zahl 10 liegt. Also die Zahl, die am nächsten an 10 dran ist. Wie geht das denn?

Danke schon mal
 
Oben