Lernprogramm (Funktionen)

Schnelle objektorientierte, kompilierende Programmiersprache.
Lämpi
Beiträge: 57
Registriert: So Mär 23, 2014 4:46 pm

Re: Lernprogramm (Funktionen)

Beitrag von Lämpi » So Mai 04, 2014 5:47 pm

ich habs jetzt mal so probiert und es geht genauso nicht

Code: Alles auswählen

float get_user_input(int Winkelfunktion, int Winkel){
    float faktor;
    float wurzel;
       
    
    if(Winkelfunktion==1){
        printf("Was ist der Wert der Funktion cos(%i)\n",Winkel);
        scanf("%fsqrt(%f)",&faktor,&wurzel);
    } 
    
    else{
         printf("Was ist der Wert der Funktion sin(%i)\n",Winkel);
         scanf("%fsqrt(%f)",&faktor,&wurzel);
    }
    
       
    return(faktor*sqrt(wurzel));
}

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Lernprogramm (Funktionen)

Beitrag von Bebu » So Mai 04, 2014 5:51 pm

Sag mal, hast du dir den Link auf Scanf überhaupt angesehen? Da ist sogar ein Beispiel dabei. Schau dir das Beispiel an, dann wird alles klar.

Code: Alles auswählen

float Rückgabewert

scanf( "%f", Rückgabewert)

return Rückgabewert
Edit: Das löst das erste Problem. Mit dem Rückgabewert kannst du dann weiterrechnen, bevor du in per Return wieder zurückgibst.
Zuletzt geändert von Bebu am So Mai 04, 2014 5:58 pm, insgesamt 1-mal geändert.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Lernprogramm (Funktionen)

Beitrag von cloidnerux » So Mai 04, 2014 5:58 pm

ich habs jetzt mal so probiert und es geht genauso nicht
Was funktioniert nicht? Was erwartest du, was kommt heraus?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Lämpi
Beiträge: 57
Registriert: So Mär 23, 2014 4:46 pm

Re: Lernprogramm (Funktionen)

Beitrag von Lämpi » So Mai 04, 2014 6:01 pm

ja ich hab den Link angeschaut, mit scanf lass ich den Benutzer was eingeben diese Eingabe wird dann in meinem Fall in den Variablen faktor und wurzel gespeichert,und das geb ich dann mit return zurück,dann müsste es doch funktionieren.tut es aber nicht

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Lernprogramm (Funktionen)

Beitrag von cloidnerux » So Mai 04, 2014 6:05 pm

So, ich hab mal schnell deinen Code bei mir getestet:

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
#define _USE_MATH_DEFINES     //Anpassung an VS
#include <math.h>
#include <time.h>     //Anpassung an VS

#define ACCURACY 1e-4

float get_user_input(int Winkelfunktion, int Winkel){
    float faktor;
    float wurzel;
       
    int r;
    if(Winkelfunktion==1){
        printf("Was ist der Wert der Funktion cos(%i)\n",Winkel);
        r = scanf("%fsqrt(%f)",&faktor,&wurzel);
    } 
    
    else{
         printf("Was ist der Wert der Funktion sin(%i)\n",Winkel);
         r = scanf("%fsqrt(%f)",&faktor,&wurzel);
    }
    
    if(r == 1)             //Hier liegt der Hase im pfeffer
		return faktor;
    return(faktor*sqrt(wurzel));
}
        


int main() {
    double right;
    int correct;
    int angles []={0,30,45,60,90,180,270,360};

    srand(time(NULL));
    int is_cos = rand()%2;
    int angle = angles[rand()%8];        //Edit: %8 angefügt

    if (is_cos==1){
               right=cos(angle/180.*M_PI);     //Anpassung an VS
    } else {
               right=sin(angle/180.*M_PI);     //Anpassung an VS
    }
	printf("user input: %f, right: %f", get_user_input(is_cos,angle), right);    //DEBUG
   correct=fabs(get_user_input(is_cos,angle)/right-1)<=ACCURACY;
   printf("Ihre Antwort war %s!\n",correct ? "richtig" : "falsch");
   fflush(stdin);     //Anpassung an VS
   getchar();         //Anpassung an VS
   return 0;

}
Das Problem ist nicht, dass dein Code nicht Funktioniert, sondern dass Aufgrund der Eingabeart falsche Ergebnisse kommen. Wird in deinem Code kein

Code: Alles auswählen

0.5sqrt(1)
eingeben auf die Frage sin(30), so kommt da ein -inf zurück, weil die Variable wurzel nicht gesetzt ist.
Daher auch die Abfrage, wie viele Parameter eingeben wurden.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Lämpi
Beiträge: 57
Registriert: So Mär 23, 2014 4:46 pm

Re: Lernprogramm (Funktionen)

Beitrag von Lämpi » So Mai 04, 2014 6:18 pm

es ist immer noch nicht ganz korrekt,z.b sin(360) was ja 0 ist sagt er bei mir immer falsch

Lämpi
Beiträge: 57
Registriert: So Mär 23, 2014 4:46 pm

Re: Lernprogramm (Funktionen)

Beitrag von Lämpi » So Mai 04, 2014 6:43 pm

mit der Eingabe von 0 hat er Probleme

Lämpi
Beiträge: 57
Registriert: So Mär 23, 2014 4:46 pm

Re: Lernprogramm (Funktionen)

Beitrag von Lämpi » So Mai 04, 2014 7:06 pm

ich habs jetzt so,es funktioniert alles bis auf die Eingabe von 0,da sagt er immer falsch

Code: Alles auswählen

float get_user_input(int Winkelfunktion, int Winkel){
    float faktor;
    float wurzel;
    int r;
       
    
    if(Winkelfunktion==1){
        printf("Was ist der Wert der Funktion cos(%i)\n",Winkel);
        r=scanf("%f*sqrt(%f)",&faktor,&wurzel);
    } 
    
    else{
         printf("Was ist der Wert der Funktion sin(%i)\n",Winkel);
         r=scanf("%f*sqrt(%f)",&faktor,&wurzel);
    }
    
    if(r==1) return (faktor);
    else if(r==0) return (0);
    
    
       
   else return(faktor*sqrt(wurzel));
}
        

Lämpi
Beiträge: 57
Registriert: So Mär 23, 2014 4:46 pm

Re: Lernprogramm (Funktionen)

Beitrag von Lämpi » So Mai 04, 2014 7:30 pm

diese Zeile ist totaler Müll

correct=fabs(get_user_input(is_cos,angle)/right-1.)<=ACCURACY;

da kann wenn entweder right=0 ist oder die Benutzereingabe=0 ist niemal right herauskommen,so ein verfickte Scheiße und ich sitz schon eine Ewigkeit an diesem scheiß

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Lernprogramm (Funktionen)

Beitrag von cloidnerux » So Mai 04, 2014 8:03 pm

da kann wenn entweder right=0 ist oder die Benutzereingabe=0 ist niemal right herauskommen,so ein verfickte Scheiße und ich sitz schon eine Ewigkeit an diesem scheiß
Schön das du selber den Fehler gefunden hast.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten