Προς το περιεχόμενο

2 γινομενα αριθμών. Πότε το ενα θα ξεπεράσει το άλλο


oriok

Προτεινόμενες αναρτήσεις

Δημοσ.

Λοιπόν έχω μια άσκηση σε java και έχω κολλήσει σε κάποιο σημείο που χρειάζεται μαθηματικά.Λοιπόν εισάγουμε 2 αριθμούς από το πληκτρολόγιο που υποτίθεται απεικονίζουν το πλήθος ενός είδους στη γη και μετά εισάγουμε το ποσοστο % της αύξησης τους κάθε χρόνο.

Από αυτά θέλω να βρώ πότε (πόσα χρόνια) το ένα πλήθος θα ξεπεράσει το άλλο (αν το ξεπεράσει).

Δεν ξέρω πώς να ελέγξω κάτι τέτοιο.Οποια ιδέα θα με βοηθούσε πολύ

 

ξέρω ότι για κάθε είδος κάθε χρονο εχουμε π.χ. είδοςΑ = είδοςΑ + (ρυθμός ανάπτ./100)*είδοςΑ

Ευχαριστώ

Δημοσ.

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 :P

Δημοσ.

ξέρω πως να διαβάζω από το πληκτολόγιο αριθμούς δεν ζήτησα αυτό.:-)

 

Επίσης έκανα και την ανάλυση που έκανες για τους αριθμούς.Εκεί που κολλάω είναι στο σώμα της loop, εκεί δεν ξέρω πως να το ελέγξω και αν θα χρειαστώ 2 ή περισσότερες loops

Δημοσ.

Έστω ότι αρχικά το Α > Β. Τότε:

>
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 :)

Δημοσ.

Λοιπον νομιζς οτι καταλαβα τι θελεις.

 

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

Δημοσ.

@antonl

κάτι τέτοιο θέλω αλλά δεν ξέρω αν καλύπτει όλες τις δυνατές περιπτώσεις(προσπαθώ να το ελεγξω τώρα) των αριθμών.Θέλω να πώ δηλαδή πως μπορεί το rateA να είναι > από το rateB αλλά αν το πλήθος του Β είναι μεγαλύτερο του Α τότε τι θα κάνει ο αλγόριθμος?

Δημοσ.

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++;

}

}

 

Νομιζω ειναι οκ τωρα

Δημοσ.

>
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, τώρα πατσίσαμε :P

Δημοσ.

Σας ευχαριστώ πολύ , θα το κάνω και σε κώδικα και θα το δοκιμάσω.(αν και εγώ σκεφτόμουν για πιο λίγους ελέγχους)

Δημοσ.

Εγώ από java δεν σκαμπάζω μία ( fortran77 ήξερα λίγο, αρχαία πράγματα δηλαδή :o )

αλλά από μαθηματικά δεν τα πάω και άσχημα οπότε :

 

Το πρόβλημα του πλήθους του είδους (με σταθερό ποσοστό αύξησης ) είναι ταυτόσημο

με το πρόβλημα του ανατοκισμού οπότε υπάρχει κλειστός τύπος, δηλαδή :

 

Α(Ν)=Α(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 βέβαια ο φυσικός λογάριθμος.

 

Ασφαλώς πρέπει να αποκλειστούν τα άτοπα που αναφέρθηκαν παραπάνω .

 

Τώρα βέβαια δεν ξέρω αν απλά θέλεις να λύσεις το πρόβλημα ή να εξασκηθείς σε

βρόχους οπότε αν λέω κάτι που δεν κολλάει με προγραμματισμό ζητώ συγνώμη :o

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...