Suma si media
Enunt
interface Expresie{
double calculeazaValoare();
}
class Constanta implements Expresie{
private double valoare;
public Constanta(double valoare){
this.valoare=valoare;
}
public double calculeazaValoare() {
return this.valoare;
}
public String toString() {
return this.valoare+"";
}
public void schimbaValoare(double valoareNoua) {
this.valoare = valoareNoua;
}
}
class Suma implements Expresie{
private Expresie e1,e2;
public Suma(Expresie e1, Expresie e2){
this.e1=e1;
this.e2=e2;
}
public double calculeazaValoare() {
double tmp1=e1.calculeazaValoare();
double tmp2=e2.calculeazaValoare();
return tmp1+tmp2;
}
public String toString(){
return e1.toString()+ " + " +e2.toString();
}
}
class Medie implements Expresie{
private Expresie[] expresii;
private static final int nrMaxExpresii=15;
private int nrExpresii=0;
public Medie(){
expresii=new Expresie[nrMaxExpresii];
}
public void adaugaExpresie(Expresie e1){
if(nrExpresii==nrMaxExpresii)
System.out.println("Limita maxima de stocare a expresiilor a fost atinsa");
else{
if(e1!=null){
expresii[nrExpresii]=e1;
nrExpresii++;
}
}
}
public double calculeazaValoare() {
if(nrExpresii==0)
return 0;
else{
double tmp=0;
for(int i=0;i<nrExpresii;i++)
tmp=tmp+expresii[i].calculeazaValoare();
return (double)tmp/nrExpresii;
}
}
public String toString() {
String result="MED("+expresii[0].toString();
for(int i=1;i<nrExpresii;i++)
result=result+", "+expresii[i].toString();
result=result+")";
return result;
}
}
public class Main {
public static void main(String[] args) {
Expresie c1=new Constanta(5.0);
Expresie c2=new Constanta(0.0);
Expresie s1=new Suma(new Constanta(6.0),new Constanta(7.0));
Expresie m1=new Medie();
Expresie f=new Medie();
((Medie)m1).adaugaExpresie(c1);
((Medie)m1).adaugaExpresie(c2);
((Medie)f).adaugaExpresie(m1);
((Medie)f).adaugaExpresie(s1);
System.out.println(f);
System.out.println("Valoare expresiei este: "+f.calculeazaValoare());
}
}