mit exponenten rechnen...aber wie?



  • hi,
    also ich will eine Umwandlung machen. Dazu soll ich zahlen eingeben die dann mit einer Basis (8) hoch n (anzahl der Zahlen) errechnet werden.
    Beispiel: ich gebe 345 ein dann soll mein Programm 3*8² + 4*8¹ + 5*8° rechnen.

    Aber wie bekomme ich das mit dem "hoch n" hin? weil mit ^ ist nix. geht ja nur unter c++. aber wie macht man sowas in c? kann mir da einer helfen bitte?

    Gruß Torsten

    PS....wenn ich die eingabe mit Return abschliesse ist das auch ein Zeichen, wie kann ich das verhindern,daß der mir das Return mit als Zeichen einliesst?





  • In C geht es genauso wie in C++ (und nein, ^ ist in C++ nicht "hoch" sondern XOR). Was du suchst ist pow()



  • scanf mit '%o' kann oktalzahlen einlesen.
    🙂



  • ok,danke pow hilft 🙂

    kann mir jemand noch mit dem Return helfen?



  • Wenn du die Werte mit scanf() einliest, werden Whitespaces (Leerzeichen, Enter etc) als Trennzeichen verwendet und üblicherweise überlesen. Also solltest du damit keine Probleme haben.

    (wenn doch, erklär mal etwas deutlicher, was nicht geht)



  • Torstenda schrieb:

    ok,danke pow hilft 🙂

    😕 'pow' für achterpotenzen? 😮



  • pale dog schrieb:

    Torstenda schrieb:

    ok,danke pow hilft 🙂

    😕 'pow' für achterpotenzen? 😮

    Ja, klar - das nennt man "mit Spatzen auf Kanonen schießen" 😃 (oder war's umgekehrt)

    @Torsten: Zur Eingabe von Oktalzahlen kannst du doch die Standardbibliothek verwenden (wie pale dog schon erwähnte) - scanf("%o",&var); liest eine Zahl ein und verarbeitet sie gleich weiter - mit dem Wert kannst du dann weiter arbeiten.



  • geht pow nicht mit 8 als Basis?

    genauer zu meinem Problem.....ich gebe zaheln ein 12345(rechne die um).....die werden umgewanderlt und ausgegeben....aber er gibt mir dann -38 aus...ja mit scanf lese ich die ein.

    Die eingegeben Zahlen sollen dann alle am Ende addiert werden....das Ergebniss soll dann weiter verarbeitet werden.



  • Torstenda schrieb:

    geht pow nicht mit 8 als Basis?

    Klar geht's, aber es ist ein wenig übertrieben 😃 (wie war das mit den Spatzen und Kanonen?) Wesentlich schneller schaffst du das mit Bit-Arithmetik:

    pow(8,n) == 1<<(3*n);
    

    (Ok, den Trick muß man auch erst mal kennen 🕶)

    genauer zu meinem Problem.....ich gebe zaheln ein 12345(rechne die um).....die werden umgewanderlt und ausgegeben....aber er gibt mir dann -38 aus...ja mit scanf lese ich die ein.

    Zeig doch mal etwas Code.
    (btw, bist du sicher, daß du nicht über den Zahlenbereich von int überschritten hast?)



  • Sorry hzab etwas gebraucht...ich stell einfach mal den kompletten code rein. Hoffe es ist nocht so unübersichtlich......hab einiges an Kommentare geschrieben....ide letzte Funktion ist nur zum testen..auch die Ausgaben!!!Nur zum testen!!bitte habt Nachsicht mit mir...ich kann net so gut Programmieren....

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #define STRINGLAENGE 10
    
    char mystring [STRINGLAENGE];
    int zahl;
    int  main (void)
    {
       int wandeln,a,t,zeichen;
       unsigned int wandlung(int);                               //Prototyp
       unsigned short int atobin (char str[]);
       fgets (mystring, STRINGLAENGE, stdin);
    
       printf("Mein String ist: %s\n",mystring);
       a=wandlung(wandeln);                                         //Funktionsaufruf von wandlung
       printf("Das umgewandelte Zeichen ist :%d\n\n\n",a);
    
       printf(".............................................\n");  
       printf("Bitte Zahl eingeben: ");                            //Nur fuer Testzwecke
       scanf("%d",&zahl);
       t=rechnung(zeichen);
       printf("TEST Zahl 1  : %d\n",zahl);
       printf("TEST Zahl 1_1: %d\n",t);
       system("Pause");
       return ;
    
    }
    
    unsigned int wandlung (int wandeln)                         //Umwandelfuntkion
    {
       int i,n=0;                                              //soll laenge zaehlen
      int summe,wert,neuer_wert;
    
       for (i=0;mystring[i]!='\0'; i++)                         //Zaehlt durchlaufe und soll dann das Zeichen umwandeln
        {
    
          wert=(mystring[i]-48);
          printf("TEST wert von mystring: %d\n",wert);
          neuer_wert=wert;                                        //Wert bekommt das erste umgerechnete Zeichen/Zahl
          printf("TEST Wandlung1 neuer_wert:%d\n",neuer_wert);
                                                               //Wert wird an neuer_wert uebergeben
    
          summe = wert + neuer_wert;                           //wert und neuer_wert werden addiert
    
          wandeln=summe;
    
          // summe=i;                                            //Test uebergibt einfach nur die Anzahl der Zeichen
        }
    
    return summe;
    }
    
    int rechnung (int zeichen)
    {
    
      printf("TEST Zahl 2(aus Funktion): %d\n",zahl);
      zeichen = zahl*sqr(8);
      printf("TEST Zeichen             : %d\n",zeichen);
    
     return zeichen;
    
    }
    


  • Was ist genau das Problem?
    Suchst du pow

    Wer nicht mit mir lacht, der lacht über mich.



  • also ich will in der Testfunktion int rechnung testweise einfach nur das mit dem 8^n machen und diese Funtkion dan in meine int wandlung einfügen...jedoch so das ich mit einer schleife dann das x*8^n ausrechnen zu lassen. Das ergerbniss mir dann in meine Hauptfunktion geben lasse und dann mit printf ausgebe.


Anmelden zum Antworten