problem z tabelą oraz pętlą
Ostatnio zmodyfikowano 2014-02-02 21:51
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?
|
|
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: #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: #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; } |
|
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. #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. |
|
« 1 » |