Grundläggande programmering (1DV021)
MyMoodle(CoursePress)
  • Introduktion
  • Studieanvisningar
  • Föreläsningar
    • Introduktion
    • Föreläsning 1
    • Föreläsning 2
    • Föreläsning 3
    • Föreläsning 4
    • Föreläsning 5
    • Föreläsning 6
    • Föreläsning 7
    • Föreläsning 8
  • Videologgar
  • Guider
    • Ditt alldeles egna GitHub-konto
    • Meddela kursledningen ditt användarnamn på GitHub
    • Programvaror
      • Git - versionshantering
      • Node.js - applikationsmiljön
      • Visual Studio Code - utvecklingsverktyg
    • Så kommer du igång med ditt repo för övningsuppgifterna
    • Att komma igång med en övningsuppgift
    • Arbetsgång med en övningsuppgift
  • Övningsuppgifter
    • Del 1
      • A-nivå
        • Hello, World!
        • Enkel addition
        • Inför futtiga funktioner
        • Futtiga funktioner
        • Rätvinklig triangel
        • Bestäm datatypen
        • Knivskarp HTML
        • Additionell kopia av array
        • Sorterad kopia av array
        • Subjektiv sortering av objekt
      • B-nivå
        • Buggig kod
        • Bättre än Svensson
        • Reducerad array
      • C-nivå
        • Kulramen
        • Harshadtal
        • Reducerad array med objekt
        • De bästa av de bästa
    • Del 2
      • A-nivå
        • Legotillverkaren
        • Konstruktiv prototyp av ellips
        • Ny klassisk ellips
  • Examinationsuppgifter
    • Om
      • Praktisk examinationsuppgift
      • Muntlig examination
    • 1 - Beskrivande statistik
    • 2 - Tjugoett
  • Nedläggning
Powered by GitBook
On this page
  • Uppgift
  • Tips
  1. Övningsuppgifter
  2. Del 1
  3. C-nivå

Kulramen

PreviousC-nivåNextHarshadtal

Last updated 6 years ago

C-nivå, , .

VIKTIGT! Innan du börjar arbeta med övningsuppgiften är det viktigt att du följer guiden för att lägga till övningsuppgiftens repo till ditt repo för övningsuppgifter.

Uppgift

Hämta hem övningsuppgiftens repo och lägg till en .gitignore-fil. Öppna filen src\abacus.js och komplettera funktionen add så att samtliga krav uppfylls.

Du ska skapa en mycket enkel räknemodul som klarar av att summera att fritt antal parametrar i form av nummer (heltal som decimaltal), och returnera summan.

const abacus = require('./src/abacus.js')

let sum = abacus.add(2, 5, 19)
console.log(sum) // 26

Funktionen ska kunna hantera att anropas med en eller flera strängar där varje sträng ska kunna konverteras till ett tal. Även en eller flera arrayer med värden ska kunna skickas som argument till funktionen.

const abacus = require('./src/abacus.js')

let sum = abacus.add(2, "21", 19)
console.log(sum) // 42

sum = abacus.add(2.5, "5", "3,5", "1.2") // OBS! Både decimalkomma(,) och decimalpunkt(.) ska fungera
console.log(sum) // 12.2

sum = abacus.add(1, 2, [3, 4], 5, [6, 7]) // OBS! Det ska gå att skicka med arrayer som argument
console.log(sum) // 28

Vill du göra det extra svårt för dig? Se till att metoden klara av att hantera nästlade arrayer, d.v.s. arryer inuti arrayer, vilket kan kräva någon form av rekursion.

sum = abacus.add(1, 2, [3, 4, [6, 7]], 5]) // OBS! Det ska gå att skicka med nästlade arrayer som argument
console.log(sum) // 28

Anropas funktionen där något av värdena inte är ett tal eller inte kan konverteras till ett tal ska ett undantag av typen TypeError kastas med meddelandet At least one of the arguments can't be parsed as a number..

let abacus = require('./src/abacus.js')
let sum

try {
  sum = abacus.add(3, 8, 5, true) // must throw an exception
  console.log(sum)
} catch (e) {
  console.error(e.message)
}

try {
  sum = abacus.add(3, 8, 5, 'lorem ipsum') // must throw an exception
  console.log(sum)
} catch (e) {
  console.error(e.message)
}

// Output:
// At least one of the arguments can't be parsed as a number.
// At least one of the arguments can't be parsed as a number.

Tips

Genom att köra testerna som kommer med övningsuppgiften kan du undersöka om koden du skrivit löst uppgiften (i alla fall enligt testerna...).

Funktioner, metoder, etc. som kan komma till användning beroende hur du väljer att lösa uppgiften.

,

,

repo
lösningsförslag
Att komma igång med en övningsuppgift
arguments object
Spread-operatorn
Array.concat
Array.map
Array.reduce
Array.some
String.indexOf
String.replace
Number.isNaN
Number.parseFloat
arguments object
for
Array.concat
if...else
typeof
String.indexOf
Number.parseFloat
parseFloat
Number.isNaN
isNaN