Bygga hus med LECA-stenar När man bygger hus med LECA-stenar finns det en del att tänka på. Till att börja med finns det LECA-stenar i olika dimensioner (t.ex. 59x19x19 och 59x19x39). Dessa dimensioner ges i mått som avser längd (SL), bredd (SB) och en höjd (SH). LECA-stenarna sammanfogas med murbruk och detta gör att man kan räkna med att det är lite mellanrum mellan stenarna och det gör att man brukar räkna med att de bygger 1 cm mer än de har som mått (d.v.s. de två exempelmåtten ovan kan ses som 60x20x20 och 60x20x40). Vi kan anta i följande uppgifter att vi skall bygga ett hus som ser ut enligt följande figur i en vy uppifrån. Det finns inga fönster utan bara en dörr som går från golv till tak och det är givet att denna sitter på mitten så gått det går med kravet att det skall vara en multipel av 10 cm på den vänstra sidan (dörren justeras alltså så att detta krav tillgodoses åt vänster om det inte går att få dörren exakt på mitten). Alla mått skall vara i hela cm. DB DB = Dörrbredd HB = Husbredd HL = Huslängd HL HB Man ser i figuren ovan att det i det övre vänstra hörnet skall vara en hel sten nedåt. Vi börjar dock vid dörrens vänstra sida och lägger en hel sten (om det får plats) och så fyller man på med hela stenar tills vi når fram till det vänstra övre hörnet. Den sista stenen blir i de flesta fall kortare (måste alltså kapas) för att få plats. På samma sätt gör man runt hela huset tills det att man når dörrens högra sida. Det kan alltså bli ett antal stenar som kapas för att det skall bli bra i hörnen. Även den sista stenen vid dörrens högra sida kanske skall kapas. Det är också viktigt att man inte lägger stenarna så att två lager på varandra får fogar (skarvar) på samma ställe. Om två fogar hamnar på samma ställe försvagas konstruktionen. När man bygger det andra lagret skall detta inte ge några skarvar på samma ställe som i lager 1. Detta kan vi anta att det uppfylls om man i andra lagret börjar på högra sidan om dörren istället för vänstra och går runt åt andra hållet (de fall som skapar problem bortser vi ifrån). Antal lager med LECA-stenar anges som HH och är alltså ett heltal. Höjden på huset blir då resultatet av HH * SH. Vi har påbörjat en del program som har med ovanstående att göra. Dessa finns givna i given_files -mappen. Din uppgift är att utifrån dessa eller på egen hand lösa det som står i uppgifterna i tentan.
Uppgift 1 ( Betyg 3 uppgift ) När man bygger ett hus enligt förutsättningarna på första sidan blir det oftast så att man måste kapa ett antal stenar. Om man antar att man inte återanvänder det man kapat bort till andra ställen får man direkt en frågeställning framför sig. Hur många stenar behöver kapas givet indata på HB, HL, DB, SB och SL. Vi antar att det bara är ett lager vi skall räkna på så det är irrelevant vad som finns i lager 2, 3,... Mata in dörrens bredd (DB): 100 Det behöver kapas 3 stenar. Mata in husets bredd (HB): 238 Mata in husets längd (HL): 346 Mata in dörrens bredd (DB): 82 Det behöver kapas 5 stenar. Körexempel 3 (OBS! resultatet i singularis): Mata in husets bredd (HB): 320 Mata in dörrens bredd (DB): 80 Det behöver kapas 1 sten. Körexempel 3: Mata in husets bredd (HB): 200 Mata in husets längd (HL): 100 Mata in dörrens bredd (DB): 80 Mata in stenarnas längd (SL): 20 Det behöver kapas 0 stenar.
Uppgift 2 När man bygger ett hus enligt förutsättningarna på första sidan blir det oftast så att man måste kapa ett antal stenar. Om man antar att man återanvänder det man kapat bort till andra ställen får man direkt en frågeställning framför sig. Hur många stenar behövs givet indata på HB, HL, HH, DB, SB och SL. Vi antar att det är ett jämnt antal lager vi skall räkna på så det är irrelevant vad som finns i sista lagret om användaren anger ett udda antal lager. När man bygger sitt hus får man gamla avkapade delar allt eftersom man bygger och när man behöver en ny kapad sten skall man leta reda på den minsta möjliga (som räcker till) av de delar som kapats av tidigare och använda denna istället för att kapa av en helt ny sten. Här inser man att det då kan vara så att man har en sten som är helt rätt längd bland de kapade eller så är den stendel man skall använda lite för lång. I det senare fallet kapas denna stendel så att man får den bit man önskar samt att man får en ny kortare avkapad bit att använda till senare. Din uppgift är alltså att skriva ett program som tar reda på hur många stenar man behöver totalt för att bygga huset. Körexempel 1 (när det som i detta exmepel inte blir delar över ser det lite underligt ut, men...): Mata in husets bredd (HB): 80 Mata in husets längd (HL): 80 Mata in dörrens bredd (DB): 40 Mata in husets höjd (HH = antal stenar i höjdled): 6 Det behövs 20 stenar för att bygga huset. Eventuella delar som blev över är: Mata in dörrens bredd (DB): 90 Mata in husets höjd (HH = antal stenar i höjdled): 10 Det behövs 243 stenar för att bygga huset. Eventuella delar som blev över är: 5 st med längd 10 10 st med längd 20 1 st med längd 30
Uppgift 3 Det kan vara bra att se hur man skall bygga sitt hus. Din uppgift är därför att rita ut de stenar som finns i ett givet lager. Lagret genereras i den givna programkoden. Du får titta i det givna programmet och se till att skapa själva utskriftsdelen som saknas. Utskrifterna skall följa nedanstående exempel. Mata in husets längd (HL): 200 Mata in dörrens bredd (DB): 90 Mata in stenarnas bredd (SB): 40 +--++----+ +---++----+ +----+ +---++----+ +----++----++----++----+++ +----++----++----++----++++--+ Mata in husets bredd (HB): 450 Mata in husets längd (HL): 50 Mata in dörrens bredd (DB): 100 +++-++----++----+ +----++----++----+ +-++----++----+ +----++----++----+ ++ ++ +----++----++----++----++----++----++----++ +----++----++----++----++----++----++----++++
Uppgift 4 När man bygger sitt hus och kommer till den punkt där man skall bygga taket får man lite problem. Man behöver någon form av ställning. Antag att man bygger den av LECA-stenar på så sätt att man kan se det som en trapp oavsett från vilket håll man kommer (lite grann som en kapad pyramid). Se i figuren för att se hur trappen skulle se ut för hushöjderna 2, 3 och 4 (självklart behövs ingen trappa om man bara bygger ett lager stenar i huset). Din uppgift är att skriva det program som räknar ut hur många stenar det behövs för att bygga trappan givet en viss höjd på huset. Krav: Du skall ha en rekursiv funktion som beräknar antalet stenar i ditt program. Mata in husets höjd (HH = antal stenar i höjdled): 1 Det behövs 0 stenar för att bygga trappan. Körexempel 2 (singularis!!!): Mata in husets höjd (HH = antal stenar i höjdled): 2 Det behövs 1 sten för att bygga trappan. Körexempel 4: Mata in husets höjd (HH = antal stenar i höjdled): 4 Det behövs 22 stenar för att bygga trappan. Körexempel 10: Mata in husets höjd (HH = antal stenar i höjdled): 10 Det behövs 525 stenar för att bygga trappan. Körexempel 100: Mata in husets höjd (HH = antal stenar i höjdled): 100 Det behövs 651750 stenar för att bygga trappan.