www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 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
Dt. Schulen im Ausland: Mathe-Seiten:

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 ^
www.vorhilfe.de