www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Schul-Informatik Algorithmen" - Struct in Funktion übergeben
Struct in Funktion übergeben < Algorithmen < Schule < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Schul-Informatik Algorithmen"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Struct in Funktion übergeben: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 18:59 Fr 12.03.2010
Autor: qsxqsx

Hi,

Ich mächte gerne den abstand mit einer Funktion distance berechnen, die zwei Punkte in Form eines structs erhält. Ich hab natürlich danach gegoogelt, trotzdem geht das Programm hier nicht:


#include <iostream>
#include <math.h>

using namespace std;

int main(){

struct Point{
double x;
double y;
} r,t;

r.x = 5;
r.y = 5;

t.x = 0;
t.y = 0;


    
    double l = double distance(& r, & t);

cout << l;
    
system("PAUSE");

return 0;
}
    
double distance(const r * w,const t * q){

double xx = w.x - q.x;
double yy = w.y - q.y;

return sqrt( (double) xx*xx + yy*yy);
}

Es wäre sehr nett wenn jemand schnell drübergukt. Es heisst unter anderem w und q seien nicht deklarierte bezeichner. Aber wie deklarier ich die denn? Die sind doch vom Typ r bzw. t?

Gruss


        
Bezug
Struct in Funktion übergeben: Antwort
Status: (Antwort) fertig Status 
Datum: 19:23 Fr 12.03.2010
Autor: metalschulze


> Hi,
>  
> Ich mächte gerne den abstand mit einer Funktion distance
> berechnen, die zwei Punkte in Form eines structs erhält.
> Ich hab natürlich danach gegoogelt, trotzdem geht das
> Programm hier nicht:
>  
>
> #include <iostream>
>  #include <math.h>
>  
> using namespace std;
>  
> int main(){
>  
> struct Point{
>   double x;
>   double y;
>   } r,t;
>  
> r.x = 5;
>   r.y = 5;
>  
> t.x = 0;
>   t.y = 0;
>  
>
>
> double l = double distance(& r, & t);
>
> cout << l;
>      
> system("PAUSE");
>  
> return 0;
>  }
>      
> double distance(const r * w,const t * q){
>  
> double xx = w.x - q.x;
>   double yy = w.y - q.y;
>  
> return sqrt( (double) xx*xx + yy*yy);
>   }

hmm, also erstens würde ich ja float distance nehmen, denn die Wurzel aus [...] wird in den seltensten Fällen ganzzahlig sein oder? Zweitens übergibst du der Funktion 'distance' keine Daten vom Typ 'Point' sondern...? Der Compiler weiss nun nicht was w.x und w.y bzw. q.x und q.y sein sollen (übergeben wurde der Typ const)

>  
> Es wäre sehr nett wenn jemand schnell drübergukt. Es
> heisst unter anderem w und q seien nicht deklarierte
> bezeichner. Aber wie deklarier ich die denn? Die sind doch
> vom Typ r bzw. t?
>  
> Gruss
>  

Gruss zurück

Bezug
                
Bezug
Struct in Funktion übergeben: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 21:35 Fr 12.03.2010
Autor: qsxqsx

Thx!

Also mir selber ist mal aufgefallen, dass ich die Funktion vorher noch hätte deklarieren sollen:

double double distance(const double * w,const double *p);

Ob float oder double ist doch egal, nich???

Ja also ich habs jetzt (wie man in der obigen Funktionsdeklaration sieht) mit dem Typ double deklariert.

Ja wieso weiss das denn der Compiler nicht was da übergeben wurde?



Sorry für die Fragen ich hab eben keine Lösung zu der Aufgabe weil ich sie mir selbst ausgedacht habe (struct an Funktion weitergeben). Ich hab auch schon im Internet ein Beispiel gesehen da wurde der Funktion 'distance' der Typ Point übergeben! Trotzdem, es gelingt mir nicht
das von dem Beispiel im Internet abzuleiten.

Ich hab jetzt noch eine Art von Compilierfehler:
"Links von ".x" muss sich eine Klasse/Struktur/Union befinden."
- Ich lese und verstehe das wie Hyroglyphen.



Bezug
                        
Bezug
Struct in Funktion übergeben: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:19 Sa 13.03.2010
Autor: qsxqsx

Also vielleicht ist das blöd wennich da meine Compilierfehler aufliste...vergesst das Beispiel.

Aber allgemein, wie geb ich ein struct als Parameter in eine Funktion weiter?
Ich hab soviele kombinatorische Möglichkeiten(& , *, double, ...) probiert aber scheitere...

Gruss

Bezug
                                
Bezug
Struct in Funktion übergeben: Antwort
Status: (Antwort) fertig Status 
Datum: 20:58 Sa 13.03.2010
Autor: rainerS

Hallo!

> Also vielleicht ist das blöd wennich da meine
> Compilierfehler aufliste...vergesst das Beispiel.
>  
> Aber allgemein, wie geb ich ein struct als Parameter in
> eine Funktion weiter?
>  Ich hab soviele kombinatorische Möglichkeiten(& , *,
> double, ...) probiert aber scheitere...

In keinem dieser Fälle übergibst du eine Klasse als Parameter.

