16. april 2002 - 09:15Der er
3 kommentarer og 1 løsning
Opgave, Omregner (200 point)
Opgaven går ud på at lave en Omregner hvor man først vælger en af 3 talbaser. 2,10 og 16.
dernæst intaster man et nummer. hvis jeg feks valgte talbase 2(binær) og intaster 1101 skal den derefter spytte det ud i talbase 10 og 16. resultat..: (Digital= 13) (Hexadecimal = D)
og hvis jeg nu havde valgt at skrive det i digital til(base10) skulle det så selv sagt komme ud i base 2&16.
oh, hvis man efter endt resultat kunne trykke for at startet forefra og den ikke bare afslutter ville det osse være super. evt afslut på esc.
Jeg ville påskønne evt.noter om funktioner da det vil hjælpe mig meget når jeg skal tygge den igennem selv.
void print_octal( int result ) { char octal_string[64]; sprintf( octal_string, "%o", result ); // convert int to octal string cout << "oct: " << octal_string << endl; // print octal string }
void print_hex( int result ) { char hex_string[64]; sprintf( hex_string, "%x", result ); // convert int to hex string cout << "hex: " << hex_string << endl; // print hex string }
void print_bin( int result ) { char bin_string[64]; for( int i=0; i<32; i++ ) // for each bit in a 32 - bit int { if( result & (1<<(31-i)) ) // if bit i from MSb is set { bin_string[i] = '1'; // add 1 to string } else { bin_string[i] = '0'; // add 0 to string } }
bin_string[32] = '\0'; // terminate string
cout << "bin: " << bin_string << endl; // print out bin string }
bool check_conversion( int result ) { if( result == EOF || result == 0 ) // if not convertet or no match { return false; // failed }
return true; // succes }
int main(int argc, char* argv[]) { char input[1024]; // user input
bool end = false; // end signaled
int result = 0; // result of input (value) int conversion = 0; // conversion status
while( !end ) // while user not said end { cout << "Converter:" << endl; // print menu cout << " 1. Bin" << endl; cout << " 2. Hex" << endl; cout << " 3. Octal" << endl; cout << " 4. End" << endl; cout << endl << "->";
cin >> input; // read user input
conversion = sscanf( input, "%i", &result ); // convert input to number
if( !check_conversion(conversion) ) // convert ok ? { cout << endl << "error in input" << endl << endl; // failed } else { switch( result ) // what did the user say ? { case 1: // input bin { cout << "enter number in bin: "; cin >> input; // ask bin number result = 0;
bool failed_convert = false;
for( int i=0; i<strlen(input); i++ ) // for each 0/1 in user input { if( input[i] == '1' ) // if 1 { result += 1<<(strlen(input)-i-1); // add 1' value to result } else if( input[i] != '0' ) // if not 0, invalid input detected { cout << endl << "error in input" << endl << endl; failed_convert = true; break; } }
if( !failed_convert ) // failed conversion ? { print_octal( result ); // print other formats print_hex( result ); }
break; }
case 2: { cout << "enter number in hex: "; cin >> input; // ask user input
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.