Forum studentów informatyki UE Wrocław
Forum studentów informatyki UE Wroclaw

AiSD - Lista 1

farbowanyaniol - 2010-10-09, 17:12
Temat postu: Lista 1
Może mi ktoś nakreślić jak to zrobić?

8) Podaj algorytm na określenie parzystości liczb na podstawie ich zapisu w różnych systemach liczbowych (2,8,10,16)

9) Podaj algorytm na zmianę małych liter na duże w ciągu tekstowym zapisanym w kodzie ASCII

10) Zaproponuj sposób zapisu stanu gry w warcaby (czyli układu szachownicy) za pomocą trzech 32-bitowych liczb całkowitych

agnieszkaosw - 2010-10-09, 17:22

a ja mam inne pytanie, czy gr 9 ma to zrobić? Nie mamy z p. Nieslerem ćwiczeń...a nasza prowadząca chyba nic na ten temat nie wspominała...
shawnzy - 2010-10-09, 17:39

agnieszkaosw, miłe jest to że Wy(gr9) macie dostęp do eportalu, bo macie z dr Nieslerem laby, a gr11 nie, bo mamy wszystko z dr Wydmuch. Z tego co pamiętam to ma wysłać na maila, więc czekajmy :-)
Jerzu - 2010-10-09, 17:49

farbowanyaniol, co do zadania 8:

    -w systemie dwójkowym liczba jest parzysta, jeśli kończy się 0
    -w ósemkowym i dziesiętnym jest parzysta, gdy kończy się na 0, 2, 4, 6
    -w szesnastkowym, gdy kończy się na 0, 2, 4, 6, 8, A, C, E.

Wystarczy by algorytm sprawdzał powyższe warunki.

W 9 myślę, że wystarczy zwykła pętla sprawdzająca, czy dany znak jest mały i zmieniająca na duży.

Na zadanie 10 też mam pomysł, ale dość długi w opisywaniu.

Edit: Kenzi ma oczywiście rację, poprawiłem błędy.

Lechu - 2010-10-09, 18:54

zrobiłem zad 10 :-)
Oto moja propozycja rozwiÄ…zania zadania.
Te trzy liczby wykorzystuję jako pamięć 3x32 bity, tak więc zapis będzie w systemie zero-jedynkowym :)
Ten sposób wykorzystuje maksymalnie 56 bitów przy szachownicy pełnej pionków. Resztę bitów można wykorzystać do przechowania informacji o tym, czyja teraz kolej, czasie gry itp.
Mój pomysł jest taki:
Numerujemy pola, na których się gra od 1 do 32.
Program zaczyna od pierwszego pola. Bierze pierwszy bit, gdy jest to zero przechodzi do drugiego pola, a gdy jedynka to znaczy, że w aktualnym polu jest jakiś pionek. Aby się dowiedzieć jaki to pionek, program bierze kolejny bit (0 - kolor biały, 1-kolor czarny). Teraz program zna adres, czy jest w tym polu pionek oraz jego kolor - więc program "stawia" ten pionek na szachownicy. Następnie zwiększa adres o 1 i znowu sprawdza jaki bit stoi kolejny... i tak aż adres będzie mieć wartość 64.

Np. dla początkowego rozstawienia szachownicy zapis będzie taki:
---11-----11----11----11
11----11-----11----11
---11-----11----11----11
0------0------0------0
----0------0----- 0-----0
10----10----10-----10
---10-----10----10----10
10----10----10-----10

no i algorytm:
int adres = 1;
int bit;
int bit2;
string kolor;

do
{
bit = wczytajNastępnyBit();

while(bit == 0)
adres = adres + 1;

bit2 = wczytajNastępnyBit();

if (bit2 == 0)
kolor = "białe";
else
kolor = "czarne";
postawPionek(adres, kolor);
}while(adres <= 32)

jeśli gdzieś jest bląd pisać!!!
/edit
poprawiony
Algorytm jest po to, aby przedstawić mój pomysł w bardziej przejrzysty sposób :P

e^x - 2010-10-09, 18:55

Zad 8, Zad 9 :
zgadzam siÄ™ z Jerzu,
Zad 10:
Pionki można stawiać na 32 polach, więc pierwsza liczba 32-bitowa ( w systemie dwójkowym) ustawienie pionków dla gracza nr 1, a druga to ustawienie pionków dla drugiego gracza, 1-gdy pionek na danej pozycji istnieje i 0-gdy nie istnieje.
W ten sposób jednoznacznie zapisujemy stan gry przy użyciu dwóch zmiennych,
w trzeciej zmiennej możemy np. zapisać czyj ruch następuje.
Potem algorytm czyta te dane i sprawdza warunki i ustala pola na podstawie tych dwóch liczb
(Ale algorytm odczytu to już nie jest nasza sprawa).

e^x - 2010-10-09, 19:01

Lechu, sposób zapisu ,a algorytm to chyba dwie różne rzeczy, ale mogę się mylić
pit3r - 2010-10-09, 23:30

