Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Hilfe!!!!

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
24.11.2004, 01:12 Uhr
~cn00b
Gast


Ich hab hier mal folgenden Vektorrechner.
Wenn ich einen 3D vektor eingebe, dann rechnet er mir paar sachen durch.

Jetzt ist die Aufgabe diese:
Ich soll das Programm erweitern. Die Ausgangsspezifikation soll wirklich erfüllt werden und zusätzlich eine "struct" als Rückgabewert bei Addition/Subtraktion, Kreuzprodukt und Einheitsvektor verwendet werden.
Die struct nenn' ich "Vec3D" und soll 3 double Werte (x,y und z) enthalten.

Ich habe wenig Ahnung wie ich das realisieren soll!


C++:
#include <stdio.h>
#include <math.h>

void vektor_addition(float a[], float b[]);        
void vektor_subtraktion(float a[], float b[]);    
void vektor_dot(float a[], float b[]);            
void vektor_cross(float a[], float b[]);          
void vektor_length(float a[], float b[]);        
void vektor_normalize(float a[], float b[]);    

int main ()                                        
{
    float vektor1[3];                            
    float vektor2[3];
    int i;
    
    
    
    for (i=0;i<3;i++)                                                    

    {    
    
            printf("Geben Sie Wert %d fuer Vektor 1 ein:",i+1);        
            scanf("%f",&vektor1 [i]);                                    

    }

    for (i=0;i<3;i++)                                                  
    {    
    
            printf("Geben Sie Wert %d fuer Vektor 2 ein:",i+1);
            scanf("%f",&vektor2[i]);
    }


    vektor_addition(vektor1, vektor2);                                    
    vektor_subtraktion(vektor1, vektor2);
    vektor_cross(vektor1, vektor2);
    vektor_dot(vektor1, vektor2);
    vektor_length(vektor1, vektor2);
    vektor_normalize(vektor1, vektor2);

}

void vektor_addition (float a[], float b[])                                
{
    printf("\nAddition beider Vektoren:");
    printf("\n%f \n%f \n%f ", a[0] + b[0],a[1] + b[1], a[2] + b[2]);    

}



void vektor_subtraktion (float a[], float b[])                            
{
    printf("\nSubtraktion beider Vektoren:");
    printf("\n%f \n%f \n%f ", a[0] - b[0],a[1] - b[1], a[2] - b[2]);                                            
                                    

}



void vektor_cross (float a[], float b[])                            
{
    printf("\nKreuzprodukt beider Vektoren:");
    printf("\n%f\n%f\n%f ", (a[1] * b[2]) - (a[2] * b[1]), -((a[0] * b[2]) - (a[2]*b[0])),a[0] * b[1] - a[1] * b[0]);
                            
}


    
void vektor_dot (float a[], float b[])                                
{
    printf("\nSkalarpprodukt beider Vektoren:");
    printf("%f\n", a[0] * b[0] + a[1] * b[1] +a[2] * b[2]);        


}



void vektor_length (float a[], float b[])                                                    {    

    printf("\nLaenge von ");
    printf("Vektor a: %f", sqrt(pow(a[0],2)+pow(a[1],2)+pow(a[2],2)));
    printf(" und von Vektor b: %f\n", sqrt(pow(b[0],2)+pow(b[1],2)+pow(b[2],2)));
    
}



void vektor_normalize (float a[], float b[])                                                
{
    
        
    printf("\nNormalvektor a: %g %g %g\n", a[0] / sqrt(pow(a[0],2) + pow(a[1],2) + pow(a[2],2)), a[1] / sqrt(pow(a[0],2) + pow(a[1],2) + pow(a[2],2)), a[2] / sqrt(pow(a[0],2) + pow(a[1],2) + pow(a[2],2)));

    printf("Normalvektor b: %g %g %g\n", b[0] / sqrt(pow(b[0],2) + pow(b[1],2) + pow(b[2],2)), b[1] / sqrt(pow(b[0],2) + pow(b[1],2) + pow(b[2],2)), b[2] / sqrt(pow(b[0],2) + pow(b[1],2) + pow(b[2],2)));


}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.11.2004, 09:47 Uhr
~Zachariel
Gast


