Podrazitev bencina
Vlada se je odločila, da bo po novem letu vsak teden za določen (in vedno enak) odstotek podražila liter bencina.
Napiši program (z rekurzivno metodo), ki bo Vladi, ko bo končno določila začetno ceno (v novi valuti EUR), pomagal
izračunati novo ceno litra bencina po n tednih podražitev.
Rešitev (C#)
class Bencin
{
/* rekurzivna metoda, ki za vsak teden izracuna novo ceno, glede na ceno prejsnjega tedna */
public static double NovaCena(int n, double odstotek, double zacetnaCena) {
if (n <= 0)
return zacetnaCena;
else
return (1 + odstotek / 100) * NovaCena(n - 1, odstotek, zacetnaCena);
}
static void Main(string[] args) {
//vnos podatkov o zacetni ceni, odstotku podrazitve in stevilu tednov
Console.Write("Vnesi zacetno ceno v EUR: ");
string beri = Console.ReadLine();
double zacetnaCena = double.Parse(beri);
Console.Write("Vnesi odstotek podrazitve: ");
beri = Console.ReadLine();
double odstotek = double.Parse(beri);
Console.Write("Vnesi stevilo tednov: ");
beri = Console.ReadLine();
int n = int.Parse(beri);
//izracun koncne cene po n tednih zaokrozena na cente
double koncnaCena = Math.Round(NovaCena(n, odstotek, zacetnaCena) * 100) / 100.0;
//izpis glede ednine oz. mnozine
if (n == 1) {
Console.WriteLine("Zacetna cena " + zacetnaCena + " EUR bo pri " + odstotek +
" odstotni podrazitvi, v " + n + " tednu narasla na " +
koncnaCena + " EUR.");
} else {
Console.WriteLine("Zacetna cena " + zacetnaCena + " EUR bo pri " + odstotek +
" odstotni podrazitvi, v " + n + " tednih narasla na " +
koncnaCena + " EUR.");
}
}
}
class Program {
public static void Main(string[] args) {
Console.WriteLine("Vnesi podatke za izračun podražitve bencina."
+"Začni z osnovno ceno:");
double osnCena = double.Parse(Console.ReadLine());//v Evrih
Console.WriteLine("Vnesi vrednost podražitve v %");
double y = double.Parse(Console.ReadLine());
y = 1+(y/100);
Console.WriteLine("...in sedaj še število tednov (po vladnem ukrepu):");
int n = int.Parse(Console.ReadLine());
Console.WriteLine("Če je osnovna cena bencina "+osnCena+
" Eur. in podražitev "+(y-1)*100+" %,"+
" je cena bencina po "+n+". \n"+
"tednih: " +Pot(y,n)*osnCena);
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
//Rekurzivna metoda za izračun nekega potenčnega števila
public static double Pot(double y, int n) {
if (n ==0) {
return 1;
}
if (n%2 == 0) {
double pom = Pot(y,n/2);
return pom*pom;
} else {
return y*Pot(y, n-1);
}
}
}
}
Rešitev (Java)
import javax.swing.*;
public class Bencin {
/* rekurzivna metoda,
ki za vsak teden izracuna novo ceno, glede na ceno prejsnjega tedna */
public static double novaCena(int n, double odstotek, double zacetnaCena) {
if (n <= 0)
return zacetnaCena;
else
return (1 + odstotek / 100) * novaCena(n - 1, odstotek, zacetnaCena);
}
public static void main (String [] args) {
//vnos podatkov o zacetni ceni, odstotku podrazitve in stevilu tednov
String beri = JOptionPane.showInputDialog("Vnesi zacetno ceno v EUR:");
double zacetnaCena = Double.parseDouble(beri);
beri = JOptionPane.showInputDialog("Vnesi odstotek podrazitve:");
double odstotek = Double.parseDouble(beri);
beri = JOptionPane.showInputDialog("Vnesi stevilo tednov:");
int n = Integer.parseInt(beri);
//izracun koncne cene po n tednih zaokrozena na cente
double koncnaCena = Math.round(novaCena(n, odstotek, zacetnaCena) * 100) / 100.0;
//izpis glede ednine oz. mnozine
if (n == 1) {
System.out.println("Zacetna cena " + zacetnaCena + " EUR bo pri " + odstotek +
" odstotni podrazitvi, v " + n + " tednu narasla na " +
koncnaCena + " EUR.");
} else {
System.out.println("Zacetna cena " + zacetnaCena + " EUR bo pri " + odstotek +
" odstotni podrazitvi, v " + n + " tednih narasla na " +
koncnaCena + " EUR.");
}
}
}