| Autor |
Beitrag |
boozzz
      
Beiträge: 66
Win XP, Win 2000, SuSe Linux
|
Verfasst: 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):
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 Christian S.: Delphi-Tags hinzugefügt.
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Do 31.03.05 17:19
1)
Delphi-Quelltext
also z.b.
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 Christian S.: Delphi-Tags hinzugefügt.
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
jaenschi
      
Beiträge: 89
Win XP, Debian
D7
|
Verfasst: Do 31.03.05 17:19
Ich würde es mal so probieren:
Delphi-Quelltext 1: 2: 3: 4:
| procedure VariablenZuweisung(var Q: Integer); begin Q:=3 end; |
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Do 31.03.05 17:31
uall@ogc hat folgendes geschrieben: | 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.)
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.)
boozzz hat folgendes geschrieben: | 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:
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
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 
      
Beiträge: 66
Win XP, Win 2000, SuSe Linux
|
Verfasst: 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:
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 Christian S.: Code- durch Delphi-Tags ersetzt.
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Fr 01.04.05 09:39
Hi
boozzz 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
Delphi-Quelltext
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.
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 01.04.05 09:47
|
|
chrisw
      
Beiträge: 439
Erhaltene Danke: 3
W2K
D7
|
Verfasst: 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
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Fr 01.04.05 10:07
LCS 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 
      
Beiträge: 66
Win XP, Win 2000, SuSe Linux
|
Verfasst: Fr 01.04.05 14:20
Wie kann ich dann diesen Fehler beheben? Wie tommie-lie auch sagt, die Unit System wird sowieso kompiliert. Warum kommt die Fehlermeldung "Unbekannte Anweisung 'WriteLn'" ?
boozzz
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: 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 
      
Beiträge: 66
Win XP, Win 2000, SuSe Linux
|
Verfasst: Fr 01.04.05 15:01
{$APPTYPE CONSOLE} stand schon von Anfang an im Programm. Daran hab ich auch nichts geändert.
|
|