Advertentie | |
|
17-09-2006, 12:59 | |
(volgends mij is dit een maak-mijn-huiswerk vraag.
Maar we willen je altijd helpen met de dingen die je al hebt ) Dus zeg ik je het volgende:
__________________
"Typefouten zijn gratis" | "Daar is vast wel een knopje voor" | "Ik weet, want ik zoek" | Powered by Firefox, Chromium, Mac OS X, OpenSuse, and Google.
|
17-09-2006, 16:31 | ||
Citaat:
Dat is de uitgebreide uitleg, zo stapsgewijs ga je natuurlijk geen code schrijven, maar het idee is duidelijk.
__________________
Onderuitgezakt in de koffiehoek van het zorgcentrum zit Sieb met volle teugen na te genieten van de Tweede Wereldoorlog. Arnela is de liefste! <3
|
17-09-2006, 21:54 | ||
Citaat:
ffs dude, ik denk dat we je genoeg handvatten hebben aangereikt waarmee je verder kan, ik bedoel, probeer zelf eerst de formule te maken (of berekening), schrijf die uit, probeer die dan in VB te gooien, ga debuggen en komt d'r iets raars uit, post 't dan hier
__________________
$karma++;
|
17-09-2006, 21:55 | ||
Citaat:
En qua code-shortening; Code:
for number in 128 64 32 16 8 4 2 1 if (number AND getal) binair = binair & 1 else binair = binair & 0 end if end for
__________________
$karma++;
|
18-09-2006, 10:06 | ||
Citaat:
|
18-09-2006, 12:58 | ||
Citaat:
Zelf schrijf ik al lang geen Basic meer, dus zal ik maar geen moeite doen om in psuedocode te werken, maar je gaat hier volgens mij gewoon enerzijds met wat wiskunde te maken krijgen en anderzijds met stringbewerkingen (omdat een computer alles binair opslaat, en de programma's die binaire gegevens natuurlijk omzetten naar decimale notatie, wat in feite een string is). Mijn idee is als volgt: 1. je maakt een functie die een de mogelijke tekens teruggeeft in de volgorde van hun waarde, voor het tientallig stelsel heb je dan "0123456789", voor het 16-delig zou dat "0123456789abcde" zijn, bijvoorbeeld. Dit is nodig omdat je anders vast voor elk stelsel nogal sprongen gaat moeten maken in je berekeningen. Wat ik persoonlijk zou doen is in die functie een constante opslaan en dan als je als argument bv. 13 meegeeft, dat hij van die constante string '0123 .... xyz' (lijkt me het meest logische) de eerste 13 tekens als resultaat teruggeeft. 2. verder heb je nog twee functies nodig, eentje om om te zetten van getal naar getal in andere notatie (string eigenlijk) en omgekeerd (string in bepaald getalstelsel naar getal in computernotatie/integer dus). Die functies zijn niet zo heel moeilijk te schrijven, lijkt me, gewoon wat over nadenken en je komt er wel. Toch hier nog enkele tips: Vergeet niet dat elke getalspositie een andere waarde vertegenwoordigt, in het tientalligstelsel, bijvoorbeeld: 132465 = 100000 + 30000 + 2000 + 400 + 60 + 5 en niet 1 + 3 + 2 + 4 + 6 + 5. In het binair krijg je 10101 = 10000 + 0000 + 100 + 00 + 1 Wiskundig valt dit nog mooier te schrijven, dat is wat jij moet doen. Berekening laat je best steeds gewoon door de computer uitwerken, dus gewoon steeds naar integer omzetten, bewerkingen laten uitvoeren en terugrekenen naar je getalstelsel, anders zit je met vreselijk ingewikkelde stringbewerkingen, lijkt me, als het zelfs niet zo goed als onmogelijk is om een generisch oplossing voor alle getalstelsels te maken).
__________________
vaknar staden långsamt och jag är full igen (Kent - Columbus)
|
18-09-2006, 14:35 | ||
Verwijderd
|
Citaat:
|
21-09-2006, 20:45 | ||
Citaat:
Maar bon, soit. Verder, ik zou niet denken in functie van getallen, de computer telt enkel binair en toont dat decimaal. Je interger kan nooit "AAA" zijn als weergave, hoewel dat ook een getal kan voorstellen in de wiskunde, werk met stringbewerkingen, kijk die eens na. Stel je hebt een getalstring "ABCDE" (hexadecimaal, voor de eenvoud), hoe bepaal je dan de grootteorde van die A? (simpeler: begin van achteren te redenen: E, D , C, ...) Wat is "B" in het hexadecimaal stelsel? Ja, het "B"-de teken (hex), dat is dus het 11e teken (dec) (als je nul als 0e teken ziet, wat volgens mij het simpelste is, zeker bij een dergelijke implementatie). Wat is dan een "B" op de 2e locatie waard? B(hex) x "16"(dec). En op de derde plaats? B(hex) x 16^2 (dec). En ga zo maar door. Dit is vrij makkelijk te implementeren. In jouw implementatie zie ik trouwens slechts een vast gegeven; die "13", dat stoort me. Probeer de methode die ik hierboven al aangeef eens: een functie om een getalstring in getalstelsel X om te zetten naar een voor de computer werkbaar getal (integer) en een functie omgekeer: een integer naar een getalstring in stelsel Y (en X en Y zijn daarin parameters, of dat nu 1 of 13 of 27 of 666 is, dat maakt voor de implementatie zelf weinig uit: dat is programmeren, een algemene oplossing vinden voor een probleem).
__________________
vaknar staden långsamt och jag är full igen (Kent - Columbus)
|
24-09-2006, 17:36 | ||
Citaat:
Code:
// functie om standaard tekens (volgorde) te bepalen, zodat na 9 een a volgt enzovoorts) function base(n:integer): string; const default = '0123456789abcdefghijklmnopqrstuvwxyz'; begin // geeft de n eerste tekens van de string result := copy(default,0,n); end; //functie om STR > INT // num: string die het getal in de notatie bevat // base: string die de verschillende mogelijke tekens in volgorde bevat function numToInt(num: string; base: string): integer; var cnt:integer; //enumeratievariabele begin result := 0; // teken per teken uitlezen (van achter naar voor) (en length geeft "N" terug (lengte van de string), maar de verschillende tekens zijn te benaderen door indexen 0 tot en met N-1) for cnt := (length(num)-1) to 0 do begin // hier gebeurt het volgende: voor elk teken doen we hetzelfde, de eerste doorloping staat de som op 0, dus krijgen we enkel de toewijzing, daarna tellen we de bekomen uitkomsten steeds op // we nemen de positie cnt (let erop, de positie begint bij 0 en stop bij n-1) van het getal, dit geeft ons één teken terug (namelijk het teken dat op die plaats in het getal staat. Om nu voor dit teken te vinden welke waarde het in het getal heeft, gaan we een product maken van welke waarde het zou hebben als het alleen zou staan (bv. A = "10") door middel van POS (deze functie bepaalt op welke plaats het teken voorkomt in de string "base" (op plaats "0" staat de 0, op plaats "1" staat 1 enzovoorts, dat komt dus handig uit)), het tweede deel van het product is de bepaling op welke plaats het teken in het getal staat, hierin gaan we moeten compenseren voor het feit dat een string van 0..n-1 loopt (terwijl de machten van n-1..0 moeten lopen: het eerste teken heeft de grootste waarde) result := result + (pos(num[cnt],base)*pow(length(base),length(num)-cnt-1)) end; end; //functie om een computerwaarde n om te zetten naar een stringrepresentatie van dat getal met base als getalstelsel(string) function intToNum(n: integer; base: string): string; var x, y, l: integer; begin x := n; // de beginwaarde van x gelijkstellen aan het getal l := length(base); // L = lengte van "base" (= grootte van het getalstelsel) while x <> 0 do begin // we beginnen hier met een grote waarde voor x, maar het resultaat wordt van achter opgebouwd (daarom op het einde + result en niet vanvoor) // we rekenen uit hoeveel de rest is als we x delen door L (x mod l) en nemen dat teken uit het getalstelsel (notatie base[x] geeft teken x (van de 0..n-1 tekens uit de string base terug), we berekenen ook hoeveel het geheel deeltal is (x div L, in Pascal is dat de integerdeling, dit is niet hetzelfde als x / L (dat is de float-deling die een reëel getal als uitkomst geeft, daar kunnen we hier niet veel mee doen) en nemen dat als nieuwe waarde voor x en passen hierop hetzelfde toe, uiteindelijk komen we uit aan een getal dat kleiner wordt dan L, (en dus x div l = 0 dus x wordt 0, dus stop) result := base[x mod l] + result; x := x div l; end; end; Met behulp van volgende code, zou je bijvoorbeeld een getal van binair naar hexadecimaal dan omzetten: Code:
var bingetal, hexgetal: string; begin bingetal := '101001011101'; hexgetal := intToNum(NumToInt(bingetal,base(2)),base(16)); end; Code:
var bingetal, hexgetal:string; n: integer; begin bingetal := '101001011101'; n := NumToInt(bingetal,base(2)); hexgetal := IntToNum(n,base(16)); end; Wat er dus gebeurt is dat het binair getal in stringformaat eerst naar een getal in computerformaat (binair, maar meestal weergegeven in het decimaal) en dan ga je dat getal omrekenen naar een hexadecimaal getal. Ik hoop dat je een beetje de werkwijze begrijpt, je moet zelf een beetje proberen, de bovenstaande code is geschreven op een half uurtje, gok ik, en is zeker niet machinaal getest (maar wel manueel eens geevalueerd). Voor de specifieke implementatie in Basic, moet je daar in de help maar eens rondkijken of op sites naar stringbewerkingen voor Basic zoeken, want daar komt het meestal wel op neer.
__________________
vaknar staden långsamt och jag är full igen (Kent - Columbus)
|
24-09-2006, 21:43 | ||
Verwijderd
|
Citaat:
|
25-09-2006, 15:26 | ||
Citaat:
VB kent (geloof ik) 'do { } while (bool)' of 'while (bool) do { }'. in C heb je ook geen goto's nodig. dus hoeft dat in VB ook niet, daar wordt je code alleen maar vervelend van.
__________________
Aut Caesar aut nullus
|
25-09-2006, 15:32 | ||
onderstaande code heb ik ff aangepast, zoals ik t zou doen. ik heb t echter niet getest (en weet niet zeker of alles wel VB is).
Citaat:
een en ander is wellicht ook slordige code, maar het gaat om het idee. nu heb je een functie die je kunt gebruiken om elke willekeurige string om te toveren in een ander stelsel. (even ervan uitgaande dat jouw code verder goed werkt, ik heb alleen de vorm wat aangepast). al dit soort zooi kun je het beste in een module zetten, die je dan bij al je projecten kunt gebruiken. dat scheelt werk, en is 'good coding practice'.
__________________
Aut Caesar aut nullus
|
25-09-2006, 16:44 | ||
Citaat:
__________________
vaknar staden långsamt och jag är full igen (Kent - Columbus)
|
Advertentie |
|
25-09-2006, 17:16 | ||
Citaat:
__________________
Aut Caesar aut nullus
|
Advertentie |
|
|
|