/*
 * Lerneinheit C-Pointer
 * Einheit 4: Pointer & Funktionen
 * Aufgabe 4.2.3: Vektor 3D
 * 
 * Programm zur Bestimmung des Vektors c zwischen 2 Punkten a und b im  3-D Raum.
 * Rückgabewert der Funktion ist der Betrag des Vektors c.
 * 
 *   [z] A   [y] A
 *       |     /    .(b)
 *       |   /
 *       | / .(a)
 * ------+----------->
 *       |         [x]
 * 
 * 
 * 
 * Aufgabenstellung:
 * Schreibe ein Programm, in dem 2 dreidimensionale Punkte im Raum definiert sind.
 * Das Programm soll eine Funktion enthalten, die den Vektor zwischen den Punkten
 * bestimmt und den Betrag des Vektors ausrechnet. Der Betrag des Vektors soll als
 * Rückgabewert der Funktion zurückgegeben werden und der Vektor soll über Pointer
 * so ausgegeben werden, dass er auch in der main - Funktion abrufbar ist. Nach
 * dem Funktionsaufruf sollen die beiden Punkte und der Vektor, sowie der Betrag
 * des Vektors auf den Bildschirm ausgegeben werden. Für die Berechnungen in der
 * Funktion werden die Befehle "double pow(double x, double y);" und
 * "double sqrt(double x);" benötigt, die in der Header - Datei maht.h stehen. Als
 * Hilfestellung ist folgender Funktionsprototyp gegeben:
 * 
 * double abstand_3d_zwischen_a_und_b(int *a, int *b, int *c);
 */

#include<stdio.h>
#include<math.h>

double abstand_3d_zwischen_a_und_b(int *a, int *b, int *c);

int main(void)
{
    int a[3]={6,3,4};
    int b[3]={12,9,10};
    int c[3]={0,0,0};
    int *a_pt, *b_pt, *c_pt;
    double betrag_des_vektors_c=0;
    int i=0;

    a_pt=a;
    b_pt=b;
    c_pt=c;

    //printf("%d",*(a_pt+0));
    betrag_des_vektors_c = abstand_3d_zwischen_a_und_b(a_pt, b_pt, c_pt);

    printf("Ausgabe der Vektoren:\n");
    printf("=====================\n");
    printf(" a:     b:     c:\n\n");
    for(i=0; i<3; i++)
    {
        printf("|%3d|  |%3d|  |%3d|\n", a[i], b[i], c[i]);
    }

    printf("\nDer Betrag des Vektors c ist: %.3f", betrag_des_vektors_c);

    fflush(stdin);
    getchar();
    return 0;
}

double abstand_3d_zwischen_a_und_b(int *a, int *b, int *c)
{
    double betrag;
    int i=0;

    for(i=0; i<3; i++)
    {
        *(c+i)=(*(b+i))-(*(a+i));
    }

    /* double pow(double x, double y); x^y   */
    /* double sqrt(double x); Wurzel für x>0 */

    if(pow(*(c+0),2.0)+pow(*(c+1),2.0)+pow(*(c+2),2.0) > 0)
    {
     betrag = sqrt(pow(*(c+0),2.0)+pow(*(c+1),2.0)+pow(*(c+2),2.0));
     return betrag;
    }
    else
    {
        printf("Achtung, Division durch null nicht moeglich. Fehler!!!\n\n");
        return 0;
    }

}
