PASCAL operacja logiczne


(Lkslukisz) #1

Mam do napisania program, i mam dla was prośby podał jakieś instrukcje/pomysły do napisania tego programu.

Przyszło mi do głowy żeby z bin na dec, w dec napisać operacje logiczna, i potem znowu wynik zapisać do systemu dwójkowego, i mam pytanie czy jest jakiś łatwiejszy sposób na napisanie? jeśli tak to prosze o instrukcje, z góry dzięki

\/ \/ \/ \/ \/ \/ \/ \/ TREŚĆ ZADANIA \/ \/ \/ \/ \/ \/ \/ \/

Napisac program do przeprowadzania operacji logicznych (and, or, xor, nand, nor) na co najwyzej

100-znakowych liczbach binarnych. Program pobiera liczby i operacje ze standardowego wejscia

i wypisuje wynik na standardowe wyjscie. Przykładowe wywołanie programu:

program.exe 101010110 and 1001

Z GÓRY DZIEKUJE ZA POMOC


(Sawyer47) #2

Jeśli chcesz konwertować z systemu binarnego na dziesiętny musiałbyś mieć co najmniej 100-bitowe zmienne, a nie wydaje mi się aby Pascal standardowo takie posiadał. Po prostu wykonuj te operacje na odpowiadających sobie znakach ciągów znaków, przy czym już operacje działające na znakach '0' i '1' musiałbyś sam napisać.


(Lkslukisz) #3

a można prosić jeszcze o troche wiecej szczegółów


(Pablo_Wawa) #4

Każdą liczbę (podawaną jako parametr wywołania programu) traktuj jako ciąg (string) 100-znakowy.

No i musisz napisać kilka funkcji:

  • uzupełnienia liczby z przodu zerami (do 100 znaków)

  • operacje binarne na takich ciągach (to proste, masz pętlę po 100 pozycjach, na każdej robisz daną operację logiczną/binarną). Można to sobie nawet zoptymalizować, tworząc kilka funkcji "atomowych", operujących na jednym bicia (znaku stringa), którą wywołujesz w pętli te 100 razy.

UWAGA: uważam, że w zapisie zadania wyrażenie "operacje logiczne" nie jest właściwe (błędne nawet) - poprawnie powinno być "operacje binarne" - bo logiczne to zero i nie-zero.

-- Dodane 26.11.2012 (Pn) 21:32 --

Przykład:

function bitAND(a,b: char): char;

begin

  if a='1' and b='1' then bitAND:='1'

  else bitAND:='0';

end;


type liczba=string[100];

function funcAND(a,b: liczba): liczba;

  var i: byte; c: liczba;

begin

  for i:=1 to 100 do

    c[i]:=bitAND(a[i],b[i]);

  funcAND:=c;

end;

Nie wiem, czy to jest poprawnie, ale taki jest mniej więcej mój pomysł na rozwiązanie. Do tego funkcje konwertujące (uzupełniające zerami brakujące bity) parametry wywołania programu i funkcja wypisująca taką liczbę (wynik końcowy).


(Lkslukisz) #5

dzięki, ten kawałek kodu mnie już bardzo oświecił


([alex]) #6

if a='1' and b='1' then bitAND:='1' // nie ma szans by zadziałało.


(Pablo_Wawa) #7

@[alex] - a czemu? Co jest źle? Ja nie mam teraz jak sprawdzić kompilatorem (używałem Turbo/Borland Pascala), ale koncepcja jest właściwa.

Być może potrzeba wstawić nawiasy przy porównaniach i tyle.

if (a='1') and (b='1') then bitAND:='1'

([alex]) #8

Dokładnie, bez nawiasów jest traktowane jako:

if a= ('1' and b) ='1' then // i kompilatorowi porównania nie zgadzają się


(Pablo_Wawa) #9

Ale to wyłapie od razu kompilator, a ja nie muszę przedstawić idealnego kodu bez błędów - bo to nie konkurs, tylko pomoc. Najważniejsza jest koncepcja i tą przedstawiłem dość jasno. Rzadko koduję w Pascalu (najczęściej w JavaScripcie), więc mogłem nie pamiętać o tych niuansach.