Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Array Problem, ein kleines Programm


meta - So 21.01.07 18:52
Titel: Array Problem, ein kleines Programm
Würden Sie mir bitte mit dem folgenden Programm helfen?

schreiben sie ein programm, das 10 Realwerte von der Tastatur übernimmt und die Anzahl aller Zahlen gleich Null und die Anzahl aller Zahlen im Bereich 3<=x<=5 feststellt und den Mittelwert ermittelt.

Ich habe bis jetzt folgendes gemacht:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
procedure TForm1.Button1Click(Sender: TObject);
const n=9;
type feld=array [0..n] of integer;
var A:Feld;
var i,anzahl0:integer;
var anzahl,m,summe: real;
begin

writeln('geben sie die Werte ein');
for i:=0 to n do readln (A[i]);
writeln('hier sind die werte');
for i:=0 to n do write(A[i]);



anzahl:=0;
summe:=0;

for i:=0 to n do
if A[i]<=5 then
if A[i]>=3 then
anzahl:=anzahl+1;
summe:=summe+i;
m:=summe/anzahl;
writeln('anzahl',anzahl);
writeln('summe',summe);
writeln('Mittelwert',m);




anzahl0:=0;
for i:=0 to n do
if A[i]=0 then
anzahl0:=anzahl0 +1;
writeln('anzahl von 0 ist ', anzahl0);




   end;



Dies funktioniert, aber nicht ganz richtig. die Zahlen werden nicht richtig summiert.es kommt immer "10" raus
Warum kann ich bei der If-Anweisung folgendes nicht schreiben? : " if A[i]<=5 and A[i]>=3 then...."

dabei bekomme ich die Fehlermeldung: "Unkompatible Typen.."

wie kann ich dieses Problem lösen!??

Vielem Dank im Voraus!

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Titel angepasst


Calculon - So 21.01.07 19:20

Die Antwort bezieht sich jetzt auf folgende Frage

Zitat:
Warum kann ich bei der If-Anweisung folgendes nicht schreiben? : " if A[i]<=5 and A[i]>=3 then...."


Du darfst in Delphi die Klammern nicht vergessen:

Delphi-Quelltext
1:
if (A[i]<=5and (A[i]>=3then...                    


Gruß
--


stifflersmom - So 21.01.07 19:28

Na, Dein programm wirst Du schon selber fertig stellen müssen.
Allerdings als kleiner Tip:
Die Aufgabenstellung war Realwerte zu erfassen und damit geht dein Array von Integerwerten aun der Aufgabenstellung vorbei, denn als Integer-wert könnte es für Deine Aufgabenstellung Werte zu ermitteln die zwischen 3 und 5 liegen, nur die 4 geben und das ist definitiv nicht gemeint.

Zu deiner Frage nach der logischen Abfrage:
if A[i]<=5 and A[i]>=3 then

Das müsstest Du schon in Klammern verschachteln:
if (A[i]<=5AND (A[i]>=3then ...

Und hier willst Du doch den ganzen Block ausführen lassen, oder:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
for i:=0 to n do 
if A[i]<=5 then 
if A[i]>=3 then 
anzahl:=anzahl+1
summe:=summe+i; 
m:=summe/anzahl;

Dafür fehlt Dir allerdings noch der notwendige

Delphi-Quelltext
1:
2:
3:
4:
 
Begin

 End;
Teil
Moin


Delete - So 21.01.07 21:47

tja, stiffersmoon hat schon die richtige idee.

was ich mir an deiner stelle mal angewöhnen würde, ist deinen quellcode einzurücken, dann hättest du das ganze gleich auf anhieb gesehen...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
PROCEDURE TForm1.Button1Click(Sender: TObject);
CONST
 n = 9;
TYPE
 feld = ARRAY [0..n] OF INTEGER;
VAR
 A: Feld;
VAR
 i, anzahl0: INTEGER;
VAR
 anzahl, m, summe: REAL;
BEGIN

 writeln('geben sie die Werte ein');
 FOR i := 0 TO n DO
  readln(A[i]);
 writeln('hier sind die werte');
 FOR i := 0 TO n DO
  Write(A[i]);



 anzahl := 0;
 summe  := 0;

 FOR i := 0 TO n DO
  IF A[i] <= 5 THEN
   IF A[i] >= 3 THEN
    anzahl := anzahl + 1;
 summe := summe + i;
 m := summe / anzahl;
 writeln('anzahl', anzahl);
 writeln('summe', summe);
 writeln('Mittelwert', m);




 anzahl0 := 0;
 FOR i := 0 TO n DO
  IF A[i] = 0 THEN
   anzahl0 := anzahl0 + 1;
 writeln('anzahl von 0 ist ', anzahl0);

END;


meta - Mo 22.01.07 00:04

Vielen Dank,

habe jetzt meine Fehler verstanden!


mfg,

meta


stifflersmom - Mo 22.01.07 15:48

user profile iconGrenzgaenger hat folgendes geschrieben:
tja, stiffersmoon hat schon die richtige idee.


Tss, tsss so hört sich mein Nick ja an wie 'n billiger Manga-comic

Moin


Delete - Mo 22.01.07 16:12

Schreibst du eigentlich eine Konsolen- oder eine GUI-Anwendung? Ich frage nur, weil du dort eine Methode procedure TForm1.Button1Click(Sender: TObject); hast, aber auch Writeln und Readln verwendest.


Danny W. - Mo 22.01.07 16:23

Zitat:
Schreibst du eigentlich eine Konsolen- oder eine GUI-Anwendung? Ich frage nur, weil du dort eine Methode procedure TForm1.Button1Click(Sender: TObject); hast, aber auch Wrtiteln und Readln verwendest.


Genau das selbe habe ich mich auch gerade gefragt..

und nocheinmal zur Optik. Ein Var pro Procedure reicht eigentlich vollkommen


Delphi-Quelltext
1:
2:
3:
var 1 : integer;
    2 : string;
    3 : real;


oder


Delphi-Quelltext
1:
2:
3:
4:
var 
    1 : integer;
    2 : string;
    3 : real;


Gruß
Danny