Code: Alles auswählen
<?php
session_start ();
?>
<form method="POST" action="./form20240224.php">
<input type="text" name="2024022401"></input>
<input type="submit">
</form>
<?php
echo session_id () . "<br>\n";
setcookie ("2024022402", "Hallo Welt, sagt Cookie 1", time () + 3600);
echo htmlentities ($_POST ["2024022401"]) . "<br>\n";
echo htmlentities ($_COOKIE ["2024022402"]) . "<br>\n";
echo htmlentities ($_COOKIE ["2024022403"]) . "<br>\n";
session_destroy ();
?>
Code: Alles auswählen
POST http://localhost/mysql20240217/20240224/form20240224.php HTTP/1.1
host: localhost
Cookie: 2024022403=Hallo Welt sagt Cookie 2
Content-Length: 31
Content-Type: application/x-www-form-urlencoded
2024022401=Ich bin Variable 1
Code: Alles auswählen
Trying ::1...
Connected to localhost.
Escape character is '^]'.
HTTP/1.1 200 OK
Date: Sat, 24 Feb 2024 12:13:28 GMT
Server: Apache/2.4.57 (Debian)
Set-Cookie: PHPSESSID=ipa52bt4n1vs6uovvrsp768em6; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Set-Cookie: 2024022402=Hallo%20Welt%2C%20sagt%20Cookie%201; expires=Sat, 24 Feb 2024 13:13:28 GMT; Max-Age=3600
Vary: Accept-Encoding
Content-Length: 217
Content-Type: text/html; charset=UTF-8
<form method="POST" action="./form20240224.php">
<input type="text" name="2024022401"></input>
<input type="submit">
</form>
ipa52bt4n1vs6uovvrsp768em6<br>
Ich bin Variable 1
<br>
<br>
Hallo Welt sagt Cookie 2<br>
Code: Alles auswählen
<?php
session_start ();
include ("/home/david/mysqldata.php");
$db = new PDO ("mysql: host=localhost", $MYSQL_USER, $MYSQL_PASSWORD);
$sql = "CREATE DATABASE mysql20240224" . session_id ();
$db->query ($sql);
$sql = "USE mysql20240224" . session_id ();
$db->query ($sql);
$sql = "CREATE TABLE a (x1 INTEGER, x2 INTEGER);";
$db->query ($sql);
$sql = "CREATE TABLE b (y1 INTEGER, y2 INTEGER);";
$db->query ($sql);
$sql = "INSERT INTO a (x1, x2) VALUES (4, 4);";
$db->query ($sql);
$sql = "INSERT INTO a (x1, x2) VALUES (4, 8);";
$db->query ($sql);
$sql = "INSERT INTO a (x1, x2) VALUES (8, 4);";
$db->query ($sql);
$sql = "INSERT INTO a (x1, x2) VALUES (8, 8);";
$db->query ($sql);
$sql = "INSERT INTO a (x1, x2) VALUES (9, 9);";
$db->query ($sql);
$sql = "INSERT INTO b (y1, y2) VALUES (4, 8);";
$db->query ($sql);
$sql = "INSERT INTO b (y1, y2) VALUES (8, 4);";
$db->query ($sql);
$sql = "INSERT INTO b (y1, y2) VALUES (9, 9);";
$db->query ($sql);
$sql = "SELECT x1, x2 FROM a;";
$stmt = $db->query ($sql);
while ($row = $stmt-> fetch())
echo $row [0] . ", " . $row [1] . "<br>\n";
echo "<br>\n";
$sql = "SELECT y1, y2 FROM b;";
$stmt = $db->query ($sql);
while ($row = $stmt->fetch ())
echo $row [0] . ", " . $row [1] . "<br>\n";
echo "<br>\n";
$sql = "SELECT x1, x2, y1, y2 FROM a INNER JOIN b;";
$stmt = $db->query ($sql);
while ($row = $stmt->fetch ())
echo $row [0] . ", " . $row [1] . ", " . $row [2] . ", " . $row [3] . "<br>\n";
echo "<br>\n\n";
$sql = "DROP DATABASE mysql20240224" . session_id ();
$db->query ($sql);
session_destroy ();
?>
Code: Alles auswählen
4, 4<br>
4, 8<br>
8, 4<br>
8, 8<br>
9, 9<br>
<br>
4, 8<br>
8, 4<br>
9, 9<br>
<br>
4, 4, 4, 8<br>
4, 4, 8, 4<br>
4, 4, 9, 9<br>
4, 8, 4, 8<br>
4, 8, 8, 4<br>
4, 8, 9, 9<br>
8, 4, 4, 8<br>
8, 4, 8, 4<br>
8, 4, 9, 9<br>
8, 8, 4, 8<br>
8, 8, 8, 4<br>
8, 8, 9, 9<br>
9, 9, 4, 8<br>
9, 9, 8, 4<br>
9, 9, 9, 9<br>
<br>
Code: Alles auswählen
<?php
session_start ();
include ("/home/david/mysqldata.php");
$db = new PDO ("mysql: host=localhost", $MYSQL_USER, $MYSQL_PASSWORD);
$sql = "CREATE DATABASE q20240224" . session_id ();
$db->query ($sql);
$sql = "USE q20240224" . session_id ();
$db->query ($sql);
$sql = "CREATE TABLE a (x INTEGER);";
$db->query ($sql);
$sql = "CREATE TABLE b (x INTEGER);";
$db->query ($sql);
$sql = "CREATE TABLE c (x INTEGER);";
$db->query ($sql);
for ($i = 0; $i < 24; $i++) {
$sql = "INSERT INTO a (x) VALUES (\"" . rand () % 32 . "\");";
$db->query ($sql);
$sql = "INSERT INTO b (x) VALUES (\"" . rand () % 64 . "\");";
$db->query ($sql);
$sql = "INSERT INTO c (x) VALUES (\"" . rand () % 48 . "\");";
$db->query ($sql);
}
$sql = "SELECT x FROM (SELECT x FROM a UNION SELECT x FROM b) x;";
$stmt = $db->query ($sql);
while ($row = $stmt->fetch ())
echo $row [0] . " ";
echo "<br>\n";
$sql = "SELECT x FROM (SELECT x FROM a UNION SELECT x FROM c) x;";
$stmt = $db->query ($sql);
while ($row = $stmt->fetch ())
echo $row [0] . " ";
echo "<br>\n";
$sql = "SELECT x FROM (SELECT x FROM b UNION SELECT x FROM c) x;";
$stmt = $db->query ($sql);
while ($row = $stmt->fetch ())
echo $row [0] . " ";
echo "<br>\n";
$sql = "SELECT x FROM (SELECT x FROM a INTERSECT SELECT x FROM b) x;";
$stmt = $db->query ($sql);
while ($row = $stmt->fetch ())
echo $row [0] . " ";
echo "<br>\n";
$sql = "SELECT x FROM (SELECT x FROM a INTERSECT SELECT x FROM c) x;";
$stmt = $db->query ($sql);
while ($row = $stmt->fetch ())
echo $row [0] . " ";
echo "<br>\n";
$sql = "SELECT x FROM (SELECT x FROM b INTERSECT SELECT x FROM c) x;";
$stmt = $db->query ($sql);
while ($row = $stmt->fetch ())
echo $row [0] . " ";
echo "<br>\n";
$sql = "SELECT x FROM (
SELECT x FROM (SELECT x FROM a UNION SELECT x FROM b) x
INTERSECT
SELECT x FROM c
) x;";
$stmt = $db->query ($sql);
while ($row = $stmt->fetch ())
echo $row [0] . " ";
echo "<br>\n";
$sql = "SELECT x FROM (
SELECT x FROM (SELECT x FROM a INTERSECT SELECT x FROM c) x
UNION
SELECT x FROM (SELECT x FROM b INTERSECT SELECT x FROM c) x
) x;";
$stmt = $db->query ($sql);
while ($row = $stmt->fetch ())
echo $row [0] . " ";
echo "<br>\n";
$sql = "SELECT x FROM (
SELECT x FROM (SELECT x FROM a UNION SELECT x FROM c) x
INTERSECT
SELECT x FROM b
) x;";
$stmt = $db->query ($sql);
while ($row = $stmt->fetch ())
echo $row [0] . " ";
echo "<br>\n";
$sql = "SELECT x FROM (
SELECT x FROM (SELECT x FROM a INTERSECT SELECT x FROM b) x
INTERSECT
SELECT x FROM (SELECT x FROM c INTERSECT SELECT x FROM b) x
) x;";
$stmt = $db->query ($sql);
while ($row = $stmt->fetch ())
echo $row [0] . " ";
echo "<br>\n";
$sql = "SELECT x FROM (
SELECT x FROM (SELECT x FROM b UNION SELECT x FROM c) x
INTERSECT
SELECT x FROM a
) x;";
$stmt = $db->query ($sql);
while ($row = $stmt->fetch ())
echo $row [0] . " ";
echo "<br>\n";
$sql = "SELECT x FROM (
SELECT x FROM (SELECT x FROM b INTERSECT SELECT x FROM a) x
UNION
SELECT x FROM (SELECT x FROM c INTERSECT SELECT x FROM a) x
) x;";
$stmt = $db->query ($sql);
while ($row = $stmt->fetch ())
echo $row [0] . " ";
echo "<br>\n";
$sql = "DROP DATABASE q20240224" . session_id ();
$db->query ($sql);
session_destroy ();
?>
Code: Alles auswählen
30 20 0 8 23 14 28 4 27 17 11 24 2 7 9 16 34 41 56 15 18 62 42 32 61 1 38 40 25 <br>
30 20 0 8 23 14 28 4 27 17 11 24 2 7 9 16 35 21 38 6 45 39 43 46 3 18 <br>
20 34 41 56 15 18 16 14 62 42 32 61 7 1 38 40 0 27 25 24 35 17 21 6 45 11 39 2 43 46 30 3 4 <br>
20 0 14 27 7 16 <br>
30 20 4 17 11 24 2 7 16 <br>
20 18 16 7 38 <br>
30 20 4 17 11 24 2 7 16 18 38 <br>
30 20 4 17 11 24 2 7 16 18 38 <br>
20 0 14 27 7 16 38 18 <br>
20 7 16 <br>
20 16 14 7 0 27 24 17 11 2 30 4 <br>
20 16 14 7 0 27 24 17 11 2 30 4 <br>
Code: Alles auswählen
#!/bin/bash
echo "Hallo Welt"
Code: Alles auswählen
Hallo Welt
Code: Alles auswählen
#!/bin/bash
i=0
while [ $i -lt 10 ]
do
echo "Hallo $(($i+1))."
i=$(($i+1))
done
Code: Alles auswählen
Hallo 1.
Hallo 2.
Hallo 3.
Hallo 4.
Hallo 5.
Hallo 6.
Hallo 7.
Hallo 8.
Hallo 9.
Hallo 10.
Code: Alles auswählen
#!/bin/bash
if [[ "$1" == "David" && "$2" == "Vajda" ]]
then
echo "Das bin ich"
elif [ "$1" == "David Vajda" ]
then
echo "Das bin ich"
elif [ "$1" == "David" ]
then
echo "Das koennte ich sein"
elif [ "$1" == "Vajda" ]
then
echo "Das koennte ich sein"
else
echo "Das bin ich nicht"
fi
Code: Alles auswählen
#!/bin/bash
/bin/bash ifthenelse.sh "David" "Vajda" >> ifthenelse.out
/bin/bash ifthenelse.sh "David Vajda" >> ifthenelse.out
/bin/bash ifthenelse.sh "David" >> ifthenelse.out
/bin/bash ifthenelse.sh "Vajda" >> ifthenelse.out
/bin/bash ifthenelse.sh "Max Mustermann" >> ifthenelse.out
Code: Alles auswählen
Das bin ich
Das bin ich
Das koennte ich sein
Das koennte ich sein
Das bin ich nicht
Code: Alles auswählen
#!/bin/bash
a=(Dies ist ein Array)
a+=(was man fortsetzen kann)
i=0
while [ $i -lt 8 ]
do
echo "a [$i] = ${a[$i]}"
i=$(($i+1))
done
for s in ${a[@]}
do
echo "\$s$i = $s"
done
Code: Alles auswählen
a [0] = Dies
a [1] = ist
a [2] = ein
a [3] = Array
a [4] = was
a [5] = man
a [6] = fortsetzen
a [7] = kann
$s8 = Dies
$s8 = ist
$s8 = ein
$s8 = Array
$s8 = was
$s8 = man
$s8 = fortsetzen
$s8 = kann
Code: Alles auswählen
#!/bin/bash
l=$(ls)
for s in $l
do
echo "$s"
done
Code: Alles auswählen
array.out
array.sh
cmd.out
cmd.sh
hello.out
hello.sh
ifthenelseexec.sh
ifthenelse.out
ifthenelse.sh
while.out
while.sh
Code: Alles auswählen
0 0 0 0 0 0
1 0 0 0 1 1
2 0 0 1 0 0
3 0 0 1 1 1
4 0 1 0 0 0
5 0 1 0 1 1
6 0 1 1 0 0
7 0 1 1 1 1
8 1 0 0 0 0
9 1 0 0 1 0
10 1 0 1 0 1
11 1 0 1 1 1
12 1 1 0 0 1
13 1 1 0 1 1
14 1 1 1 0 1
15 1 1 1 1 1
1 0 0 0 1 1
3 0 0 1 1 1
5 0 1 0 1 1
7 0 1 1 1 1
10 1 0 1 0 1
11 1 0 1 1 1
12 1 1 0 0 1
13 1 1 0 1 1
14 1 1 1 0 1
15 1 1 1 1 1
Gruppe 1:
1 0 0 0 1 1
Gruppe 2:
3 0 0 1 1 1
5 0 1 0 1 1
10 1 0 1 0 1
12 1 1 0 0 1
Gruppe 3:
7 0 1 1 1 1
11 1 0 1 1 1
13 1 1 0 1 1
14 1 1 1 0 1
Gruppe 4:
15 1 1 1 1 1
1:3 0 0 - 1
1:5 0 - 0 1
3:7 0 - 1 1
3:11 - 0 1 1
5:7 0 1 - 1
5:13 - 1 0 1
10:11 1 0 1 -
10:14 1 - 1 0
12:13 1 1 0 -
12:14 1 1 - 0
7:15 - 1 1 1
11:15 1 - 1 1
13:15 1 1 - 1
14:15 1 1 1 -
5:13 - 1 0 1
7:15 - 1 1 1
3:11 - 0 1 1
1:5 0 - 0 1
3:7 0 - 1 1
10:14 1 - 1 0
11:15 1 - 1 1
1:3 0 0 - 1
5:7 0 1 - 1
12:14 1 1 - 0
13:15 1 1 - 1
10:11 1 0 1 -
12:13 1 1 0 -
14:15 1 1 1 -
Gruppe 2:
5:13 - 1 0 1
3:11 - 0 1 1
Gruppe 3:
7:15 - 1 1 1
5:13:7:15 - 1 - 1
3:11:7:15 - - 1 1
Gruppe 1:
1:5 0 - 0 1
Gruppe 2:
3:7 0 - 1 1
10:14 1 - 1 0
Gruppe 3
11:15 1 - 1 1
1:5:3:7 0 - - 1
3:7:11:15 - - 1 1
10:14:11:15 1 - 1 -
Gruppe 1:
1:3 0 0 - 1
Gruppe 2:
5:7 0 1 - 1
12:14 1 1 - 0
Gruppe 3:
13:15 1 1 - 1
1:3:5:7 0 - - 1
5:7:13:15 - 1 - 1
12:14:13:15 1 1 - -
10:11 1 0 1 -
12:13 1 1 0 -
14:15 1 1 1 -
10:11:14:15 1 - 1 -
12:13:14:15 1 1 - -
5:13:7:15 - 1 - 1
3:11:7:15 - - 1 1
1:5:3:7 0 - - 1
3:7:11:15 - - 1 1
10:14:11:15 1 - 1 -
1:3:5:7 0 - - 1
5:7:13:15 - 1 - 1
12:14:13:15 1 1 - -
10:11:14:15 1 - 1 -
12:13:14:15 1 1 - -
5:13:7:15 - 1 - 1
5:7:13:15 - 1 - 1
3:11:7:15 - - 1 1
3:7:11:15 - - 1 1
1:5:3:7 0 - - 1
1:3:5:7 0 - - 1
10:14:11:15 1 - 1 -
10:11:14:15 1 - 1 -
12:14:13:15 1 1 - -
12:13:14:15 1 1 - -
5:13:7:15 - 1 - 1
5:7:13:15 - 1 - 1
3:11:7:15 - - 1 1
3:7:11:15 - - 1 1
1:5:3:7 0 - - 1
1:3:5:7 0 - - 1
10:14:11:15 1 - 1 -
10:11:14:15 1 - 1 -
12:14:13:15 1 1 - -
12:13:14:15 1 1 - -
5:13:7:15 - 1 - 1
3:11:7:15 - - 1 1
1:5:3:7 0 - - 1
10:14:11:15 1 - 1 -
12:14:13:15 1 1 - -
1 3 5 7 10 11 12 13 14 15
5:13:7:15 * * * *
3:11:7:15 * * * *
1:5:3:7 * * * *
10:14:11:15 * * * *
12:14:13:15 * * * *
1 3 5 7 10 11 12 13 14 15
1:5:3:7 * * * *
10:14:11:15 * * * *
12:14:13:15 * * * *
1:5:3:7 0 - - 1
10:14:11:15 1 - 1 -
12:14:13:15 1 1 - -
y <= (not x3 and x0) or
(x3 and x1) or
(x3 and x2);
y <= (x3 or not x0) and
(not x3 or not x1) and
(not x3 or not x2);
library ieee;
use ieee.std_logic_1164.all;
entity quine20240224 is
port (
x3, x2, x1, x0: in std_logic;
y: out std_logic
);
end;
architecture behaviour of quine20240224 is
begin
y <= (not x3 and x0) or
(x3 and x1) or
(x3 and x2);
end;
library ieee;
use ieee.std_logic_1164.all;
entity quine20240224testbench is
port (
y: out std_logic
);
end;
architecture behaviour of quine20240224testbench is
component quine20240224
port (
x3, x2, x1, x0: in std_logic;
y: out std_logic
);
end component;
signal x3, x2, x1, x0: std_logic;
begin
q: quine20240224 PORT MAP (x3=>x3, x2=>x2, x1=>x1, x0=>x0, y=>y);
Code: Alles auswählen
library ieee;
use ieee.std_logic_1164.all;
entity quine20240224 is
port (
x3, x2, x1, x0: in std_logic;
y: out std_logic
);
end;
architecture behaviour of quine20240224 is
begin
y <= (not x3 and x0) or
(x3 and x1) or
(x3 and x2);
end;
library ieee;
use ieee.std_logic_1164.all;
entity quine20240224testbench is
port (
y: out std_logic
);
end;
architecture behaviour of quine20240224testbench is
component quine20240224
port (
x3, x2, x1, x0: in std_logic;
y: out std_logic
);
end component;
signal x3, x2, x1, x0: std_logic;
begin
q: quine20240224 PORT MAP (x3=>x3, x2=>x2, x1=>x1, x0=>x0, y=>y);
x0 <= '0' after 0 ns, '1' after 10 ns, '0' after 20 ns, '1' after 30 ns, '0' after 40 ns, '1' after 50 ns, '0' after 60 ns, '1' after 70 ns, '0' after 80 ns, '1' after 90 ns, '0' after 100 ns, '1' after 110 ns, '0' after 120 ns, '1' after 130 ns, '0' after 140 ns, '1' after 150 ns;
x1 <= '0' after 0 ns, '0' after 10 ns, '1' after 20 ns, '1' after 30 ns, '0' after 40 ns, '0' after 50 ns, '1' after 60 ns, '1' after 70 ns, '0' after 80 ns, '0' after 90 ns, '1' after 100 ns, '1' after 110 ns, '0' after 120 ns, '0' after 130 ns, '1' after 140 ns, '1' after 150 ns;
x2 <= '0' after 0 ns, '0' after 10 ns, '0' after 20 ns, '0' after 30 ns, '1' after 40 ns, '1' after 50 ns, '1' after 60 ns, '1' after 70 ns, '0' after 80 ns, '0' after 90 ns, '0' after 100 ns, '0' after 110 ns, '1' after 120 ns, '1' after 130 ns, '1' after 140 ns, '1' after 150 ns;
x3 <= '0' after 0 ns, '0' after 10 ns, '0' after 20 ns, '0' after 30 ns, '0' after 40 ns, '0' after 50 ns, '0' after 60 ns, '0' after 70 ns, '1' after 80 ns, '1' after 90 ns, '1' after 100 ns, '1' after 110 ns, '1' after 120 ns, '1' after 130 ns, '1' after 140 ns, '1' after 150 ns;
end;
Jetzt ein Programm - was mit Shiften eine Zahl durch die andere teilt. Mit der Multiplikation hat es mit Shiften geklappt. Jetzt der Versuch das ganze zu invertieren.
Code: Alles auswählen
Multiplikation
100 * 1100101 = 1100101 00
1000 * 1100101 = 1100101 000
10000 * 1100101 = 1100101 0000
100000 * 1100101 = 1100101 00000
101 * 1100101 = 1100101 00 + 1100101
1011 * 1100101 = 1100101 000 + 11001010 + 1100101
10101 * 1100101 = 1100101 0000 + 1100101 00 + 1100101
101100 * 1100101 = 1100101 00000 + 1100101 000 + 1100101 00
Jetzt wie geht es bei der Division
Ich muss die Zahl nach Rechts shiften
1100101 00000 >> entsprechend des Divisors, ob 1 oder 0 nach rechts shiften
Jetzt, wenn der Divisor einen kleineren Anteil enthält, muss ich den auch nach rechts shiften
so habe ich lauter nach rechts geshiftete, nachher vom Dividenden ziehe ich das alles ab.
Weil der Dividend ist ja eine Summe, die bei der Multiplikation entstanden ist.
Ich probiere es zunächst mal in C, weil das ist einfacher
Wie sie sehen, kann man sehr gut alte Schwächen tilgen, indem man auswendig lernt
Code: Alles auswählen
little-Endian: "falsch rum" (intel-hex)
big-endian: "richtig rum":
0xb54612a5 ^= 0xa51246b5
Im Intel Hex Format
A ja,
Code: Alles auswählen
us (maskulinum)
a (femininum)
um (neutrum)
er - ager (Der Boden, Acker)
terror - terroris - der Schrecken
furor - die Angst
Für Informatiker nicht gut nicht zu wissen, wo nicht der Dividend steht und der Divisor
Aber, wenn man was nicht weiss, dann lernt man es. Deswegen studiert man. Und nicht nur das. Das ist Wissenschaft. Wissenschaft heisst nicht die tollsten Dinge wissen, die man nicht wissen kann, aber besonders nicht begründen kann, wissenschaft heisst das genau zu kennen, was eindeutig erwiesen ist
Also, da habe ich noch was. Bei der Multiplikation heisst das Mulitplikant und Multiplikator. Das ist logisch.
Multi lateinisch viel. dividere teilen. Addere dazu geben. Ad - dazu. Dare geben. Substrahere - abziehen. Sub unter, trahere - kontraktion ziehen. Gut - aber - bei der Prozentrechnung fehlt es bei mir noch. Bei der Zinsrechnung nicht die Rechnung, das ist logisch. sondern die Namen.
Dann Prozent geht mir gerade zu weit
Code: Alles auswählen
Prozentwert
Grundwert
Prozentsatz
Prozentfuss
Weil ich lerne
Code: Alles auswählen
Dividend Divisor - Quotient
Multiplikant Multiplikator - Produkt
Wissen sie, sagen wir, die Lerneinheit besteht aus
Code: Alles auswählen
50:50
Code: Alles auswählen
Prozentwert
Grundwert
Prozentsatz
Prozentfuss
Grundrechenarten:
Addition
Subtraktion
Multiplikation
Division
Grundrechenarten!
Addition
Summand + Summand = Summenwert
Addition
Summand
Summenwert
Subtraktion
Minuend - Subtrahend = Differenzwert
Minuend
Subtrahend
Differenzwert
Multiplikation
Multiplikator * Multiplikand = Produktwert
Multiplikator
Multiplikand
Produktwert
Division
Dividend:Divisor = Quotientwert
Dividend
Divisor
Quotientwert
Sprüche:
Summand vorne und hinten
Minuend vorne Subtrahend hinten
Dividend vorne Divisor unten
Multiplikator vorne, Multiplikand hinten
Grundwert
Prozentsatz
Prozentfuss
Grundrechenarten:
Addition
Subtraktion
Multiplikation
Division
Grundrechenarten!
Addition
Summand + Summand = Summenwert
Addition
Summand
Summenwert
Subtraktion
Minuend - Subtrahend = Differenzwert
Minuend
Subtrahend
Differenzwert
Multiplikation
Multiplikator * Multiplikand = Produktwert
Multiplikator
Multiplikand
Produktwert
Division
Dividend:Divisor = Quotientwert
Dividend
Divisor
Quotientwert
Sprüche:
Summand vorne und hinten
Minuend vorne Subtrahend hinten
Dividend vorne Divisor unten
Multiplikator vorne, Multiplikand hinten
Ach ja, das ist Teil der Übungen. Das habe ich vergessen
Ich muss noch machen
Code: Alles auswählen
Assembler-Code schreiben - MIPS32
IEEE754 umrechnen - ist kein Problem und muss jeden Tag gemacht werden
Jetzt: Die Grundrechenarten müssen geübt werden. Dafür habe ich ein Programm geschrieben
Und trotzdem - so gut ist das nicht, wenn es nicht im Kopf geht
Ich darf noch vorstellen. Zum Binomialkoeffizienten habe ich eine geniale Formel.
Code: Alles auswählen
// Geniale Formel zum Binomialkoeffizient
p = 1;
q = 1;
for (i = 0; i < k; i++) {
p = p * (n-i);
q = q * (i+1);
}
// eventuell kleiner Rechenfehler drin, muss noch verifiziert werden
Code: Alles auswählen
(n C r)
Eine der einfachsten Reihen ist
Code: Alles auswählen
1+2+3+4+5+...+n
SUM_{i=1}^n i
Code: Alles auswählen
s = 0
for (i = 1; i <= n; i++)
s = s + i;
Code: Alles auswählen
p = 1;
for (i = 1; i <= n; i++)
p = p * i;
Zuhnächst geht der
Code: Alles auswählen
(n(n-1)(n-2)* ... * (n-k+1))/(1*2*...*(k-1)*k)
OK, das ist einfach. Das im divisor ist einfach
Code: Alles auswählen
k!
Also, ich finde die Formel gut
Code: Alles auswählen
(PROD_{i=0}^{k-1}(n-i)/k!
Also, was mir fehlt
Code: Alles auswählen
Assembler Code MIPS32
IEEE754 Umrechnung, jeden Tag
Grundrechenarten, jeden Tag
Ich schreibe jetzt ein C Programm zur Diviosn und Multiplikation - von Binärzahlen, ohne zu teilen, nur mit Shiften Addieren und Subtrahieren. In MIPS32 Assembler habe ich eines zur Multiplikation geschrieben, das tut
Jetzt noch mal, aber in C.
Warum sich das lohnt ist einfach. weil sie einfach ein Multiplizierschaltnetz bauen können. Und wie das geht, ist jetzt klar
Sie geben den Multiplikator mehrfach ein
Also, wenn sie den Multiplikanden
Code: Alles auswählen
100
Dann geben sie den Multiplikator binär ein. Den müssen sie nicht schieben. sie brauchen keinen Shifter, sie brauchen kein Schaltwerk. ein Schaltetz reicht. Sie haben
Code: Alles auswählen
Bit a3, a2, a1, a0 für den Multiplikator
Code: Alles auswählen
a3, a2, a1, a0, 0, 0, 0, 0
Code: Alles auswählen
0, a3, a2, a1, a0, 0, 0, 0
0, 0, a3, a2, a1, a0, 0, 0
0, 0, 0, a3, a2, a1, a0, 0
Ich würde das so machen.
Ich würde den Dividenden um so viele Bit nach rechts shiften, wie im Divisor an der höchsten Stelle ist. Das würde ich vom Dividenden abziehen und als Quotienten speichern. Dann würde ich das nächst stellige nach rechts shiften und wieder abziehen. In diesem Fall vom Quotienten.
Das mit dem Shiften stimmt, mit der Differenz so weit erst mal nicht.
Dann ich habe noch ein Buch von Andrew S. Tanenbaum, zur Computerarchitektur. Da stehen dann auch grössere Prozessoren drin, wie der Itanium. Mit einem Unterschied. Sie sind sehr schematisch vorgestellt
Den MIPS einzyklus habe ich fast zu 100% Bit für Bit im Kopf
Dafür stehen andere Sachen drin, die würden sie auch befriedigen. Etwa, wie asynchrone Busse.
Es ist eigentlich längst nicht so informativ. Wenn sie Schaltwerk nicht verstanden haben und Zustände, wie in Computersysteme I/II ihnen nutzt das alles nicht so viel. Und das ist perfekt damit. Das erklärt das.
Andrew S. Tanenbaum tut das so nicht
Auf der anderen Seite, ich habe jetzt Algo Mathematik belegt. Und ein Teil davon, ich finde den Kurs genial. Ich habe den Kurstext schon. Auch, wenn der Kurs noch nicht frei geschaltet ist. Ich habe nie einen Blick in den Kurs geworfen, aber ich habe ihn schon mal belegt
Jetzt wo Schaltwerke und Zustände klar sind, werden die Graphen in dem Kurs total Easy. Damit er ist er voll davon. Das wird ein Spass.
Ich habe die funktion des Tri States verstanden
Ich wusste nie wozu das gut ist
Schauen sie - wenn sie mehrere Dinger haben, die einen Ausgang haben, dann nehmen sie einen Multiplexer
aber, was ist wenn sie viele Geräte haben. tristates sind nicht für die Eingänge. Sie könnten ja den Eingang auf
Code: Alles auswählen
0, 1, hochohmig schalten
Jetzt können sie an einen Ausgang der einen Komponente viele Komponenten mit Eingängen machen. Das machen sie ständig
Aber, was ist, wenn sie Ausgänge zusammen schalten
Wenn sie a und b haben sie können machen
Code: Alles auswählen
c1 = a and b
c2 = a or b
Sie können einen MUX nehmen. OK. Aber sie können nicht ausgänge einfach zusammen schalten
Deswegen Tri State
Das ist so, als wären die anderen Geräte gar nicht da.
Ich weiss nicht, ich bin ein Fan von Zuständen geworden und von Schaltwerken. Das fehlt mir bei Andrew S. Tanenbaum. Itanium, schematisch, aber keine Zustände, kein Schaltwerk, keine Graphen. Das braucht man
Ich mache jetzt das "Dividier-Schaltnetz" und ich muss was zum Multiplizierer dazu fügen, wenn man eine 0, an einer Stelle hat, dann darf man das nicht dazu addieren
das heisst, man muss AND Schaltungen davor machen. Die mit der 1 oder 0 von dem Multiplikanden verknüpft sind.
Code: Alles auswählen
// Ich weiss, wo der Fehler ist, ich habe es schon richtig gemacht nur
// ich muss mit dem höchsten Bit anfangen, bei dieser Art der Subtraktion und nicht anders herum.
#include <stdio.h>
int main (void) {
int divisor = 4;
int dividend = 123782;
int quotient;
int produkt;
int multiplikator = 123782;
int multiplikant = 1231;
int i;
int div2;
produkt = 0;
for (i = 0; i < 16; i++)
if ((multiplikant >> i) & 0x01)
produkt = produkt + (multiplikator << i);
printf ("produkt %i\n", produkt);
printf ("produkt ueber computer %i\n", multiplikant * multiplikator);
quotient = dividend;
for (i = 0; i < 16; i++)
if ((divisor >> i) & 0x01)
quotient = quotient - (dividend >> i);
printf ("quotient: %i\n", quotient);
printf ("quotient, originale: %i\n", dividend/divisor);
return 0;
}
Code: Alles auswählen
Also, drehen wir mal die Multiplikation um
Wir haben ein Ergebnis. das ist c
Und wenn wir mit 101 multiplizieren. Dann haben wir
c = x * 100 + 1 * x
Das heisst, wir müssen - ach so, jetzt sehe ich. Dann ergibt das so keinen Sinn. Wahrscheinlich
Jetzt ist unser Dividend das Ding. Kurz nachdenken, raucherpause.
Sie wissen ja nicht mit was. Das heisst, sie haben eine Gleichung
Das 100 und das 1. Haben wir trotzdem. Der Dividend - ist zwar ein Produkt von einer anderen Multiplikation. Und wird jetzt durch einen Divisor geteilt, das eine andere Operation ist. das heisst eine andere Division. Trotzdem entspricht unserem Multiplikanden
Und x entspricht unserem Multiplikator.
x ist der Multiplikator
Und 101 ist der Divend - der Multiplikand.
Jetzt müssen wir eine Gleichung lösen.
Code: Alles auswählen
Jetzt kommen womöglich ohne das Beabsichtigt zu haben, der Analytical Machine schon ganz nahe.
Das ist eine Gleichung. Die könnten wir im Horner scheme aufschreiben. Wenn wir mit
(111)*x = 100 * x + 10 * x + 1 *x
10 * ( 10x + x) + x
Doch das ist so. Also, probieren wir es zur Sicherheit aus
100 * xb = x00b
1000 * xb = x000b
Und jetzt wenn wir mit
111
x00b + x0b +xb = c
Das heisst,
c = xb*100b + xb*10b + xb
(xb*10b + xb) 10b + xb
Gut, dann ist es wenigstens nicht trivial, wir haben uns mal gedanken gemacht und erkannt es nicht ist nicht trivial. wenn das nicht gelingt, das nicht zu lösen, ist das kein Beinbruch. Wenn es gelingt es zu lösen, diese gleichung, um so besser.
IEEE-754-Std
Und dann mache ich vorher so eine Aufgabe.
Code: Alles auswählen
12.78125
12/2 = 6 Rest 0
6/2 = 3 Rest 0
3/2 = 1 Rest 1
1/2 = 1 Rest 1
1100
0.78125 * 2 = 1.56250 1
0.56250 * 2 = 1.1250 1
0.125 * 2 = 0.25 0
0.25 * 2 = 0.5 0
0.5 * 2 = 1.0 1
0.78125
0.78125
-------
1.56250
0.56250
0.56250
-------
1.1250
1100,11001
Shift 3 nach links
1100,11001b = 1,10011001b
127 + 3 = 130
130 / 2 = 65 Rest 0
65 / 2 = 32 Rest 1
32 / 2 = 16 Rest 0
16 / 2 = 8 Rest 0
8 / 2 = 4 Rest 0
4 / 2 = 2 Rest 0
2 / 2 = 1 Rest 0
1 / 2 = 0 Rest 1
10000010
1,10011001b normalisierung
10011001b
[0][10000010][10011001]
0100.0001.0100.1100.1
0100.0001.0100.1100.1000.0000.0000
0x414C800
Code: Alles auswählen
1.) Rechne die Zahl in binaer Darstellung in eine Dezimale Darstellung um
0010010011110111b 9463d
2.) Rechne die Zahl in dezimal darstellung in eine Binaerdarstellung um
65457 1111111110110001
3.) Addiere die drei Zahlen schriftlich
50202
+ 7202
+ 55609
-----------------
113013
4.) Subtrahiere die letzten drei Zahlen schriftlich von der ersten schriftlich
42689
- 5746
- 4186
- 12073
-----------------
20684
5.) Rechne die Zahl ins zweier komplement um, mit 8 Bit - und subtrahiere diese zahl von der ersten und rechne das Ergebnis nach dezimal
-60 -68 = -128
11000100 10111100 = 10000000
6.) Multipliziere die zwei Zahlen schriftlich
5890*52334 = 308247260
7.) Dividiere die zwei Zahlen schriftlich
44137/17106 = 2
8.) Errechne x Logarithmisch mit dem Taschenrechner
1899^x = 1821233251