Administratorzy gnysek Opublikowano 11 Marca 2009 Administratorzy Udostępnij Opublikowano 11 Marca 2009 Dobra, mój arcygienialny facet od programowania, znany też jako "Pączek", wymyślił program którego sam nie rozumie, ja też nie mam pojęcia o co chodzi, ale mam jeszcze was :) Więc po kolei. Dana jest funkcja: unsigned getbits(unsigned x, int x, int p) { return (( x >> (p+1-n)) &~(~0<<n)); } Zadanie: napisać funkcję - czytającą liczbę (unsigned) binarną - drukujący liczbę (unsigned) binarną program ma wyglądać tak: x = czytajBin(); y = getbits(x,5,9); drukujBin(y); Oczywiście jak wpiszę do programu "1101" to on widzi to jako int 13 i potem po przejsciu getbits, drukuje znów jako binarkę. No więc dobra, napisałem program, ale mi się nie podoba, kto mi go poprawi? #include <stdio.h> #define LONG 100 int len; unsigned getbits(unsigned x,int n,int p) { return (x >> (p + 1 - n)) & ~(~0 << n); } int czytajBin() { char tekst[LONG]; int i,wynik,potega,dlugosc; printf("podaj:\n"); scanf("%[0-1]",&tekst); wynik = 0; dlugosc = 0; for(i=0; i<LONG; i++) { if ( tekst[i]=='1' || tekst[i]=='0' ) dlugosc ++; } len = dlugosc; for(i=0; i<dlugosc; i++) { if ( i==0 ) potega=1; if ( i==1 ) potega=2; if ( tekst[dlugosc-i-1]=='1' ) wynik+=potega; if ( tekst[dlugosc-i-1]!='1' && tekst[dlugosc-i-1]!='0' ) break; potega = potega * 2; } return wynik; } void drukujBin(unsigned a,int len) { int i; char liczba[LONG]; for (i=0; i<LONG; i++) { liczba[i]='0'; } i=0; if (a == 0) liczba[0]='0'; else while ( a > 0) { liczba[i] = ( a % 2 == 0) ? '0' : '1'; a = a/2; i++; } printf("Po przesunieciu:\n"); for (i=len-1; i>=0; i--) { printf("%c",liczba[i]); } printf("\n\n"); } main() { int x,y; x = czytajBin(); y = getbits( x , 5 , 9 ); drukujBin( y , len ); } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 16 Marca 2009 Autor Administratorzy Udostępnij Opublikowano 16 Marca 2009 Uwielbiam sam sobie odpowiadać: #include<stdio.h> #include<stdlib.h> // funkcja getbits // wycina n bitow z "x" od pozycji p w prawo // (zerowa pozycja to skrajnie prawa pozycja) unsigned getbits(unsigned x, int n, int p) { return ((x>>(p-n+1)) & ~(~0<< n)); } //czyta binarne unsigned czytajBin() { unsigned x=0; int z; while ( (z=getchar())!=EOF && z!='\n' ) { if (z=='0') x<<=1; else if (z=='1') { x<<=1; x |=01; } else return 0; } return x; } //drukuje binarne void drukujBin(unsigned x) { int j,y; for( j=8*sizeof(unsigned)-1; j>=0; j--) { y=x>>j; if ((y&1)==0) putchar ('0'); else putchar ('1'); } printf("\n"); } int main() { unsigned x; x = czytajBin(); x = getbits(x, 5, 9); drukujBin(x); return 0; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ludzix Opublikowano 16 Marca 2009 Udostępnij Opublikowano 16 Marca 2009 Zadaj teraz sobie pytanie, jak to działa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 16 Marca 2009 Autor Administratorzy Udostępnij Opublikowano 16 Marca 2009 nie wiem, ważne, że będzie zaliczone xD Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dragon Opublikowano 27 Marca 2009 Udostępnij Opublikowano 27 Marca 2009 Ale jak Ty gnysek, zadałeś sobie pytanie i odpowiedziałeś to poco zakładasz temat?? Co do tematu, trochę tego kodu rozumiem, ale jakoś nie umiem zrozumieć całego kodu :unsure: . Odświeżenie tematu + Post nie na temat. gnysek Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 27 Marca 2009 Autor Administratorzy Udostępnij Opublikowano 27 Marca 2009 Bo jak zakładałem temat, nie znałem odpowiedzi, chyba logiczne? Za odświeżanie i spam dostajesz oczywiście ostrzeżenie, bo ten post nie wnosi nic do tematu, poza tym nie przepadam jak mi ktoś zwraca uwagę, zwłaszcza gdy jego zachowanie jest dużo poniżej poziomu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się