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

problem z tabelą oraz pętlą

Ostatnio zmodyfikowano 2014-02-02 21:51
Autor Wiadomość
MrKreistos
Temat założony przez niniejszego użytkownika
problem z tabelą oraz pętlą
» 2014-01-31 11:43:01
#include<iostream>

int main()
{
int a,p;
std::cout<<"Podaj liczbe w systemie decymalnym ";
std::cin>>a;
p = a;

bool tab[10];
int c = 1;

for(c = 1;c <= 10;c++)
{
if(p % 2^c == 2^(c-1))
{
tab[c-1] = 1;
p = p-(2^(c-1));
}
else
{
tab[c-1] = 0;
}
}
c = 1;
std::cout<<"oto liczba w systemie binarnym ";
for(c = 1;c <= 10;c++)
{
std::cout<<tab[c - 1];
}
return 0;
}

Program ma za zadanie wczytanie liczby w systemie dziesiątkowym i wyświetlić w systemie dwójkowym.
Coś jednak musiałem pod drodze pomieszać bo w większości wypadków kompilator wyrzuca mi 10 jedynek.
Mógłby ktoś bardziej biegły przeanalizować kod i powiedzieć co jest źle?
P-103678
alixir
» 2014-01-31 12:31:44
Co to ma być
2 ^ c
 Domniemam, że chodzi ci o potęgę (bo teraz to znaczy XOR). Poprawny zapis:

C/C++
#include <math.h>
...
pow( 2, c )

Poza tym twoja liczba w postaci dwójkowej wyświetli się odwrócona (na opak).

Wiem, że program pisałeś dla sprawdzenia umiejętności, ale zamierzony cel można osiągnąć też tak:

C/C++
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    char buffer[ 10 ];
    printf( "Podaj liczbe w systemie dziesietnym : " );
    scanf( "%d", & i );
    itoa( i, buffer, 2 );
    printf( "bin: %s\n", buffer );
    return 0;
}
P-103680
MrKreistos
Temat założony przez niniejszego użytkownika
Dzięki alixir.
» 2014-02-02 21:51:28
Przerobiłem kod (musiałem przypisać pow(x,y)... do osobnej zmiennej bo inaczej kompilator wyrzucał:
[Error] invalid operands of types 'int' and 'double' to binary 'operator%'
Trochę go udoskonaliłem,przy okazji okazało się że niepotrzebnie zapisałem:
p = p -( 2 ^( c - 1 ) );

Wątpię żeby komuś chciało się to czytać ale wrzucam i kończę temat.

C/C++
#include<iostream>
#include<math.h>
#include<cstdlib>
int main()
{
    int dec = 0, p = 0, sq = 0, sq1 = 0, nt = 0, pp = 0;
    bool przeskok = 0, deccheck = 0, zacznij = 1;
    int c = 1;
    bool tab[ 15 ];
   
    std::cout << "PROGRAM PRZELICZA Z DEC DO BIN" << std::endl;
   
    for( zacznij == 1; zacznij != 0; )
    {
        dec = 0;
        p = 0;
        sq = 0;
        sq1 = 0;
        nt = 0;
        pp = 0;
        przeskok = 0;
        deccheck = 0;
       
        for( deccheck == 0; deccheck == 0; )
        {
            std::cout << "podaj liczbe decymalna(od 0 do 32767) ";
            std::cin >> dec;
            deccheck = std::cin.good();
            std::cin.clear();
            std::cin.sync();
           
            p = dec;
           
            if( dec > 32767 || dec < 0 )
            {
                deccheck = 0;
            }
            if( dec == 0 )
            {
                przeskok = 1;
            }
        }
       
        if( przeskok == 0 )
        {
            c = 1;
            for( c = 1; c <= 15; c++ )
            {
                pp = p;
                nt = c - 1;
                sq = pow( 2, c );
                sq1 = pow( 2,( c - 1 ) );
               
                if( pp % sq == pp % sq1 )
                {
                    tab[ nt ] = 0;
                }
               
                if( pp % sq != pp % sq1 )
                {
                    tab[ nt ] = 1;
                }
            }
           
            std::cout << "liczba " << dec << " w systemie decymalnym to ";
            c = 14;
            for( c = 14; c >= 0; c-- )
            {
                std::cout << tab[ c ];
            }
            std::cout << " w systemie binarnym \n";
        }
        else
        {
            std::cout << "liczba 0 w systemie decymalnym to 0 w systemie binarnym \n";
        }
       
        std::cout << "czy chcesz powtorzyc? (true(1)/false(0) ";
        std::cin >> zacznij;
    }
    system( "pause" );
    return 0;
}

Dzięki za pomoc.
P-103903
« 1 »
  Strona 1 z 1