24. marts 2011 - 11:54Der er
7 kommentarer og 2 løsninger
Hvor stort er tallet ( vil lave det rekursivt )
Hejsa Jeg skal programmere en funktion der kan udskrive beløb som check dvs. at input 343 skal give TreHundredeOgFirTiTre ( eller noget i den retning )
jeg er interesseret i at anvende en rekursiv funktion, jeg tænker at jeg måske kan anvende modulus til at finde ud af om jeg er i 1000 100 10 eller 1 men jeg kan ikke rigtig gennemskue hvad modulus egenligt gør
public int taltilbogstav(int bel) { int a = 0; if(bel > 10 ) { a = bel % 10; // a skal angive om jeg er i 1000, 100, 10 eller 1 } if(a = 1000 ) { bla bla vla } return taltilbogstav(bel / 10 ); } // når den er rekursiv bliver jeg nød til at ændre lisr
Dette er ikke kode der nødvendigvis kan kører bare for at illustrere hvordan jeg havde tænkt mig at gribe det an, men jeg mangler lidt det der med hvordan jeg kan afgøre med modulus eller på anden måde hvor stort tallet er og hvor i tællerne jeg er
Hvis du har et tal og vil finde ud af tallets størrelse, kan du bruge log-funktionen. Hvis f.eks.
x=4322
så vil
floor(log(x))==3
Dvs. hvis du har et ukendt tal y, og du så beregner at floor(log(y))==2, så ved du at y er mellem 100 og 999 (begge inklusive).
Du skal dog være opmærksom på om log-funktionen udregner med hensyn til den rigtige base. Jeg programmerer ikke i C#, så ved ikke hvad den rigtige funktion hedder. Men det er sikkert enten log eller log10 der udregner log mht. base-10. Du kan altid lave et hurtigt check. Hvis log(10)==1 har du fundet den rigtige funktion :)
public static string TalTilTekst(int i) { string output = ""; //tal der skal retur
int tierPotens = 0; //Hvilken en tierpotens er vi nået til (enere, tiere, hundrede...)
while (i > 0) //indtil i er brugt op { int førsteCiffer = i % 10; //første ciffer (hvad er der tilbage når vi dividerer med ti)
string tekst = EnkeltTalTilTekst(førsteCiffer); //først størrelsen på tallet tekst += TierPotensTilTekst(tierPotens); //så om det er ti, hundrede osv.
output = tekst + output; //sæt det før alt det der er skrevet
i = i / 10; //fjern første ciffer ++tierPotens; //tæl tierpotens op da vi nu er ved næste (f.eks. enere --> tiere) }
return output; }
public static string TierPotensTilTekst(int i) { switch (i) //oversæt til tierpotens { case 0: return ""; //enere har intet navn case 1: return "Ti"; case 2: return "Hundrede"; case 3: return "Tusinde"; default: throw new ArgumentException("For stort tal"); //understøtter kun op til tusinder } }
public static string EnkeltTalTilTekst(int i) { switch (i) //oversæt til værdi { case 0: return "Nul"; case 1: return "Et"; case 2: return "To"; case 3: return "Tre"; case 4: return "Fire"; case 5: return "Fem"; case 6: return "Seks"; case 7: return "Syv"; case 8: return "Otte"; case 9: return "Ni"; default: throw new ArgumentException("Ikke korrekte tal"); //der er ikke andre muligheder, så hvis tallet er et andet, så smid en fejl } }
Hej det ser rigtig spændende ud jeg glæder mig til at granske jeres input, desværre er min PC med Visual Studie brudt sammen så jeg har ikke haft mulighed for at kigge nærmere på det men det skulle være klar til i morgen.
Tusind tak for jeres indlæg det kunne jeg virkelig bruge til noget, det er nok dit indlæg mcb2001 jeg har haft mest gavn af så derfor for du point, men også interessant at se det andet "kætteriske" forslag
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.