Lektion 4 (31 aug)

Komposita datatyper: arrays, objects, strings

Läsanvisningar

När texterna nedan behandlar klasser ("classes") och objekt ("objects"), fokusera på fält ("fields") och läs resten endast översiktligt.

Övningar

Lösningsförslag

  1. Skriv ett program som skapar en ny datatyp för personer och skapar en sträng som sammanfattar en sådan person. En person ska bestå av ett förnamn, ett efternamn och en ålder. Om personen exempelvis är 41 år gammal och heter Alexander i förnamn och Skarsgård i efternamn ska resultatet vara "Alexander Skarsgård är 41 år gammal."
  2. Skriv ett program som skapar en ny datatyp för företag och simulerar en sammanslagning av två separata företag. Ett företag ska bestå av ett namn, ett säte (i form av en stad) och en ålder. Det sammanslagna företaget ska vara ett nytt företag med följande egenskaper:

    • Namnet ska vara en sammanslagning av de två företagens namn.
    • Sätet ska vara antingen det ena eller det andra företagets säte (bestäm själv hur detta väljs).
    • Åldern ska vara noll.

    Om de företag som slås samman exempelvis är Saab från Trollhättan (grundat 1937) och Scania från Södertälje (grundat 1911) så ska det nya företaget ha namnet Saab-Scania, ha sitt säte i antingen Trollhättan eller Södertälje och ha åldern 0.

  3. Skriv ett program som räknar antalet förekomster av bokstaven X i en sträng. Om strängen exempelvis är "Jag heter X och bor i staden X i landet X." så ska resultatet vara 3.
    • Skriv en variant av programmet som räknar antalet alfabetiska bokstäver i strängen (alltså A-Z, men inte mellanslag, siffror, punkter och andra sorters tecken). Programmet behöver enbart hantera bokstäver i det engelska alfabetet. Kan du åstadkomma detta utan att använda disjunktionsoperatorn (||) mer än en gång? Ledtråd: typkonvertering.
  4. Skriv ett program som hittar det största värdet i en array av heltal. Om indatan exempelvis är { 5, 2, 7, 9, 3 } så ska utdatan vara 9.
    • Skriv en variant av programmet som hittar den äldsta personen i en array av personer. Använd samma definition av en person som i övning 1. Notera att utdatan ska vara den äldsta personen, alltså hela objektet, inte bara åldern på personen i fråga.
    • Skriv en variant av programmet som hanterar situationen då flera personer i arrayen är lika gamla. I detta scenario ska utdatan vara den person som både är äldst och har längst förnamn. Om det finns flera personer med både samma ålder och längd på förnamnet så kan programmet välja vilken av dem som helst.
  5. Skriv ett program som letar upp ett ord i en array av ord. Indatan ska vara ordet som eftersöks samt arrayen av ord som ska genomsökas. Utdatan ska vara den position i arrayen som det eftersökta ordet befinner sig på, eller -1 om ordet inte finns med överhuvudtaget. Om indatan exempelvis är "apple" och { "banana", "pear", "apple", "orange" } så ska utdatan vara 2. För enkelhets skull kan du anta att ordet förekommer högst en gång i arrayen.
    • Överkurs: Om du får en garanti att arrayen är sorterad, kan du skriva en variant av programmet som i de allra flesta fall kommer att hitta svaret mycket snabbare än det ursprungliga programmet?
  6. Skriv ett program räknar ut diverse statistik kring en text: antal ord, antal meningar, och antal ord per mening i genomsnitt. För enkelhets skull kan du anta att ord skiljs åt med mellanslag och meningar med punkter. (Programmet behöver alltså inte göra någon särskild behandling av kommatecken och andra specialtecken.)
  7. Skriv ett program som hittar den vanligast förekommande strängen i en array av strängar. Om indatan exempelvis är { "Stockholm", "Göteborg", "Stockholm", "Malmö" } så ska resultatet vara "Stockholm". Om det finns flera giltiga svar ska programmet välja ett av dem på godtyckligt sätt.