[C++] Worteltrekken zonder sqrt()

Pagina: 1
Acties:
  • 833 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

Anoniem: 144605

Topicstarter
ik moet voor school een reknmachine maken waarmee je kan

• Optellen
• Aftrekken
• Vermenigvuldigen
• Delen

Deze 4 zijn niet zow moeilijk.

aleen nu is het probleem bij deze functie. Die er nu inzit heb ik ergens gevonden allen deze werkt niet :( jammer genoeg (regel 62 t/m 83)

• Worteltrekken ( het gebruik van de functie sqrt is
niet toegestaan )

Weet iemand hou ik deze kan oplossen zonder de functie sqrt


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <math.h>

void optellen()
{
float getal1, getal2, antwoord;

cout << "Geef het eerste getal: ";
cin >> getal1;

cout << "Geef het tweede getal: ";
cin >> getal2;

cout << endl;

antwoord = getal1 + getal2;


cout << "De uitkomst is: " << getal1 <<" + "<< getal2 <<" = " << antwoord;
}

void aftrekken()
{
float getal1, getal2, antwoord;

cout << "Geef het eerste getal: ";
cin >> getal1;

cout << "Geef het tweede getal: ";
cin >> getal2;

cout << endl;

antwoord = getal1 - getal2;


cout << "De uitkomst is: " << getal1 <<" - "<< getal2 <<" = "<< antwoord;
}

void delen()

{
float getal1, getal2, antwoord;

cout << "Geef het eerste getal: ";
cin >> getal1;

cout << "Geef het tweede getal: ";
cin >> getal2;

cout << endl;

antwoord = getal1 / getal2;


cout << "De uitkomst is: " << getal1 <<" / "<< getal2 <<" = "<< antwoord;

}

void wortel()

{
float wortel, getal;

cout << "geef het getal waar u de wortel van wilt trekken: ";
cin >> getal;

cout << endl;

{

for ( wortel=1; wortel<=getal; wortel++)
{

if (wortel*wortel==getal)
{

cout << "De uitkomst is: wortel(" << getal <<")= " << wortel;
}
}
}
}

void main()
{

int toets;

clrscr();

cout << " KEUZE MENU " << endl << endl;
cout << "(1) Optellen "<< endl;
cout << "(2) Aftrekken "<< endl;
cout << "(3) Delen "<< endl;
cout << "(4) Wortel trekken"<< endl << endl;


cout << "Maak u keuze: ";
cin >> toets;
cout << endl;

while ( toets < 1 || toets > 4)
    {
                    gotoxy (30,9);
        cout << "!!! Ongeldige invoer !!!"<< endl<<endl;
                    gotoxy (34,11);
                    cout <<" Maak uw keuze: "; clreol(); cin  >> toets; clreol(); cout <<"" << endl;
    }

if ( toets == 1 )

{
optellen();
}

if ( toets == 2 )

{
aftrekken();
}

if ( toets == 3 )

{
delen();
}

if ( toets == 4 )

{
wortel();
}




getch();

}

Acties:
  • 0 Henk 'm!

  • TheBlasphemer
  • Registratie: September 2004
  • Laatst online: 21-06 12:09
1 google search:
http://www.homeschoolmath...square-root-algorithm.php
([google=calculate square root algorithm"])

[img=http://www.web2messenger.com/smallstatus/w2m/theblasp.png]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Of gewoon machtsverheffen met 0.5. De pow() functie dus.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • TheBlasphemer
  • Registratie: September 2004
  • Laatst online: 21-06 12:09
.oisyn schreef op donderdag 02 maart 2006 @ 12:27:
Of gewoon machtsverheffen met 0.5. De pow() functie dus.
Titel: "zonder voorgedefinieerde functie" :)

Anyway, nog makkelijker overzicht van methods:
http://en.wikipedia.org/w...of_computing_square_roots
Pak bijv die babylonian method, lekker simpel ;)

[img=http://www.web2messenger.com/smallstatus/w2m/theblasp.png]


Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 08-07 16:40
Wat je kunt doen is gokken ;)

je hebt een input, zeg a, en je functie begint met de uitkomst 1.

Nu heb je al een routine die kan vermenigvuldigen, dus doe je een check. 1*1 = 1, en dit vergelijk je met de originele input. Is het origineel kleiner, dan is je 'berekende' waarde blijkbaar te groot, is het origineel groter, is je berekende waarde blijkbaar te klein. Dus doe je een nieuwe gok (delen door 2, vermenigvuldigen met 2 bijvoorbeeld).

dit doe je in een loopje, totdat je nauwkeurigheid goed genoeg is (een waarde die je zelf kunt instellen).

Ik geloof dat dit de methode van Newton heet.

(oh ja! die link van hierboven legt het ook uit ;) je past de gok dus aan a.d.h. de afgeleide :))

