Kod U1
Ostatnio zmodyfikowano 2014-01-24 19:29
masa... Temat założony przez niniejszego użytkownika |
Kod U1 » 2014-01-24 11:27:12 Witam ma problem z jednym zadaniem. O to treść. Dla podanej poniżej specyfikacji zapisz (w postaci listy kroków, schematu blokowego lub w wybranym języku programowania) algorytm, który oblicza wartość liczby zapisanej w kodzie U1. Specyfikacja algorytmu Dane: d – długość zapisu U1, d 1 bin [1..d] – tablica, której elementami są pojedyncze bity zapisu U1, z czego bin[1] to bit znaku Wynik: x – wartość liczby zapisanej w tablicy bin d 1.. Przykład: Dla d = 5 i bin[1..5]= 10110 wynikiem jest x = -9. mój kod: #include <iostream> #include <string> #include <cstdlib>
using namespace std;
int main( int argc, char ** argv ) { double znak = 1; static int d; cin >> d; char bin[ d ]; cin >> bin; if( bin[ 0 ] == 1 ) { for( int i = 1; i < d; i++ ) if( bin[ i ] == 1 ) bin[ i ] = 0; else bin[ i ] = 1; znak =- 1; } for( int i = 0; i < d - 1; i++ ) bin[ i ] = bin[ i + 1 ]; bin[ d - 1 ] = NULL; string a[ d - 1 ]; for( int i = 0; i < d - 1; i++ ) a[ i ] = bin[ i ]; int dec = strtol( a.c_str(), NULL, 2 ); int x = dex * znal; cout << x; return 0; }
Nie wiem jak tą tablice zamienic na string żeby ją potem wrzucić do funkcji strtol. |
|
pekfos |
» 2014-01-24 11:32:06 Przypisz. A najlepiej od razu używaj stringów, bo i tak źle tworzysz tablice. |
|
Wiesiek |
» 2014-01-24 12:13:34 Faktycznie schody. Zaczynają się już wcześniej: liczba ma mieć zapis długości d, więc deklarujesz tablicę o d+1 elementach. Nie sądzę abyś z cin wpisywał znaki o kodach 0 i 1 (raczej znaki o kodach '0' i '1'), więc powinieneś pisać: bin[ 0 ] == '1' bin[ i ] = '0' a gdy zechcesz odczytać, czy w bin jest liczba 1, czy 0, to piszesz bin-'0' wynik tego wyrażenia wynosi 0, gdy jest znak '0', zaś w przypadku znaku '1' wynik jest 1.
Tam, gdzie sam zobaczyłeś schody brakuje mnożenia przez odpowiednie potęgi dwójki i pomnożenia wyniku przez -1, gdy masz do czynienia z liczbą ujemną (sprawdź w wikipedii zapis U1).
|
|
masa... Temat założony przez niniejszego użytkownika |
» 2014-01-24 19:29:24 Dziekuję bardzo za pomoc :) Moje ostateczne rozwiązanie :
#include <iostream> #include <string> #include <cstdlib> #include <math.h>
using namespace std;
int main( int argc, char ** argv ) { double znak = 1; static int d; cin >> d; string bin; cin >> bin; if( bin[ 0 ] == '1' ) { for( int i = 1; i < d; i++ ) if( bin[ i ] == '1' ) bin[ i ] = '0'; else bin[ i ] = '1'; znak =- 1; } for( int i = 0; i < d; i++ ) bin[ i ] = bin[ i + 1 ]; int x = strtol( bin.c_str(), NULL, 2 ); x = x * znak; cout << x; return 0; }
|
|
« 1 » |