Ik weet alles over digitale toegankelijkheid, of ik weet wie het wel weet.
Hint: Je hebt wel een hoop machten van 2 nodig, maar niet in een willekeurige volgorde. Sterker nog je hebt ze nodig in de volgorde: 1,2,4,8,16,32,... Oftewel, je kunt ze allemaal krijgen door met 1 te beginnen en dan met 2 te vermenigvuldigen als je een nieuwe nodig hebt.
He who knows only his own side of the case knows little of that.
Daar kan je wel een formule van maken, met een variabele grondtal en en een variabele exponent.
1
2
3
4
5
6
7
| Function Pow(Base, Exponent: integer): integer;
Begin
if Exponent = 0 then
result := 1
else
result := Base * Pow(Base, Exponent - 1);
End; |
1 van de duizend die je met google kunt vinden
Bij deze dus een leuker vraagstuk: bedenk een algoritme met een lagere complexiteit maar dezelfde werking.
En de volgende keer wat beter zoeken en/of zelf nadenken, alsjeblieft!
PowersTable := [1, 2, 4, .... , 4294967296];
For F = 1 TO 32 DO
shiftr(BinNumber)
IF carry = 1 THEN DecNumber := DecNumber + PowersTable[F]
NEXT F
Verwijderd
Voor bitwise operations is shift left en shift right idd. de juiste oplossing:Op vrijdag 19 april 2002 00:29 schreef Yarvieh het volgende:
tip pascal kent wel shl en shr volgens mij?
1
2
3
4
5
| 0001 shl 1=0010 (2) 0010 shl 1=0100 (4) 0001 shl 3=1000 (8) 1101 shr 1=0110 (6) |
In Delphi heb ik even wat geprobeerd, misschien moet het in Turbo Pascal iets anders maar het gaat om het idee.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| type
TBitArray=array[1..32] of Boolean;
function DWORDToBits(const Value: DWORD): TBitArray;
var
I: DWORD;
begin
for I:=High(Result) downto Low(Result) do
Result[I]:=(Value and (1 shl (High(Result)-I)))<>0;
end;
function BitsToDWORD(const Value: TBitArray): DWORD;
var
I: DWORD;
begin
Result:=0;
for I:=High(Value) downto Low(Result) do
Result:=(Result or (DWORD(Value[I]) shl (High(Value)-I)));
end; |
Iedereen begint gelijk met shifts... Maar dat is natuurlijk niet de bedoeling.. Dat werkt alleen bij machten van 2Op vrijdag 19 april 2002 01:23 schreef Soultaker het volgende:
Bij deze dus een leuker vraagstuk: bedenk een algoritme met een lagere complexiteit maar dezelfde werking.
Hier een algoritme dat niet O(n) maar O(log n) is (met n als exponent)
psuedo voor an n is een integer en deling is een gehele deling die naar beneden afrond.
1
2
3
4
5
6
7
8
9
10
11
12
| functie pow(a,n) {
if n==1 {
return a;
} else {
b=pow(a,n/2);
if even(n) {
return b*b;
} else {
return b*b*a;
}
}
} |
typefouten voorbehouden
of mocht ik niet meedoen Soultaker
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Op vrijdag 19 april 2002 11:10 schreef Janoz een erg lelijke implementatie van een erg bekend algoritme:
Ik had beter van jouw verwacht Janoz, NOFI.
(Recursie? Voor een simpele machtsverheffing??? PE-LEASE!)
He who knows only his own side of the case knows little of that.
Verwijderd
Het ging over omzetting van binair-decimaal, dus heb je alleen machten van 2 nodig.Op vrijdag 19 april 2002 11:10 schreef Janoz het volgende:
[..]
Iedereen begint gelijk met shifts... Maar dat is natuurlijk niet de bedoeling.. Dat werkt alleen bij machten van 2
[...]
Ach, ik heb 'm in 5 sec neergeplant, en hij is efficienter dan de eerste genoemdeOp vrijdag 19 april 2002 11:18 schreef RickN het volgende:
[..]
Ik had beter van jouw verwacht Janoz, NOFI.
(Recursie? Voor een simpele machtsverheffing??? PE-LEASE!)
Verder ga ik in op de vraag van Soultaker en niet van de topicstarter.. Vandaar dat deze ook met andere grondtallen werkt
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Een wiskundig bewijs of tenminste enige uitleg zou natuurlijk ook leuk zijn, misschien leert er dan iemand nog wat van deze topic.
U vraagt wij draaien:Op vrijdag 19 april 2002 15:53 schreef Soultaker het volgende:
[..]
Een wiskundig bewijs of tenminste enige uitleg zou natuurlijk ook leuk zijn, misschien leert er dan iemand nog wat van deze topic.
Introduceer een functie G met:
G.x.y = xy
Nu geldt:
G.x.0
={wiskunde}
1
G.x.y /\ y mod 2 = 0
={definitie G}
xy /\ y mod 2 = 0
={wiskunde}
x2(y div 2)
={wiskunde}
(x2)y div 2
={definitie G}
G.x2.(y div 2)
G.x.y /\ y mod 2 = 1
={definitie G}
xy /\ y mod 2 = 1
={wiskunde}
x1+y-1
={wiskunde}
x1 * xy-1
={wiskunde}
x * xy-1
={definitie G}
x * G.x.y-1
Een staart invariant voor G:
P0: r * G.x.y = G.A.B
Met de recurente betrekking voor G vinden we:
P0 /\ y>0 /\ y mod 2 = 0 => P0(x,y:=x2,y div 2)
en
P0 /\ y>0 /\ y mod 2 = 1 => P0(r,x:=r*x,y-1)
Dit alles resulteerd in:
1
2
3
4
5
6
7
8
9
10
11
| |[var x,y: int {A, B >= 0}
r, x, y := 1, A, B;
{P0 /\ y>=0}
do y <> 0
-> if y mod 2 = 0 -> x, y := x*x, y div 2
[] y mod 2 = 1 -> r, y := r*x, y-1
fi
od
{P0 /\ y=0 dus r = A^B
]|
{r = A^B} |
He who knows only his own side of the case knows little of that.
ZO ingewikkeld had ik 't zelf niet kunnen opschrijven. (En wat een creatieve /\ symbolen.)Op vrijdag 19 april 2002 17:26 schreef RickN het volgende:
U vraagt wij draaien:
Moet dat pseudocode voorstellen? Of is dit een bestaande vage programmeertaal (en welke dan wel)?Dit alles resulteerd in:
code:
1 2 3 4 5 6 7 8 9 10 11|[var x,y: int {A, B >= 0} r, x, y := 1, A, B; {P0 /\ y>=0} do y <> 0 -> if y mod 2 = 0 -> x, y := x*x, y div 2 [] y mod 2 = 1 -> r, y := r*x, y-1 fi od {r*x^y = A^B /\ y=0 dus r = A^B [| {r = A^B}
Mwa, niet zo ingewikkeld hoor, tis ff wennen.Op vrijdag 19 april 2002 17:34 schreef Soultaker het volgende:
[..]
ZO ingewikkeld had ik 't zelf niet kunnen opschrijven. (En wat een creatieve /\ symbolen.)
[..]
GCL dus, Guarded Command Language. Niet compileerbaar ofzo, maar wel met een zeer duidelijk vastgelegde semantiek.Moet dat pseudocode voorstellen? Of is dit een bestaande vage programmeertaal (en welke dan wel)?
He who knows only his own side of the case knows little of that.
Verwijderd
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
| program binairgelul (input, output);
const
MAX = 30;
type
tabeltype = array[1..MAX] of integer;
var
som : integer;
kar : integer;
Procedure getaltobinair;
var
getal : integer;
teller : integer;
teller2 : integer;
temp : integer;
bigetal : boolean;
nummer : char;
begin
write ('Geef een getal: ');
read (nummer);
getal := ord(nummer) - ord('0');
writeln;
bigetal := false;
write ('Het getal ', getal,' is in binaire getallen dit: ');
for teller := 1 to MAX do
begin
temp := 1;
for teller2 := 1 to (MAX - teller) do
temp := temp * 2;
if getal div temp = 1 then
begin
write ('1');
getal := getal mod temp;
bigetal := true;
end
else
begin
if bigetal = true then
write ('0');
getal := getal mod temp;
end
end;
writeln;
readln;
end;
procedure binairtogetal (var psom : integer);
var
tabel : tabeltype;
nummer : char;
n : integer;
teller : integer;
teller2 : integer;
temp : integer;
begin
writeln ('geef nu een binaire code tussen elk getal een spatie');
n := 0;
while not eoln and (n < MAX) do
begin
read(nummer);
n := n + 1;
tabel[n] := ord(nummer) - ord('0');
end;
for teller := 1 to n do
begin
temp := 1;
for teller2 := 1 to (n - teller) do
temp := temp * 2;
if tabel[teller] = 1 then
psom := psom + temp
end;
writeln;
writeln('Het decimale getal is: ',psom)
end;
begin {hoofdprogramma}
writeln ('maak een keuze uit de volgende mogenlijkheden: ');
writeln;
writeln ('1. Binair to Decimaal.');
writeln ('2. Decimaal to Binair.');
writeln;
write ('Geef nu je keuze... ');
readln(kar);
som := 0;
if kar = 1 then
getaltobinair ;
if kar = 2 then
binairtogetal (som)
else
writeln ('Er is een ongeldige waarde ingevoerd.')
end. |
wat bedoel je nou met exp?Op vrijdag 19 april 2002 00:58 schreef Ublis het volgende:
A^B = exp(A*ln()
Beter opletten bij wiskunde.
Steun Elkaar, Kopieer Nederlands Waar!
Verwijderd
Op vrijdag 19 april 2002 19:52 schreef RickN het volgende:
GCL dus, Guarded Command Language. Niet compileerbaar ofzo, maar wel met een zeer duidelijk vastgelegde semantiek.
Dat was echt genieten, net als alle vakken die erop voortborduurde. Hoogerwoord is GE-WEL-DIG.Op zaterdag 20 april 2002 00:33 schreef Hieronymus het volgende:
[..]
Een TU/e student, herken je onmiddellijk... Kan me de eerste jaars colleges Prog.1 van Hoogerwoord nog wel herinneren.
En ik meen het ook nog.
He who knows only his own side of the case knows little of that.
Verwijderd
Nog een half jaartje, en dan mag ik hopelijk afstuderen...
Pure theoretici jaOp zaterdag 20 april 2002 00:33 schreef Hieronymus het volgende:
Een TU/e student, herken je onmiddellijk...
"Logica brengt je van A naar B, verbeelding brengt je overal." - Albert Einstein
Verwijderd
Daar hebben we toch HBO studenten voorOp zaterdag 20 april 2002 01:31 schreef Exirion het volgende:
Pure theoretici jaEen collega van me komt ook van de TUE en beaamt het zelf
Hij kan het ook moeilijk ontkennen met de zeer matige technische- en praktijkervaring die hij heeft
Dat klinkt net of het 'voorwerk' wat TU-ers doen superkewl is en 't programmeren 't saaie nawerk is! Maar 't programmeren is toch juist veel leuker werk?Op zaterdag 20 april 2002 01:33 schreef Hieronymus het volgende:
[..]
Daar hebben we toch HBO studenten voorAlthans dat vertellen ze je altijd op de TU/e
Op de TU/e kunnen ze je nog meer vertellen, maar het is wel een technische universiteitHieronymus: Daar hebben we toch HBO studenten voorAlthans dat vertellen ze je altijd op de TU/e
Verwijderd
Valt wel mee hoor, echt superkewl is het neit, maar zeker wel nuttig om te hebben gehadOp zaterdag 20 april 2002 02:38 schreef GerbenW het volgende:
Dat klinkt net of het 'voorwerk' wat TU-ers doen superkewl is en 't programmeren 't saaie nawerk is! Maar 't programmeren is toch juist veel leuker werk?
de e-macht.Op zaterdag 20 april 2002 00:09 schreef Skinkie het volgende:
[..]
wat bedoel je nou met exp?
WatHoorJeWaar · Asobakken
Eerdere projecten: Leading Courses · Brandstof-zoeker.nl · Voertuig-zoeker.nl
Uiteraard zijn Feijen en van Gasteren ook geweldig. Heb je hun nieuwe boek al gelezen? "On a method of multiprogramming" HEEEEEEEEERLIJK.Op zaterdag 20 april 2002 01:28 schreef Hieronymus het volgende:
Dan vind je Feijen en v. Gasteren vast ook geweldig(De Dijkstra-kloontjes
)
Nog een half jaartje, en dan mag ik hopelijk afstuderen...
BTW, wat specialiseer je?
Daar ben ik het absoluut niet mee eens. Relatief weinig praktijk ervaring ja, maar dat heb je op elke universiteit. En technische kennis...praat je dan over programmeer taaltjes leren? Dat is toch volkomen irrelevant, als je kunt programmeren kun je het in elke taal, het is dan nog gewoon een kwestie van de syntax leren. Ze gaan op de TU/e soms wat te ver met theorie (ie berekeningsmodellen en processalgebra voor de kenners) maar al met al ga je niet naar de universiteit voor een Java cursus. In 4 jaar TU/e heb ik geen enkele cursus in een specifieke programmeertaal gehad, hooguit een sprinkeltje pascal. Ik zou het niet anders hebben gewild. Door opdrachten en wat bijbaantjes spreek ik nu een aardig woordje Delphi en C++, daarnaast heb ik geroken aan MPI, Java en Haskell. SQL spreek ik beter dan de meeste mensen hier en ik dank de goden nog elke dag dat ik niet ben vervuilt met zaken als VB, Perl, HTML, PHP, ASP and what have you. Mijn abstractie vermogen is wel goed ontwikkeld en met mijn algoritmische kennis zit het helemaal wel goed. Kortom, smaken verschillen natuurlijk, maar ik ben tevreden over de TU/e, als had het best wat moeilijker mogen zijn.Op zaterdag 20 april 2002 01:31 schreef Exirion het volgende:
[..]
Pure theoretici jaEen collega van me komt ook van de TUE en beaamt het zelf
Hij kan het ook moeilijk ontkennen met de zeer matige technische- en praktijkervaring die hij heeft
[edit]Mag ik overigens vragen waar je zelf studeert? Uit je profiel leid ik af dat je in Amsterdam studeert. Daar heb ik nou op en aanmerkingen op.... Ik snap niet waarom iemand in godsnaam een technische studie op een niet technische universiteit gaat doen?
He who knows only his own side of the case knows little of that.
Verwijderd
Specialisatie voor mij wordt Informatie Systemen.Op zaterdag 20 april 2002 10:48 schreef RickN het volgende:
Uiteraard zijn Feijen en van Gasteren ook geweldig. Heb je hun nieuwe boek al gelezen? "On a method of multiprogramming" HEEEEEEEEERLIJK.
BTW, wat specialiseer je?
..
Ze gaan op de TU/e soms wat te ver met theorie (ie berekeningsmodellen en processalgebra voor de kenners)
Het nieuwe boek van F&vG heb ik niet gelezen nee, hoorde er toevallig wel over in de wandelgangen.
Het nadeel van Feijen colleges vind ik wel dat die man echt hamert op het bewijs, tuurlijk is een bewijs belangrijk, maar er is nog meer dan alleen een bewijs aan een goed programma.
Tegenwoordig proberen ze wel wat aan de theoriciteit te doen. Zie ook de OGO-projecten en Software Engineering. OOk krijgen we dus gleukkig meer talen dan alleen een snufje pascal, nu zelfs C++ bij B. Watson!
Ja, maar hij kan wel goed uitleggen. Hij heeft wel wat tegen 1ste en 2de jaars trouwens, dat kun je goed merken. Wat ook wel cool aan em is is die achtelijke lepel die ie altijd om z'n nek heeft hangen en dat ie altijd zo een beetje van voor naar achter aan het wiegen is als ie staat na te denkenOp zaterdag 20 april 2002 12:18 schreef Hieronymus het volgende:
[..]
Specialisatie voor mij wordt Informatie Systemen.
Het nieuwe boek van F&vG heb ik niet gelezen nee, hoorde er toevallig wel over in de wandelgangen.
Het nadeel van Feijen colleges vind ik wel dat die man echt hamert op het bewijs, tuurlijk is een bewijs belangrijk, maar er is nog meer dan alleen een bewijs aan een goed programma.
OGO was er nog niet toen ik bezig was. Wel het software engineering project, en ik moet toegeven, dat was één van de leukste dingen die ik heb gedaan op de TU/e.Tegenwoordig proberen ze wel wat aan de theoriciteit te doen. Zie ook de OGO-projecten en Software Engineering. OOk krijgen we dus gleukkig meer talen dan alleen een snufje pascal, nu zelfs C++ bij B. Watson!
He who knows only his own side of the case knows little of that.
Verwijderd
"Exp returns the value of e raised to the power of X, where e is the base of the natural logarithms." [Delphi documentatie]Op zaterdag 20 april 2002 00:09 schreef Skinkie het volgende:
[..]
wat bedoel je nou met exp?
Het moet natuurlijk zijn:Op vrijdag 19 april 2002 00:58 schreef Ublis het volgende:
A^B = exp(A*ln()
Beter opletten bij wiskunde.
A^B = exp(B*ln(A))
maar het idee klopt verder helemaal. Ublish geeft hier de standaardoplossing waar elke Pascal-docent blij van gaat kijken
1
2
3
4
5
6
| uses Math; function Macht(Basis, Exponent: Double): Double; begin Macht := Exp(Exponent * Ln(Basis)); end; |
Het leuke van deze functie is dat 'ie ook met niet-gehele machten werkt.
Een goede grap mag vrienden kosten.