Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Reprezentacja liczb typu float

Ostatnio zmodyfikowano 2015-09-13 22:31
Autor Wiadomość
Garniturek
Temat założony przez niniejszego użytkownika
Reprezentacja liczb typu float
» 2015-09-13 16:51:49
Witam, robię zadanie ze spoja: http://pl.spoj.com/problems/PP0504D/
Udało mi się napisać program, który zamienia liczbę zapisaną systemem dziesiętnym na liczbę zapisaną systemem szesnastkowym, ale nie za bardzo kumam o co chodzi autorowi zadania na wyjściu:  bajty reprezenacji kolejnych liczb.
Pomocy!

C/C++
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
float a;
int b;
int c;
int d;
float e;
int main()
{
    cin >> a;
    do
    {
        b++;
    }
    while( a > pow( 16, b ) );
   
    do {
        c = a / pow( 16, b - 1 );
       
        d = pow( 16, b - 1 );
        e = a - c * pow( 16, b - 1 );
       
        a = e;
        b--;
        if( c < 10 )
             cout << c;
        else if( c == 10 )
             cout << "A";
        else if( c == 11 )
             cout << "B";
        else if( c == 12 )
             cout << "C";
        else if( c == 13 )
             cout << "D";
        else if( c == 14 )
             cout << "E";
        else if( c == 15 )
             cout << "F";
       
    } while( b != 0 );
   
    return 0;
}
P-137480
mateczek
Zmiana liczby to tylko zmiana sposobu jej wyświetlania (liczba jest ta sama)
» 2015-09-13 18:02:17
C/C++
#include <iostream>

int main() {
    int a;
    std::cin >> a;
    std::cout << std::hex << a << std::endl;
}
P-137481
Monika90
» 2015-09-13 18:07:37
W zadaniu chodzi o to, by potraktować zmienną typu float jak tablicę bajtów i wyświetlić zawartość tej tablicy.
P-137482
Garniturek
Temat założony przez niniejszego użytkownika
» 2015-09-13 19:00:59
mateczek, funkcja hex nie działa przy liczbach zmiennoprzecinkowych, próbowałem zamienić float na int, ale mi nie pykło, więc zrobiłem tak jak mam
P-137483
Garniturek
Temat założony przez niniejszego użytkownika
» 2015-09-13 19:09:18
Nie rozumiem.
Mam pobierać liczbę do tablicy float i pisać ile ma bajtów? A to nie będą dla każdego float zawsze 4 bajty.
Pomocy!
P-137484
michal11
» 2015-09-13 19:47:36
Offtop ale imho ten zapis:
C/C++
if( c < 10 )
     cout << c;
else if( c == 10 )
     cout << "A";
else if( c == 11 )
     cout << "B";
else if( c == 12 )
     cout << "C";
else if( c == 13 )
     cout << "D";
else if( c == 14 )
     cout << "E";
else if( c == 15 )
     cout << "F";

czytelniej wyglądałby ze switchem:
C/C++
switch( c )
{
case 10: cout << "A"; break;
case 11: cout << "B"; break;
case 12: cout << "C"; break;
case 13: cout << "D"; break;
case 14: cout << "E"; break;
case 15: cout << "F"; break;
default: cout << c;
}

A w ogóle najepiej to trzeba było sobie zrobić stringa i odwoływać się do indeksu:
C/C++
string hexTab = "0123456789ABCDEF";

cout << hexTab[ c ];
P-137485
Monika90
» 2015-09-13 22:20:03
Nie, masz pobrać adres zmiennej typu float i rzutować go na wskaźnik do char lub unsigned char. Używasz tego wskaźnika by uzyskać dostęp do pojedynczych bajtów z których składa się zmienna.
P-137496
Garniturek
Temat założony przez niniejszego użytkownika
» 2015-09-13 22:31:38
Dzięki wielkie wszystkim za pomoc i wytłumaczenie :)
Program do konwersji może się kiedyś przyda tymczasem biorę pod warsztat od nowa to zadanie :P
P-137498
« 1 »
  Strona 1 z 1