Co do zadania nr 9. Zauważyć należy, że małe litery w kodzie ASCII przyjmują wartości od 97 do 122, duże natomiast od 65 do 90. Wystarczy, więc wczytać literę, zamienić ją na odpowiednią wartość w kodzie ASCII, od tej wartości odjąć 32 i zwrócić odpowiadający otrzymanej wartości symbol. Ot cały algorytm, który można przedstawić w postaci listy kroków lub schematu blokowego ;-)
Kenzi - 2010-10-10, 00:02

Jerzu napisa³/a:
farbowanyaniol, co do zadania 8:

    -w systemie dwójkowym liczba jest parzysta, jeśli kończy się 0
    -w ósemkowym i dziesiętnym jest parzysta, gdy kończy się na 0, 2, 4, 6, 8
    -w szesnastkowym, gdy kończy się na 0, 2, 4, 6, 8, A, E.

Wystarczy by algorytm sprawdzał powyższe warunki.


Z małymi zastrzeżeniami:
- w ósemkowym oczywiście nie ma cyfry "8"
- w szesnastkowym jeszcze "C"

A co do 9 - skoro w ASCII to każda litera ma swój kod, więc po prostu pętla sprawdzająca, czy kod znaku należy do 97-122 (chyba, że w programowaniu mamy to zapisane hexem wtedy 61-7A) i odejmujemy od tego kodu wartość 32 (przy hexie 20).

pit3r - 2010-10-10, 00:10

jeśli chodzi o 8, nie zagłębiałbym się w szczegóły. W skrócie algorytm wyglądałby wg mnie następująco:
1. wczytaj podstawÄ™ systemu liczbowego "n".
2. wczytaj liczbÄ™ x.
3. jeśli n<>10 zamień daną liczbę na odpowiadającą jej w systemie dziesiętnym(na podstawie "n").
4. Jeśli x mod 2 = 0 - wyświetl "Liczba parzysta". W przeciwnym razie wyświetl "Liczba nieparzysta.

Dzielenie mod(modulo) oznacza dzielenie z resztÄ…. W Pascalu funkcja ta zwraca resztÄ™ z dzielenia.

Kenzi - 2010-10-10, 00:22

Raczej Pascal miałby większy problem z przekonwertowaniem jednego systemu liczbowego na drugi niż z całością programu. A pisanie całego konwertera to sprawa o niebo dłuższa niż sam program. Rzecz jest raczej prostsza - olać jaki to system liczbowy - dokładnie działający program:
a) sprawdza czy w liczbie nie ma przecinka (bo wtedy automatycznie jest nieparzysta)
b) zamienia liczbę na ciąg znaków (string) i sprawdza czy ostatni znak (taka funkcja znajdzie się na pewno) jest równy 0, 2, 4, 6, 8, A, C, E

BTW: MOD to dokładnie "reszta z dzielenia", a nie "dzielenie z resztą" - zawsze :).

pit3r - 2010-10-10, 09:07

Kenzi, przeliczaniem zajmowałby się już odrębny algorytm dlatego napisałem, że nie bd zagłębiał się w szczegóły :-P Jednak moje małe niedopatrzenie. Napisałem algorytm dla wszystkich systemów liczbowych(2,3,5,6... itd.), a że pod uwagę mamy brać tylko (2,8,10,16), w tym przypadku rzeczywiście wystarczy sprawdzać końcówki ;-)
k.i.k.a. - 2010-11-09, 20:39

Może ktoś umieścić rozwiązane trzy pierwsze listy? ;-)
Kociania - 2010-11-15, 12:40

Czy ktoś może pomóc w rozwiązaniu zadania 7 i 8 z listy 2???
Literati - 2010-11-15, 13:20

8/lista 2 Wyrażenie "Jola ma kota" zawiera 12 znaków i teraz w zależności od systemu kodowania mnożymy przez odpowiednią ilość bitów, a potem dzielimy przez 8 i mamy bajty
a) 12*7=84b=10,5B
b) 12*8=96b=12B
c) 12*8=96b=12B
d) UTF-8 od 1 do 6 b od 12 do 72 b=1,5 do 9B
e) 12*2=24b=3B

Co do 7 to mój brat z informatyki na polibudzie zdziwił się, że mamy takie zadanie, bo wymaga skomplikowanych obliczeń.

msch08 - 2010-11-15, 17:36

jutro grupa 11 pisze koło.
w jakiej sali piszemy i czy ktoś posiada jakiekolwiek notatki z ćw
za wszelką pomoc z góry wielkie dzięki

Kenzi - 2010-11-15, 18:42

Jak rozumiem nie masz dostępu do działu 'grupa 11'... Tak więc w skrócie:
> koło w sali 606Z o 15:25
> obowiązują wszystkie 3 listy zadań (wg tego co powiedziała nie będzie nawet zmieniała treści zadań)
> a jeśli chodzi o te bardziej pewne rzeczy, to cytat z forum grupy 11:
qbollo napisa³/a:
Ano, oto i one:

- procedury i funkcje
- iteracja i rekurencja, oraz różnice między nimi
- rozmiary różnych typów zmiennych
- algorytm wypisujÄ…cy n kolejnych liczb pierwszych
- algorytm wypisujący n kolejnych liczb naturalnych (od jakiegoś tam momentu n, m, czy ź)

Tak mam zapisane, co siÄ™ kryje pod tym wszystkim nie pytajcie 8-)

Sav1ola - 2010-11-15, 18:46

A mógłby ktoś wrzucić:
- algorytm wypisujÄ…cy n kolejnych liczb pierwszych

minister - 2010-11-15, 18:52

Sav1ola napisa³/a:
A mógłby ktoś wrzucić:
- algorytm wypisujÄ…cy n kolejnych liczb pierwszych


tak tak, niech ktoÅ› wrzuci;)

pit3r - 2010-11-15, 19:03

Chyba tego potrzebujecie ;)
Literati - 2010-11-15, 19:32

Poprawka do zadania 8 z listy 2
a) 12*1B=12B
bi c jest OK
d) 12*1B=12B
e)12*2B=24B

Turinio - 2010-11-15, 19:42

A mógłby ktoś pomóc z zadaniem VI z listy 2?
Angie - 2010-11-15, 19:51

boolean – 8
byte – 8
float – 2
char – ASCII – 8

nie wiem reszty

Turinio - 2010-11-15, 19:54

dzieki! :-)
Koordynator - 2010-11-15, 20:14

L2Z10 - wersja alternatywna.



: )


---
Angie napisa³/a:
boolean – 8


64 nie 8. Boolean to wartość logiczna Prawda(1)/Fałsz(0), a więc jest zapisywana na jednym bicie.

aniut - 2010-11-15, 20:51

a o co chodzi z tymi dwoma plusikami?
Koordynator - 2010-11-15, 20:58

Kod:
i++
to to samo co
Kod:
i:=i+1

pit3r - 2010-11-15, 20:59

aniut, jest to tzw. inkrementacja. Możesz zapisać ją na kilka sposobów:

Kod:
zmienna := zmienna+1
zmienna +=1
zmienna++


analogicznie dekrementacja:
Kod:

zmienna := zmienna-1
zmienna -= 1
zmienna--

aniut - 2010-11-15, 21:33

dzięki :)
Dudek - 2010-11-15, 22:01

A ja siÄ™ zapytam, ma ktos te opisowe zadania zrobione z 3 list pierwszych?
killaruna - 2010-11-15, 22:50

Jeśli chodzi o zadanie 7 z listy 2 - postać zmiennoprzecinkowa to inaczej postać wykładnicza, czyli postać mantysy pomnożonej przez 10 do pewnej potęgi całkowitej, przy czym zamiast liczby 10 do którejśtam potęgi jest pisany symbol E lub e. W poleceniu nie zaznaczono, czy mamy to liczyć na liczbach dwójkowych (jak to sobie robi komputer), więc wnioskuję, że z łaski zostajemy przy systemie dziesiętnym :-P stąd też np.

Gdy notacja dziesiętna wynosi:
4837.92 to w wykładniczej 4.83792E+3;
0.0483792 to w wykładniczej 4.83792E-2;
-0.483792 to w wykładniczej -4.83792E-1.

W przypadku wykładnika dodatniego kropka dziesiętna w mantysie przesuwa się w lewo o liczbę miejsc równą wartości wykładnika. Przy wykładniku ujemnym kropka dziesiętna wędruje w prawo o liczbę pozycji równą wartości bezwzględnej wykładnika.

Więc:
a) 0,00003 to w wykładniczej: 3,0000E-5 (E-5, bo przesunęliśmy na prawo o 5 kropkę dziesiętną)
b) 1,023 to w wykładniczej 1,0230E+0 (E+0, bo nic nie zrobiliśmy z kropką)
c) 2/3 = 0,6666(7)... dla ułatwienia zrobimy zaokrąglenie, to w wykładniczej: 6,6667E-1

Mam nadzieję, że nie ma bugów :roll:

Koordynator - 2010-11-15, 22:57

Cytat:
Przedstaw w postaci zmiennoprzecinkowej (32 bity) następujące liczby:


IHMO te "32 bity" sugerują, że jednak ma być w binarnym.

killaruna - 2010-11-15, 23:06

Kurde :-/ za późna pora już dla mnie na logiczne myślenie :-P
DantePL - 2010-11-15, 23:11

Widzę, że problemy są z czymś co w sumie i tak automat za nas robi:
KLIK
a jak ma ktoÅ› problemy z wpisaniem "co i gdzie", to ewentualnie, dodatkowo:
KLIK

killaruna - 2010-11-15, 23:17

Hehe, no dobra, ale jak da Ci innÄ… liczbÄ™ na kole, to Ci automat nie policzy :-P
DantePL - 2010-11-15, 23:28

Przeca mówiła, że tego nie da. Więc o co ten hałas? Masz automat i się ciesz :-P
KrzysiekWu - 2010-11-16, 00:08

:-o
Koordynator - 2010-11-16, 01:24

W nagrodę wydziergałem ci dywan:

(dywan 911 7) ~40min.
GL HF Cya on.


Powered by phpBB modified by Przemo © 2011 phpBB Group