Skocz do zawartości

zadanie, pomocy


mieru

Polecane posty

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

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

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...