hallo
wer kann mir helfen

repeat-until schleife in Delphi
welche schleife ist das in c++

und wenn es geht noch einige unterschiede wenn ihr habt

MFg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.11.2004, 11:09 Uhr
virtual
Sexiest Bit alive
(Operator)


@Zachariel
Bitte einen eigenen Thread für Deine Frage aufmachen, das nächste mal.

C++:
repeat ... unit (B);


ist in C/C++

C++:
do { ... } while (!B);


Es gibt noch mehr Unterschiede; was willst Du denn wissen (bitte Thread dafür aufmachen)?

@ ~cn00b
Falls es Dich beruhigt: wenn Du einen eigenen Ansatz zeigt, wird Dir bestimmt geholfen...
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.11.2004, 13:18 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja also:


C++:

struct Vec3D {
  float x;
  float y;
  float z;
};

Vec3D vektor_addition (float a[], float b[])                                
{
    Vec3D vec;
    vec.x = a[0] + b[0];
    vec.y = a[1] + b[1];
    vec.z = a[2] + b[2];


    printf("\nAddition beider Vektoren:");
    printf("\n%f \n%f \n%f ", vec.x, vec.y, vec.z);
    return vec;
}



und den Rest machste selbst
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.11.2004, 20:13 Uhr
~jana
Gast


Hey "cn00b"!


Erst mal grundsaetzlich:
Du kannst das Programm in zweierlei Hinsicht schreiben,
- so, dass es "noch besser" um Funktionen erweiterbar ist, nicht nur wie schon hier steht Grundrechenoperationen mit 2 Vektoren, sowie Kreuzprodukt, Skalarprodukt (die Normalisierung ist sicherlich erst mal ein Hilfsmittel ;-) ) ... schon richtig gut (-hab jetzt aber nicht genau die Formeln getestet, sie sehen auf den ersten Blick aber ordentlich aus) ... richtig fett mit objektorientiertem Ansatz
- oder Du "erweiterst Dein Programm nur ", wie es vielleicht eher im Informatikunterricht verlangt werden koennte

erweitern:
das geht alles schrittweise
1) Du willst Deine Dir schon gebauten Funktionen in Deiner main auch benutzen, also gestalte einfach eine kleine Abfrage, was der Benutzer Deines Programmes machen moechte und rufe die entsprechende Funktion auf ... Du willst ja auch, dass man sich vor Dein Programm setzen kann und sieht wie es funktioniert
2) das bisher kriegst Du schnell hin, eine kleine Eingaberoutine zu schreiben ist nicht die Welt ( zumal sie erst einmal funktionieren soll und nicht supi robust sein muss)
... Entweder Du laesst Dir einfach ueber ein Menue die Rechenoperation angeben und laesst diese dann auch ausfuehren ("druecke die 1, dann wird multipliziert")
... Oder Du liesst einfach das Zeichen fuer die Rechenoperation mit (wobei das der elegantere Weg ist)
(wenn ein * kommt (Erinnerung : bestimmter Ascii-wert fuer jedes Zeichen existiert) dann rufe die Multiplikationsfunktion auf)
->das war bisher nur Fleissarbeit zum Erfassen was der Anwender von Deinem Programm moechte, was jetzt eigentlich kommt ist am wichtigsten: ueberlege Dir genau was eine Struktur ist und wofuer Du sie brauchst ... das ist aus dem bisherigen Quellcode noch nicht ersichtlich
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Du brauchst nur mal denken in Richtung
- wie speichere ich meine errechneten/zu errechnenden (fetten, riesigen, kaum vorstellbaren) Werten und vor allem warum? ... dann weisst Du ganz genau, wo Du Deine schoene Idee mit der Struktur ansetzen musst !!! ( - und wir waren alle mal in der Schule abwesend oder zu Hause lesefaul, aber wenigstens kann man das mit dem noetigen Fleiss ausgleichen -)
die Struktur zu initialisieren, und der ganze andere Schreib-/Anpassungskram ist nicht mal ne halbe Stunde, in jedem C-Lehrbuch steht, wie die Syntax ist, nur verstehen musst Du es selber
dann weisst Du naemlich auch, welche Zwischenergebnisse Dein Programm schon berechnet hat und Du behaeltst die Uebersicht darueber, was Dein Rechner eigentlich alles fuer Dich in weniger als 1 Sekunde tut
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
dann veraendert sich Dein Programm auch so, wie Du es haben willst, sodass der Anwender Deines Programmes ein tolles Ergebnis auf den Bildschirm vielleicht gerundet aber auf alle Faelle geprintet bekommt und Du Dich freust, was Du dafuer eigentlich getan hast und mit welcher Leichtigkeit der Programmanwender Dein Programm benutzt, mit einem Augenzwinkern, dass Du weisst, was Du das alles Schoenes entwickelt hast, auch wenn das jetzt erst mal "nur" der Anfang ist ;-)
(fallst Du wirklich nicht weiter kommst, stelle ich Dir morgen oder so noch ein paar konkretere Fragen, falls ich dann noch mal die Zeit habe, sonst kannst Du Dir einfach jemanden Anderen schnappen, der Dir vielleicht sympatisch ist)


allgemeiner Hinweis zur Aufgabe:
mache erst mal dass die Grundrechenoperationen usw. funktionieren, bevor Du mit 3 dimensionalen Geschichten anfaengst, eine z-Koordinate schon jetzt einzufuehren, das koennen die Wenigsten auf Anhieb, ausserdem ist es mit dem noetigen mathematischen Hintergrundgedanken dann auch nicht mehr so schlimm ... Du sollst ja erst mal Deine Faehigkeiten wie man etwas implementiert - z.b. wie Du also Dein Programm schreibst - erweitern, Deine Grundfertigkeiten in C/C++ zu programmieren festigen



Oki, ich rede mir hier den Mund fuzzelig, die Finger wund, die Tastatur schwarz, ... ? ...
... Du kannst solche Sachen durchaus auch mit Anderen diskutieren oder Du bist so schlau, dass Du Dir alles selber ausdenkst ... manche brauche ne Diskussion darueber, manche ihren Kopf und viele machen nen Kompromiss dazwischen ... aber in jedem Falle hilft es ungemein, wenn Du Dir einfach mal auf einen Zettel oder in ein File schreibst, was Du machen willst und zwar der Reihe nach (wenn Du naemlich an irgendeiner Stelle haengen bleibst, dann kann das derjenige, den Du um Rat fragst nur mit viel Muehe/Zeit nachvollziehen, um Dir den richtigen Hinweis zu geben ... bisher ist Dein Programm noch relativ ueberschaubar, aber spaeter ... wobei Ueberschaubarkeit etwas mit Erfahrung zu tun haben kann, aber bei zu kryptischen Formulierungen die Ueberschaubarkeit oft nicht gegeben ist und Erfahrung da ueberhaupt nicht hilft, also schreib einfach erst mal verbal auf, was Du von Deinem Sklaven, dem Rechenknecht willst, denn er ist naemlich nicht nur lieb, sondern auch noch stur, weil er nur das tut, was Du ihm in seiner Sprache sagst ;-)

... oki, dann wuensch ich Dir den Durchhaltewillen und die Diskussionsbereitschaft, die Du zum Loesen der Aufgabe brauchst, Du bist auf alle Faelle auf dem richtigen Weg um die Grundfertigkeiten des Programmierens zu lernen

So und jetzt muss ich auch mal wieder meinen Computer zu Hause streicheln gehen , ...Tschuess sagt, "Dr. Computerlove" (*grins*)


Jana.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.11.2004, 20:25 Uhr
Spacelord
Hoffnungsloser Fall


Also ich finde Jana´s Art zu posten irgendwie erfrischend anders

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.11.2004, 20:44 Uhr
CaesarCortezz
minderer Student


Ja ist irgendwie sehr "ausführlich" *gG*
Aber für die fragensteller sicher cool
ich überlege gerade ob ich nicht irgendne frage stelle die mit einem gesamten buchinhalt beantwortet werden könnte
--
Thus spake the master programmer:

``When the program is being tested, it is too late to make design changes.''
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: