matematykaszkolna.pl
programowanie Karol: programowanie − matematyka Witam, czy mógłby mi ktoś wyjaśnić na czym polega : (2 != 0x2 ? 5 : 6 + 1) oraz 12+ ~0 Nie rozumiem : 0x2 oraz 12 + ~0 z góry serdeczne bóg zapłać!
17 sty 17:37
Draghan: Jeśli to język C/C++/pokrewny, to tego... 0x2 to zapis w szesnastkowym systemie pozycyjnym. emotka (0x2)16 = (2)10 Natomiast ~0 to bitowa negacja zera... Więcej o operatorze ~ znajdziesz tutaj: http://guidecpp.cal.pl/cplus,operators-bits . emotka
17 sty 17:53
Draghan: Poprawka, zapomniałem klamerek. (0x2)16 = (2)10
17 sty 17:54
Karol: Dziękuję bardzo emotka Tak to C emotka
17 sty 17:59
Draghan: W pierwszym przypadku można spokojnie zapisać "normalnie", dziesiętnie. A żeby zrozumieć ~0, napisz prosty program do tego, żeby Ci to wyświetlił. emotka Bo wszystko w tym przypadku zależne jest od kompilatora i tego, jaki "w domyśle" typ zmiennej przypisuje do liczby 0. Dla signed int = 0 ⇒ ~0 = −1. A np. dla unsigned int32 = 0 ⇒ ~0 = 4294967295.
17 sty 18:12
Draghan: Ech, znowu te klamerki. −.− Miało być: unsigned int32
17 sty 18:13
Karol: Dzięki, chyba muszę w domyślę traktować to dla signed int. Chciałbym się jeszcze zapytać o dwie rzeczy. Pierwsza : 3 + 4 ? 5 & 6 : 7 <− Co oznacza ten zapis? Wiem, co robi ? pośiliłem się wikipedia, zanim napisałem − jednak nie rozjasnia mi to sytuacji. 5&6 =4 czyli. 7 ? 4:7 − nie rozumiem. To pierwsze pytanie. Drugie, czy ktoś mógłby mi przybliżyć w skrócię zasady, kiedy można zadeklarować zmienną pod jakąś nazwą? Z góry bardzo dziękuję emotka
18 sty 10:47
Draghan: Hej, skąd Ty takie przykłady bierzesz? Ktoś albo gmatwa program, albo sprawdza Twoją znajomość języka. Co do działania operatora "&", spójrz na tę stronę, którą Ci podlinkowałem wyżej. emotka Musisz podać mi kontekst tego, co napisałeś, bo wiele mi to nie mówi. To jest na pewno w przypisaniu, tak? Co do deklarowania zmiennych... W czystym C nie pisałem nigdy, ale myślę że bardzo podobnie, jak w C++. Są tam chyba pewne ograniczenia (wydaje mi się, że np. w for nie można deklarować), ale ogólna zasada powinna być taka sama. Najpierw piszesz typ zmiennej, potem jej nazwę, opcjonalnie możesz ją zainicjalizować, potem dajesz albo przecinek i następną nazwę, albo średnik, jeśli to już koniec. Spójrz na przykłady: int liczba; char znak1 = 'a'; unsigned int liczbaDodatnia1, liczbaDodatnia2 = 2, liczbaDodatnia3; Nazwa nie może się zaczynać cyfrą i nie może być jednym ze słów kluczowych. I tak wstępnie, to wystarczy.
18 sty 12:30
Karol: Draghan wielkie dzięki za pomoc, przykłady biorę żywcem z zeszłorocznych kolokwium, które mam jutro emotka Przykład który podałem jest z treśći "rozwiąż poniższe wyrażenia" A co do mojego drugiego pytania, to raczej chodziło mi o to, jaką nazwę mogę użyć, ale twoje ostatnie zdanie mi wystarczyło emotka Operatory &, |, ~ − zrozumiałem już. Dlatego biorąc ten przykład : 3 + 4 ? 5 & 6 : 7 Upraszczam go sobie, zgodnie z obowiązująca kolejnością działań. 7 ? 5 & 6 : 7 5 & 6 = 4 czyli: 7 ? 4 : 7 Czytałem co robi ?, i w tym przykładzie tego nie rozumiem, bo rozpisując to: if(7) { 4 } else { 7 } Jeszcze raz dzięki za pomoc emotka
18 sty 13:12
Draghan: Trochę dziwny przykład. Ale jak na kolokwium, to rozumiem. if(7) { 4 } else { 7} da Ci "wynik"... 4. emotka Ponieważ 7 != 0, a 0 jest uznawane za false. Nie będę się rozpisywał, bo i nie ma po co − wrzucę Ci cytat. emotka "Kiedy instrukcja warunkowa zwraca prawdę? Instrukcja warunkowa zwraca prawdę wtedy gdy wartość wyrażenia logicznego, umieszczonego w nawiasach zaokrąglonych jest prawdziwa. Wartość wyrażenia logicznego jest prawdziwa wtedy, gdy jest ona różna od zera." [źródło: http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Instrukcja-warunkowa-if-else/16 ]
18 sty 13:23
Karol: OK, rozumiem. Dziękuje bardzo emotka
18 sty 15:21
Draghan: Owocnej nauki! emotka emotka
18 sty 15:34
Karol: Dziękuje emotka Jak mogę mieć jeszcze jedno pytanie to: int k=1; #define p 'k' char y=p; printf("%c",y−k); Dlaczego rezultatem tego będzie j? Z góry (ponownie zresztą) bardzo dziękuję
18 sty 18:37
Draghan: Tutaj musisz znać konwersje typów. Dodam komentarze, żebyś zrozumiał, co tu zachodzi. int k=1; #define p 'k' /* definiujesz stałą preprocesora. Gdziekolwiek użyjesz p, wstawi się 'k' */ char y=p; /* zmienna znakowa y = 'k' */ printf("%c",y−k); /* a tutaj drukujesz zmienną znakową, która ma wartość 'k' − 1, czyli... właśnie 'j', bo 'j' ma kod ASCII o jeden mniejszy, niż kod, który ma 'k' */ Pomogłem? emotka
18 sty 18:52
Karol: Dzieki znowu za pomóc. Tak zrozumiałem, cholerny ASCII Jeżeli mogę zapytać, to w czym programujesz? emotka
18 sty 18:56
Draghan: Zapytać możesz. W niczym w sumie. Hobbystycznie się klepało w C++. emotka
18 sty 19:09
Karol: Ah, rozumiem − myślałem, że studiujesz lub pracujesz jako programista emotka Jak powiedziałeś, zapytać można, więc jeżeli by Ci się chciało dosłownie z ostatnim problemem mi pomóc, byłbym przezobowiązany! int tab [4] [5]; double B[5]; double *p; int r; int *w = &r; ___ a) *B = 5.24; b) w = B; c) p = B [0]; d) *w = tab [3] [4]; Mam napisać, które "oświadczenia(statements) są poprawne. Jak Ci się nie chce, to nie ma problemu i tak bardzo mi pomogłeśemotka Z góry dzięki!
18 sty 19:56
Ada: a) B jest wskaźnikiem na pierwszy element tablicy. Operator * zastosowany do wskaźnika wydobywa jego wartość. Więc instrukcja *B= 5.24 jest równoważna B[0] = 5.24 b) poprawne z powodu tego co wyżej c) nie poprawne, bo B[0] to wartość pierwszego elementu tablicy B, więc jest typu double. d) też nie poprawne z tego co wyżej (plus to powinien być wskaźnik do wskaźnika, czyli zadziała double **w , bo tab jest wskaźnikiem pierwszego elementu tablicy wskaźników) Najlepiej wklepać kod w kompilator i sprawdzić czy działa emotka W klasycznym C wszystkie zmienne powinno się deklarować na początku programu przed instrukcjami i blokami.
18 sty 20:21
Draghan: Chciałem studiować inżynierię oprogramowania, ale uczelnia mnie nie chciała. Dwukrotnie. Zdaje mi się, że p = B[0]; nie jest poprawne. Ale to najlepiej napisz sobie program sprawdzający. Ja spadam do całek. Powodzenia jutro!
18 sty 20:24
Karol: Dzięki wielkie Adaemotka Szkoda Draghan, jestem pewny, że byś sobie świetnie poradził − tobie też powodzeniaemotka
18 sty 21:04