Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * TODO
- * stworzyc typ danych bitowy (bitset) (tablica zero jedynek), ale
- * tablicowy, czyli przechowujacy wiele wartosci i funkcje do oblsugi opisane
- * w pliku bits.h
- *
- * 1. zaimplementowac funkcje opisanych w pliku bits.h, gdzie jeden element
- * tablicy (jeden bajt) odpowiada, za jedna wartosc.
- *
- * 2. napisac funkcje wypisujace bitset zerojedynkowo (zeby sprawdzac czy bity
- * ustawiono poprawnie)
- *
- * 3. napisac test jednostkowy (gotowa funkcja assert z assert.h)
- * sprawdzajaca poprawnosc funkcji. Dla ustawionych kilu bitow sprawdzic czy
- * funkcja zwraca niezero dla tych bitow i zero dla pozostalych
- *
- * 4. Dopisac nowy typ i funkcje, ktore bedą operowac juz na bitach (jeden
- * bajt=8 wartosci) (nowe nazwy funkcji, typu)
- *
- * 5. Przepisac funkcje, zeby byly makrami.
- *
- * 6. Rozszerzyc typ oraz funkcje z zadania 4. tak by pamiec byla alokowana
- * dynamicznie (tablica intow); dopisanie funkcji:
- * void * bit_create(int n);
- * ktora bedzie korzystala z wyimagonego, tylko jej wiadomego typu (tez jakas
- * niejawna struktura rzutowana na void*). Dla otoczenia bedzie "(void*)"
- * ktora bedzie zawierala limit wartosci a funkcje beda sprawdzaly czy limit
- * nie zostal przekroczony.
- *
- *
- * konieczne operatory i funkcje do wykonania zadania:
- * & | ~: operatory bitowe (materialy do zajec #3)
- * << >>: przesuniecia bitowe (materialy do zajec #3)
- * assert: sprawdza czy argument nie jest zerem. Jesli jest konczy program
- * podajac linie w ktorej program sie skonczyl
- * (TYP): rzutowanie, zmiana typu (potrzebne do zad. 6)
- * & *: uzyskanie adresu do zmiennej, zmiennej z adresu
- */
- #include <stdio.h>
- #include "bits.h"
- int main(int argc, char **argv)
- {
- struct bit_set val;
- bits_reset(&val);
- bits_set(&val, 15);
- printf("%d\n", bits_count(&val));
- printf("%d\n", bits_isset(&val, 14));
- printf("%d\n", bits_isset(&val, 15));
- printf("%d\n", bits_isset(&val, 16));
- printf("%d\n", bits_all(&val));
- printf("%d\n\n", bits_any(&val));
- bits_unset(&val, 15);
- printf("%d\n", bits_count(&val));
- printf("%d\n", bits_isset(&val, 14));
- printf("%d\n", bits_isset(&val, 15));
- printf("%d\n", bits_isset(&val, 16));
- printf("%d\n", bits_all(&val));
- printf("%d\n\n", bits_any(&val));
- int i;
- for (i = 0; i < 80; ++i)
- bits_set(&val, i);
- printf("%d\n", bits_count(&val));
- printf("%d\n", bits_all(&val));
- printf("%d\n\n", bits_any(&val));
- bits_unset(&val, 15);
- printf("%d\n", bits_count(&val));
- printf("%d\n", bits_all(&val));
- printf("%d\n\n", bits_any(&val));
- bits_reset(&val);
- printf("%d\n", bits_count(&val));
- printf("%d\n", bits_all(&val));
- printf("%d\n\n", bits_any(&val));
- return 0;
- }
- asdadfasdgfasdgasdfghsdf
- #pragma once
- #define MAX 255
- struct bit_set {
- char tab[10];
- };
- struct bit_set_2 {
- int *tab;
- int len;
- int max = MAX;
- };
- /**
- * ustawienie n-tego bita na jeden
- */
- void bits_set(struct bit_set * val, int n);
- /**
- * ustawienie n-tego bita na zero
- */
- void bits_unset(struct bit_set * val, int n);
- /**
- * sprawdzenie czy n-ty bit jest jedynka
- */
- int bits_isset(struct bit_set * val, int n);
- /**
- * sprawdzenie ile bitow jest jedynka
- */
- int bits_count(struct bit_set * val);
- /**
- * sprawdzenie czy wszystkie bity sa jedynka
- */
- int bits_all(struct bit_set * val);
- /**
- * sprawdzenie czy jakikolwiek bit jest jedynka
- */
- int bits_any(struct bit_set * val);
- /**
- * ustawienie wszystkich bitow na 0
- */
- void bits_reset(struct bit_set * val);
- void *bit_create(int n);
- frasdfasdgfasdgasfgasd
- #include "bits.h"
- struct bit_set_2 bits;
- /**
- * ustawienie n-tego bita na jeden
- */
- void bits_set(struct bit_set * val, int n) {
- val->tab[n/8] = val->tab[n/8] | (1 << (n%8));
- }
- /**
- * ustawienie n-tego bita na zero
- */
- void bits_unset(struct bit_set * val, int n) {
- val->tab[n/8] = val->tab[n/8] & ((~0) ^ (1 << (n%8)));
- }
- /**
- * sprawdzenie czy n-ty bit jest jedynka
- */
- int bits_isset(struct bit_set * val, int n) {
- return (val->tab[n/8] & (1 << (n%8))) ? 1 : 0;
- }
- /**
- * sprawdzenie ile bitow jest jedynka
- */
- int bits_count(struct bit_set * val) {
- int i, count = 0;
- for (i = 0; i < 8*10; ++i)
- if (bits_isset(val, i))
- ++count;
- return count;
- }
- /**
- * sprawdzenie czy wszystkie bity sa jedynka
- */
- int bits_all(struct bit_set * val) {
- int i;
- for (i = 0; i < 10; ++i)
- if ((val->tab[i] ^ (~0)))
- return 0;
- return 1;
- }
- /**
- * sprawdzenie czy jakikolwiek bit jest jedynka
- */
- int bits_any(struct bit_set * val) {
- int i;
- for (i = 0; i < 10; ++i)
- if ((val->tab[i] & (~0)))
- return 1;
- return 0;
- }
- /**
- * ustawienie wszystkich bitow na 0
- */
- void bits_reset(struct bit_set * val) {
- int i;
- for (i = 0; i < 10; ++i)
- val->tab[i] &= 0;
- }
- void *bit_create(int n) {
- }
Advertisement
Add Comment
Please, Sign In to add comment