28. januar 2003 - 23:03Der er
27 kommentarer og 1 løsning
Base b
Hej allesammen Jeg er begyndt at laere lidt omkring algorithmer og har faaet en opgave hvor jeg skal oversaette en algorithme til C++. Haaber at der er nogen der har mod paa at laer mig det.
Her foelger krav til algorithmen: Input: en positiv long integer og en base b {2,3,...16}. Output: Base b expansion af n a[k-1], a[k-2],..a[0].
for baser stoerre end 10 til 16 bruges: 10-A, 11-B, 12-C, 13-D, 14-E, 15-F
Her er algorthmen:
Procedure BaseConversion(n:positive integer, b:{2,3,..16}) int a[33] int q,k Begin q:=n k:=0 While(q<>0) Begin a[k]:=q mod b q:= floor(q/b) k:=k+1 End OutputBaseBValue(a,k,b) End
Haaber der er en kan hjaelpe mig med det! Paa forhaand tak!
Hej Arne, Mange tak for dit svar. Jeg har kigget paa det og compilet det, men desvaerre faar jeg ikke oenskede output, hvilket ville vaere: Base Value C log (ceiling af log) 2 1000 4 3 121 3 4 100 2 etc etc etc.
Jeg er i tvivl om hvordan man oversaetter floor (q/b), altsaa hvordan man runder ned til naermeste integer. Derudover er jeg i tvivl om hvorfor du har sat function call i main som du har gjort. Er det muligt jeg kan faa en lille forklaring paa mine spoergsmaal? Jeg saetter stor pris paa din hjaelp :=)
Hej Arne, Jeg ser du har vaeret aktiv til at svare igen, tak for det. Algorithmen kommer fra en laerer, der maaske har brugt den i 1970 mens han stadigvaek fra studerende:-)Han haveder at det stadigavek er "up to date". Jeg undskylder at jeg er daarlig til at forklare opgaven, men det skyldes desvaerre den kendsgerning at jeg ikke forstaar hvordan jeg griber det an. Jeg proever igen: I opgaven skal jeg skrive et program der laeser en long integer fra standard input og vil output en tabel til en disk file der indeholder base 2,3,...,16 representation af input integer og ceiling af log base 2,3,...,16 af en integer. Haaber det hjaelper. Endnu engang tak for din hjaelp!
Hej igen, Takker endnu engang for at bruge tid paa mig. Jeg har compilet dit program og kunne godt taenke mig at hoere hvad tankegangen er bag funnction calls i main (calc(9, 10), calc (...etc.) altsaa hvorfor du vaelger at vise base 10. Ville man ikke have svaret paa spoergsmaalet ved at undlade de function calls? Er det noedvendigt at bruge argc/*argv?? Tak igen - imponerende at faa saa god en hjaelp.
Jeg laeser i USA, hvorfor jeg ikke altid oversaetter til ren dansk. Detter er dog ikke for at vaere smart - det er jo aldrig et sundt tegn ikke at kunne huske sit eget sprog :-) Jeg er meget nybegynder som du kan se, begyndte sidste aar, men kom ud for en ulykke saa jeg er tilbage fra bunden. Kommer formentlig snart til Danmark igen.
Programmet koerer jo fint, men er i tvivl om finessen med at output skal jeg skrive et program der laeser en long integer fra standard input og vil output en tabel til en disk file der indeholder base 2,3,...,16 representation af input integer og ceiling af log base 2,3,...,16 af en integer.
Vil det sige at jeg skal aabne en output file som kunne vaere saaledes: for at aable filen:
Hej Arne, Opgaven er ikke helt loest i henhold til problemformuleringen. Jeg skal indlaese en positiv long integer fra standard input programmet vil saa output en tabel med base representation af input integer og ceiling af log base 2,3..16 af integeren. I henhold til logaritmen (som jeg skrev i mit foerste indlaeg)skal jeg have en function der hedder OutputBaseBValue (a,k,b). den positive long integer kunne vaere den som prompter brugeren for "indtast et tal", men hvordan kommer OutputBaseBValue ind i billedet? Hvorfor har du valgt at indsaette 11,i i dit functions kald (jeg forstaar godt i)?
Ok, jeg proever igen saafremt det sidste indlaeg blev slettet. Jeg fik dit program, compilede det og aendrede lidt, da der var lidt fejl med at den nye function Output...ikke var defineret. Jeg proevede at lave en fil med navnet "result.dat.cpp" for at se output, men det virkede ikke. Lige nu kan jeg kun se: Indtast tal: 2 (2 som jeg selfoelgelig indtastede) Indtast base: 2(2 som jeg selfoelgelig indtastede) Press any key to continue
dette er programmet som jeg compilede: #include <iostream> #include <fstream>
Nej, jeg har ikke fundet filen. Det var en hjemmeopgave som jeg afleverede igaar. Min laerer kiggede paa det og opgaven er desvaerre ikke loest. Pointen var at programmet skulle indlaese en long int og udprinte en tabel som denne ved hjaelp af logaritmen jeg skrev tidligere: Base Value C log (ceiling af log) 2 1000 4 3 121 3 4 100 2 etc etc etc.
Det er grunden til at jeg blev ved med at spoerge. Jeg saetter selvfoelgelig stor pris paa din hjaelp men vil lade spoergsmaalet staa, hvis der er en der kommer forbi paa siden der kan loese problemet.
int main(int argc, char *argv[]) { int n,b; cout << "Indtast tal: "; cin >> n; for(int b=2;b<=16;b++) { BaseConversion(n,b); } return 0; } void BaseConversion(int n,int b) { int a[33]; int q = n; int k = 0; while(q!=0) { a[k]=q%b; q=q/b; k++; } OutputBaseBValue(a,k,b); return; }
void OutputBaseBValue(int *a,int k,int b) {
for(int i=k-1;i>=0;i--) { outf << c[a[i]]; } outf << " base " << b << " and ceiling of LOG" << b << " = " << k << endl; return; }
Og det giver følgende indhold af resultat.dat:
Indtast tal: 10
C:\>type resultat.dat 1010 base 2 and ceiling of LOG2 = 4 101 base 3 and ceiling of LOG3 = 3 22 base 4 and ceiling of LOG4 = 2 20 base 5 and ceiling of LOG5 = 2 14 base 6 and ceiling of LOG6 = 2 13 base 7 and ceiling of LOG7 = 2 12 base 8 and ceiling of LOG8 = 2 11 base 9 and ceiling of LOG9 = 2 10 base 10 and ceiling of LOG10 = 2 A base 11 and ceiling of LOG11 = 1 A base 12 and ceiling of LOG12 = 1 A base 13 and ceiling of LOG13 = 1 A base 14 and ceiling of LOG14 = 1 A base 15 and ceiling of LOG15 = 1 A base 16 and ceiling of LOG16 = 1
Jeg kan ikke forstå, at du ikke får en fil resultat.dat - og jeg kan ikke se at der skulel være noget galt me dudregningen.
Ja, det ser bestemt ud som om det virker. Jeg siger mange tak for din hjaelp og taalmodighed som jeg saetter stor pris paa :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
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.