Autor Beitrag
boozzz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66

Win XP, Win 2000, SuSe Linux

BeitragVerfasst: Do 31.03.05 17:16 
Hallo,
ich habe soeben angefangen mit Delphi und hätte mal eine einfache Frage, die mir hier warscheinlich jeder beantworten kann:

Ich arbeite z.Z. an einer Konsolenanwendung, bestehend aus einem Hauptprogramm und fünf Unterprogrammen.
Wenn ich aus einem einfachen Unterprogramm einen Wert zurückgeben will um diesen Wert allen anderen Unterprogrammen zur Verfügung zu stellen, wie mache ich das?

Bisher habe ich es folgendermaßen versucht (Dies ist jetzt nur ein wirklich sehr einfaches Beispiel):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure VariablenZuweisung(Q: Integer); 
Q:=3
end;

procedure Ausgabe;
WriteLn ('Die Eingabe lautet: ',Q);
end;


Warum funktioniert das nicht? Eigentlich sollte nur "Die Eingabe lautet 3" ausgegeben werden, stattdessen kommt die Fehlermeldung, dass WriteLn nicht bekannt ist und dass Q nicht bekannt ist. :(

Danke schon mal
boozzz

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt.
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Do 31.03.05 17:19 
1)

ausblenden Delphi-Quelltext
1:
2:
begin
end;



also z.b.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure Ausgabe; 
begin
WriteLn ('Die Eingabe lautet: ',Q); 
end;



dann wenn du text ausgebe willst mit ner zahl:
WriteLn ('Die Eingabe lautet: '+inttostr(q));

usw. glaub du weiß noch net so viel über die delphi syntax hab aber im mom keine zeit dir das zu erklären :>

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

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
jaenschi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 89

Win XP, Debian
D7
BeitragVerfasst: Do 31.03.05 17:19 
Ich würde es mal so probieren:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure VariablenZuweisung(var Q: Integer);
begin
 Q:=3
end;
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 31.03.05 17:31 
user profile iconuall@ogc hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
WriteLn ('Die Eingabe lautet: '+inttostr(q));					

Man braucht hier nicht unbedingt inttostr zu benützen: Writeln('Die Eingabe lautet: ',Q); geht auch.

1.)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure VariablenZuweisung(Q: Integer); 
begin
 Q := 3;
end;

Q ist in diesem Fall eine lokale (d.h. Prozedureninterne) Variable. Die eine Programmzeile von dir wird wahrscheinlich nicht mal kompiliert, da du eine interne Variable setzst aber nie brauchst. Sobald die Prozedur endet werden die lokalen Variablen vernichtet. Das Q := 3 macht also keinen Sinn.

2.)
user profile iconboozzz hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure Ausgabe;
begin
 WriteLn ('Die Eingabe lautet: ',Q);
end;

Da Q weder global deklariert ist, noch eine lokale Variable der Prozedur Ausgabe ist, kann man auch nicht darauf zugreifen.

Eine mögliche Lösung wär:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure VariablenZuweisung(var Q: Integer);
begin
 Q := 3;
end;
procedure Ausgabe;
Var
 Q : Integer;
begin
 VariablenZuweisung(Q);
 Writeln('Q = ',Q);
end;

oder
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
Var
 Q : Integer;
procedure VariablenZuweisung;
begin
 Q := 3;
end;
procedure Ausgabe;
begin
 Writeln('Q = ',Q);
end;
begin
 VariablenZuweisung;
 Ausgabe;
end;
boozzz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66

Win XP, Win 2000, SuSe Linux

BeitragVerfasst: Fr 01.04.05 09:33 
Danke delfiphan, das hilft mir schon weiter. So wie du im letzten Beispiel, hab ich das jetzt auch gemacht, es kommt aber noch die Fehlermeldung "Unbekannte Anweisung'Writeln'". Könntest du mir hierfür noch einen Tip geben?

Desweiteren habe ich ein Problem mit dem Deklarieren von einem zweidimensionalen Array.
Ich schreibe:
ausblenden Delphi-Quelltext
1:
var MeinArray: array[0..6, 0..5] of Integer;					


