Teknologiforståelse · Valgfag

Programmering og modellering: regler og antagelser

Følg et lille program for ledige pladser: tal, tekst, sand/falsk, inputkontrol og afviklede test. Se også modellens antagelser og grænsen for sammenligning med Fælles Mål.

Tre lag i arbejdet med teknologi

Udkastet beskriver tre lag: teknologiens materielle grundlag, programmering og computerforståelse samt modellering. Data og algoritmer går igen i det praktiske arbejde. Eleverne undersøger programmerbar elektronik, sensorer og input og output og får erfaring med at indsamle, gemme og behandle data. Fysisk side 8.

Programmering omfatter algoritmer, variable, kontrolstrukturer og datatyper som tal, tekst og sand/falsk. Eleverne arbejder både praktisk og analogt og i et valgt programmeringssprog. De undersøger muligheder og begrænsninger og arbejder med logiske fejl og syntaksfejl. Udkastet nævner også generativ kunstig intelligens som programmeringsværktøj med undersøgelse af de valg, der træffes. Fysisk side 9. Det udpeger ikke en bestemt tjeneste eller gør et AI-genereret resultat til dokumentation for elevens forståelse.

Et eksempel: kan programmet tælle ledige pladser?

Dette er vores eget eksempel med opdigtede tal. Gruppen laver en model af et lokale med 20 pladser. Programmet får antallet af tilmeldte som input og beregner ledige pladser som 20 minus antallet af tilmeldte.

Input Beregnet resultat Hvad skal undersøges?
12 tilmeldte 8 ledige Det almindelige tilfælde.
20 tilmeldte 0 ledige Præcis ved grænsen.
21 tilmeldte −1 ledige Hvordan skal programmet vise overbooking?
Teksten “mange” Kan ikke bruges som det aftalte talinput Hvordan håndteres forkert datatype?

Tabellen stiller spørgsmålene til programmet. Nedenfor vælger vi at vise “Overbooket med 1” i stedet for at kalde −1 for ledige pladser. Vi tilføjer også et sand/falsk-input, som angiver, om tilmeldingen er åben. Det er vores designvalg, ikke en regel fra fagplanen.

Tal, tekst og sand/falsk i en lille funktion

JavaScript er valgt til dette eksempel, så koden kan læses og køres som tekst. Udkastet kræver ikke netop dette sprog. Alle oplysninger er opdigtede; programmet har ingen forbindelse til et bookingsystem, en sensor eller virkelige personer.

Vores funktion tager imod to oplysninger: tilmeldte skal være et helt tal fra 0 til 100, og aabent skal være enten true eller false. Grænsen på 100 er en aftalt begrænsning i øvelsen; lokalet har stadig kun 20 pladser. Tallet 12 accepteres, mens teksten "12" afvises. Vi vælger altså ikke at omdanne tekst til tal i denne funktion.

Number.isInteger kontrollerer, om værdien er et helt tal. Den afviser også tekst, sand/falsk, NaN og uendelighed. Vi kontrollerer selv intervallet bagefter. typeof kan skelne mellem blandt andet "number", "string" og "boolean"; det sidste bruger vi til kontrollen af aabent. MDN om heltalskontrol og MDN om typeof.

function pladsStatus(tilmeldte, aabent) {
  const kapacitet = 20;
  if (typeof aabent !== "boolean") {
    return { ok: false, besked: "Åben skal være sand eller falsk" };
  }
  if (!Number.isInteger(tilmeldte) || tilmeldte < 0 || tilmeldte > 100) {
    return { ok: false, besked: "Antallet skal være et helt tal fra 0 til 100" };
  }
  if (!aabent) {
    return { ok: true, ledige: null, besked: "Tilmeldingen er lukket" };
  }
  const ledige = kapacitet - tilmeldte;
  let besked;
  if (ledige < 0) {
    besked = "Overbooket med " + (-ledige);
  } else {
    besked = "Ledige pladser: " + ledige;
  }
  return { ok: true, ledige, besked };
}

kapacitet og ledige er navne, vi bruger til værdierne i beregningen. Algoritmen er rækkefølgen af kontroller og beregninger. if vælger en gren ud fra sin betingelse; else tager den anden gren. Her er betingelserne sand/falsk-resultater. JavaScript kan også bruge andre værdier som betingelser, men vores kontrol kræver et egentligt Boolean-input til aabent. MDN om if…else.

Funktionen afleverer et resultat med navngivne felter. ok fortæller, om input blev accepteret, og besked er tekst til en tænkt visning. Ved lukket tilmelding vælger vi ledige: null, fordi denne gren ikke beregner et antal. null er her en særskilt markering for et manglende resultat; det er ikke tallet 0. Forkert input bliver afvist, også når tilmeldingen er lukket, fordi inputkontrollen står først.

Følg værdierne gennem programmet

Her kalder vi funktionen med en lille samling opdigtede oplysninger. oplysninger og resultat bruges i den aktuelle kørsel; eksemplet skriver ikke til en fil eller database og sender ikke data over nettet.