[ Voor 9% gewijzigd door WVL_KsZeN op 02-03-2006 12:32 ]

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

TheBlasphemer schreef op donderdag 02 maart 2006 @ 12:30:
[...]

Titel: "zonder voorgedefinieerde functie" :)
Die titel heb ikzelf (foutief) gewijzigd ;)

Overigens heb ik Newton's method weleens gebruikt om dmv templates een compile-time square root uit te rekenen: http://www.oisyn.nl/articles.php/9

[ Voor 27% gewijzigd door .oisyn op 02-03-2006 12:38 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • TheBlasphemer
  • Registratie: September 2004
  • Laatst online: 21-06 12:09
.oisyn schreef op donderdag 02 maart 2006 @ 12:36:
[...]

Die titel heb ikzelf (foutief) gewijzigd ;)
Denk eerlijk gezegd dat de titel wel goed was. Als het een project is, en sqrt mag niet, dan denk ik dan pow ook niet mag.
Maarja, dat moet de TS dan zelf maar even verduidelijken :)

[img=http://www.web2messenger.com/smallstatus/w2m/theblasp.png]


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 08-07 16:22
Nou, lang geleden heb ik dat op school ook eens moeten doen. Er bestaat wel ergens een algoritme die een wortel trekt, door enkel de basis-bewerkingen te gebruiken.


Alleen, ik vraag me af waarom je hier je hele code post. Die code is gewoon niet relevant mbt jouw probleem.

Script requests zijn hier ook niet toegelaten, maar ik denk dat je met volgende link wel verder kunt:
klikhmm, ok, die link is al gegeven.

[ Voor 5% gewijzigd door whoami op 02-03-2006 13:01 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Digital-DNA
  • Registratie: Juli 2000
  • Laatst online: 04-07 17:14

Digital-DNA

Gedigitaliseerd tot op het bot

zoiets had ik laatst ook gemaakt!, ik zit nou niet thuis anders kon ik wel m'n WillieWorteltrekker laten zien :P

daarin zit ook een log waarin je kunt zien wat ie doet, is wel grappig, misschien post ik 'm vanavond wel even als je het leuk lijkt

www.nintendocasemods.com


Acties:
  • 0 Henk 'm!

  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04 20:48
Zelf wortel trekken?
Dan moet ik gelijk (met frisse tegenzin :X ) denken aan Taylor-reeksen: heel kort door de bocht beschrijft die theorie dat je wortels, sinussen, en nog wat andere complexe functies kunt 'nabootsen' met een reeks van bewerkingen waarin alleen de 4 basisbewerkingen (-, +, * en /) gebruikt worden.

Maar ik zeg niet dat het makkelijk is te implementeren... succes :Y)

EDIT: Tja, op wikipedia is zelfs een heel artikel geschreven over dit probleem...

[ Voor 20% gewijzigd door kasper_vk op 02-03-2006 13:32 ]

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'


Acties:
  • 0 Henk 'm!

Anoniem: 144605

Topicstarter
@TheBlasphemer

In de opdracht staat aleen dat de functie sqrt niet mag worden gebruikt de rest mag dus wel :) aleen over de functie pow weet ik eigelijk nog niets :(

@ Digital-DNA

Ja dat mag wel :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 04-07 15:03

NMe

Quia Ego Sic Dico.

Anoniem: 144605 schreef op donderdag 02 maart 2006 @ 13:45:
@TheBlasphemer

In de opdracht staat aleen dat de functie sqrt niet mag worden gebruikt de rest mag dus wel :) aleen over de functie pow weet ik eigelijk nog niets :(
Wat let je om het op te zoeken? Maar het lijkt me dat ze met die opdracht bedoelen dat je er zelf over moet nadenken, en door simpelweg te gaan machtsverheffen doe je dat niet. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • JeromeB
  • Registratie: September 2003
  • Laatst online: 06-07 13:41

JeromeB

woei

Op de site van Borland stond een keer een stuk over C++ optimization.

Als je met integers werkt dan kun je op de volgende manier snel vierkantswortels bepalen:
9
9-1 = 8 < stap 1
8-3 = 5 < stap 2
5-5 = 0 < stap 3

dus de wortel uit 9 is 3

[ Voor 5% gewijzigd door JeromeB op 02-03-2006 14:44 ]

PC load letter? What the fuck does that mean?


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Sorry, ik mis het stukje tussen een paar rekensommen en de "dus" :?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Beetje flauw, in principe kijk je daar gewoon wanneer x2 gelijk is aan het getal waar je de wortel van wilt berekenen, door x=1 te nemen en dan in een loopje x steeds met 1 te verhogen. Door middel van forward differencing heb je de vermenigvuldiging niet nodig omdat je steeds het verschil tussen (x+1)2 en x2 bij de huidige kwadraat optelt. En (x+1)2 - x2 = 2x+1, ergo, elke stap is 2x+1 hoger dan de vorige. En dat is dus resp. 1, 3, 5, 7, 9, ...

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 27-05 16:00

curry684

left part of the evil twins

kenneth schreef op donderdag 02 maart 2006 @ 14:51:
[...]

Sorry, ik mis het stukje tussen een paar rekensommen en de "dus" :?
Hij trekt oplopende oneven getallen af van het origineel, en het aantal stappen dat je daarmee kunt uitvoeren tot je negatief uitkomt is de gezochte waarde. Hij had het wat beter kunnen uitleggen ja ;)

