PDA

Vollständige Version anzeigen : Zahlen austauschen


genij
21.04.2009, 14:41
Hallo Leute,
habe folgendes Problem.

Ich soll eine Prozedur schreiben, die Zahlen als Parameter mit einem aufgerufenden Programm austauscht. Die Prozedur soll ermitteln, welchr der ersten drei Parameter der größte ist und die Nummer des Parameters als vierten Parameter an das Hauptprogramm zurückgeben.

Vielen Dank im Voraus

jinx
21.04.2009, 14:47
Moin, genij,

vielleicht hilft bei der Frage der Thread von gestern Parameterübergabe (http://www.ms-office-forum.net/forum/showthread.php?t=249703)?

IngGi
21.04.2009, 14:53
Hallo ???,

auch wenn du die Originalanfrage inzwischen geändert hast, das ist doch exakt dieselbe Frage, die du gestern schon mal als Benutzer papppp gestellt hast?

http://www.ms-office-forum.net/forum/showthread.php?t=249703

Oder täusche ich mich da? Falls nicht, dann bleib doch bitte im gestrigen Thema und erläutere dort, was genau noch unklar ist. Scheinbar warst du ja mit den gestrigen Antworten durchaus zufrieden.

Gruß Ingolf

genij
21.04.2009, 15:01
Hallo,
Das Mit der Parameterübergabe habe ich verstanden. Mir geht es doch hauptsächlich um den letzten Teil. Meine drei Zahle habe ich soweit nach der Größe geordnet. Jetzt die Frage
Wie übergebe ich die Nummer der größten Zahl als vierten Parameter an das Hauptprogramm zurück?
Vielen Dank im Voraus

EarlFred
21.04.2009, 15:18
Hallo genij,

Du hast folgenden Aufbau (Prinzip)

Typ 1:
Sub Hauptprogramm()
Ergebnis = Berechnung (Parameter1-3)
End Sub

Function Berechnung(Parameter1-3) As Datentyp
Berechnung = [Ergebnis Deiner Berechnung]
End Function

Typ 2:
Sub Hauptprogramm()
Call Berechnung (Parameter1-3, 4)
Ergebnis = Parameter4
End Sub

Function Berechnung(Parameter1-3, ByRef 4) As Datentyp
Parameter4 = [Ergebnis Deiner Berechnung]
End Function

Wie sieht denn Dein Code aus?

Grüße
EarlFred

genij
21.04.2009, 15:23
Hallo,
ich muss nur das Unterprogramm schreiben, nicht das Hauptprogramm.


Option Explicit

Function austauschen(ByRef a As Integer, ByRef b As Integer, ByRef c As Integer, ByRef d As Integer) ' auslesen der Zahlen

Dim x As Integer
Dim y As Integer
Dim temp As Integer

If a < b Then 'Ermittlung des größten Parameters, wobei a immer die grösste Zahls ist
temp = b
b = a
a = temp
End If

If a < c Then
temp = c
c = a
a = temp
End If

If b < c Then
temp = c
c = b
b = temp
End If




Weiter komme ich jedoch nicht. Zerreist mich bitte nicht in der Luft.

EarlFred
21.04.2009, 15:41
Hallo genij,

also, ich erkenne Typ 2 aus der Beschreibung und Deinem Codeschnipsel, richtig? Das Hauptprogramm ist zumindest insoweit wichtig zu kennen, damit eben die Art und Weise der Parameterübergabe geklärt ist. Das war mir nicht so klar.

Also muss der Parameter 4 (d) den Wert erhalten, den Deine Function errechnet hat: d = Ergebnis. Da die Übergabe mit ByRef geregelt ist, ist das Ergebnis dann automatisch im Hauptprogramm vorhanden.

Deine Prozedur ermittelt allerdings nicht, WELCHER der Parameter der größte ist. Aber das scheint ja der Problembeschreibung nach ohnehin nur nebensächlich zu sein.

Grüße
EarlFred

genij
21.04.2009, 15:55
Weiß jetzt nicht wirklich was typ 2 bedeuten soll.

If a < b Then 'Ermittlung des größten Parameters, wobei a immer die grösste Zahls ist
temp = b
b = a
a = temp
End If

If a < c Then
temp = c
c = a
a = temp
End If

If b < c Then
temp = c
c = b
b = temp
End If


Aber mit diesem Code ordne ich doch die Parameter der Größe nach, oder nicht?

Die Aufgabenstellung lautet eigentlich so.
Ich habe in einem Hauptprogramm(welches auch immer) 3 versch. Zahlen. (16,25,10)
Mit den nebenprogramm lese ich die 3 Zahlen aus und ordne sie.

z.b.

2. 25 (vorher an zweitet Stelle und da jetzt geordnet an erster Stelle.)
1. 16
3. 10


Die vierte Zahl, die ich an das Hauptprogramm übergeben muss. ist in diesem Fall die Zahl 2

ich hoffe es ist etwas verständlich

EarlFred
21.04.2009, 16:14
Hallo genij,

in Post #5 findest Du Erläuterungen zur Frage, was ich mit Typ 2 gemeint habe.

DAS war Deine Frage:
Wie übergebe ich die Nummer der größten Zahl als vierten Parameter an das Hauptprogramm zurück?

WAS willst Du nun wissen? WIE man den Wert an das Hauptprogramm übergibt oder WIE man ihn überhaupt ermittelt? Wie sollen wir Dir helfende Antworten geben, wenn Du uns mit Deinen unklaren Beschreibungen im Nebel stehen läßt...

Ich rate jetzt mal, dass Du nicht weißt, wie Du die Position ermittelst, stimmt's?

Function austauschen(ByRef a As Integer, ByRef b As Integer, ByRef c As Integer, ByRef d As Integer) ' auslesen der Zahlen
With WorksheetFunction
d = .Match(.Max(a, b, c), Array(a, b, c), 0)
End With
End Function

Grüße
EarlFred

genij
21.04.2009, 17:23
hallo,

das Ermittlen des max. wertes kann ich doch damit.

If a < b Then 'Ermittlung des größten Parameters, wobei a immer die grösste Zahls ist
temp = b
b = a
a = temp
End If

If a < c Then
temp = c
c = a
a = temp
End If

If b < c Then
temp = c
c = b
b = temp
End If


Wie übergebe ich ihn jetzt. Also nicht direkt den max. Wert, sondern die Nummer des max. Wertes?

EarlFred
21.04.2009, 18:39
Hallo genij,

ich habe Dir doch oben eine Funktion beschrieben, die genau das macht, was Du willst: Die Position des Maximalwerts (vor dem Sortieren) ermitteln und an das Hauptprogramm zurückgeben. Hast Du Fragen dazu oder macht sie nicht das, was Du willst, weil ich die Aufgabe nicht verstanden habe?

Denk doch mal nach: Dein Algorithmus schüttelt alle Werte durcheinander und hinterher willst Du wissen, wo anfangs der größte Wert stand? Und warum muss man Werte erst der Größe nach sortieren, bevor man weiß, welcher der größte ist? (Im Internet findet man übrigens tolle Algorithmen zum Sortieren - such mal ein bisschen, falls Dich das Thema interessiert) Sollen die Werte denn überhaupt sortiert werden? Du sortierst ja Werte, die ByRef übergeben wurden. Dir ist nach dem Studium der Lektüre der letzten Tage schon klar, dass diese dann auch für das Hauptprogramm die Plätze getauscht haben (a also nichtmehr 16 ist, sondern 25)? Ich frag nur, bevor es da ein lustiges Durcheinander in der Hauptroutine gibt....

Von mir aus kannst Du gerne von Peine über Paris nach Gifhorn fahren, wenn Du das gut findest, aber ich kann mich des Eindrucks nichtmehr erwehren, von Dir veralbert zu werden.

Gute Nacht
EarlFred

genij
21.04.2009, 19:25
entschuldige, ich will hier keinen veralbern.

es geht um eine Klausuraufgabe. Alles was wir bekommen haben ist:

Schreiben Sie eine Prozedur, die vier Zahlen als Parameter mit einem aufrufenden Programm austauscht. Die Prozedur so ermitteln, welcher der ersten drei Parameter der größte ist und due Nummer des Parameters (1, 2 oder 3) als vierten Parameter wieder an das Hauptprogramm zurückgeben.

Mehr an infos haben wir in der Klausur nicht bekommen.

ich möchte mich nochmal etschuldigen.

EarlFred
21.04.2009, 19:34
Hallo genij,

probier es halt aus:

Sub Hauptroutine()
Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer

a = 16
b = 25
c = 10
d = 0
austauschen a, b, c, d
MsgBox "Der größte Wert steht an Stelle " & d
End Sub

Function austauschen(ByRef a As Integer, ByRef b As Integer, ByRef c As Integer, ByRef d As Integer) ' auslesen der Zahlen
With WorksheetFunction
d = .Match(.Max(a, b, c), Array(a, b, c), 0)
End With
End Function

Aufgabe erledigt. Die 1 bitte auf mein nächstes Studium gutschreiben lassen. Danke ;)

Gute Nacht
EarlFred