const oplysninger = { tilmeldte: 12, aabent: true };
const resultat = pladsStatus(oplysninger.tilmeldte, oplysninger.aabent);
Trin for dette kald Værdi eller beslutning
Modtag input tilmeldte er tallet 12; aabent er true.
Kontroller typen af aabent "boolean" er den aftalte type; fortsæt.
Kontroller antallet 12 er et helt tal i intervallet 0–100; fortsæt.
Undersøg, om tilmeldingen er lukket !aabent er false; spring lukket-grenen over.
Beregn ledige 20 − 12 = 8.
Vælg besked 8 er ikke mindre end 0; brug else.
Aflever resultatet ok er true, ledige er 8, og besked er "Ledige pladser: 8".

Et analogt gennemløb kan bruge samme tabel: én elev holder et kort med hvert input, og en anden læser reglerne i rækkefølge. Skift derefter 12 ud med 21. Hvilken beslutning ændrer sig? Det er vores forslag til at undersøge algoritmen uden at starte med tastaturet.

Test grænsen og de forkerte input

Ved udarbejdelsen af guiden har vi kørt den viste funktion i Node.js og kontrolleret disse resultater. Det er test af vores kode med fiktive input, ikke af en klasses løsning eller et fungerende bookingsystem.

Kald Kontrolleret resultat
pladsStatus(0, true) 20 ledige pladser.
pladsStatus(12, true) 8 ledige pladser.
pladsStatus(20, true) 0 ledige pladser; ingen overbooking.
pladsStatus(21, true) ledige er −1; beskeden er "Overbooket med 1".
pladsStatus(100, true) Overbooket med 80; øvelsens øvre inputgrænse accepteres.
pladsStatus(101, true) Antallet afvises.
pladsStatus("12", true) eller pladsStatus("mange", true) Tekst afvises som antal.
pladsStatus(true, true) Sand/falsk afvises som antal.
pladsStatus(-1, true) eller pladsStatus(1.5, true) Negativt antal og brøkdele afvises.
pladsStatus(NaN, true) eller pladsStatus(Infinity, true) Begge afvises.
pladsStatus(12, false) Lukket; ledige er null.
pladsStatus(12, "false") Teksten "false" afvises som åben/lukket-input.
pladsStatus("mange", false) Antallet afvises før lukket-grenen.

Vi testede også to bevidst ødelagte kopier. Med kapacitet + tilmeldte blev resultatet for 12 tilmeldte forkert, og testen fangede det. Med en manglende parentes kunne koden ikke læses. Disse fejl er konstrueret til eksemplet; de er ikke resultater fra et forsøg med en AI-tjeneste.

En syntaksfejl kan forhindre, at programmet kan læses af det valgte programmeringssprog. En logisk fejl kan give et forkert resultat, selv om programmet kører. Hvis gruppen eksempelvis lægger tilmeldte til kapaciteten, skal testen med 12 tilmeldte afsløre fejlen.

Når regnestykket er korrekt, men modellen er for enkel

Modellen antager, at én tilmelding svarer til én brugt plads. Men hvad med udeblivelser, gæster uden tilmelding eller forskellige indretninger? Programmet kan regne korrekt på oplysninger, som ikke beskriver situationen godt nok. Hvis 12 er tilmeldt, men kun 10 møder op, beregner vores tilmeldingsmodel 8 ledige, mens en optælling af de fremmødte ville give 10. Begge regnestykker følger deres input; de besvarer forskellige spørgsmål.

Model Fra oplysning til resultat Antagelse, der skal undersøges
Tilmeldingsmodel 12 tilmeldinger → 20 − 12 → 8 ikke-reserverede pladser Én tilmelding reserverer én plads.
Fremmødemodel 10 fremmødte → 20 − 10 → 10 ubesatte pladser Optællingen beskriver, hvem der er i lokalet nu.

I denne opdigtede situation overvurderer tilmeldingsmodellen belægningen med 2, hvis vi bruger den til at udtale os om fremmøde. En test af subtraktionen afslører ikke den skævhed. Vi må sammenholde modellen med det, vi faktisk vil vide. Vil vi reservere pladser eller beskrive lokalet lige nu?

Eleverne kan tegne et diagram fra tilmelding til optælling og visning og markere, hvor de har lavet en antagelse. Udkastets modelleringsdel omfatter netop forenklinger, perspektiver og mulige skævheder samt sammenligning mellem modeller og verden. Fysisk side 9.

At koble en sensor på ville være en anden løsning med andre antagelser. En sensorværdi er ikke automatisk det samme som antal mennesker. Eksemplet bruger kun fiktive oplysninger og er ikke en byggevejledning til personregistrering.

Fra Fælles Mål til fagplanen

Ministeriets notat skelner mellem forsøgsfagligheden i Fælles Mål-format og det nye toårige valgfag. De har forskelligt omfang og forskellig områdeinddeling. Notat, fysisk side 2. Vi kan derfor ikke bruge navneligheder alene som dokumentation for, at et bestemt tidligere mål er uændret.

Vi har ikke et direkte sammenligneligt, bevaret sæt af forsøgets mål som grundlag for denne guide. Fraværet af den kilde dokumenterer ikke, at et indhold er fjernet. En detaljeret mål-for-mål-sammenligning og konkrete forløb om elektronik, sensorer og brug af AI som programmeringsværktøj mangler stadig. Se fagoversigten.