Kirjautuminen

Haku

Tehtävät

Kilpailu

Murra koodi!
Lue ja osallistu!
Voittajia 1 + yrittäjiä 1

Keskustelu: Koodit: Python: Tilavuuksien erotus

koodaaja [09.04.2022 11:05:20]

#

Tässä esimerkissä lasketaan avaruuskappaleiden tilavuuksien erotuksia. Laskeminen hoidetaan funktioilla, jotka laskevat pohjan pinta-alan, kappaleiden tilavuuden ja verrannosta saatavan korkeuden ja pituuden. Ohjelma kykenee laskemaan lieriön ja kartion/pyramidin tilavuuden pohjana toimii joko ympyrä tai neliö. Verrannon avulla voidaan laskea pienemmän kappaleen korkeus tai pituus. Lisäksi ohjelma kykenee laskemaan korkeuden sivujanan kautta, kun kyseessä on kartio tai pyramidi.

Kun tarvittavat laskut on suoritettu, näytetään kappaleen tiedot (pohjan ja kappaleen tyypi) ja näytetään kappaleiden tilavuuksien erotus.

Lisäyksenä tähän ohjelma laskee myös tilavuuden valmiiksi annetun pinta-alan kautta, kun kyseessä on lieriö/särmiö tai kartio/pyramidi sekä pallon tilavuuden (pallolla ei ole pohjaa).

import math

def Tilavuus(pinta_ala,korkeus,tyyppi):

  tilavuus = 0.0

  if (tyyppi == 1):
    #Lieriö
    tilavuus = pinta_ala*korkeus
  elif (tyyppi == 2):
    #Kartio
    tilavuus = (1/3.0)*pinta_ala*korkeus
  elif (tyyppi == 3):
    #Pallo
    tilavuus = (4/3.0)*math.pi*korkeus**3
  return tilavuus

def PohjanPintaAla(pituus,korkeus,tyyppi,tyyppi_kappale,pa):
  pinta_ala = 0.0
  #Lasketaan valitun tai valmiiksi annetun pohjan pinta-ala
  if (tyyppi == 1):
    #Neliö
    pinta_ala = pituus**2
  elif (tyyppi == 2):
    #Ympyrä
    pinta_ala = math.pi*pituus**2
  elif (tyyppi == 3):
    #Valmis pinta-ala
    pinta_ala = pa

  return Tilavuus(pinta_ala,korkeus,tyyppi_kappale)


def Verranto(pituus,pituus_pienempi,korkeus,korkeus_pienempi):
  if (pituus_pienempi == 0):
    tulos = pituus*korkeus_pienempi/korkeus
  elif (korkeus_pienempi == 0):
    tulos = pituus_pienempi*korkeus/pituus

  return tulos


#Ohjelmassa on kolme erityyppistä avaruuskappaletta (lieriö/särmiö, kartio/pyramidi ja pallo)
#Ohjelmassa on kaksi erityyppistä pohjaa (neliö ja ympyrä)
#Pallolla ei ole pohjaa

jatko = 1

while jatko == 1:

  #Pituus voi olla joko neliön sivun pituus tai ympyrän säde
  #Korkeus voi olla joko kappaleen korkeus tai kartion/pyramidin sivujana
  print("Anna pituus")
  pituus = float(input())
  print("Anna korkeus")

  korkeus = float(input())
  print("Anna pohjantyyppi 1) Neliö 2) Ymypyrä 3) Valmis pohja")

  tyyppi = int(input())

  print("Anna kappaleen tyyppi 1) Lieriö/Särmiö 2) Kartio/Pyramidi 3) Pallo")
  tyyppi_kappale = int(input())


  valinta = 0
  if (tyyppi_kappale == 2):
   print("Onko korkeus sivujanan pituus 1) Kyllä")
   valinta = int(input())
   if (valinta == 1):
     if (tyyppi == 1):
      korkeus = math.sqrt(korkeus**2-(pituus/2)**2)

     elif (tyyppi == 2):
      korkeus = math.sqrt(korkeus**2-pituus**2)

  #Pienempi kappale

  valinta_pienempi = 0
  pituus_pienempi = 0.0
  korkeus_pienempi = 0.0

  if (tyyppi == 1 or tyyppi == 2):
    print("Valitse pienempi 1) korkeus 2) pituus")
    valinta_pienempi = int(input())
    if (tyyppi_kappale == 1 or tyyppi_kappale == 2):
      if (valinta_pienempi == 1):
        while (pituus_pienempi <= 0 or pituus_pienempi >= pituus):

          print("Anna pituus")
          pituus_pienempi = float(input())

        korkeus_pienempi = Verranto(pituus,korkeus,pituus_pienempi,0.0)

      elif (valinta_pienempi == 2):
         while (korkeus_pienempi <= 0 or korkeus_pienempi >= korkeus):
          print("Anna korkeus")
          korkeus_pienempi = float(input())
         pituus_pienempi = Verranto(pituus,korkeus,0.0,korkeus_pienempi)
      elif (tyyppi_kappale == 3):
        while (korkeus_pienempi <= 0 or korkeus_pienempi >= korkeus):
          print("Anna pallon säde")
          korkeus_pienempi = float(input())

  pa = 0.0
  if (tyyppi == 3):
    print("Anna valmiiksi lasketun pohjan pinta-ala")
    pa = float(input())

  print("Kappale:", end="")
  if (tyyppi_kappale == 1):
   print("Lieriö")
  elif (tyyppi_kappale == 2):
   print("Kartio")

  print("Pohja:", end="")
  if (tyyppi == 1):
   print("Neliö")
  elif (tyyppi == 2):
   print("Ympyrä")
  #Lasketaan molempien kappaleiden tilavuuksien erotus.
  if (tyyppi_kappale == 1 or tyyppi_kappale == 2):
    print("Tilavuus:",PohjanPintaAla(pituus,korkeus,tyyppi,tyyppi_kappale,pa)-PohjanPintaAla(pituus_pienempi,korkeus_pienempi,tyyppi,tyyppi_kappale,pa))
  elif (tyyppi_kappale == 3):
    print("Tilavuus:", Tilavuus(0.0,korkeus,3)-Tilavuus(0.0,korkeus_pienempi,3))

  print("Jatketaanko 1) Kyllä")
  jatko = int(input())

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta