Zählen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Dodger
Beiträge: 3
Registriert: Fr 16. Jan 2015, 12:07

Zählen

Beitrag von Dodger »

Hallo,

Ich hab gerade mit Pascal angefangen und komme leider mit unserem Uni-Reader nicht zurecht und suche etwas Austausch,...
Vielleicht verstehe ich es dadurch besser...

Ich habe mir die Aufgabe gestellt eine Programm zu schreiben, dass 10 Zahlen von 0-9 einliest (array) und dann ausgibt wieviel der Ziffern aus 0-4 und wieviele 5-9 sind. Also die eingegebenen Zahlen in zwei Gruppen teilt.
Leider hab ich irgendwo einen Fehler drin.
1. Liest es das array nicht richtig ein vermute ich
2. Sind die zähler falsch initialisiert.

Kann jemand helfen...? DANKE schonmal!

Code: Alles auswählen

program Main;
 
type
tMenge = 1..10;
tNatZahl = 0..9;
tAlle = array[tMenge] of tNatZahl;
 
var 
 
groesser: integer;
kleiner: integer;
x: tNatZahl;
 
begin
write ('Zahlen eingeben: ', x);
readln (tAlle[x]);
 
  for x := 1 to 10 do
 
 
     begin 
     if x >= 5 then groesser := +1
     else kleiner := +1;
     end;
 
writeln ('Anzahl groesser: ', groesser);
writeln ('Anzahl kleiner: ', kleiner);
end.
Zuletzt geändert von Lori am Di 20. Jan 2015, 19:01, insgesamt 1-mal geändert.
Grund: Highlighter

indianer-frank
Beiträge: 134
Registriert: So 30. Nov 2008, 21:53

Re: Zählen

Beitrag von indianer-frank »

Dodger hat geschrieben: write ('Zahlen eingeben: ', x);
readln (tAlle[x]);
Hier ist x überhaupt nicht definiert und Du willst tAlle[x] einlesen! Selbst wenn x zwischen 1 und 10 ist (als globale Variable sollte es 0 sein, aber das ist schlechter Stil und nicht mehr richtig in Prozeduren), liest Du hier nur einen Wert ein und nicht 10.

Am sinnvollsten schreibst Du eine Eingabeschleife:

Code: Alles auswählen

for x := 1 to 10 do begin
  write (x,'.te Zahl eingeben: ');
  readln (tAlle[x]);
end;
 
und anschließend machst Du Deine Auswertung in einer zweiten Schleife wie bisher. Allerdings sind noch ein paar Sachen zu ändern: Die Variablen groesser und kleiner müssen vorher auf 0 gesetzt werden und inkrementieren geschieht nicht durch setzen des Wertes auf 1 sondern mit

Code: Alles auswählen

kleiner := kleiner + 1;
//oder
inc(kleiner);
Übrigens kannst Du mit Dem Highlighter (wie gezeigt) den Pascalcode besser lesbar machen.
Zuletzt geändert von indianer-frank am Fr 16. Jan 2015, 13:08, insgesamt 1-mal geändert.

Dodger
Beiträge: 3
Registriert: Fr 16. Jan 2015, 12:07

Re: Zählen

Beitrag von Dodger »

Hallo!
Danke für die rasche Antwort.
Ich dachte ich hätte x : tNatZahl in der Variablendeklaration definert, wo liegt denn der Fehler?

Habe das eingebaut, aber er liest dennoch nicht ein. An welche Stelle gehört die Zählernullstellung?
Und das mit dem highlighter krieg ich auch nicht hin....

Code: Alles auswählen

program Main;
 
type
tMenge = 1..10;
tNatZahl = 0..9;
tAlle = array[tMenge] of tNatZahl;
 
var 
 
groesser: integer;
kleiner: integer;
x: tNatZahl;
 
begin
for x := 1 to 10 do 
  write (x,'.te Zahl eingeben: ');
  readln (tAlle[x]);
 
begin
kleiner := kleiner + 1;
groesser := groesser +1;
 
     if x >= 5 then groesser := +1
     else kleiner := +1;
     end;
 
writeln ('Anzahl groesser: ', groesser);
writeln ('Anzahl kleiner: ', kleiner);
end.
Zuletzt geändert von Lori am Di 20. Jan 2015, 19:03, insgesamt 1-mal geändert.
Grund: Highlighter

indianer-frank
Beiträge: 134
Registriert: So 30. Nov 2008, 21:53

Re: Zählen

Beitrag von indianer-frank »

Hier einige Fehler: x als tNatZahl darf nicht bis 10 laufen, dann brauchst Du eine Variable vom Typ tAlle, es fehlt ein zweite Schleife etc. Hier eine kompilierbare, lauffähige Version. Sie ist allerdings noch nicht fertig, Du solltest auf jeden Fall noch ein Paar Fehlermöglichkeiten ausschließen: Zahlen außerhalb 0..9 (indem du eine temporäre Variabe einliest und nachschaust ob sie in 0..9 liegt) und etwas schwieriger: andere Zeichen etc.

Code: Alles auswählen

program Main;
 
type
  tMenge = 1..10;
  tNatZahl = 0..9;
  tAlle = array[tMenge] of tNatZahl;
 
var
  groesser: integer;
  kleiner: integer;
  x: tMenge;
  Alle: talle;
 
begin
  for x := 1 to 10 do begin
    write (x,'.te Zahl eingeben: ');
    readln (Alle[x]);
  end;
  kleiner := 0;
  groesser := 0;
  for x:=1 to 10 do begin
    if Alle[x] >= 5 then groesser := groesser+1
    else kleiner := kleiner+1;
  end;
  writeln ('Anzahl groesser: ', groesser);
  writeln ('Anzahl kleiner: ', kleiner);
end.
 
Zuletzt geändert von indianer-frank am Fr 16. Jan 2015, 13:41, insgesamt 1-mal geändert.

Dodger
Beiträge: 3
Registriert: Fr 16. Jan 2015, 12:07

Re: Zählen

Beitrag von Dodger »

Danke!
Jetzt hab ich das einlesen verstanden. Also, dass die Zahlen einzeln eingelesen werden.
Ich dachte er liest eine Reihe von Zahlen ein und packt sie in das Array. Ok

Aber ich verstehe noch nicht ganz wieso
x: tMenge;
x ist ja nicht vom Typ der Menge, sondern Typ 'Zahlen von 0-9', so dachte ich das. Die Menge der Zahlen dieses Typs ist ja dann durch das Array definiert. Da war wohl mein Denkfehler.

Ich versuch mal Abbruchkriterien zu formulieren. :)

Antworten