So etwa muss das aussehen (distance umbenannt, um Durcheinander mit der Funktion aus der STDLIB zu vermeiden):

1: #include <iostream>
2: #include <math.h>
3:
4: using namespace std;
5:
6: //Deklariere Point außerhalb von main, damit die Deklaration für distance sichtbar ist
7: struct Point{
8: double x;
9: double y;
10: } r,t;
11:
12: // Deklaration von distnce VOR Benutzung
13: double distnce(Point& w, Point& q);
14:
15: int main(){
16:
17:
18: r.x = 5;
19: r.y = 5;
20:
21: t.x = 0;
22: t.y = 0;
23:
24:
25:
26:     double l = distnce( r, t);
27:
28: cout << l;
29:
30: system("PAUSE");
31:
32: return 0;
33: }
34:
35: double distnce(Point& w, Point& q){
36:
37: double xx = w.x - q.x;
38: double yy = w.y - q.y;
39:
40: return sqrt( xx*xx + yy*yy);
41: }


Viele Grüße
   Rainer

Bezug
                                        
Bezug
Struct in Funktion übergeben: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 23:42 Sa 13.03.2010
Autor: qsxqsx

Hi Rainer!

Danke für die Mühe!

Also dein Programm Funktioniert jedenfalls. Doch habe ich noch eine ungewissheit. In deiner Mitteilung hast du mir diese Funktion empfohlen:

double distance(const struct Point * w,const struct Point *p);  

In deinem kompletten Programm hast du eine andere Art von Funktion. Ist die in der ersten Mitteilung von dir versehentlich jetzt falsch? Weil wenn ich es mit der obigen Art mache geht es nicht.

Übrigens: Unter meinen "Kombinatorischen Versuchen" hab ich es auch mit "->" versucht und auch mit "const Point w" "const struct Point w" "struct *w"...usw. ich habe wirklich alles versucht, doch hat sich jedes mal die Anzahl der Compilierfehler relativ constant gehalten...wie auch immer...danke und ein schönes Wochenede noch.



Bezug
                                                
Bezug
Struct in Funktion übergeben: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 08:27 So 14.03.2010
Autor: rainerS

Hallo!

> Hi Rainer!
>  
> Danke für die Mühe!
>  
> Also dein Programm Funktioniert jedenfalls. Doch habe ich
> noch eine ungewissheit. In deiner Mitteilung hast du mir
> diese Funktion empfohlen:
>  
> double distance(const struct Point * w,const struct Point *p);  
>
> In deinem kompletten Programm hast du eine andere Art von
> Funktion. Ist die in der ersten Mitteilung von dir
> versehentlich jetzt falsch? Weil wenn ich es mit der obigen
> Art mache geht es nicht.

Das geht ganz genauso. Nur übergibst du dann Zeiger auf die Objekte, also muss in deinem Aufruf

double l = distnce( &r,  &t);

stehen und die Funktion

1: double distnce(const struct Point *w, const struct Point *q){
2:
3: double xx = w->x - q->x;
4: double yy = w->y - q->y;
5:
6: return sqrt(  xx*xx + yy*yy);
7: }


lauten. Denn w und q sind jetzt Zeiger, also vom Typ Point*, das heisst *w und *q sind vom Typ Point.

  Viele Grüße
    Rainer


Bezug
                        
Bezug
Struct in Funktion übergeben: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 20:35 Sa 13.03.2010
Autor: rainerS

Hallo!

> Thx!
>
> Also mir selber ist mal aufgefallen, dass ich die Funktion
> vorher noch hätte deklarieren sollen:
>  
> double double distance(const double * w,const double *p);
>  
> Ob float oder double ist doch egal, nich???

"double" hat höhere Genauigkeit.

>  
> Ja also ich habs jetzt (wie man in der obigen
> Funktionsdeklaration sieht) mit dem Typ double deklariert.

>

> Ja wieso weiss das denn der Compiler nicht was da
> übergeben wurde?

Der Compiler weiss gar nichts, was du ihm nicht ordentlich deklarierst.

Das kann ja nun überhaupt nicht funktionieren, denn
1. Was soll denn der Rückgabetyp "double double" sein, und
2. Deine Punkte sind vom Typ "struct Point", nicht "double".

Also:

 double distance(const struct Point * w,const struct Point *p); 

>  
>
>
> Sorry für die Fragen ich hab eben keine Lösung zu der
> Aufgabe weil ich sie mir selbst ausgedacht habe (struct an
> Funktion weitergeben). Ich hab auch schon im Internet ein
> Beispiel gesehen da wurde der Funktion 'distance' der Typ
> Point übergeben! Trotzdem, es gelingt mir nicht
> das von dem Beispiel im Internet abzuleiten.
>
> Ich hab jetzt noch eine Art von Compilierfehler:
>  "Links von ".x" muss sich eine Klasse/Struktur/Union
> befinden."

double ist keine Struct, daher bemängelt der Compiler die Anwendung des Operators ".". Den kannst du sowieso nicht nehmen, weil du keine struct Point übergibst, sondern einen Zeiger darauf. Da musst du "->" verwenden.

Viele Grüße
   Rainer



Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Schul-Informatik Algorithmen"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]