Eine Zahl quadrieren ohne arithmetischen Operator



  • Furble Wurble schrieb:

    grinhilde schrieb:

    hier nimmst du aber wieder die operatoren welche nicht genutzt werden sollen.
    ich nutze einen compiler von der schule....aber der sagt immer noch error error error....

    Das sollen ja nur Beispielaufgaben sein. Wie würde denn 4+2 aussehen, wenn Du die Funktion calc() benutzt?

    Auf jeden Fall muss man auch dafür einen operator benutzen ... wenn auch nur als Parameter für calc.



  • AndreasBo schrieb:

    int result = calc (calc(e1, e2 ,+), calc(e1, e2, +), *);
    

    also würde ich int result= und dann mein rechenweg schreiben?

    nein, diese funktion war mit der aufgabe gegeben, gehört also zusammen.
    ich habe die aufgabe mit funktion einfach abgetippt.
    normalerweise ist es bei diesem lehrer immer so, dass die gegebenen funktionen komplett so übernommen werden und man nur ergänzen muss.

    mein problem ist:
    -wie flechte ich diese vorgabe ein.
    -wie kann ich das quadrat der summe bilden ohne einen arithmetischen operator.
    wenn man eine wurzel nehmen möchte gibt es die funktion sqrt()aber hier muss ich ein quadrat bilden nur wie?
    den tipp von andreasbo probiere ich gleich mal aus danke.



  • #include <stdio.h>
    
    int main (void) {
    
      int e1;
      int e2;
       scanf("%i", & e1);
     scanf("%i",& e2);  
    
     printf("%i,%i", e1, e2);
    
    int calc( unsigned int e1, unsigned int e2, char op)
    {
    switch (op)
    {
    case '-': return (e1-e2);
    case '*': return (e1*e2);
    case '/': return (e1/e2);
    Default:
    case '+': return (e1+e2);
    
    }
    } 
    
      return 0;
    }
    

    so wenn ich das so habe, wüde ich sagen das er sofort auf default: case '+' geht. und e1+e2 rechnet. wie kann ich mir mein ergebnis also e1+e2 ausgeben lassen also printf(). ist das ergebnis calc? benutzt er die ganze funktion überhaupt weil kein op definiert ist, müßte ich ihm noch sagen
    char op='+'? aber auch wenn ich das machen klappt es nicht.



  • grinhilde schrieb:

    so wenn ich das so habe, wüde ich sagen das er sofort auf default: case '+' geht. und e1+e2 rechnet. wie kann ich mir mein ergebnis also e1+e2 ausgeben lassen also printf(). ist das ergebnis calc? benutzt er die ganze funktion überhaupt weil kein op definiert ist, müßte ich ihm noch sagen char op='+'? aber auch wenn ich das machen klappt es nicht.

    Sei bitte so freundlich und benutz Groß- und Kleinschreibung. Auch musst Du nicht so schreiben, wie Du denkst, bzw. sprichst: Du kannst Dir ruhig ein wenig Mühe beim formulieren geben.

    In Deinem Code geht es genauso wirr zu - da ist die calc() Funktion innerhalb der main() Funktion. Das geht so nicht in C.
    Dein Problem ist gar nicht so sehr "Eine Zahl quadrieren ohne arithmetischen Operator", sondern eher, dass Du noch ganz am Anfang mit C stehst.
    Ganz dringend nochmal in die Unterlagen schauen!

    Z.B.:

    #include <stdio.h>
    
    /* Deklaration */
    int calc( unsigned int e1, unsigned int e2, char op);
    
    /* Definition */
    int main (void) {
      int e1;
      int e2;
      scanf("%i", & e1);
      scanf("%i",& e2);  
      int sum = calc(e1, e2, '+');
      printf("%i+%i=%i\n", e1, e2, sum);
    }
    
    /* Definition */
    int calc(unsigned int e1, unsigned int e2, char op)
    {
      switch (op)
        {
        case '-': return e1-e2;
        case '*': return e1*e2;
        case '/': return e1/e2;
        default:  /* fall through */
        case '+': return e1+e2;
        }
    }
    


  • Beachte bei dem Program von Furble Wurble die Zeile 12. Da wird die Funktion calc aufgerufen. Alleine durch die Definition passiert das nicht.
    Die einzige Funktion die automatisch aufgerufen wird, ist main (ja, auch das ist eine Funktion)

    Und auch Zeile 24. default wird komplett klein geschrieben



  • danke für den tipp.

    #include <stdio.h> 
    #include <math.h> 
    
    /* Deklaration */
    int calc( unsigned int e1, unsigned int e2, char op);
    
    /* Definition */
    int main (void) {
      int e1;
      int e2;
      scanf("%i", & e1);
      scanf("%i",& e2);  
      int sum = calc(e1, e2, '+');
      printf("%i+%i=%i\n", e1, e2, sum);
        int q;
    q=quad(sum);
      printf("%i",q);
    }
    
    /* Definition */
    int calc(unsigned int e1, unsigned int e2, char op)
    {
      switch (op)
        {
        case '-': return e1-e2;
        case '*': return e1*e2;
        case '/': return e1/e2;
        default:  
        case '+': return e1+e2;
        }
    
      return 0;
    }
    

    Wenn ich jetzt die funktion quad() nutzen möchte klappt es nicht.
    Warum?
    Die fehlermeldung ist:
    /tmp/ccQv1GTY.o: In function main': 1391029084.c:(.text+0x79): undefined reference toquad'
    collect2: ld returned 1 exit status



  • ha! es klappt!

    #include <stdio.h> 
    #include <math.h> 
    
    /* Deklaration */
    int calc( unsigned int e1, unsigned int e2, char op);
    
    /* Definition */
    int main (void) {
      int e1;
      int e2;
      scanf("%i", & e1);
      scanf("%i",& e2);  
      int sum = calc(e1, e2, '+');
      printf("%i+%i=%i\n", e1, e2, sum);
        double q;
    q= pow (sum,2);
      printf("%g",q);
    }
    
    /* Definition */
    int calc(unsigned int e1, unsigned int e2, char op)
    {
      switch (op)
        {
        case '-': return e1-e2;
        case '*': return e1*e2;
        case '/': return e1/e2;
        default:  
        case '+': return e1+e2;
        }
    
      return 0;
    }
    


  • Ich glaube, du solltest die Funktion calc zum Quadrieren benutzen.



  • Bashar schrieb:

    Ich glaube, du solltest die Funktion calc zum Quadrieren benutzen.

    in der Aufgabenstellung war:
    Programmes soll das Quadrat der Summe der Eingabezahlen sein. Diese Zahl soll das Programm berechnen, ohne dabei einen arithmetischen Operator zu benutzen!

    Drei fragen hätte ich wohl noch, die haben allerdings nicht mit der Aufgabe zu tuhen:

    1.) Welchen Wert hat die Variable k(int) nach Durchlauf dieser switch-Anweißung?
    switch(!5) {case 4: k=10; case5: k=11; break; k=12; default: k=0}?
    Zur Auswahl war: 10, 11, 0,12
    ICh würde sagen:10.

    2.) Für die Beschreibung des Prozess-Management-System eines Betriebssystems eignet sich ....
    Zur Auswahl war: ein Zustandsdiagramm, ein Synatxdiagramm, ein Struktogramm, ein Programmablaufplan
    ich würde sagen:Struktogramm

    3.) Wenn man die Aufgabe hätte:
    Schreiben Sie eine C-Funktion, die die Summe zweier "float"-Werte (Parameter der Funktion) berechnet und als "double"-Wert zurückgibt.
    Hinweis: Die Funktion darf keine Bildschirm-oder Datei- Ein-/Ausgaben enthalten!

    Wäre das dazu eine Lösung? Irgendwie ist mir das zu einfach, deshalb kann da was nicht richtig sein.

    #include <stdio.h>
    
    int main (void) {
      float zahl1 = 1;
      float zahl2 = 2;
      double summe ;
    
    summe = zahl1 +zahl2;
    
      return 0;
    }
    

    Liege ich damit richtig?


  • Mod

    grinhilde schrieb:

    Bashar schrieb:

    Ich glaube, du solltest die Funktion calc zum Quadrieren benutzen.

    in der Aufgabenstellung war:
    Programmes soll das Quadrat der Summe der Eingabezahlen sein. Diese Zahl soll das Programm berechnen, ohne dabei einen arithmetischen Operator zu benutzen!

    Eben!

    Drei fragen hätte ich wohl noch, die haben allerdings nicht mit der Aufgabe zu tuhen:

    1. falsch. Wie viel ist !5? Weißt du, was '!' bedeutet?
    2. kommt ganz drauf an, was dein Prof da für richtig hält. Daher kein Kommentar
    3. falsch. Lies die Aufgabe nochmal genau.



  • 1.) ! = nicht gleich
    ich dachte er vergleicht 5 ist ungleich 10 also hört er hier auf.
    möglich ist aber auch das er sofort auf k=0 springt, weil nichts gleich ist.

    3.) Dann verstehe ich die Aufgabe nicht.


  • Mod

    grinhilde schrieb:

    1.) ! = nicht gleich
    ich dachte er vergleicht 5 ist ungleich 10 also hört er hier auf.

    Erklär doch mal, wie switch funktioniert. Das scheinst du nicht verstanden zu haben.

    möglich ist aber auch das er sofort auf k=0 springt, weil nichts gleich ist.

    Wissen, nicht raten! Was ist !5 ? Oder besser: Wie viel ist !5 ? Das ist nämlich eine Zahl, die hat einen ganz bestimmten Wert.

    3.) Dann verstehe ich die Aufgabe nicht.

    Schreiben Sie eine C-Funktion, die die Summe zweier "float"-Werte (Parameter der Funktion) berechnet und als "double"-Wert zurückgibt.

    Nichts von dem hervor gehobenem hast du erfüllt. (Ja, technisch gesehen hast du eine Funktion geschrieben, aber dir ist tatsächlich entgangen, dass die Aufgabenstellung anders gemeint ist).



  • Langsam wird dieser Thread grotesk.



  • grinhilde schrieb:

    ha! es klappt!

    int sum = calc(e1, e2, '+');
      printf("%i+%i=%i\n", e1, e2, sum);
        double q;
    q= pow (sum,2);
      printf("%g",q);
    

    Nein das ist nicht das was Dein Lehrer erwartet. Du sollst das Quadrat ebenfalls mit calc berechnen, was Dir hier mehrfach gesagt wurde.

    ➡

    int sum = calc(e1, e2, '+');
      int q = calc(sum, sum, '*');
    


  • µ schrieb:

    grinhilde schrieb:

    ha! es klappt!

    int sum = calc(e1, e2, '+');
      printf("%i+%i=%i\n", e1, e2, sum);
        double q;
    q= pow (sum,2);
      printf("%g",q);
    

    Nein das ist nicht das was Dein Lehrer erwartet. Du sollst das Quadrat ebenfalls mit calc berechnen, was Dir hier mehrfach gesagt wurde.

    ➡

    int sum = calc(e1, e2, '+');
      int q = calc(sum, sum, '*');
    

    Hier bin ich anderer Meinung.
    Aber ich denke das, dass auslegungssache ist.



  • SeppJ schrieb:

    grinhilde schrieb:

    1.) ! = nicht gleich
    ich dachte er vergleicht 5 ist ungleich 10 also hört er hier auf.

    Erklär doch mal, wie switch funktioniert. Das scheinst du nicht verstanden zu haben.

    möglich ist aber auch das er sofort auf k=0 springt, weil nichts gleich ist.

    Wissen, nicht raten! Was ist !5 ? Oder besser: Wie viel ist !5 ? Das ist nämlich eine Zahl, die hat einen ganz bestimmten Wert.

    3.) Dann verstehe ich die Aufgabe nicht.

    Schreiben Sie eine C-Funktion, die die Summe zweier "float"-Werte (Parameter der Funktion) berechnet und als "double"-Wert zurückgibt.

    Nichts von dem hervor gehobenem hast du erfüllt. (Ja, technisch gesehen hast du eine Funktion geschrieben, aber dir ist tatsächlich entgangen, dass die Aufgabenstellung anders gemeint ist).

    ich glaube !5 hat den wert 0.



  • grinhilde schrieb:

    Hier bin ich anderer Meinung.
    Aber ich denke das, dass auslegungssache ist.

    Dein pow(x,2) erfüllt streng genommen die Aufgabenstellung, trotzdem ist es 100% nicht das was der Lehrer sehen will.

    Du verwendest calc für die Addition, nicht aber für das Quadrieren. Diese Unterscheidung gibt die Aufgabenstellung einfach nicht her.

    Letztendlich, tue was Du willst wenn Du es besser weißt als alle hier.



  • grinhilde schrieb:

    ich glaube !5 hat den wert 0.

    Warum glaubst du das?

    Wissen, nicht glauben!



  • DirkB schrieb:

    grinhilde schrieb:

    ich glaube !5 hat den wert 0.

    Warum glaubst du das?

    Wissen, nicht glauben!

    Himmel nochmal bestätige doch einfach, dass der Wert 0 stimmt.



  • µ schrieb:

    DirkB schrieb:

    grinhilde schrieb:

    ich glaube !5 hat den wert 0.

    Warum glaubst du das?

    Wissen, nicht glauben!

    Himmel nochmal bestätige doch einfach, dass der Wert 0 stimmt.

    Naja: nur zu sagen "0 stimmt" finde ich etwas billig.
    Die Frage ist ja eh schon grenzwertig.

    @grinhilde: Hast Du's denn mal ausprobiert? Ausserdem ein schönes Beispiel, wie wichtig richtige Formatierung ist.

    #include <stdio.h>
    
    int main(void){
      int k=-1;
      switch(!5) {
      case 4:
        k=10;
      case 5:
        k=11;
        break;
        k=12;
      default:
        k=0;
      }
      printf("%d\n", k);
    }
    

    Fangfrage: wie ist denn der Wert von k , wenn ich in Zeile 5
    a) switch(4) und
    b) switch(5) schreibe?
    Schau noch mal in Deine Unterlagen zur switch-Anweisung, wenn's nicht klar ist.


Anmelden zum Antworten