lehrkraefte:blc:informatik:efi-2023:exam4

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
lehrkraefte:blc:informatik:efi-2023:exam4 [2024/04/25 07:37]
Ivo Blöchliger created
lehrkraefte:blc:informatik:efi-2023:exam4 [2024/04/30 08:58] (current)
Ivo Blöchliger [Assembler]
Line 52: Line 52:
     DB 0     DB 0
 </code> </code>
 +
 +
 +  * Erklären Sie Sinn und Zweck der folgenden Registern:
 +    * IP (Instruction Pointer), wird oft auf PC (Programm Counter) genannt.
 +    * SP (Stack Pointer)
 +      * allgemeine Verwendung
 +      * speziell im Zusammenhang mit den Instruktionen ''CALL'' und ''RET''
 +  * Bei jeder Berechnung werden die Flags Z (Zero) und C (Carry) gesetzt oder gelöscht, je nach Resultat der Berechnung.
 +    * Welche «Befehlsfamilie» nutzt diese Flags und welchem Programmierbefehl entspricht das am ehesten in Python?
 +    * Was genau macht der Befehl ''CMP'' mit den beiden Operanden?
 +
 +====== 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 ======
 +===== Highscores =====
 +
 +Gegeben ist eine sqlite-Datenbank mit folgenden Schema:
 +<code sql>
 +.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));
 +</code>
 +Die Tabellen sind mit folgendem Inhalt gefüllt:
 +<code txt>
 +sqlite> select * from user;
 +id  name      
 +--  ----------
 +1   vreni     
 +2   hans      
 +3   ueli      
 +4   margarethe
 +
 +sqlite> select * from score;
 +id  userid  zeit                 score
 +--  ------  -------------------  -----
 +1         2024-04-30 05:41:37  120  
 +2         2024-04-30 05:41:47  104  
 +3         2024-04-30 05:41:53  84   
 +4         2024-04-30 05:42:00  120  
 +5         2024-04-30 05:42:39  144  
 +6         2024-04-30 05:42:50  110  
 +
 +</code>
 +  * Was liefert folgende Abfrage? Kommentieren Sie die einzelnen Teil der Abfrage.
 +<code sql>
 +SELECT score.score,user.name FROM score,user WHERE score.userid=user.id ORDER BY score.score DESC, score.zeit ASC LIMIT 3;
 +</code>
 +
 +  * Geben Sie eine Anfrage an, die alle Scores mit Zeitstempel von ''margarethe'' in absteigender Reihenfolge ausgibt. 
 +
 +<hidden Dump der Datenbank>
 +Kann mit ''sqlite3 freifach.sqlite < freifach.dump'' (oder einfach copy-paste in sqlite) importiert werden.
 +<code sql highscore.dump>
 +PRAGMA foreign_keys=OFF;
 +BEGIN TRANSACTION;
 +CREATE TABLE user (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE NOT NULL);
 +INSERT INTO user VALUES(1,'vreni');
 +INSERT INTO user VALUES(2,'hans');
 +INSERT INTO user VALUES(3,'ueli');
 +INSERT INTO user VALUES(4,'margarethe');
 +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));
 +INSERT INTO score VALUES(1,1,'2024-04-30 05:41:37',120);
 +INSERT INTO score VALUES(2,3,'2024-04-30 05:41:47',104);
 +INSERT INTO score VALUES(3,4,'2024-04-30 05:41:53',84);
 +INSERT INTO score VALUES(4,2,'2024-04-30 05:42:00',120);
 +INSERT INTO score VALUES(5,4,'2024-04-30 05:42:39',144);
 +INSERT INTO score VALUES(6,2,'2024-04-30 05:42:50',110);
 +DELETE FROM sqlite_sequence;
 +INSERT INTO sqlite_sequence VALUES('user',4);
 +INSERT INTO sqlite_sequence VALUES('score',6);
 +COMMIT;
 +</code>
 +</hidden>
 +
 +===== Freifächer =====
 +Folgendes Schema ist definiert:
 +<code sql>
 +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));
 +</code>
 +Folgende Daten sind eingetragen:
 +<code txt>
 +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                    
 +2                    
 +3                    
 +4                    
 +5                    
 +6                    
 +</code>
 +
 +<hidden Dump der Datenbank>
 +Kann mit ''sqlite3 freifach.sqlite < freifach.dump'' (oder einfach copy-paste in sqlite) importiert werden.
 +<code sql 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;
 +</code>
 +</hidden>
 +
 +  * Erklären Sie folgende Anfrage und deren Ausgabe:
 +<code txt>
 +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                        
 +</code>
 +
 +  * Schreiben Sie eine Abfrage, die die Namen aller Freifächer auflistet, die von ''ueli'' gewählt wurden.
 +  * Erklären Sie, warum eine dritte Tabelle ''wahl'' nötig ist, insbesondere warum diese Information nicht sinnvoll in den Tabellen ''student'' und ''freifach'' gespeichert werden kann.
 +
  
  • lehrkraefte/blc/informatik/efi-2023/exam4.1714023453.txt.gz
  • Last modified: 2024/04/25 07:37
  • by Ivo Blöchliger