Das Array soll aus zwei Variablen bestehen (x und y), mit sechs auf sieben Feldern. Durch diese beiden Variablen sollen also den 42 Felder hinterher verschiedene Werte zugewiesen werden können.
Ist das so richtig deklariert? Wie kann ich hinterher beispielsweise dem Feld [2,3] den Wert 5 zuweisen?

Grüße, boozzz

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Fr 01.04.05 09:39 
Hi
user profile iconboozzz hat folgendes geschrieben:
Danke delfiphan, das hilft mir schon weiter. So wie du im letzten Beispiel, hab ich das jetzt auch gemacht, es kommt aber noch die Fehlermeldung "Unbekannte Anweisung'Writeln'". Könntest du mir hierfür noch einen Tip geben?

In deinem Programm sollte die Zeile
ausblenden Delphi-Quelltext
1:
uses System;					

vorhanden sein. Wenn eine Zeile mit uses schon da ist, schreib System (mit Komma abtrennen) mit dazu. Wenn nicht schreib sie einfach nach der Zeile Program xxxx mit rein.

Und wahrscheinlich wirds auch nicht mehr lange dauern bis dich einer der Mods darauf hinweist: Eine Frage pro Thread. Und auch dass dieses Forum eine Suchfunktion hat. :wink:

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 01.04.05 09:47 
user profile iconboozzz hat folgendes geschrieben:
Desweiteren habe ich ein Problem mit dem Deklarieren von einem zweidimensionalen Array.
Ich schreibe:
ausblenden Quelltext
1:
var MeinArray: array[0..6, 0..5] of Integer;					


Das Array soll aus zwei Variablen bestehen (x und y), mit sechs auf sieben Feldern. Durch diese beiden Variablen sollen also den 42 Felder hinterher verschiedene Werte zugewiesen werden können.
Ist das so richtig deklariert? Wie kann ich hinterher beispielsweise dem Feld [2,3] den Wert 5 zuweisen?

Deklaration ist richtig.
ausblenden Delphi-Quelltext
1:
MeinArray[2,3] := 5;					

Ansonsten hat LCS recht: Eine Frage pro Thread. Das erhält die Übersichtlichkeit.
chrisw
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: Fr 01.04.05 09:48 
Zu Array :

Zuweisung über : MeinArray[2,3] := 5;


ist das 3. Feld in der 4. Reihe (0 Basis)

_________________
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Fr 01.04.05 10:07 
user profile iconLCS hat folgendes geschrieben:
In deinem Programm sollte die Zeile uses System; vorhanden sein. Wenn eine Zeile mit uses schon da ist, schreib System (mit Komma abtrennen) mit dazu. Wenn nicht schreib sie einfach nach der Zeile Program xxxx mit rein.
Die Units System.pas und SysInit.pas werden vom Delphi-Compiler immer einkompiliert, selbst wenn sie nicht in den uses-Anweisungen stehen. Die beiden Units enthalten unter anderem für Compiler-Magic rlevante Funktionen und Konstanten und können auch nicht ohne weiteres durch leere Units ersetzt oder ganz entfernt werden, da für einige Funktionen ein Stub vorhanden sein *muss*.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
boozzz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66

Win XP, Win 2000, SuSe Linux

BeitragVerfasst: Fr 01.04.05 14:20 
Wie kann ich dann diesen Fehler beheben? Wie user profile icontommie-lie auch sagt, die Unit System wird sowieso kompiliert. Warum kommt die Fehlermeldung "Unbekannte Anweisung 'WriteLn'" ?

boozzz
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Fr 01.04.05 14:42 
Sag mal, du versuchst doch auf die Konsole auszugeben, oder? Hast du auch an das {$APPTYPE CONSOLE} gedacht?

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
boozzz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66

Win XP, Win 2000, SuSe Linux

BeitragVerfasst: Fr 01.04.05 15:01 
{$APPTYPE CONSOLE} stand schon von Anfang an im Programm. Daran hab ich auch nichts geändert.