Exercicis generals

(*) elteuusuari correspon a la direcció de correu eltectrònic del centre, sense punts, fins a @itb.cat

Sumari

  1. Generals
    1. CarpentryShop
      1. Input
      2. Output
    2. AutonomousCarPrototype
    3. TeamMotto
      1. Output
    4. SportTeamMotto
      1. Output
    5. GymControlApp
      1. Input
      2. Output

Generals

CarpentryShop

package: uf4.exercices.carpentryshop

Una petita fusteria ens ha encarregat un programa per fer els tiquets de venta. A la fusteria venen taulells de fusta i llistons. Els taulells de fusta tenen un preu (preuUnitari) per metre quadrat. Quan es venen es ven una llargada i una amplada. Els llistons es venen per un preu al metre i es venen per metres.
Fes un programa que donada una llista de llistons i taulells en calculi el preu total.

L'usuari primer introduirà el nombre d'elements.

A cada línia pels taulells hi haurà:

I pel llistons:

Legeix l'entrada i imprimeix el preu total

Input

6
Taulell 15 20 12
Taulell 25 20 20
Taulell 15 2 5
Llistó  12 4
Taulell 10 20 12
Llistó  24 6

Output

El preu total és: XX€

AutonomousCarPrototype

package: uf4.exercices.autonomouscar

Volem fer un primer prototip de software amb inteligència artíficial que permeti conduir un cotxe de forma autònoma. Volem que el nostre sistema funcioni per diferents models i marques de cotxes. Així que en una reunió entre diferents empreses hem acordat una interfície comuna anomenada CarSensors:

fun isThereSomethingAt(direction: Direction) : Boolean
fun go(direction : Direction)
fun stop()

Direction pot tenir els valors
FRONT, LEFT, RIGHT.

El cotxe anirà endavant si no té cap obstacle. Si en té, anirà cap a la dreta sempre i quan no hi hagi obstacles sinó cap a l'esquerre. En el cas que tingui obstacles a tot arreu pararà.

El cotxe anirà circulant endavant a cada cicle.

Crea la classe AutonomousCar que tingui el mètode

fun doNextNSteps(n :Int)

Que executa N cicles.
AutonomousCar té com a atribut un CarSensors.

TeamMotto

package: uf4.exercices.motto

Un diari esportiu ens ha dit que els hi fem una petita aplicació. Volem tenir registrada la informació de diversos equips. Cada equip té un nom. A més a més, cada equip té un crit que utilitzen abans de cada partit.

Volem que els equips tinguin la funció shoutMotto() que printi per pantalla el lema de l'equip.

Tenim els següents tres equips, amb els següents lemes:

Fes un programa que crei una llista amb els 3 equips i els printi per pantalla usant el següent mètode:

fun shoutMottos(teams: List<Team>){
    for(team in teams)
        team.shoutMotto()
}

Output

Bzzzanyarem
Grooarg
Piquem Fort

SportTeamMotto

Ens demanen ampliar l'aplicació anterior. Hem vist que segons a quin esport jugui a cada equip, fan el crit una mica diferent.

Dels equips anteriors tenim

Fes un programa que crei una llista amb els 3 equips i els printi per pantalla utilitzant el mètode anterior

Output

1,2,3 Bzzzanyarem
Grooarg verd
Ko Jin-Young Piquem Fort

GymControlApp

package: uf4.exercices.gymcontrol

Volem fer un programa pel control d'entrada d'un club esportiu. El programa ha de ser generic per tots els clubs, però tenim clubs que utilitzen un dispositiu de lectura dactilar, uns altres fan servir una targeta electrònica, uns altres enregistren l'entrada manualment… Tots els gimnasos tenen un únic punt d'entrada i per tant, el primer cop que es registra un identificador indica que l'usuari ha entrat, i el segón cop indica que l'usuari ha sortit.

Per tal de resoldre-ho, hem pactat una interfcície comuna anomenada GymControlReader que ens retorna l'identificador del següent usuari registrat:

fun nextId() : String

A més a més, ens donen la implementació següent que és la utilitzada pel sistema de lectura manual

class GymControlManualReader(val scanner:Scanner = Scanner(System.`in`)) : GymControlReader {
    override fun nextId() = scanner.next()
}

Crea un programa que, donat un GymControlReader, llegeixi 8 identificadors. Imprimeix per pantalla si l'usuari ha entrat o ha sortit. Utilitza la implementació donada.

Input

1548
8768
4874
1548
1354
1548
3586
1354

Output

1548 Entrada
8768 Entrada
4874 Entrada
1548 Sortida
1354 Entrada
1548 Entrada
3586 Entrada
1354 Sortida