oriok Δημοσ. 27 Φεβρουαρίου 2008 Δημοσ. 27 Φεβρουαρίου 2008 Λοιπόν έχω μια άσκηση σε java και έχω κολλήσει σε κάποιο σημείο που χρειάζεται μαθηματικά.Λοιπόν εισάγουμε 2 αριθμούς από το πληκτρολόγιο που υποτίθεται απεικονίζουν το πλήθος ενός είδους στη γη και μετά εισάγουμε το ποσοστο % της αύξησης τους κάθε χρόνο. Από αυτά θέλω να βρώ πότε (πόσα χρόνια) το ένα πλήθος θα ξεπεράσει το άλλο (αν το ξεπεράσει). Δεν ξέρω πώς να ελέγξω κάτι τέτοιο.Οποια ιδέα θα με βοηθούσε πολύ ξέρω ότι για κάθε είδος κάθε χρονο εχουμε π.χ. είδοςΑ = είδοςΑ + (ρυθμός ανάπτ./100)*είδοςΑ Ευχαριστώ
oceansofangels Δημοσ. 27 Φεβρουαρίου 2008 Δημοσ. 27 Φεβρουαρίου 2008 me BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); mporeis na pareis eisodo apo to pliktrologio. Meta kaneis p.x. String value = reader.readLine(); Opote meta einai sxetika aplo.. Estw twra oti ruthmos auksisis aInc = 10 (pososto) Omoiws bInc = 5; Epishs, arxikes times a = 1500 (plithos) kai b = 1700 (blepoume oti to b exei megalutero arithmo arxika alla mikrotero ruthmo anaptiksis) for ( int years = 0; b > a; years ++ ) { // code snippet.. } E mhn sou thn lisw ki olokliri
oriok Δημοσ. 27 Φεβρουαρίου 2008 Μέλος Δημοσ. 27 Φεβρουαρίου 2008 ξέρω πως να διαβάζω από το πληκτολόγιο αριθμούς δεν ζήτησα αυτό. Επίσης έκανα και την ανάλυση που έκανες για τους αριθμούς.Εκεί που κολλάω είναι στο σώμα της loop, εκεί δεν ξέρω πως να το ελέγξω και αν θα χρειαστώ 2 ή περισσότερες loops
antonl Δημοσ. 27 Φεβρουαρίου 2008 Δημοσ. 27 Φεβρουαρίου 2008 Έστω ότι αρχικά το Α > Β. Τότε: > if (rate_A >= rate_ year = -1 else { year = 0 while (eidos_A > eidos_ { eidos_A = eidos_A + (rate_A/100)*eidos_A eidos_B = eidos_B + (rate_B/100)*eidos_B year++ } } print year year = -1 σημαίνει προφανώς ότι ποτέ δε θα γίνει το B > A Επίσης το παραπάνω προφανώς είναι ο αλγόριθμος κι όχι ο κώδικας σε java
GeorgeK1986 Δημοσ. 27 Φεβρουαρίου 2008 Δημοσ. 27 Φεβρουαρίου 2008 Λοιπον νομιζς οτι καταλαβα τι θελεις. int yearsPassed=0; while (eidosa < eidosb) { eidosA = eidosA + (rateA/100)*eidosA eidosB = eidosB + (rateB/100)*eidosB yearsPassed++; } and at the end print the yearsPassed variable! i hope that it helps. Geo
GeorgeK1986 Δημοσ. 27 Φεβρουαρίου 2008 Δημοσ. 27 Φεβρουαρίου 2008 χεχε Μαλλον ημουν λιγο αργος... εγραφα την λυση και ο antonl με προλαβε
oriok Δημοσ. 27 Φεβρουαρίου 2008 Μέλος Δημοσ. 27 Φεβρουαρίου 2008 @antonl κάτι τέτοιο θέλω αλλά δεν ξέρω αν καλύπτει όλες τις δυνατές περιπτώσεις(προσπαθώ να το ελεγξω τώρα) των αριθμών.Θέλω να πώ δηλαδή πως μπορεί το rateA να είναι > από το rateB αλλά αν το πλήθος του Β είναι μεγαλύτερο του Α τότε τι θα κάνει ο αλγόριθμος?
GeorgeK1986 Δημοσ. 27 Φεβρουαρίου 2008 Δημοσ. 27 Φεβρουαρίου 2008 if (rateA > rateB && eidosA>eidosB) { //profanws dn exoume lisi } else if(rateA < rateB && eidosA<eidosB { //pali dn linetai } else if (rateA>rateB) { while (eidosa < eidosb) { eidosA = eidosA + (rateA/100)*eidosA eidosB = eidosB + (rateB/100)*eidosB yearsPassed++; } } else if (rateB>rateA) { while (eidosb < eidosa) { eidosA = eidosA + (rateA/100)*eidosA eidosB = eidosB + (rateB/100)*eidosB yearsPassed++; } } Νομιζω ειναι οκ τωρα
antonl Δημοσ. 27 Φεβρουαρίου 2008 Δημοσ. 27 Φεβρουαρίου 2008 > if ((rate_A >= rate_ AND (eidos_A > eidos_) { winner = A year = -1 } elseif((rate_A <= rate_ AND (eidos_A < eidos_) { winner = B year = -1 } elseif ((eidos_A == eidos_ AND (rate_A != rate_) { if (rate_A > rate_ winner = A else winner = B year = 1 } elseif ((eidos_A == eidos_ AND (rate_A == rate_) { winner = NONE year = -2 } else { year = 0 if (eidos_A > eidos_ { while (eidos_A >= eidos_ { eidos_A = eidos_A + (rate_A/100)*eidos_A eidos_B = eidos_B + (rate_B/100)*eidos_B year++ } winner = B } else { while (eidos_A <= eidos_ { eidos_A = eidos_A + (rate_A/100)*eidos_A eidos_B = eidos_B + (rate_B/100)*eidos_B year++ } winner = A } } print winner print year Δεν είναι και ό,τι πιο κομψό μάλλον αλλά πιστεύω πως καλύπτει όλες τις περιπτώσεις. year = -2 => θα είναι πάντα ίσα τα δύο είδη winner => ποιο είδος θα υπερισχύσει στο τέλος edit: Οκ GeorgeK1986, τώρα πατσίσαμε
oriok Δημοσ. 27 Φεβρουαρίου 2008 Μέλος Δημοσ. 27 Φεβρουαρίου 2008 Σας ευχαριστώ πολύ , θα το κάνω και σε κώδικα και θα το δοκιμάσω.(αν και εγώ σκεφτόμουν για πιο λίγους ελέγχους)
kyrnikos Δημοσ. 27 Φεβρουαρίου 2008 Δημοσ. 27 Φεβρουαρίου 2008 Εγώ από java δεν σκαμπάζω μία ( fortran77 ήξερα λίγο, αρχαία πράγματα δηλαδή ) αλλά από μαθηματικά δεν τα πάω και άσχημα οπότε : Το πρόβλημα του πλήθους του είδους (με σταθερό ποσοστό αύξησης ) είναι ταυτόσημο με το πρόβλημα του ανατοκισμού οπότε υπάρχει κλειστός τύπος, δηλαδή : Α(Ν)=Α(0)X (1+ PA)^N όπου Α(0) ο πληθυσμός του είδους Α αρχικά , Α(Ν) ο πληθυσμός του είδους Α το έτος Ν, PA το ετήσιο ποσοστό αυξησης του Α και Ν ο αριθμός των ετών .( το Χ είναι το "επι" ) Αντίστοιχα Β(Ν)=Β(0)Χ(1+PB)^N Αρα για το πότε θα εξισωθούν ,οπότε και θα είναι Α(Ν)=Β(Ν),πρέπει απλά να λύσουμε την εξίσωση Α(0)X (1+ PA)^N = Β(0)Χ(1+PB)^N με άγνωστο το Ν . Μετά από μερικές πράξεις η λύση είναι : Ν= { lnA(0)-lnB(0) } / { ln(1+PB) - ln(1+PA) } όπου ln βέβαια ο φυσικός λογάριθμος. Ασφαλώς πρέπει να αποκλειστούν τα άτοπα που αναφέρθηκαν παραπάνω . Τώρα βέβαια δεν ξέρω αν απλά θέλεις να λύσεις το πρόβλημα ή να εξασκηθείς σε βρόχους οπότε αν λέω κάτι που δεν κολλάει με προγραμματισμό ζητώ συγνώμη
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.