C++.

  • #include<iostream>
    using namespace std;
    int main ()
    {
    float a;
    float b;
    cout << "Dette program vil regne potens" << endl << "Skriv tal A!" << endl;
    cin >> a;
    cout << "Skriv tal B!" << endl;
    cin >> b;
    cout << "Tallet er lig med " << !!!!! << endl;
    cin.get();
    cin.ignore();
    return 0;
    }


    Hvad gør jeg!


    Hvis man skriver 5 ved (a) og 5 ved (b).


    Vil jeg have at den skriver 3125(potens)men hvordan sørger jeg for at tal (b) ændrer hvor mange gange tal a skal ganges med hinanden.


    Jeg håber i forstår.


    -FredeK

  • et gæt vil være
    har dog ikke prøvet at copile eller lign


    Intel I5 2500k | Gigabyte Z68 | 16GB Kingston | Radeon 380 | 1 Samsung EVO850 512MB | Enermax Digifanless 550W
    27" (U2711) DELL | 24" (2408WFP) DELL | Ergotron LX Dual Side-by-Side

    Canon 5DM4 | 16-35mm 2.8L | 24-70mm 2,8L | 85mm 1.2L USM II | 70-200mm 2.8L IS
    Nogle Speedlites | PocketWizards

  • din include
    er at du henter den "fil" ind og finder alle funktioner "filen" indeholder, og de kan nu bruges som funktioner i dit nuværende scope.


    så math.h (math.c) inderholder altså funktionen pow(x,y) som du så kalder.


    Hvis det ikke er det du mener, så bed forklarer det du gerne vil vide.

    Intel I5 2500k | Gigabyte Z68 | 16GB Kingston | Radeon 380 | 1 Samsung EVO850 512MB | Enermax Digifanless 550W
    27" (U2711) DELL | 24" (2408WFP) DELL | Ergotron LX Dual Side-by-Side

    Canon 5DM4 | 16-35mm 2.8L | 24-70mm 2,8L | 85mm 1.2L USM II | 70-200mm 2.8L IS
    Nogle Speedlites | PocketWizards

  • Quote

    Oprindeligt indlæg af The Brain
    din include
    er at du henter den "fil" ind og finder alle funktioner "filen" indeholder, og de kan nu bruges som funktioner i dit nuværende scope.


    så math.h (math.c) inderholder altså funktionen pow(x,y) som du så kalder.


    Hvis det ikke er det du mener, så bed forklarer det du gerne vil vide.


    Nogenlunde men der må da være en forklaring på pow (a,b).
    Altså hvis jeg nu skulle bruge det til noget andet senere.


    Igen tak for hjælpen.


    -FredeK

  • Hvis du mener en nærmere forklaring af hvordan den beregner tingene så kan jeg ikke hjælpe dig lige nu... men en nærmere forklaring på hvordan pow anvendes findes her. Desuden vil jeg da lige sige at cplusplus.com er en god side til at se referencer for de forskellige funktioner mm. i C++.


    Det pow(a,b) gør er at den opløfter a i b, dvs. funtionen returnerer a^b. (Du kan dog ikke bruge a^b i C/C++ da denne anvendes til XOR funktionen.)


    et eksempel på hvordan du selv kunne implementerer en funktion for 'to the power of' for integer eksponenter kunne være som følger(Tager forbehold for at jeg har gjort alt forkert):


    Det er vel sådan i store træk hvordan man kunne lave en simpel power funktion? Har ikke lige tjekket om koden compiler eller om den giver de rigtige resultater... :O Dette var alt for meget var det ikke?


    EDIT: Skulle include cstdlib og ikke cmath.


  • Tak men jeg forstår ikke helt.


    Det eneste jeg kender i den kode er if, else if og else :O

  • Tænkte jeg nok, men pow funktionen fungerer på den måde at den gange variablen a med sig selv b gange.


    For nærmere gennemgang af det kode jeg skrev:


    Først erklærer vi den variable vi vil gemme resultat i sammen med en variabel til at styre vores for-loop(OK, er C++, så behøves ikke gøre det i starten af funktionen, anyway).


    Her efter tjekker vi om vi har 0 i en eller anden potens, dette er faktisk ikke klart defineret (hvis 0^b hvor b<0 så er det ikke defineret, 0^0 er bør faktisk give 1, mens 0^b hvor b>0 giver 0)


    Derefter tjekker vi om b == 0 og hvis dette er tilfældet retunere vi 1 efter som a^0==1.


    Her efter kommer vi til et for loop som vi kører igennem b gange, hvis b er negativt så skal vi bruge et udtryk og hvis b er positivt skal vi bruge et andet. Grunden til at jeg anvender abs(b)* til at styre hvornår loopet skal stoppe er at jeg, når jeg deler koden op i 2 tilfælde for b<0 og b>0, kan se bort fra fortegnet på b, og dermed gøre det lettere for mig selv at skrive koden.


    Hvis vi har det så b<0, så anvender vi at a^(-b) er det samme som at skrive 1/(a^b), dvs. at man dividere 1 med tallet a, b gange. Ellers ganger vi 1 med a, b gange.


    Hjalp dette?


    *abs returnerer den absolutte værdi af et tal, dvs den sætter fortegnet til +, læs her og her for yderligere beskrivelse


  • Forstår det ikke helt..


    Udover at pow ganger a med a b gange og at den ligger i "bilioteket" math.h


    Tak for hjælpen har lært hvad jeg har brug for.

  • Nu nævner du XOR i i din forklaring, så vidt jeg ved er det ASM ikke? hvis du kender noget til det, kender du så en side med gode tutorials til ASM.. jeg mangler noget stof, og det jeg har fundet er for avanceret.

  • Quote

    Oprindeligt indlæg af Alex
    Nu nævner du XOR i i din forklaring, så vidt jeg ved er det ASM ikke? hvis du kender noget til det, kender du så en side med gode tutorials til ASM.. jeg mangler noget stof, og det jeg har fundet er for avanceret.


    Ikke nødvendigvis ASM, C og C++ (og mange andre programmeringssprog går jeg ud fra) har som standard de almindelige bit-wise operatorer så som AND, OR, NOT og XOR, desuden er der også mulighed for at skifte bits hhv. til højre og venstre... For fuld oversigt over disse og deres anvendelse se her Men jeg kender desværre ikke noget/ret meget til ASM.

  • Hvad sker der for mit program?


    Hver gang jeg skriver et for højt tal går den amok.


    Hvordan får jeg den til at acceptere større tal?

  • Det troede jeg havde forklaret... hvis dine ints (hedder det det? kan sgu ik huske det) ikke er store nok til det antal bits du skal gemme virker det jo selvfølgelig ikke... en double dur vist kun til 2 bits (x,x) eller sådan noget, jeg ved ikke hvilken en der vil virke, men du kan jo prøve float som jeg viste dig sidste gang.

  • Intel I5 2500k | Gigabyte Z68 | 16GB Kingston | Radeon 380 | 1 Samsung EVO850 512MB | Enermax Digifanless 550W
    27" (U2711) DELL | 24" (2408WFP) DELL | Ergotron LX Dual Side-by-Side

    Canon 5DM4 | 16-35mm 2.8L | 24-70mm 2,8L | 85mm 1.2L USM II | 70-200mm 2.8L IS
    Nogle Speedlites | PocketWizards

  • Quote

    Oprindeligt indlæg af The Brain



    Hvis jeg forstår dig rigtigt er det nogen jeg kan bruge istedet for int og float..
    ved "long int" er 'pow' overloaded?
    Det samme ved unsigned short int.


    Long double virkede men stadig for lille.


    Man kunne i windows lommeregner så der må være en måde..


    Tak for opmærksomheden og hjælpen.


    -FredeK

  • prøv du at skrive long double istedet for int.


    Intel I5 2500k | Gigabyte Z68 | 16GB Kingston | Radeon 380 | 1 Samsung EVO850 512MB | Enermax Digifanless 550W
    27" (U2711) DELL | 24" (2408WFP) DELL | Ergotron LX Dual Side-by-Side

    Canon 5DM4 | 16-35mm 2.8L | 24-70mm 2,8L | 85mm 1.2L USM II | 70-200mm 2.8L IS
    Nogle Speedlites | PocketWizards

  • Ved godt det er en lidt gammel tråd at hive op i igen men er der nogen der kan hjælpe mig med at lave en form for lommeregner.
    Altså for eksempel hvor man skriver 2x2 og der så vil stå "2x2=4. som også kan andet end kun at gange altså plus minus dividering og måske andre funktioner.


    Eksempel:
    2+2[enter]
    2+2=4.


    -FredeK(Som er begyndt på c++ igen.)

  • Ved ikke lige hvor meget C++ du kan, men at skrive en lommeregner der kan simple ting som +, -, * og / kan lade sig gøre, dog bliver det mere compliceret hvis du vil have funktioner så som cos, sin, sqrt etc. det samme gælder brackets(parenteser), men det du skal kigge på er en algoritme der hedder "shunting yard":


    http://en.wikipedia.org/wiki/Shunting_yard_algorithm


    evt. kan du skrive en infix til postfix converter og så en postfix evaluator, dette er rimelig let hvis du kan finde ud af at bruge de stacks og queue klasser der findes i STL.


    Men kort sagt, du bør nok ikke rodde dig ud i det her med mindre du har fat i grundlæggende C++.


    Men hvis du er interesseret så har jeg faktisk en source kode til netop dette, jeg selv har skrevet, der virker med brackets, funktioner, de simple operatorer og "scientific notation".


  • Du har nok ret i at jeg skal træne mere i det grundlæggende. Det eneste jeg ved er det der står tidligere i tråden. Men troede ikke det var så avanceret igen. Men så gælder det bare om at træne lidt mere. :D Tak for opmærksomheden.


    Forstår ikk' noget af det du siger(endnu forhåentligt :D)


    -FredeK