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

Konwersja z binarnego na dziesiętny.

Ostatnio zmodyfikowano 2011-11-30 21:56
Autor Wiadomość
Krump
Temat założony przez niniejszego użytkownika
» 2011-11-28 20:14:48
nie kminie dlaczego tak w ogóle ;/
P-44896
akwes
» 2011-11-28 20:16:52
Ale konkretnie czego? Chętnie napiszę Ci przykład, który Ci wyjaśni to :P

Tego że brakowało cudzysłowu czy z  "-48" ?
P-44897
Krump
Temat założony przez niniejszego użytkownika
» 2011-11-28 20:21:11
Okey, to dlaczego odejmujesz dopiero 1 w bin[dloguosc] a potem jeszcze 48.
przecież dlugosc = bin.length() - 1 daje taka sama wartość co bin[dlugosc - 1], czy nie? i te 48 ;/

cudzysłów to wiem czemu, bo string to ciąg znaków jest a nie dana liczbowa jak float albo double czy pospolity int :)
P-44898
akwes
» 2011-11-28 20:36:54
1. Uzależniasz pętlę od wartości liczby długość, czyli nie może ona mieć zaniżonej wartości tak jak by to się działo przez ustawienie jej na sztywno w taki sposób.
dlugosc = bin.length() - 1;
 Ponieważ liczba binarna "11011" jest u Ciebie stringiem, to znaczy że jej długość wynosi 5. Dokładnie tyle zwraca
bin.length()
 (ponieważ length() nie bierze pod uwagę ostatniego, niewidzialnego znaku NULL).

Więc tak. String "11011" ma 5 znaków. Czyli pętla musi się wykonać 5 razy (dla każdego 1 i 0 musi policzyć, czyż nie?). Przy instrukcji
dlugosc = bin.length() - 1;
 pętla wykona się tylko 4 razy (bo bin.lenght zwróci 5 a Ty jeszcze odejmujesz 1), ponieważ
while( dlugosc > 0 );
. Tak więc już wiemy dlaczego nie może być u góry "-1".

2. Dlaczego teraz w pętli mamy
bin[ dlugosc - 1 ];
. A na dlatego że tablice indeksujemy od zera.
Czyli u Ciebie bin[dlugosc] jest równe znakowi NULL, a jego nie chcemy wliczać do sumy.

dlugosc = 5;
bin[0] = 1, bin[1] = 1, bin[2] = 0, bin[3] = 1, bin[4] = 1... Więc teraz bin[5] = NULL (znak kończący string). Dlatego za każdym razem musimy wziąć numerek mniej. Czyli zamiast zacząć od bin[5] zaczynamy od bin[5-1], bo przeceiz o tamte liczby nam chodzi, prawda?

Zaraz opiszę Ci o co chodzi z ASCII, najpierw mi powiedz czy na razie to co mówię jest jasne?
P-44899
Krump
Temat założony przez niniejszego użytkownika
» 2011-11-28 21:15:16
Dobra kminie, co do tablic to wiem jak działają, więc niepotrzebnie się rozpisałeś, ale ogarnąłem już czemu te 1 nie tutaj, moja głupota jednym słowem :)

Teraz te 48 bo to najważniejsze w sumie ;/
P-44906
akwes
» 2011-11-28 21:32:37
char to dość specyficzny typ.

unsigned char - zkares 0-255 (liczba całkowita).
Każdej z tych liczb przypisujemy określony znak.
Od 0-31 znaki sterujące wydrukiem itd.
32-127 znaki podstawowe
128-255 znaki zależne od systemu (extended ascii)

Jeżeli do zmiennej char wstawimy liczbę. Liczbę, czyli bez cudzysłowu to po prostu char przyjmie tę wartość. Jeżeli wstawimy z cudzysłowem (oczywiście pojedynczym) to literka zostanie według tej tabeli przepisana na liczbę.

I teraz cout po prostu wie, jak ma postępować z typem char. Jeżeli napotka ten typ, to sprawdza w tabelce odpowiednik znakowy liczby, którą prezentuje zmienna char.

Dlatego znak "1" ma wartość w ASCII 49;
C/C++
char znak = '1';
// to tak jakbyś napisał
char znak = 49;
 
Analogicznie w drugą stronę. Literka 'a' w tablicy ASCII ma kod 97 dlatego tez
C/C++
char znak = 97;
// to tak jakbys napisal
char znak = 'a'

Jak zapewne wiesz tablica string składa się z kolejnych znaków char. W momencie porównania char do int, char jest brany pod uwagę jako liczba. Czyli:

dla
C/C++
char znak = '1';
int liczba = 49;
znak i liczba są równe
ale dla
C/C++
char znak = '1';
int liczba = 1;
już nie, bo znak '1' ma kod 49.
 
Zobacz sobie na tabelkę ASCII, na pewno wiele Ci to wyjaśni.


C/C++
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <math.h>

using namespace std;

int main()
{
    int liczba = 98;
    char znak = 98;
   
    cout << "To jest liczba: " << liczba;
    cout << " a to jest znak: " << znak;
   
    // teraz dla odmiany zrobimy to literka
   
    liczba = 'a';
    znak = 'a';
   
    cout << "\n\nTo jest liczba: " << liczba;
    cout << " a to jest znak: " << znak;
   
    // Widać że 'a' zamieniło się na liczbę! Tak jak wcześniej liczba na znak!
   
    for( int i = 65; i <= 75; i++ )
    {
        // zobaczmy co wyswietli int.
        cout << "\n" << i;
        // a teraz zobaczmy co wyswietli int, rzutowany na char
        cout << " " << char( i );
    }
   
    // a teraz czas na esencję
    char litera2 = '1'; // ZNAK 1
    cout << "\n\nlitera2 = " << litera2;
    // ale jak zrobisz cos takiego
    int liczba2 = litera2;
    // to liczba2
    cout << "\nliczba2 = " << liczba2 << " dlatego ze int(litera2) = " << int( litera2 );
   
    getch();
}
P-44907
Krump
Temat założony przez niniejszego użytkownika
» 2011-11-28 21:53:04
o cześć, pozwolisz ze ogarnę to jutro bo nie myślę teraz i to za trudne xD

znaczy w kontekście tego zadania, bo ogólnie wiem jak char'y działają xD

Ty ale czemu akurat 48 odjęte? xD
P-44909
akwes
» 2011-11-28 22:41:26
Bo to taki myk :P

Musisz z jedynki znakowej czyli '1' zrobić jedynkę liczbową 1.
'1' znakowa ma wartość liczbową 49
Wiec masz odpowiedz mi na pytanie. Co zrobić z liczbą 49 aby była równa jedynce liczbowej czyli 1?

49 - x = 1
x = ?
Oblicz x
P-44915
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona