Avatar billede lordcyrik Nybegynder
16. april 2002 - 09:15 Der 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.
Avatar billede chries Nybegynder
16. april 2002 - 10:20 #1
her kommer en større smøre :-)

#include "iostream.h"
#include "string.h"
#include "stdio.h"

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

                    conversion = sscanf( input, "%x", &result );    //convert

                    if( !check_conversion(conversion) )    // convert ok ?
                    {
                        cout << endl << "error in input" << endl << endl;
                    }
                    else
                    {
                        print_octal( result ); // print other formats
                        print_bin( result );
                    }
                    break;
                }

                case 3:
                {
                    cout << "enter number in octal: ";
                    cin >> input;    //ask user input

                    conversion = sscanf( input, "%o", &result ); // convert

                    if( !check_conversion(conversion) ) // convert ok ?
                    {
                        cout << endl << "error in input" << endl << endl;
                    }
                    else
                    {
                        print_hex( result );    // print other formats
                        print_bin( result );
                    }
                    break;
                }

                case 4:
                {
                    cout << "ending" << endl; // end program
                    end = true;
                    break;
                }

                default:
                {
                    cout << endl << "error in input range" << endl << endl;
                    break;
                }
            }
        }   
    }

    return 0;
}
Avatar billede lordcyrik Nybegynder
19. juli 2002 - 13:58 #2
lavede en copy paste ind i C og kunne kun konstatere at programmet havde fejl og ikke kunne køres.. fejlen(ene) er uden for viden at rette/pege ud.
Avatar billede lordcyrik Nybegynder
19. juli 2002 - 14:00 #3
skulle stå "uden for MIN iden"

any way.. jeg fik faktisk lavet en helt af mig selv.. ikke den mest fantastiske men god nok til at den blev accepteret a sensor :)
Avatar billede lordcyrik Nybegynder
19. juli 2002 - 14:01 #4
prøver lige igen.. ..."uden for min Viden"
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester