• Käy heittämässä ääni Pakkotoistolle vuoden Podcast äänestyksessä.KIITOS!
  • Rekisteröidy ja osallistu keskusteluun. SHABOOM

Ohjelmoinnin ongelmanurkkaus

Liittynyt
3.4.2004
Viestejä
3 174
Ikä
35
Ok!

Tässä illan viimeiset kysymykset.

Miten saan laskettua bruttopalkasta xx% suuruisen vähennyksen kun vähennys saa kuitenkin olla korkeintaan xxxx euroa?
Jos nyt ymmärsin kysymyksesi oikein niin joku tämän tapainen laskelma pelittänee:

if(0.xx * palkka > xxxx) vahennys = xxxx;
else vahennys = palkka * 0.xx;

eli jos xx% palkasta on suurempi kuin xxxx €, vähennys on maksimi. Jos ei ole suurempi niin vahennys on tuo prosentuaalinen osuus.

Toinen:

Ohjelman pitäisi tulostaa tuumia vastaavat senttimetrit 10" välein väliltä 10-100.
int tuumat = 10;
while(tuumat <= 100){
System.out.printf("Tuumat: %d, sentit: %f", tuumat, 2.54* tuumat);
tuumat = tuumat + 10;
}

e: perhana, huomasin vasta että kaipasit vain neuvoja, no jätetään koodi kuitenkin näkyviin.

toisessa kysymyksessä tosiaan tarvitaan vain silmukka joka pyörii kunnes tuumat ylittävät sadan, ja lasketaan joka kierroksella tuumat * 2.54 ja tulostetaan arvot.
 
Liittynyt
19.12.2007
Viestejä
3 537
Ok kiitos yritetään noilla.

Nyt tuo heittää ne kaikki yhteen pötköön, muuten kyllä oikein. Eli tuolla/n:llähän pitäisi saada kuntoon rivit, mutta miten sen saa tuohon lisättyä että menevät tähän muotoon:

tuumat xx sentit xx
tuumat xx sentit xx

Hieman off topic, mutta jumittaako muilla koskaan tuo Eclipse? Itsellä toiminut moitteettomasti tähän päivään asti, nyt en voi käytännössä ohjelmoida yhtään mitään kun koneen tuulettimet huutavat hoosiannaa ja cpu usage 100 lasissa jatkuvasti. Eclipse jumittaa niin paljon ettei mitään voi kirjoittaa->vetää samalla koko koneen jumiin. Eclipsen kun sammuttaa->cpu usage 3%. Alkoi tuossa noin tunti sitten nämä ongelmat.

Koneessa ei viruksia.
 

ssi

Liittynyt
18.12.2002
Viestejä
246
Ok kiitos yritetään noilla.

Nyt tuo heittää ne kaikki yhteen pötköön, muuten kyllä oikein. Eli tuolla/n:llähän pitäisi saada kuntoon rivit, mutta miten sen saa tuohon lisättyä että menevät tähän muotoon:

tuumat xx sentit xx
tuumat xx sentit xx

Hieman off topic, mutta jumittaako muilla koskaan tuo Eclipse? Itsellä toiminut moitteettomasti tähän päivään asti, nyt en voi käytännössä ohjelmoida yhtään mitään kun koneen tuulettimet huutavat hoosiannaa ja cpu usage 100 lasissa jatkuvasti. Eclipse jumittaa niin paljon ettei mitään voi kirjoittaa->vetää samalla koko koneen jumiin. Eclipsen kun sammuttaa->cpu usage 3%. Alkoi tuossa noin tunti sitten nämä ongelmat.

Koneessa ei viruksia.

Se on \n ei /n.

Eclipse ei kyllä yleensä jumita, mikäli siellä ei jää mikään taski sekoilemaan. Mylyn on mun mielestä ollut sellainen eclipse-laajennos, joka joskus sekoilee. Näkyykö Eclipsen käyttöliittymässä mitään "latausanimaatiota" (yleensä oikea alakulma), jota tuplaklikkailemalla tms. saisit tarkempaa tietoa, mikä taski eclipsen oikein saa sekaisin?
 
Liittynyt
19.12.2007
Viestejä
3 537
Miten saan muutettua tässä tuon parittomuuden? Siis pitäisi alkaa ykkösestä, nyt alkaa nollasta. Eli > 1, mutta miten?

int paritonLuku = 0;

while (paritonLuku <= 100) {
System.out.println(paritonLuku);
paritonLuku = paritonLuku + 2;
 
Liittynyt
18.11.2004
Viestejä
5 038
Miten nyt saan nyt pyöristämään esim tuon 10 tuumaa = 25,400000 cm = 25,4cm?

Yritin tutkia noita kaikkia oppaita ja näitä teidän tekstejä mutta tuota en vielä saanut. Muuten valmis.
Esim. alla olevasti. Doublesta voi muodstaa myös esim. BigDecimal-olion, jolla on scale-metodi, jolla vastaavasti voi tehdä erilaisia pyöristyksiä ja palautaa takaisin pyöristetty arvo double-tietotyyppiin. Tämä silloin jos luvulla pitäisi esim. laskea jotain, eikä vain muotoilla sitä tulostusta varten.

Koodi:
double tuumat = 10;

while(tuumat <= 100) {
    System.out.printf("Tuumat: %3.0f, sentit: %5.1f%n", tuumat, 2.54* tuumat);
    tuumat+=10;
 }
Tuumat: 10, sentit: 25,4
Tuumat: 20, sentit: 50,8
Tuumat: 30, sentit: 76,2
Tuumat: 40, sentit: 101,6
Tuumat: 50, sentit: 127,0
Tuumat: 60, sentit: 152,4
Tuumat: 70, sentit: 177,8
Tuumat: 80, sentit: 203,2
Tuumat: 90, sentit: 228,6
Tuumat: 100, sentit: 254,0
 

ssi

Liittynyt
18.12.2002
Viestejä
246
Miten nyt saan nyt pyöristämään esim tuon 10 tuumaa = 25,400000 cm = 25,4cm?

Yritin tutkia noita kaikkia oppaita ja näitä teidän tekstejä mutta tuota en vielä saanut. Muuten valmis.
Huutelen nyt sokkona noiden Javan dokumentaatioiden esimerkkien pohjalta (http://java.sun.com/javase/6/docs/api/java/util/Formatter.html). Tuon sivun alussa olevat esimerkit ja Summary-osio kannattaa lukea muutamaan kertaan ajatuksen kanssa ja kokeilla muokata noita esimerkkejä itse, niin tohon formatointiin pääsee pikkuhiljaa sisälle. Et sä käännösvirheitä ja oudon näköisiä tulosteita kamalampia asioita saa aikaan... :)


Kokeilepa vaihtaa se %f, joka tulostaa tuon sentit kertovan desimaaliluvun muotoon %.1f

Tuo %.1f kertoo tuolle metodille, että tähän kohtaan pitäis laittaa nyt yhden desimaalin tarkkuudella (.1) liukuluvuksi (eli suomeksi desimaaleja sisältävä luku) muotoiltu luku (f). Kahden desimaalin tarkkuudella saat tulostettua %.2f merkkijonolla jne... (dokumentaatiossa puhutaan noista desimaaleista termillä precision)
 
Liittynyt
19.12.2007
Viestejä
3 537
Huutelen nyt sokkona noiden Javan dokumentaatioiden esimerkkien pohjalta (http://java.sun.com/javase/6/docs/api/java/util/Formatter.html). Tuon sivun alussa olevat esimerkit ja Summary-osio kannattaa lukea muutamaan kertaan ajatuksen kanssa ja kokeilla muokata noita esimerkkejä itse, niin tohon formatointiin pääsee pikkuhiljaa sisälle. Et sä käännösvirheitä ja oudon näköisiä tulosteita kamalampia asioita saa aikaan... :)


Kokeilepa vaihtaa se %f, joka tulostaa tuon sentit kertovan desimaaliluvun muotoon %.1f

Tuo %.1f kertoo tuolle metodille, että tähän kohtaan pitäis laittaa nyt yhden desimaalin tarkkuudella (.1) liukuluvuksi (eli suomeksi desimaaleja sisältävä luku) muotoiltu luku (f). Kahden desimaalin tarkkuudella saat tulostettua %.2f merkkijonolla jne... (dokumentaatiossa puhutaan noista desimaaleista termillä precision)
:worship: Kiitos.

Tuolla se menikin tosi näppärästi. Kyllä näistä alkaa jo jotain hajua saamaan pikkuhiljaa. Ainoa ongelma tosin on, kun jouduin olemaan pari viikkoa poissa opetuksesta, eli käytännössä koko ajan mitä tätä asiaa on opetettu. En siis ole saanut tuntiakaan opetusta näihin asioihin vaan ihan perstuntumalla luentopaperien perusteella itse on tullut tehtyä. Siinä mielessä ei tää kait niin huolestuttavaa ole..vielä.:D
 
Liittynyt
18.5.2006
Viestejä
1 537
Miten saan muutettua tässä tuon parittomuuden? Siis pitäisi alkaa ykkösestä, nyt alkaa nollasta. Eli > 1, mutta miten?

int paritonLuku = 0;
Ihan oikeesti nyt, jumalauta. Onhan ajankohta hiukan myöhäinen, mutta ei se kuula nyt NOIN jumissa voi olla.
Just tän takia harkkatehtäviä ei kannata teettää toisilla kun menee ihan alkeellisinkin ajattelukyky.

-k
 
Liittynyt
19.12.2007
Viestejä
3 537
Ihan oikeesti nyt, jumalauta. Onhan ajankohta hiukan myöhäinen, mutta ei se kuula nyt NOIN jumissa voi olla.
Just tän takia harkkatehtäviä ei kannata teettää toisilla kun menee ihan alkeellisinkin ajattelukyky.

-k
Vai niiin, no jollain on ollut hauskaa taas. Ei minulla kyllä ajattelukyvyissä ole mitään vikaa ja myönnän kyllä, että tuo oli hiukan tyhmä kysymys. + En teetä harkkatehtäviä toisilla, kysyn niihin neuvoja:). Totta puhuakseni tajusin tuon jo itse heti kun olin lähetä nappulaa painanut. Pistän sen nyt väsymyksen ja yleisen vitutuksen piikkiin.
 
Liittynyt
19.12.2007
Viestejä
3 537
Vittuilusta huolimatta kysyn vielä pientä neuvoa. Eli pitäisi laskea kuinka paljon rahaa olisi koossa tänä päivänä jos v. 1627 on ollut xx euroa ja olisi talletettu nämä rahat pankkiin 3.5% vuotuisella korolla.

Eli v.1627 24 $, v.1628 = 24*1.035 jne jne. Mutta miten saan tuon tekemään näin?
 

ssi

Liittynyt
18.12.2002
Viestejä
246
Vittuilusta huolimatta kysyn vielä pientä neuvoa. Eli pitäisi laskea kuinka paljon rahaa olisi koossa tänä päivänä jos v. 1627 on ollut xx euroa ja olisi talletettu nämä rahat pankkiin 3.5% vuotuisella korolla.

Eli v.1627 24 $, v.1628 = 24*1.035 jne jne. Mutta miten saan tuon tekemään näin?

Annanpa tähän nyt linkkejä tarvittaviin tietoihin...

Korkoa korolle kaava: http://fi.wikipedia.org/wiki/Korko#Korkoa_korolle

Javan matematiikkaluokka (pow-metodilla saat potenssilaskun tehtyä): http://java.sun.com/javase/6/docs/api/java/lang/Math.html

Kulunut aika: 2009 - 1627


Eli tuon java.lang.Math.pow(muuttuja1, muuttuja2) avulla voit laskea tuossa korkoa korolle kaavassa tarvittavan potenssilaskun. Muuttujien1 ja 2 oikean sisällön loihtiminen jätettäköön kotitehtäväksi. :)

Toinen tapa on käyttää hyväkseen jo aikaisemminkin hyödyntämääsi toistorakennetta (eli se while-looppi). Eli haluat pyöriä luupissa vuodesta 1627 alkaen niin kauan, että vuosi on 2009. Joka kierroksella voit sitten suorittaa tuon jo esittelemäsi laskutoimituksen ja tallettaa tuloksen muuttujaan, jonka arvo säilyy loopin iteraatiosta toiseen. Alla olevista linkeistä löytyy varmasti selitys siitä kuinka toistorakenteet toimivat.

http://www.cs.helsinki.fi/u/wikla/Ohjelmointi/Sisalto/
http://www.cs.uta.fi/laki/#luennot

Suosittelen oikeasti lukemaan noita ajatuksen kanssa. Sulla on mun mielestä liian kova kiire saada harjoitukset tehtyä ja liian vähän halua käyttää aikaa "turhaan", eli ohjelmoinnin peruskäsitteiden opettelemiseen. Kuitenkaan ilman noita peruskäsitteitä, et voi oppia koodaamaan.

Ja jotta toi ylläoleva ei tunnu liian tylyltä, niin mä olin ihan yhtä pallo hukassa, kun menin yliopistoon aikoinani. Koodaus on alussa todella vierasta valtaosalle ihmisistä ja vaatii useamman kuukauden verran pään hakkaamista seinään ennen kuin koodia alkaa syntyä edes auttavalla tasolla (ainakin mulla vaati).

Kyseessä on siis puhtaasti asian eteen tehty _oma_ ajatustyö, jonka avulla opit ensin pilkkomaan ongelmat riittävän pieniksi ja selkeiksi paloiksi, muodostamaan algoritmit noiden osaongelmien ratkaisemiseksi ja lopuksi ilmaisemaan tämän kaiken valitulla ohjelmointikielellä.

Tuota ei voi oppia vain valmista koodia lukemalla, sillä toimivassa koodissa on jo kaikki valmiina. Näet kyllä kuinka joku on ratkaissut ongelman X, mutta et itse joudu tekemään sitä ajatustyötä, jonka avulla ongelma X on ensin pilkottu loogisiin osiinsa. Tuo logiikka ja kuinka esittää se käytetyn ohjelmointikielen tarjoamien työkalujen avulla (toistorakenteet, vertailut jne) on se oikeasti hankala osa ohjelmoinnista.

Kokeneemmat koodarit auttavat yleensä ihan mielellään, kun näkevät että olet yrittänyt. Kannattaa yleensä postata vasta, kun sulla on koodi valmiina, jonka mielestäsi pitäisi toimia, mutta joka ei vaan toimi.
 
Liittynyt
22.7.2006
Viestejä
2 082
Nostellaan ketjua.

Koodi:
System.out.print("Onko liikaa (0=ei, 1=kyllä): ");
             liikaa = input.nextInt();
Tuo on siis pieni pätkä "käyttöliittymästä". Miten ihmeessä tarkastan onko annettu luku oikein. Jos käyttäjä syöttää 1 tai 0, niin hätää ei ole, mutta jos hän laittaakin esim.4. Miten tarkistan?

Toivottavasti joku ymmärsi.
 
Liittynyt
21.10.2004
Viestejä
685
Ikä
48
Nostellaan ketjua.

Koodi:
System.out.print("Onko liikaa (0=ei, 1=kyllä): ");
             liikaa = input.nextInt();
Tuo on siis pieni pätkä "käyttöliittymästä". Miten ihmeessä tarkastan onko annettu luku oikein. Jos käyttäjä syöttää 1 tai 0, niin hätää ei ole, mutta jos hän laittaakin esim.4. Miten tarkistan?

Toivottavasti joku ymmärsi.
Koodi:
jos liikaa == 0 
   teeJotain
jos liikaa == 1
   teeJotainMuuta
muussatapauksessa
   annaVaikkaVirheilmoitus
Noin?
 

ssi

Liittynyt
18.12.2002
Viestejä
246
Juurikin noin kuin Jboy kertoi. Vaihtoehtoiset kielen rakenteet ovat if/else-lauseet tai sitten switch/case. Mietipä vielä samalla kuinka voit kysyä tuon syötteen tarvittaessa aina uudestaan, kunnes käyttäjä antaa sopivan luvun?

Viestin loppuosa ei suoranaisesti liity juuri käsillä olevaan ongelmaan, mutta liippaa niin läheltä, että mainitsen siitä tässä...

Jatkossa kannattaa tutustua käsitteisiin nimeltä poikkeukset (exceptions) ja assertions. Sori, en tiedä tolle jälkimmäiselle mitään suomenkielisen ohjelmointisanaston käännöstä. Suora käännös on väite/väittämä.

Noiden mekanismien avulla Javassa on tarkoitettu käsiteltäväksi ja hallittavaksi erilaiset virhetilanteet ja niiden käyttämisen opettelu todella kannattaa varhaisessa vaiheessa.

Tässäpä taas linkkejä:

http://java.sun.com/docs/books/tutorial/essential/exceptions/
http://java.sun.com/j2se/1.4.2/docs/guide/lang/assert.html
 
Liittynyt
22.7.2006
Viestejä
2 082
^

Kiitos edellisistä. En osannut tuota kysymystä oikein selittää kunnolla, mutta sain se kuitenkin tehtyä.

Nyt taas yksi tiukka kysymys.

Minulla on yhdessä luokassa monta metodia. Metodissa 1 on eräs Double arvo, jonka haluan tulostaa metodissa 4. Miten ihmeessä saan nuo näkymään monessa metodissa?

Olen yrittänyt muuttaa molemmat metodit privateista, publiceiksi. Mutta ei onnistu.
 
Ylös