1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Vektorrechnung

  • xxyy
  • 7. Dezember 2006 um 21:16
  • Unerledigt
  • Vevusio
    6
    Vevusio
    Mitglied
    Reaktionen
    1
    Punkte
    371
    Beiträge
    71
    • 9. Dezember 2006 um 18:53
    • #21

    naja eigentlich nicht, eine lösung wäre zb

    Code
    main()
    {
        Vector v1, v2;
        Vector v3;
        double skalar;
        char op;
    
    
        
        printf("1. Vektor eingeben: ");
        scanf("%lf %lf %lf",&v1.x,&v1.y,&v1.z); 
        printf("Operator eingeben: ");
        scanf("%c", &op);
    
    
        if(op == '*')
        {
            printf("2. Skalar eingeben: ");
            scanf("%lf",&skalar);
        }
        else
        {     
            printf("2. Vektor eingeben: ");
            scanf("%lf %lf %lf",&v2.x,&v2.y,&v2.z);
        }
    
    
        switch(op)
        {
            case '+': v3 = add(&v1, &v2);
                      printVector(&v3);
                      break;
            case '-': v3 = sub(&v1, &v2);
                      printVector(&v3);
                      break;
            case '*': v3 = mult(skalar, &v2);
                      printVector(&v3);
                      break;
            case 'x': v3 = cross(&v1, &v2);
                      printVector(&v3);
                      break;
            case '.': skalar = dot(&v1, &v2);
                      printf("%lf",skalar);
                      break;
            default: printf("Falscher Operand!\n");
                 return 1;
        }
    Alles anzeigen

    einen vektor braucht man auf jeden fall, der wird eingelesen, dann der operator, wenn der op * ist lesen wir nen skalar ein ansonsten einen zweiten vektor, rest bleibt gleich

    das ganze setzt natürlich vorraus der benutzer gibt keinen müll ein sondern nur die gültigen operatoren

    ich hab das flushall() weggelassen, weiß leider nicht wofür das gut ist, ich glaub man braucht es garnicht

    [FONT=Arial, Helvetica, sans-serif](\__/) [/FONT]
    [FONT=Arial, Helvetica, sans-serif] (='.'=) [/FONT]This is Bunny. Copy Bunny into your signature to help
    [FONT=Arial, Helvetica, sans-serif](")_(")[/FONT] him on his way to world domination.

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 9. Dezember 2006 um 19:48
    • #22

    Ja ist eleganter.

    Musste nur noch in im case '*' die Adressierung &v2 zu &v1 ändern, weil ja der erste Vektor v1 ist.

    Eigentlich ist es jetzt fertig, aber das mit dem Modul habe ich so gemacht, dass ich in meinem Projektmappen-Explorer in Visual Studio beim Punkt Headerdatei eine neue hinzugefügt habe und dann alles was ich vor main() definiert habe dort rein kopiert.
    Und am Ende in die c Datei #include "vek.h" ergänzt habe.
    Läuft auch so das Programm. Wird das mit einem Modul gemeint?

  • Vevusio
    6
    Vevusio
    Mitglied
    Reaktionen
    1
    Punkte
    371
    Beiträge
    71
    • 9. Dezember 2006 um 22:05
    • #23

    hm hm du meinst alle funktionen die vor der main waren einfach in die .h datei getan und dann die .h in der main inkludiert

    ja, ich würd das schon ein modul nennen, allerdings macht man es im normalfall nicht so dass in den .h files funktionsdefinitionen stehen

    ne funktion besteht eigentlich aus einer deklaration

    Code
    int funktion();

    und einer definition

    Code
    int funktion()
    {
        return 5;
    }

    zb so, man kann aber so wie du es gemacht hast vor der main bzw in der h file gleich die definition machen wodurch die funktionen auch gleich deklariert sind

    aber im normalfall solltest du eine .h file schreiben mit den deklarationen und eine cpp file mit den definitionen also, in der h file

    Code
    //vector.h
    #ifndef VECTOR_H
    #define VECTOR_H
    
    
    typedef struct {
      double x;
      double y;
      double z;
    } Vector;
    
    
    Vector set( double vec[3] );
    Vector add( const Vector *v1, const Vector *v2 );
    void printVector( const Vector * v );
    
    
    //usw
    
    
    #endif
    Alles anzeigen

    dazu eine cpp file

    C
    //vector .cpp
    #include "vector.h"
    
    
    Vector set( double vec[3] )
    {
        Vector result;
        result.x = vec[0];
        result.y = vec[1];
        result.z = vec[2];
        return result;
    }
    
    
    Vector add( const Vector *v1, const Vector *v2 )
    {
        Vector result;
        result.x = v1->x + v2->x;
        result.y = v1->y + v2->y;
        result.z = v1->z + v2->z;
        return result;
    }
    
    
    void printVector( const Vector * v )
    {
        printf("%lf %lf %lf",v->x, v->y, v->z);
    }
    Alles anzeigen

    so gehört das, die h file enthält die funktionsdeklarationen, die cpp file die dazugehörigen definitionen

    und in der main inkludierst du dann die .h file und benutzt die funktionen wie gewohnt

    also im prinzip alles so wie du es gemacht hast nur die deklarationen von den definitionen getrennt in einer extra vector.cpp file und nicht gleich in der h file, der grund dafür ist dass du die vector.cpp dann auch kompilieren kannst und siehst was für fehler drin sind etc, aber in der .h file geht das nicht

    wenn du aber keine lust hast lass es halt so, richtig ist es auf jeden fall

    [FONT=Arial, Helvetica, sans-serif](\__/) [/FONT]
    [FONT=Arial, Helvetica, sans-serif] (='.'=) [/FONT]This is Bunny. Copy Bunny into your signature to help
    [FONT=Arial, Helvetica, sans-serif](")_(")[/FONT] him on his way to world domination.

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 9. Dezember 2006 um 23:33
    • #24

    Ich denke eher ich muss es so machen wie du es eben vorgeschlagen hast. Das passt zur Aufgabenstellung, wo die Funktionen so deklariert sind wie in der .h Datei.
    Und im Script habe ich eine Abbildung mit Feld.h->Feld.c, main.c

    Läuft jetzt einwandfrei. Vielen vielen Dank nochmal für die Mühe!

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung