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
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Forum
  1. Informatik Forum
  2. Mitglieder
  3. xxyy

Beiträge von xxyy

  • 1
  • 2
  • 3
  • Wochentag vom Jahr ausgeben

    • xxyy
    • 2. Januar 2007 um 20:00

    Hallo Leute,

    danke nochmal und frohes neues Jahr euch!

    Habe etwas rumprobiert, aber so nichts hinbekommen.

    Jetzt habe ich die math.h eingebunden und habe floor wie mdk es gezeigt hat benutzen können.


    Code
    t = (floor(jahr * 365.25) - 620628);
    t =t%7;
    
    
    
    
    printf("%d", t);

    Das Problem ist, wenn ich eingebe...

    2006 -> 0 (ok)
    2007 -> 1 (ok)
    2008 -> 3, müsste 2 sein ?!
    2009 -> 4, müsste 3 sein?
    2010 -> 5
    2011 -> 6

    2012 -> 1


    Also noch stimmt was nicht, oder habe ich was vergessen?

  • Wochentag vom Jahr ausgeben

    • xxyy
    • 27. Dezember 2006 um 00:13

    @Paulchen

    Was meinst du mit gcc?
    Weil bei mir kommt ein Fehler beim Kompilieren (wegen modulo von float t)

  • Wochentag vom Jahr ausgeben

    • xxyy
    • 26. Dezember 2006 um 23:26

    Danke für die Hinweise!

    @Paulchen
    Danke für den Link.


    In einer Zeile mit modulo nimmt er es nicht an. Also hab ich

    Code
    t = ((jahr * 365.25) - 620628);
    t=t % 7;

    Und das mit dem Abrunden, also für t nehme ich ja den Datentyp float.
    Wenn ich aber dann t an eine integer Variable übergebe, müsste er dann nicht automatisch abrunden?

  • Wochentag vom Jahr ausgeben

    • xxyy
    • 26. Dezember 2006 um 22:24

    Hi,

    danke für den Tipp.

    Bei mir erkennt er "floor" nicht. Muss man eine bestimmte Bibliothek einbinden?

    Und wie kommt man auf die Formel? Ist es irgendwo beschrieben?

    Es geht also nur um den Tag vom 24. Dezember.

  • Wochentag vom Jahr ausgeben

    • xxyy
    • 26. Dezember 2006 um 21:11

    Hi Leute,

    ich hoffe ihr habt Weihnachten gut verbracht.

    Ich überlege grad an einem Programm wo man die Jahreszahl eingibt und es gibt mir dann den Wochentag vom 24. Dezember aus.

    Eine Idee habe ich zwar, aber umsetzen kann ich sie nicht.

    Und zwar habe ich mir gedacht die Wochentage in einem array tag[6] mit 7 Plätzen zu speichern.
    Von der eingegebenen Jahreszahl z.B. 2007 subtrahiert man 2006 (denn ich weiß ja dass 2006=Sonntag).

    Die Ausgabe würde dann tag[6+1] lauten und das heisst tag[0]=Montag.
    Wenn man 2008 eingibt, dann tag[6+2]=Dienstag usw...

    Wie aber weisst man einem bestimmten Platz von einem Array einen "string" zu, so dass dieser dann ausgegeben werden kann?

    Oder ist die Idee falsch und man kann es anders/besser machen?

    Mein Code sieht so aus (die Zuweisungen sind offensichtlich falsch)

    Code
    #include <stdio.h>
    
    
    
    
    int main()
    {
    
    
    
    
    int zeichen[6];
    
    
    tag[0] = 'Montag';
    tag[1] = 'Dienstag';
    tag[2] = 'Mittwoch';
    tag[3] = 'Donnerstag';
    tag[4] = 'Freitag';
    tag[5] = 'Samstag';
    tag[6] = 'Sonntag';
    
    
    printf("Jahreszahl: ");
    scanf("%d",&jahr);
    
    
    jahr=jahr-2006;
    
    
    
    
    printf("%c", tag[6+jahr]);
    
    
    }
    Alles anzeigen


    Danke fürs Lesen und einen schönen Abend euch noch.

  • Vektorrechnung

    • xxyy
    • 9. Dezember 2006 um 23:33

    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!

  • Vektorrechnung

    • xxyy
    • 9. Dezember 2006 um 19:48

    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?

  • Vektorrechnung

    • xxyy
    • 9. Dezember 2006 um 14:08

    hal

    danke, werde es mir mal ausdrucken und anschauen.

    Vevusio

    Danke, jetzt läuft es fast wie ich es mir vorgestellt habe.

    Habe insgesamt:

    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("2. Vektor eingeben: ");
        scanf("%lf %lf %lf",&v2.x,&v2.y,&v2.z);
    
        flushall();
        printf("Operator: ");
        scanf("%c", &op);
    
    
        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

    Wollte die Ausgabe zuerst nach switch(op) einbringen, aber wegen dem Punktprodukt gehts nicht.
    Auch wegen der Multiplikation mit einem Skalar.

    Habe die Multiplikation mit dem Skalar zunächst als Kommentar, weil bei der Eingabe ja Vektoren eingegeben werden. Und das Skalar ist nur eine Zahl.

    D.h. ich müsste die Abfrage über den Operator zu Beginn machen und in in der switch(op) die Ein -und Ausgabe für jede einzelne Operation rein machen.

    Gibt es vielleicht noch eine andere Möglichkeit?

  • Vektorrechnung

    • xxyy
    • 9. Dezember 2006 um 12:13

    Hab grad gemerkt, dass ich auch einen Fehler in der scanf hatte.

    die main() habe ich erst mal für die add gemacht.

    Code
    main()
    {
        Vector v1, v2;
    
    printf("1. Vektor eingeben: ");
    scanf("%lf %lf %lf",&v1->x,&v1->y,&v1->z);
    
    
    printf("2. Vektor eingeben: ");
    scanf("%lf %lf %lf",&v2->x,&v2->y,&v2->z);
    
    
    printVector(v1);
    printVector(v2);
    
    
    add(v1,v2);
    printVector(result);
    
    
    }
    Alles anzeigen
    Zitat


    \vektor.c(42) : error C2232: '->x': Der linke Operand ist vom Typ 'struct', verwenden Sie '.'
    \vektor.c(42) : error C2232: '->y': Der linke Operand ist vom Typ 'struct', verwenden Sie '.'
    \vektor.c(42) : error C2232: '->z': Der linke Operand ist vom Typ 'struct', verwenden Sie '.'
    \vektor.c(45) : error C2232: '->x': Der linke Operand ist vom Typ 'struct', verwenden Sie '.'
    \vektor.c(45) : error C2232: '->y': Der linke Operand ist vom Typ 'struct', verwenden Sie '.'
    \vektor.c(45) : error C2232: '->z': Der linke Operand ist vom Typ 'struct', verwenden Sie '.'
    \vektor.c(47) : error C2440: 'Funktion': 'Vector' kann nicht in 'const Vector *' konvertiert werden
    \vektor.c(47) : warning C4024: 'printVector': Unterschiedliche Typen für formalen und übergebenen Parameter 1
    \vektor.c(48) : error C2440: 'Funktion': 'Vector' kann nicht in 'const Vector *' konvertiert werden
    \vektor.c(48) : warning C4024: 'printVector': Unterschiedliche Typen für formalen und übergebenen Parameter 1
    \aufgabe9\vektor.c(50) : error C2440: 'Funktion': 'Vector' kann nicht in 'const Vector *' konvertiert werden
    \vektor.c(50) : warning C4024: 'add': Unterschiedliche Typen für formalen und übergebenen Parameter 1
    \vektor.c(50) : error C2440: 'Funktion': 'Vector' kann nicht in 'const Vector *' konvertiert werden
    \vektor.c(50) : warning C4024: 'add': Unterschiedliche Typen für formalen und übergebenen Parameter 2
    \vektor.c(51) : error C2065: 'result': nichtdeklarierter Bezeichner
    \vektor.c(51) : warning C4047: 'Funktion': Anzahl der Dereferenzierungen bei 'const Vector *' und 'int' unterschiedlich
    \vektor.c(51) : warning C4024: 'printVector': Unterschiedliche Typen für formalen und übergebenen Parameter 1

    Alles anzeigen

    Zum Üben habe ich bisher immer das Tutorial Pronix benutzt, ein Buch noch nicht.
    Das Script vom Prof kann man vergessen, zumindest wenn man es zum ersten Mal macht.

  • Vektorrechnung

    • xxyy
    • 9. Dezember 2006 um 02:04

    Hallo Hal,

    danke für deine Anmerkung.

    Habe jetzt insgesamt

    Code
    .
    .
     
    main()
    {
    
    
    printf("1. Vektor eingeben: ");
    scanf("%lf %lf %lf",&v1->x,&v1->y,&v1->z);
    
    
    printf("2. Vektor eingeben: ");
    scanf("%lf %lf %lf",&v2->x,&v2->y,&v2->z);
    
    
    printVector();
    
    
    }
    Alles anzeigen


    Nun bekomme ich nur ab der scanf einen Fehler

    \vektor.c(41) : error C2065: 'v1': nichtdeklarierter Bezeichner
    \vektor.c(41) : error C2223: Der linke Teil von '->y' muss auf eine Struktur/Union zeigen
    \vektor.c(41) : error C2223: Der linke Teil von '->z' muss auf eine Struktur/Union zeigen
    \vektor.c(44) : error C2065: 'v2': nichtdeklarierter Bezeichner
    \vektor.c(44) : error C2223: Der linke Teil von '->y' muss auf eine Struktur/Union zeigen
    \vektor.c(44) : error C2223: Der linke Teil von '->z' muss auf eine Struktur/Union zeigen
    \vektor.c(46) : error C2198: "printVector": Nicht genügend Argumente für Aufruf.

    Danke!!!

  • Vektorrechnung

    • xxyy
    • 8. Dezember 2006 um 21:01

    ich wollte es jetzt erst mal einfach mit der Addition laufen lassen und es kommen paar Fehler.
    So sieht es aus:

    Code
    #include <stdio.h>
    .
    .
    .
    main()
    {
    
    
    printf("1. Vektor eingeben: ");
    scanf(%lf %lf %lf,&v->x,&v->y,&v->z);
    
    
    printf("2. Vektor eingeben: ");
    scanf(%lf %lf %lf,&v2->x,&v2->y,&v2->z);
    
    
    printVector();
    }
    Alles anzeigen


    Fehler

    Zitat


    \vektor.c(4) : error C2061: Syntaxfehler: Bezeichner 'set'
    \vektor.c(4) : error C2059: Syntaxfehler: ';'
    \vektor.c(4) : error C2059: Syntaxfehler: 'Typ'
    \vektor.c(5) : error C2449: '{' auf Dateiebene gefunden - fehlt der Funktionskopf?
    \vektor.c(11) : error C2059: Syntaxfehler: '}'
    \vektor.c(24) : error C2143: Syntaxfehler: Es fehlt ')' vor '*'
    \vektor.c(24) : error C2143: Syntaxfehler: Es fehlt '{' vor '*'
    \vektor.c(24) : error C2059: Syntaxfehler: ')'
    \vektor.c(25) : error C2449: '{' auf Dateiebene gefunden - fehlt der Funktionskopf?
    \vektor.c(27) : error C2059: Syntaxfehler: '}'

    Alles anzeigen

    printVektor gibt das Ergebnis aus oder? Wenn ja, woher soll er wissen, dass "v" zu "result.x, result.y, result.z" gehört?

  • Vektorrechnung

    • xxyy
    • 8. Dezember 2006 um 15:22

    Vevusio

    Zuerst mal danke für die Erklärungen.

    Wir programmieren das in C
    C++ hab ich noch nie gemacht, deshalb schwer die Sachen im Internet zu unterscheiden.

    Muss leider so gemacht werden wie in der Aufgabenstellung.

    1. Stimmt, habe muss float/double dot heissen und nicht Vector dot. Das hat er mittlerweile korrigiert. Also:

    double dot( const Vector *v1, const Vector *v2 );


    sauzachn

    Ist leider in C. Im Internet habe ich auch gesucht, nur habe ich bisher Beispiele in C++ gefunden.
    Für mich ist es dann vor allem schwer, weil ich noch die in Zusammenhang von einer Moduldatei programmiert habe..also wo ich selber eine machen musste.

  • Vektorrechnung

    • xxyy
    • 7. Dezember 2006 um 23:55

    Hallo Blackie,

    danke für den Tipp.
    Die Rechenregeln sind mir soweit bekannt.

    Zitat

    Vector cross( const Vector *v1, const Vector *v2 )
    {
    Vector result;
    result.x = v1->y*v2->z - v1->z*v2->y;
    result.y = v1->z*v2->x - v1->x*v2->z;
    result.z = v1->x*v2->y - v1->y*v2->x;
    return result;
    }


    Vector sub( 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;
    }

    Alles anzeigen

    Wieso heisst es bei der Multiplikation
    Vector mult( double value, const Vector *v2 );
    und nicht
    Vector mult( const Vector *v1, const Vector *v2 );
    ??

    Und was ist dann
    Vector dot( const Vector *v1, const Vector *v2 );
    ?

    Oder hat er die beiden verwechselt? Unter Vector dot verstehe ich eigentlich die Multiplikation mit einem Skalar.

    Aber das ist nicht das Hauptproblem.
    Sondern wie macht man dann die Eingabe Ausgabe?

    Und was kommt in das Modul scalar.h und was in scalar.c ?

    Ich kann mir vorstellen, dass es nicht wirklich schwer ist, aber ich habe noch nie auf die Art mit Pointer usw. zu tun gehabt. Im Internet finde ich auch nichts hilfreiches.

    Und wie sehen aus...

    Vector set( double vec[3] );
    void printVector( const Vector * v )
    ?

    Etwa so ?

    Zitat


    void printVector( double vec[3] );
    {
    double x;
    double y;
    double z;
    }

    Alles anzeigen
  • Vektorrechnung

    • xxyy
    • 7. Dezember 2006 um 21:16

    Hi Leute,

    ich habe mal wieder ein Problem bzw. brauche Hilfe.
    Diesmal weiß ich gar nicht weiter.
    Habe im Internet nach plausiblen Beispielen gesucht, aber nichts hilfreiches gefunden.


    ich seh schon...da kommt einiges auf mich zu..

    Vielen Dank fürs Lesen wie immer!!

  • struct komplexe Zahlen Operation

    • xxyy
    • 1. Dezember 2006 um 23:11

    %lf fällt mir jetzt auch wieder ein. In dem Tutorial von Pronix steht bei double das Formatzeichen %f. Nur bei long double %lf. komisch...

  • struct komplexe Zahlen Operation

    • xxyy
    • 30. November 2006 um 22:15

    Ah, das hab ich ganz übersehen/verpeilt...

    Jetzt bekomm ich aber egal was ich eingebe
    -1851192085.......00000000 -18511920....00000000i raus.


    EDIT:

    Habe die Variablen x,y ganz oben mit float definiert und jetzt geht alles super!


    Danke euch allen nochmal!

  • struct komplexe Zahlen Operation

    • xxyy
    • 30. November 2006 um 21:51

    Versteh nicht ganz. add ist ja die struct außerhalb int main().
    Ich habe die zwei eingegebenen Zahlen an die Funktion add übergeben und return ist ja z (das ergebnis).

  • struct komplexe Zahlen Operation

    • xxyy
    • 30. November 2006 um 21:18

    Danke für die Antwort!

    Also habe jetzt für die Addition insgesamt

    Zitat


    int main()
    {

    struct Complex z,z1, z2;


    printf("1. Zahl: ");
    scanf("%f %f", &z1.x, &z1.y);
    printf("2. Zahl: ");
    scanf("%f %f",&z2.x, &z2.y);

    z=add(z1,z2);
    printf("%f %fi",&z.x, &z.y);

    Alles anzeigen

    Kompilieren ohne Fehler.
    Aber als Ergebnis bekomm ich immer 0.00000 0.00000i
    Warum?

  • struct komplexe Zahlen Operation

    • xxyy
    • 30. November 2006 um 20:49

    Ja stimmt.
    Hab draus Complex z1, z2; gemacht.

    Bekomme dann die Fehlermeldung:
    Complex': nichtdeklarierter Bezeichner
    Fehlendes ';' vor Bezeichner 'z1'
    'z1': nichtdeklarierter Bezeichner

    Das macht mich echt wahnsinnig. Hab zwar ein Beispielprogramm in C++ was mir das alles rechnet, aber es ist eben nicht in C...

  • struct komplexe Zahlen Operation

    • xxyy
    • 30. November 2006 um 15:44

    Danke für eure Antworten...

    die main() hab ich jetzt so:

    Zitat


    int main()
    {

    double z1, z2;


    printf("1. Zahl: ");
    scanf("%f %f", &z1.x, &z1.y);
    printf("2. Zahl: ");
    scanf("%f %f",&z2.x, &z2.y);
    }

    Alles anzeigen

    Aber bekomme den Fehler

    Der linke Teil von '.x' muss eine Struktur/Union sein
    Der linke Teil von '.y' muss eine Struktur/Union sein

    Ja ist in C. Den Imaginärteil und Realteil werde ich noch umbenennen. Hast recht.

  • 1
  • 2
  • 3

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English