Last active
January 8, 2017 23:16
-
-
Save n1chre/2bf3de2d8a2e9edfbf345089d0573088 to your computer and use it in GitHub Desktop.
Assignment for lab exercise, students had to solve it
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function _die($msg) | |
{ | |
echo "<html><body><h1>$msg</h1><a href='/'>Početna stranica</a></body></html>"; | |
die; | |
} | |
if (!isset($_SERVER['REQUEST_METHOD'])) { | |
_die('Nece ici'); | |
} | |
$method = strtoupper($_SERVER['REQUEST_METHOD']); | |
if ($method == 'GET') { | |
?> | |
<html> | |
<body> | |
<form method='post' action='/'> | |
<table> | |
<tr> | |
<td>JMBAG</td> | |
<td><input type='text' name='jmbag'/></td> | |
</tr> | |
<tr> | |
<td>Šifra</td> | |
<td><input type='text' name='sifra'/></td> | |
</tr> | |
<tr> | |
<td/> | |
<td> | |
<button>Go</button> | |
</td> | |
</tr> | |
</table> | |
</body> | |
</html> | |
<?php | |
die; | |
} | |
if ($method != 'POST') { | |
_die('Nece ici'); | |
} | |
if (!isset($_POST['jmbag']) or !isset($_POST['sifra'])) { | |
_die('Fale podaci'); | |
} | |
$jmbag = $_POST['jmbag']; | |
$sifra = $_POST['sifra']; | |
if (!is_string($jmbag) or strlen($jmbag) != 10 or !preg_match("/^\\d+$/", $jmbag)) { | |
_die('Pogresan jmbag'); | |
} | |
$cookie_name = 'hrenic-diglog-cookie'; | |
if (!isset($_COOKIE[$cookie_name])) { | |
$t = time(); | |
$cookie = hash('sha256', $t . $jmbag); | |
setcookie($cookie_name, $cookie, $t + 3 * 60 * 60); | |
} else { | |
$cookie = $_COOKIE[$cookie_name]; | |
} | |
$h = hash('sha256', $jmbag . $sifra . $cookie); | |
function char_to_num($c) | |
{ | |
$x = ord($c); | |
if ($x >= ord(0) and $x <= ord(9)) { | |
return $x - ord(0); | |
} | |
if ($x >= ord('a') and $x <= ord('f')) { | |
return $x - ord('a') + 10; | |
} | |
if ($x >= ord('A') and $x <= ord('F')) { | |
return $x - ord('A') + 10; | |
} | |
return 0; | |
} | |
$curr = 0; | |
$idx = 0; | |
$rnd = function ($mod = 10) use (&$x, &$idx, $h) { | |
$x = ($x + char_to_num($h[$idx++])) % $mod; | |
return $x; | |
}; | |
$ops = ['sub', 'nor', 'or', 'xor', 'add', 'srl', 'and', 'mul']; | |
$regs = [1, 2, 3]; | |
// shuffle ops | |
for ($i = 0; $i < 8; $i++) { | |
$x = $rnd(8 - $i); | |
$t = $ops[$i]; | |
$ops[$i] = $ops[$i + $x]; | |
$ops[$i + $x] = $t; | |
} | |
$output = []; | |
$output[] = 'R1 = ' . $rnd(); | |
$output[] = 'R2 = ' . $rnd(); | |
$output[] = 'R3 = ' . $rnd(); | |
for ($i = 0; $i < 8; $i++) { | |
$r1 = 'R' . $regs[$rnd(3)]; | |
$r2 = 'R' . $regs[$rnd(3)]; | |
if ($rnd(4) != 0) { // 75% sanse da bude reg | |
$val = 'R' . $regs[$rnd(3)]; | |
} else { | |
$val = $rnd(); | |
} | |
$output[] = "$r1 = $r2 " . $ops[$i] . " $val"; | |
} | |
?> | |
<html> | |
<head> | |
<head> | |
<meta charset="utf-8"/> | |
<!--<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0" />--> | |
<title>Lab 4</title> | |
<link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.5.0/pure-min.css"> | |
<meta name="viewport" content="width=device-width, initial-scale=1"> | |
<link rel="stylesheet" href="style.css"> | |
</head> | |
<body> | |
<div id="wraper" class="pure-g"> | |
<article class="pure-u-1"> | |
<h1>4. laboratorij iz digitalne logike</h1> | |
<h2>JMBAG: <?php echo $jmbag; ?> Šifra: <?php echo $sifra; ?></h2> | |
<p>Ako iznad ne piše Vaš jmbag ili zadana šifra, vratite se na <a href="/">početnu stranicu</a> i ponovite login | |
</p> | |
<hr> | |
<h2>1. zadatak (0.5 boda)</h2> | |
<p>Popunite zadanu tablicu tako da je u svakom retku formula zadana s <code>W = A f B</code>, gdje je f neka | |
operacija. <br> Ako A ili B nisu potrebni,stavite Addr = 00 | |
</p> | |
<p>Ovaj zadatak <b>NIJE</b> isti kao tablica u pripremi jer AddrA nije isti kao i AddrW.<br> | |
To znači da je moguće u istoj operaciji koristiti 2 različita registra, a zapisati rezultat u 3. registar | |
</p> | |
<p> | |
<b>Napomena</b>: A(t) je vrijednost registra A, B(t) je registra B, W(t+1) je vrijednost registra W nakon | |
operacije | |
</p> | |
<table border="1"> | |
<thead> | |
<tr> | |
<td align="center">ALUOp</td> | |
<td align="center">Operacija</td> | |
</tr> | |
<?php | |
for ($i = 0; $i < 8; $i++) { | |
printf("<tr><td align='center'>%03b</td><td align='center'>%s</td></tr>", $i, $ops[$i]); | |
} | |
?> | |
</thead> | |
</table> | |
<p><b>NIJE</b> ideja da ovo napravite na pločici jer je u većini slučajeva to nemoguće. (Zašto?)<br> | |
Pretpostavite da su svi registri na početku postavljeni na 0000.<br> | |
U sve ćelije je omogućen unos pa možete popunjavati u browseru ili na papiru.</p> | |
<table border="1"> | |
<thead> | |
<tr> | |
<td align="center">Operacija</td> | |
<td align="center">AddrA</td> | |
<td align="center">AddrB</td> | |
<td align="center">AddrW</td> | |
<td align="center">ALUOp</td> | |
<td align="center">A(t)</td> | |
<td align="center">B(t)</td> | |
<td align="center">sw</td> | |
<td align="center">W(t+1)</td> | |
</tr> | |
</thead> | |
<tbody> | |
<?php | |
foreach ($output as $o) { | |
$x = "<tr><td>$o</td>"; | |
for ($i = 0; $i < 8; $i++) { | |
$x .= "<td><input type='text' size='10'/></td>"; | |
} | |
echo $x . '</td>'; | |
} | |
?> | |
</tbody> | |
</table> | |
<hr> | |
<h2>2. zadatak (1.5 bod)</h2> | |
<p> | |
Potrebno je u zadatak koji je bio u sklopu pripreme dodati sklop <a | |
href="http://www.nxlab.fer.hr/dl/lab2/serial_tx.vhd">serial_tx</a> iz predhodne vježbe. | |
Zadatak je napraviti sklop <i>pretvarac</i>, koji će pretvarati izlaz signala <code>Z</code> i ispisivati to | |
kao hex ASCII znak u terminal. Oba sklopa (<code>pretvarac</code> i <code>serial_tx</code>) treba dodati u | |
<code>datapath</code> modul. | |
</p> | |
<p> | |
<b>Napomena</b>: koji izlaz treba dodati u port map <code>datapath</code> sklopa? | |
</p> | |
<img src="dl.png"/> | |
<hr> | |
<h2>3. zadatak (1 bod)</h2> | |
<p> | |
Potrebno je promjeniti sklop pretvarac iz prošlog zadatka tako da se promjeni njegova funkcionalnost. | |
Ovisno o parnosti <code>A</code> i <code>B</code> ostvarite: | |
</p> | |
<ul> | |
<li><b>A paran i B paran</b> - hex ASCII od Z</li> | |
<li><b>A paran i B neparan</b> - hex ASCII od dvojnog komplementa od Z</li> | |
<li><b>A neparan i B paran</b> - Z-to slovo abecede u lower caseu (ex. Z=1, ispiše se 'b')</li> | |
<li><b>A neparan i B neparan</b> - Z-to slovo abecede u upper caseu (ex. Z=1, ispiše se 'Y')</li> | |
</ul> | |
<p> | |
<b>Napomena</b>: Slova abecede su numerirana od 0, odnosno za Z=0 se ispisuje 'a', odnosno 'Z' | |
<br> | |
<b>Napomena</b>: Ako radite ovaj zadatak, nije potrebno napraviti posebno 2. i 3. nego napravite samo 3. | |
zadatak. | |
</p> | |
</article> | |
</div> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
body { | |
border-left: 5px solid #d9292f; | |
margin: 0; | |
} | |
html, button, input, select, textarea, .pure-g [class *= "pure-u"] { | |
font-family: Tahoma, Arial; | |
} | |
#wraper { | |
margin: 0 auto; | |
max-width: 960px; | |
overflow: hidden; | |
padding: 0 15px; | |
} | |
#center { | |
margin: 0 auto; | |
display: block; | |
padding: 15px 0 0; | |
} | |
header { | |
font-size: 25px; | |
font-family: Tahoma, Arial; | |
font-weight: bold; | |
letter-spacing: -1px; | |
color: #222; | |
padding: 3px; | |
float: left; | |
} header span { | |
font-family: Arial; | |
font-size: 10px; | |
display: block; | |
text-shadow: none; | |
margin-left: 60px; | |
color: #888; | |
-webkit-mask: none; | |
letter-spacing: normal; | |
font-weight: normal; | |
} header hr { | |
margin: 0; | |
width: 130px; | |
border: 0; | |
border-top: 1px dotted #ccc; | |
} nav { | |
float: left; | |
font-family: Arial; | |
font-size: 10px; | |
margin: 0 15px; | |
} nav ul { | |
list-style: none; | |
padding: 0 15px; | |
margin: 10px 0; | |
} nav ul li { | |
float: left; | |
margin: 15px 10px; | |
} nav ul li a { | |
color: #d9292f; | |
} nav ul li a:hover { | |
text-decoration: underline; | |
} | |
h1 { | |
font-size: 42px; | |
letter-spacing: -1px; | |
color: #4a4a4a; | |
line-height: 38px; | |
} | |
h2, h3, h4 { | |
color: #444; | |
} | |
h3 { | |
font-size: 22px; | |
} | |
h4 { | |
margin: 15px 0 5px; | |
} | |
#main section, #main #date { | |
font-size: 14px; | |
color: #555; | |
line-height: 14px; | |
margin-top: 5px; | |
width: 500px; | |
} #main #date { | |
font-size: 10px; | |
font-family: Arial; | |
text-transform: none; | |
text-shadow: none; | |
color: #d99396; | |
line-height: 11px; | |
display: block; | |
} | |
footer { | |
margin: 20px auto 0; | |
padding: 8px 8px 50px 8px; | |
font-size: 10px; | |
font-family: Arial; | |
color: #aaa; | |
border-top: 1px dashed #ddd; | |
line-height: 1.5; | |
} a { | |
color: #d9292f; | |
text-decoration: none; | |
} a:hover { | |
text-decoration: underline; | |
} | |
article { | |
margin: 14px 0; | |
font-size: 14px; | |
color: #888; | |
line-height: 21px; | |
} article p { | |
margin: 5px 0; | |
} article b, article strong { | |
font-weight: normal; | |
color: #000; | |
} i, em { | |
font-style: italic; | |
} | |
article i, article em { | |
font-style: italic; | |
color: #666; | |
} article sub { | |
font-size: 10px; | |
text-shadow: none; | |
height: 0; | |
line-height: 1; | |
vertical-align: bottom; | |
} article sup { | |
font-size: 10px; | |
text-shadow: none; | |
height: 0; | |
line-height: 1; | |
vertical-align: super; | |
} article pre { | |
padding: 5px 8px; | |
margin: 10px 10px; | |
color: #333; | |
line-height: 1.1; | |
border: 1px dashed #ccc; | |
border-width: 1px 0; | |
font-family: Consolas, "Curier New", monospace; | |
font-size: 13px; | |
text-shadow: none; | |
} article pre:hover { | |
border-color: #888; | |
cursor: text; | |
} article pre i { | |
color: #d9292f; | |
} article hr { | |
margin: 3px -2px; | |
border: 0; | |
border-top: 1px dotted #aaa; | |
} .links hr { | |
width: 250px; | |
margin-top: 15px; | |
} article .links span { | |
font-size: 11px; | |
display: block; | |
line-height: 1.5; | |
} article pre b { | |
color: #d9292f; | |
font-weight: bold; | |
} footer b { | |
font-weight: bold; | |
color: #666; | |
} #printy { | |
float: right; | |
} | |
@media screen and (min-width: 120px) and (max-width: 480px) { | |
nav { | |
margin: 0; | |
width: 100%; | |
text-align: center; | |
border-bottom: 1px dotted #ccc; | |
text-align: center; | |
} nav ul li { | |
margin: 3px 2px 2px; | |
padding: 5px 13px; | |
border: 1px solid #ddd; | |
background: #f5f5f5; | |
} nav ul li a { | |
color: #333; | |
} #printy { | |
float: none; | |
display: block; | |
margin-top: 3px; | |
} | |
} | |
article pre u { | |
color: #999; | |
text-decoration: none; | |
} pre { | |
overflow: auto; | |
word-wrap: normal; | |
white-space: pre; | |
} .img-description { | |
font-size: 10px; | |
margin: 20px 0 0; | |
text-align: center; | |
} img { | |
margin: auto; | |
} | |
article .warn { | |
padding: 5px 8px; | |
margin: 10px 10px; | |
line-height: 1.4; | |
border: 1px dashed #d99396; | |
color: #d9292f; | |
font-size: 11px; | |
border-width: 1px 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment