MySQL, Bash - Übungen 0001

Benutzeravatar
davidvajda.de
Site Admin
Beiträge: 1424
Registriert: Di Jul 18, 2023 8:36 pm
Wohnort: D-72072, Tübingen
Kontaktdaten:

Re: MySQL, Bash - Übungen 0001

Beitrag von davidvajda.de »

Bild

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
Bild

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;
Ach, ich weiss, was ich vergessen habe, ich wollte MIPS Assembler Code schreiben.

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
Zunächst was zum Auswendig lernen, für den Herrn Vajda

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
Jetzt Dividend und Divisor ist schnell gelernt. Wenn man so lernt. Aber es ist lateinisch auch logisch. Ich hatte von der 5. bis zur 9. Klasse Latein. Es gibt die typischen Endungen, us, a - sie sehen mein Latein ist nicht so sehr das beste. us, a, um. Und dann gibt es - ich or. Oder wie?

A ja,

Code: Alles auswählen

us (maskulinum)
a (femininum)
um (neutrum)
er - ager (Der Boden, Acker)
terror - terroris - der Schrecken
furor - die Angst
Das sind so sachen, wie soll ich sagen, die klingen eher härter und gröber. Man sieht, mein Latein geht nicht mehr so gut

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
Sehen sie, ich finde die Seite gerade nicht, die ich gefunden hatte, wo ich fand, dass es gut drauf steht. Aber das ist mir jetzt egal

Weil ich lerne

Code: Alles auswählen

Dividend Divisor - Quotient
Multiplikant Multiplikator - Produkt
Jetzt werden sie fragen, warum ich beim Prozent nicht lange suche. Ich will mir jetzt alles erklären. Nein, ich erkläre nichts. Manche sachen. Ach, das haben sie jetzt nicht. Dann suchen sie ewig bei Prozentwert und gehen zu Euklid und können sich am Ende nichts erklären.

Wissen sie, sagen wir, die Lerneinheit besteht aus

Code: Alles auswählen

50:50
50% Prozentrechnung und 50% Dividend, Divisor. Jetzt habe ich zweiteres gelernt. Gut, dann muss ich jetzt nicht lange suchen, dafür weiss ich zweiteres. Während andere immer noch Prozentrechnung suchen, aber zweiteres nicht wissen.

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
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

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
Grundrechenarten üben bedeutet, Multiplikation und Division schriftlich. Was relativ einfach ist. Aber geübt werden muss. Es muss aber auch schriftlich addiert werden. Und zwar am Besten 10 Zahlen gleichzeitig. Kann der Computer gut

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
Der Binomialkoffizient wirkt als Formel kompliziert. Aber es gibt zwei Formeln. Habe ich in Algo Mathematik erfahren.

Code: Alles auswählen

(n C r)
Also. Fakultät ist einfach

Eine der einfachsten Reihen ist

Code: Alles auswählen

1+2+3+4+5+...+n

SUM_{i=1}^n i
Gut, das lässt sich in der Programmierung einfach ausdrücken als

Code: Alles auswählen

s = 0
for (i = 1;  i <= n;  i++)
   s = s + i;
Ebenso einfach die Fakultät

Code: Alles auswählen

p = 1;
for (i = 1;  i <= n;  i++)
  p = p * i;
Jetzt gibt es die Standardformel für den Binomialkoeffizient, die finde ich nicht so easy.

Zuhnächst geht der

Code: Alles auswählen

(n(n-1)(n-2)* ... * (n-k+1))/(1*2*...*(k-1)*k)
Das ist jetzt nicht die Formel. Sondern die Definition. Oder wie man sagen solll

OK, das ist einfach. Das im divisor ist einfach
Und das oben ist etwas wie n! allerdings - mit dem Unterschied dass es wie wenn man Summen subtrahiert nur bis k geht

Also, ich finde die Formel gut

Code: Alles auswählen

(PROD_{i=0}^{k-1}(n-i)/k!
Das finde ich gut, dann kommt das Programm raus.

Also, was mir fehlt

Code: Alles auswählen

Assembler Code MIPS32
IEEE754 Umrechnung, jeden Tag
Grundrechenarten, jeden Tag
Das bedeutet, ich schreibe jetzt erst das C Programm zur Division


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 haben

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
Und wenn sie mit einer 4 Stelligen Binärzahl multiplizieren, hängen sie hinten 4 Nullen an

Code: Alles auswählen

a3, a2, a1, a0, 0, 0, 0, 0
das ganze machen sie, noch mal

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
Und jetzt schicken sie alle diese Binärzahlen in Addierer. Und fertig. Sie haben multipliziert. Aber jetzt sollten wir noch dividieren können.


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
Das ist barer Unsinn. Nur, wenn sie gerät haben, haben sie keinen Multiplexer

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
vom selben a und b. Aber, was machen sie mit c1 und c2

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;
}
Nein, das stimmt auch nicht. Das ist jetzt letzten Endes egal.

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. 
Macht nichts, dann mache ich jetzt pause und mache mein Übungsprogramm weiter. Da sind noch Fehler drin, was den Bereich betrifft. Und dann Übungen

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
Bild

Bild
Antworten