Премини към съдържанието

Препоръчан отговор


Добър ден. Трябва ми решение на първата задача. Ако някой не го мързи, може и 2-рата да направи. Препоръчително е на Java да се направят, но може и на друго. Мерси предварително.

IMG_20170529_085942.jpg

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

преди 30 минути, Martyn Stanchew написа:

Добър ден. Трябва ми решение на първата задача. Ако някой не го мързи, може и 2-рата да направи. Препоръчително е на Java да се направят, но може и на друго. Мерси предварително.

 

Нас не ни мързи, но вас ви! Показвате огромно неуважение към който и да иска да ви помогне. Не сте преписал условието на задачата, не сте се напънал поне малко да напишете вие....

  • Харесва ми 3

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Здравейте !

Ще приложа едно решение, което решава задачите. Но има една уловка - понеже мързела така или иначе не се толелира, а от опита, който получих в този раздел, шанса да се заформи дискусия по отношение на решение на задачата с автора на темата си е статистическа нула, ще дам решение със задачки за домашно - т.е. ако ще го вземете и ще го предадете директно, бъдете готов и да го обясните - така поне ще вложите някакви усилия да попрочетете за едно-друго.

Spoiler

/** POJO Class for Name
 * @author 
 */
public class Name {
	
	private String first, last;
	
	
	public Name() {
		this("","");
	}

	public Name(String first, String last) {
		super();
		this.first = first;
		this.last = last;
	}

	public String getFirst() {
		return first;
	}

	public void setFirst(String first) {
		this.first = first;
	}

	public String getLast() {
		return last;
	}

	public void setLast(String last) {
		this.last = last;
	}
	
	@Override
	public String toString() {
		return this.first + " " + this.last;
	}
	
}

 

Spoiler

/** POJO Class for Work
 * @author 
 */
public class Work {
	
	private double hours, salaryPerHour;

	public Work() {
		this(0,0);
	}

	public Work(double hours, double salaryPerHour) {
		super();
		this.hours = hours;
		this.salaryPerHour = salaryPerHour;
	}

	public double getHours() {
		return hours;
	}

	public void setHours(double hours) {
		this.hours = hours;
	}

	public double getSalaryPerHour() {
		return salaryPerHour;
	}

	public void setSalaryPerHour(double salaryPerHour) {
		this.salaryPerHour = salaryPerHour;
	}
	
	public double calculateSalary() {
		return this.hours * this.salaryPerHour;
	}

}

 

 

Spoiler

public class Employee {

	private static final String PRINT_SALARY_TEMPLATE = "Salary of employee %s is %f";

	private Work work;
	private Name name;

	public Employee() {
		this(new Name(), new Work());
	}

	public Employee(Name name) {
		this(name, new Work());
	}

	public Employee(Name name, Work work) {
		super();
		this.work = work;
		this.name = name;
	}

	public Work getWork() {
		return work;
	}

	public void setWork(Work work) {
		this.work = work;
	}

	public Name getName() {
		return name;
	}

	public void setName(Name name) {
		this.name = name;
	}

	public void print() {
		System.out.printf(PRINT_SALARY_TEMPLATE, name.toString(), work.calculateSalary());
	}
	
	public void read() {
		Scanner sc = new Scanner(System.in);
		System.out.println("Enter Employee's first name: ");
		getName().setFirst(sc.nextLine());
		System.out.println("Enter Employee's last name: ");
		getName().setLast(sc.nextLine());
		System.out.println("Enter Employee's hours: ");
		getWork().setHours(sc.nextDouble());
		System.out.println("Enter Employee's salary per hour: ");
		getWork().setSalaryPerHour(sc.nextDouble());
		System.out.println("Done !");
		sc.close();
	}

}

 

Spoiler

public class TestEmployee {

	public static void main(String[] args) {
		Employee emp = new Employee();
		emp.read();
		emp.print();
	}
}

 

Spoiler

import java.math.BigDecimal;

public class Fact {
	
	private long x;
	private BigDecimal result;
	
	public Fact(long x) {
		if (x >= 0) {
			this.x = x;
		} else {
			throw new ArithmeticException("Cannot straightforward calculate negative factorial (Gamma Functions required) !!! ");
		}
	}
	
	public BigDecimal value() {
		if (result == null) {
			result = new BigDecimal(1);
			calculate(this.x);
		}
		return result;
	}
	
	private void calculate(long x) {
		if (x > 1) {
			result = result.multiply(new BigDecimal(x));
			calculate(x-1);
		}
	}

	public BigDecimal getResult() {
		return result;
	}
}

 

Spoiler

public class FactTest {
	public static void main(String[] args) {
		System.out.println(new Fact(100).value());
		System.out.println(new Fact(45).value());
		System.out.println(new Fact(200).value());
		System.out.println(new Fact(1000).value());
		System.out.println(new Fact(2).value());
		System.out.println(new Fact(0).value());
		System.out.println(new Fact(-1).value());
	}
}

 

Малко "food for thought" върху горните писания:

1) Както е POJO и има ли почва в Java програмирането ?

2) Защо в класа Fact се използва това чудо BigDecimal и какво всъщност е то ? Защо ако използваме long вместо него, програмата ни ще изкукурига ако сложим число , по-голямо от 20 ?

3) Защо класовете Name, Work и Employee имат по няколко конструктора и какво правят извикванията super() и this() ?

4*) Защо в проверката за подаден параметър на конструктора на Fact е записано, че за числа, по-малки от нула, няма праволинейно решение, което да не използва гама функциите ?

Поздрави !

Редактирано от soundtracker (преглед на промените)
  • Харесва ми 3

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.