lehrkraefte:blc:informatik:efi-2023:exam4

This is an old revision of the document!


Assembler

  • Erklären Sie, was jeder einzelne der folgenden Befehle tut und was passieren würde, wenn man die Zeile POP A (befehl6) löschen würde.
befehl1:
   MOV A, [42]
befehl2:
   MOV A, 42
befehl3:
   CALL blabla
befehl4:
   JMP befehl1
blabla:
   PUSH A
befehl5:
   INC A
befehl6:
   POP A
befehl7:
   RET
  • Folgende Information ist gegeben:

Die Ausgabe auf die drei 7-Segment Anzeigen erfolgt auf die Adressen 253 bis 255.

Die Bits auf der Anzeige sind wie folgt nummeriert:

+--0--+
5     1
:--6--:
4     2
+--3--+
  • Schreiben Sie eine Zeile Code, die die Ziffer 4 auf die erste der drei 7-Segment Anzeigen erscheinen lässt.
  • Erklären Sie, was folgendes Programm tut (0xe8 ist die Startadresse der Textausgabe). Insbesondere, was ist der Zweck der letzten Zeile DB 0 ?
start:
    MOV A, 0xe8
    MOV B, hello
loop:
    MOV C, [B]
    CMP C,0
    JZ ende   ; JUMP if Zero
    MOV [A], C
    INC A
    INC B
    JMP loop
ende:
    HLT
hello:
    DB "Hallo"
    DB 0

Unicode

  • Was ist Unicode?
  • Was sind die konzeptuellen Unterschiede zwischen Unicode und UTF-8?
  • Was ist der Vorteil von der Verwendung von Start- und Folgebytes?

SQL

Gegeben ist eine sqlite-Datenbank mit folgenden Schema:

.schema
CREATE TABLE USER (id INTEGER PRIMARY KEY AUTOINCREMENT, 
   name TEXT UNIQUE NOT NULL);
CREATE TABLE score (id INTEGER PRIMARY KEY AUTOINCREMENT, 
  userid INT NOT NULL, 
  zeit TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
  score INT, 
  FOREIGN KEY(userid) REFERENCES USER(id));

Die Tabellen sind mit folgendem Inhalt gefüllt:

sqlite> select * from user;
id  name      
--  ----------
1   vreni     
2   hans      
3   ueli      
4   margarethe
 
sqlite> select * from score;
id  userid  zeit                 score
--  ------  -------------------  -----
1   1       2024-04-30 05:41:37  120  
2   3       2024-04-30 05:41:47  104  
3   4       2024-04-30 05:41:53  84   
4   2       2024-04-30 05:42:00  120  
5   4       2024-04-30 05:42:39  144  
6   2       2024-04-30 05:42:50  110
  • Was liefert folgende Abfrage? Kommentieren Sie die einzelnen Teil der Abfrage.
SELECT score.score,USER.name FROM score,USER WHERE score.userid=USER.id ORDER BY score.score DESC, score.zeit ASC LIMIT 3;

Geben Sie eine Anfrage an, die alle Scores mit Zeitstempel von margarethe in absteigender Reihenfolge ausgibt.

Folgendes Schema ist definiert:

CREATE TABLE student (id INTEGER PRIMARY KEY AUTOINCREMENT,
   name TEXT NOT NULL);
CREATE TABLE freifach (id INTEGER PRIMARY KEY AUTOINCREMENT,
   name TEXT UNIQUE NOT NULL);
CREATE TABLE wahl (id INTEGER PRIMARY KEY AUTOINCREMENT,
   freifachid INTEGER NOT NULL,
   studentid INTEGER NOT NULL,
   FOREIGN KEY(freifachid) REFERENCES freifach(id),
   FOREIGN KEY(studentid) REFERENCES student(id));

Folgende Daten sind eingetragen:

sqlite> select * from student;
id  name      
--  ----------
1   vreni     
2   hans      
3   ueli      
4   margarethe
 
sqlite> select * from freifach;
id  name      
--  ----------
1   python    
2   javascript
3   sql       
 
sqlite> select * from wahl;
id  freifachid  studentid
--  ----------  ---------
1   1           1        
2   1           3        
3   2           3        
4   1           4        
5   2           4        
6   3           4        

Dump der Datenbank

Dump der Datenbank

Kann mit sqlite3 freifach.sqlite < freifach.dump (oder einfach copy-paste in sqlite) importiert werden.

freifach.dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE student (id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL);
INSERT INTO student VALUES(1,'vreni');
INSERT INTO student VALUES(2,'hans');
INSERT INTO student VALUES(3,'ueli');
INSERT INTO student VALUES(4,'margarethe');
CREATE TABLE freifach (id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT UNIQUE NOT NULL);
INSERT INTO freifach VALUES(1,'python');
INSERT INTO freifach VALUES(2,'javascript');
INSERT INTO freifach VALUES(3,'sql');
CREATE TABLE wahl (id INTEGER PRIMARY KEY AUTOINCREMENT,
freifachid INTEGER NOT NULL,
studentid INTEGER NOT NULL,
FOREIGN KEY(freifachid) REFERENCES freifach(id),
FOREIGN KEY(studentid) REFERENCES student(id));
INSERT INTO wahl VALUES(1,1,1);
INSERT INTO wahl VALUES(2,1,3);
INSERT INTO wahl VALUES(3,2,3);
INSERT INTO wahl VALUES(4,1,4);
INSERT INTO wahl VALUES(5,2,4);
INSERT INTO wahl VALUES(6,3,4);
DELETE FROM sqlite_sequence;
INSERT INTO sqlite_sequence VALUES('student',4);
INSERT INTO sqlite_sequence VALUES('freifach',3);
INSERT INTO sqlite_sequence VALUES('wahl',6);
COMMIT;
  • Erklären Sie folgende Anfrage und deren Ausgabe:
sqlite> select freifach.name, count(freifachid) from wahl,freifach where freifach.id=wahl.freifachid group by freifachid;
name        count(freifachid)
----------  -----------------
python      3                
javascript  2                
sql         1                
  • Schreiben Sie eine Abfrage, die die Namen aller Freifächer auflistet, die von ueli gewählt wurden.
  • lehrkraefte/blc/informatik/efi-2023/exam4.1714459696.txt.gz
  • Last modified: 2024/04/30 08:48
  • by Ivo Blöchliger