Op Wikipedia staat ie helemaal goed uitgelegd :)

[ Voor 19% gewijzigd door curry684 op 02-03-2006 14:57 ]

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • WhizzCat
  • Registratie: November 2001
  • Laatst online: 15-05-2024

WhizzCat

www.lichtsignaal.nl

kenneth schreef op donderdag 02 maart 2006 @ 14:51:
[...]

Sorry, ik mis het stukje tussen een paar rekensommen en de "dus" :?
Heel simpel eigenlijk idd :D

A - 1 = C
C - 3 = D
etc.

Tot dat je X - X = 0 krijgt en de voorlaatste uitkomst is de wortel :)

-edit-

spuit elf :+

[ Voor 6% gewijzigd door WhizzCat op 02-03-2006 15:03 ]

Gezocht: netwerkbeheerder
Als je het niet aan een 6-jarige kan uitleggen, snap je er zelf ook niks van! - A. Einstein


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

WhizzCat: dat is idd wat JeromeB zegt maar dan anders opgeschreven, maar dat verklaart nog altijd niet waarom dat zo is ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • WhizzCat
  • Registratie: November 2001
  • Laatst online: 15-05-2024

WhizzCat

www.lichtsignaal.nl

.oisyn schreef op donderdag 02 maart 2006 @ 15:05:
WhizzCat: dat is idd wat JeromeB zegt maar dan anders opgeschreven, maar dat verklaart nog altijd niet waarom dat zo is ;)
Mja, het is al eeuwen geleden dat ik zulke wisknudde gedaan heb, maar in het geval van een stuk programmeer werk is dit ook al redelijk overzichtelijk denk ik, maar je hebt gelijkt, het verklaart niets :)

Gezocht: netwerkbeheerder
Als je het niet aan een 6-jarige kan uitleggen, snap je er zelf ook niks van! - A. Einstein


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 27-05 16:00

curry684

left part of the evil twins

WhizzCat schreef op donderdag 02 maart 2006 @ 15:02:
[...]

Tot dat je X - X = 0 krijgt en de voorlaatste uitkomst is de wortel :)
Nee het gaat om het aantal stappen :)

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Digital-DNA
  • Registratie: Juli 2000
  • Laatst online: 04-07 17:14

Digital-DNA

Gedigitaliseerd tot op het bot

zie hier:
Willie's Worteltrekker!

Gemaakt voor school, de werking is uitgelegd in De Opdracht.

www.nintendocasemods.com


Acties:
  • 0 Henk 'm!

  • TheBlasphemer
  • Registratie: September 2004
  • Laatst online: 21-06 12:09
Anoniem: 144605 schreef op donderdag 02 maart 2006 @ 13:45:
In de opdracht staat aleen dat de functie sqrt niet mag worden gebruikt de rest mag dus wel :) aleen over de functie pow weet ik eigelijk nog niets :(
Nouja, je weet dat de xde wortel van een getal gelijk is aan getal tot de macht 1/x.
Dus in dit geval is de vierkantswortel gelijk aan getal tot de macht een half.
code:
1
pow(getal,0.5);

Zou het dus moeten doen. In mijn ogen is dat valsspelen, maar als jij zo diep wilt zinken en niet zelf even een algoritmetje kan schrijven kun je die gewoon gebruiken :P

[img=http://www.web2messenger.com/smallstatus/w2m/theblasp.png]

Pagina: 1