Krump Temat założony przez niniejszego użytkownika |
» 2011-11-28 20:14:48 nie kminie dlaczego tak w ogóle ;/ |
|
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" ? |
|
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 :) |
|
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? |
|
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 ;/ |
|
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; char znak = '1';
char znak = 49;
Analogicznie w drugą stronę. Literka 'a' w tablicy ASCII ma kod 97 dlatego tez char znak = 97;
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 char znak = '1'; int liczba = 49; znak i liczba są równe ale dla 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. #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; liczba = 'a'; znak = 'a'; cout << "\n\nTo jest liczba: " << liczba; cout << " a to jest znak: " << znak; for( int i = 65; i <= 75; i++ ) { cout << "\n" << i; cout << " " << char( i ); } char litera2 = '1'; cout << "\n\nlitera2 = " << litera2; int liczba2 = litera2; cout << "\nliczba2 = " << liczba2 << " dlatego ze int(litera2) = " << int( litera2 ); getch(); }
|
|
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 |
|
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 |
|
1 « 2 » 3 |