mieru Napisano Listopad 16, 2013 Zgłoś Share Napisano Listopad 16, 2013 Witam, to moj pierwszy post na forum. Jestem poczatkujacy i mam do zrobienia zadanie a mianowicie: 5. Załóżmy, że chcemy stworzyć własna wersję zbiorów. Przyjmijmy, że w naszym zbiorze może być maksymalnie 8 elementów. To czy dany element jest w zbiorze, czy też nie mogłaby sygnalizować wartość pojedynczego bitu w bajcie (1 – element jest w zbiorze, 0 – brak elementu). Żeby uniknąć problemów z pamiętaniem, który bit odpowiada za jaki element, można stworzyć typ wyliczeniowy, w którym będą nazwy wszystkich możliwych elementów zbioru. Napisz program, w którym skorzystasz ze zbioru opartego na wyżej opisanym pomyśle. Główny problem polega na tym że nie rozumiem co mam zrobic Zączełem coś kombinować program zad5lab5; uses crt; type zbior = (1,2,4,8,16,32,64,128) ; var x:zbior; i:integer; function sprawdz(e:integer;x:zbior):boolean; begin if (i and x = i) then sprawdz:=true else sprawdz:=false; end; begin clrscr; readln(i); writeln(sprawdz(e,x)); readln; end. Czy ktos moze mi udzielic jakichs wskazowek ? Link do komentarza Udostępnij na innych stronach More sharing options...
Jason Napisano Listopad 17, 2013 Zgłoś Share Napisano Listopad 17, 2013 Wydaje mi się, że ten typ wyliczeniowy powinien wyglądać tak: zbior = (elem1=1,elem2=2,elem3=4,elem4=8,elem5=16,elem6=32,elem7=64,elem8=128) ; Co do reszty, to treść zadania jest naprawdę niezrozumiała. Link do komentarza Udostępnij na innych stronach More sharing options...
mieru Napisano Listopad 18, 2013 Autor Zgłoś Share Napisano Listopad 18, 2013 Zadanie juz rozwiazane. Wrzucam kod jakby ktos kiedys potrzebowal, owszem jest to gotowiec ale mysle ze przy takiej tresci zadania ciezko sobie bez niego poradzic. program lab05_05; type Telement = (e1, e2, e3, e4, e5, e6, e7, e8); // Tworzenie nowego typu o nazwie Telement, który posiada 8 elementów czyli 8 różnych wartości Tzbior = byte; // Tworzenie nowego typu o nazwie Tzbior, który jest identyczny jak byte var zbior : Tzbior; // Nowa zmienna typu Tzbiór czyli byte procedure DodajElement(_element : Telement); // Procedura z jednym argumentem _element typu Telement czyli ta zmienna _element zgodnie z powyższą definicją poisada 8 wartości var maska : byte; // nowa zmienna typu byte begin maska := 1; {00000001} // ustawienie maski maska := maska shl ord(_element); // shl jest to przesunięcie bitowe w lewo czyli jak maska ma 00000001 i damy shl 2 to bedzie 00000100 // ord jest to funkcja w pascalu która zamienia znaki na liczby np ord('E')=69 // chr tak jak ord tylko zamienia liczby na znaki chr(69) = 'E' zbior := zbior or maska; // Ustawienie bitów w zbiorze za pomocą maski end; procedure UsunElement(_element : Telement); var maska : byte; begin maska := 1; maska := maska shl ord(_element); zbior := zbior xor maska; // Negacja bitowa to co rudzinski mowil end; function JestElement(_element : Telement) : boolean; var maska : byte; begin maska := 1; maska := maska shl ord(_element); if zbior and maska <> 0 then // sprawdzenie czy element istnieje to znaczy jezeli and zwróci 00000000 to nie istnieje jak jakies inne to istnieje // warunek mozna przeczytac jezeli sprawdzenie bitowe jest różne od 0 (czyli false) to znaczy ze element istnieje JestElement := true else JestElement := false; end; begin DodajElement(e4); // Ustawienie elementu e4 ze istnieje czyli ze jest wlozony do szafki DodajElement(e6); // to samo tylko ze e6 czyli ustawiamy na nim 1 // teraz zbior wyglada tak 00010100 if JestElement(e4) = true then // jezeli element 4 jest ustawiony na 1 to wypisz jest element jezeli nie to niema elementu np w szafce writeln('Jest element e4') else writeln('Nie ma elementu e4'); if JestElement(e6) = true then writeln('Jest element e6') else writeln('Nie ma elementu e6'); writeln('Wywolanie UsunElement(e4);'); UsunElement(e4); // Usunięcie elementu e4 ze zbioru czyli wyjecie go z szafki // zbior teraz ma postac 00000100 if JestElement(e4) = true then writeln('Jest element e4') else writeln('Nie ma elementu e4'); if JestElement(e6) = true then writeln('Jest element e6') else writeln('Nie ma elementu e6'); readln; end. Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.