From ed873d1590e169b0f7b35c1d3ec7b2cac30734b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jurij=20Podgor=C5=A1ek?= Date: Wed, 24 Jul 2024 20:18:38 +0200 Subject: [PATCH] Novejse vaje (drugo poglavje) --- zapiski/g1smo/2_6_zapiski_vaje.org | 94 ++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 zapiski/g1smo/2_6_zapiski_vaje.org diff --git a/zapiski/g1smo/2_6_zapiski_vaje.org b/zapiski/g1smo/2_6_zapiski_vaje.org new file mode 100644 index 0000000..79fa77c --- /dev/null +++ b/zapiski/g1smo/2_6_zapiski_vaje.org @@ -0,0 +1,94 @@ + +#+TITLE: Zapiski in vaje #6 srečanja programerskega bralnega krožka SICP +#+AUTHOR: Jurij +#+OPTIONS: toc:nil num:nil author + +* Teme +** Grajenje abstrakcij s podatki + +Prvo poglavje, v katerem smo operirali s preprostimi števili, drugo poglavje nadgrajuje s podatkovnimi struktura oz. kombiniranjem podatkovnih objektov v sestavljene podatkovne modele. + +Torej ustvarili bomo podatkovne abstrakcije in definirali funkcije ki lahko operirajo nad njimi. +Preprost primer je recimo racionalno število, ki ga sestavlja par števca in imenovalca. + +#+begin_src scheme + (define (ustvari-rac s i) + (cons s i)) + + (define (stevec x) (car x)) + (define (imenovalec x) (cdr x)) + (define (izpisi-rac x) + (newline) + (display (stevec x)) + (display "/") + (display (imenovalec x))) + + (define polovica (ustvari-rac 1 2)) + (izpisi-rac polovica) + + (izpisi-rac (ustvari-rac 6 3)) +#+end_src + +Uporabimo funkcijo za najvecji skupni imenovlec, da poenostavimo recimo 6/3 v 2/1. + +#+begin_src scheme + (define (gcd a b) + (if (= b 0) + a + (gcd b (remainder a b)))) + + (define (ustvari-rac s i) + (let ((g (gcd s i))) + (cons (/ s g) (/ i g)))) + + + (izpisi-rac (ustvari-rac 6 3)) +#+end_src + + +* vaje +** 2.1 bolji ustvari-rac + +#+begin_src scheme + (define (ustvari-rac s i) + (cons + (if (< i 0) + (* -1 s) + s) + (abs i))) +#+end_src + +** 2.2 polovica daljice + +#+begin_src scheme + (define make-point cons) + (define x-point car) + (define y-point cdr) + + (define make-segment cons) + + (define (print-point p) + (newline) + (display "(") + (display (x-point p)) + (display ",") + (display (y-point p)) + (display ")")) + + (define (avg a b) (/ (+ a b) 2)) + + (define start-segment car) + (define end-segment cdr) + + (define (midpoint-segment s) + (let ((start (start-segment s)) + (end (end-segment s))) + (make-point (avg (x-point start) (x-point end)) + (avg (y-point start) (y-point end))))) +#+end_src + +** 3.3 obseg in ploscina kvadra + +#+begin_src scheme + +#+end_src