You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6.1 KiB
6.1 KiB
Day 15 - Classes
Exercise:Solutions
Home | << Day 14 | Day 16 >>
Exercise Solutions
Exercises Level 1
- Create an Animal class. The class will have name, age, color, legs properties and create different methods
// app.js
class Animal {
constructor(name,age,color,leg){
this.name = name
this.age=age
this.color=color
this.leg=leg
}
calculaterBirthYear(){
const currentYear = new Date().getFullYear()
const birthYear = currentYear - this.age
return birthYear
}
}
- Create a Dog and Cat child class from the Animal Class.
// app.js
class Animal {
constructor(name,age,color,leg){
this.name = name
this.age=age
this.color=color
this.leg=leg
}
calculaterBirthYear(){
const currentYear = new Date().getFullYear()
const birthYear = currentYear - this.age
return birthYear
}
}
const dog1 = new Animal("beşo",5,"red",4)
const cat1= new Animal("lesi",3,"white",2)
console.log(dog1.calculaterBirthYear())
console.log(cat1.calculaterBirthYear())
Exercises Level 2
- Override the method you create in Animal class
// app.js
class Animal {
constructor(name,age,color,leg){
this.name = name
this.age=age
this.color=color
this.leg=leg
}
static calculaterBirthYear(){
const currentYear = new Date().getFullYear()
const birthYear = currentYear - this.age
return birthYear
}
}
const dog1 = new Animal("beşo",5,"red",4)
const cat1= new Animal("lesi",3,"white",2)
console.log(dog1.calculaterBirthYear())
console.log(cat1.calculaterBirthYear())
Exercises Level 3
- Let's try to develop a program which calculate measure of central tendency of a sample(mean, median, mode) and measure of variability(range, variance, standard deviation). In addition to those measures find the min, max, count, percentile, and frequency distribution of the sample. You can create a class called Statistics and create all the functions which do statistical calculations as method for the Statistics class. Check the output below.
// app.js
class Statistics {
constructor(data) {
this.data = data;
}
mean() {
return this.data.reduce((a, b) => a + b) / this.data.length;
}
median() {
const sortedData = this.data.sort((a, b) => a - b);
const middleIndex = Math.floor(sortedData.length / 2);
if (sortedData.length % 2 === 0) {
return (sortedData[middleIndex - 1] + sortedData[middleIndex]) / 2;
} else {
return sortedData[middleIndex];
}
}
mode() {
const frequencyTable = {};
let maxFrequency = 0;
let modes = [];
for (const value of this.data) {
frequencyTable[value] = (frequencyTable[value] || 0) + 1;
if (frequencyTable[value] > maxFrequency) {
maxFrequency = frequencyTable[value];
modes = [value];
} else if (frequencyTable[value] === maxFrequency) {
modes.push(value);
}
}
return modes;
}
range() {
return Math.max(...this.data) - Math.min(...this.data);
}
variance() {
const mean = this.mean();
return this.data.reduce((a, b) => a + (b - mean) ** 2, 0) / this.data.length;
}
standardDeviation() {
return Math.sqrt(this.variance());
}
minimum() {
return Math.min(...this.data);
}
maximum() {
return Math.max(...this.data);
}
count() {
return this.data.length;
}
percentile(p) {
const sortedData = this.data.sort((a, b) => a - b);
const index = (p / 100) * (sortedData.length - 1);
if (Number.isInteger(index)) {
return sortedData[index];
} else {
const lowerIndex = Math.floor(index);
const upperIndex = Math.ceil(index);
return (sortedData[lowerIndex] + sortedData[upperIndex]) / 2;
}
}
frequencyDistribution() {
const frequencyTable = {};
for (const value of this.data) {
frequencyTable[value] = (frequencyTable[value] || 0) + 1;
}
return frequencyTable;
}
}
ages = [31, 26, 34, 37, 27, 26, 32, 32, 26, 27, 27, 24, 32, 33, 27, 25, 26, 38, 37, 31, 34, 24, 33, 29, 26]
const stats = new Statistics(ages);
console.log(`Mean: ${stats.mean()}`);
console.log(`Median: ${stats.median()}`);
console.log(`Mode: ${stats.mode()}`);
console.log(`Range: ${stats.range()}`);
console.log(`Variance: ${stats.variance()}`);
console.log(`Standard Deviation: ${stats.standardDeviation()}`);
console.log(`Minimum: ${stats.minimum()}`);
console.log(`Maximum: ${stats.maximum()}`);
console.log(`Count: ${stats.count()}`);
console.log(`25th Percentile: ${stats.percentile(25)}`);
console.log(`Frequency Distribution: ${JSON.stringify(stats.frequencyDistribution())}`);
- Create a class called PersonAccount. It has firstname, lastname, incomes, expenses properties and it has totalIncome, totalExpense, accountInfo,addIncome, addExpense and accountBalance methods. Incomes is a set of incomes and its description and expenses is also a set of expenses and its description.
// ap.js
class PersonAccount {
constructor(name, surname, incomes, expenses) {
this.name = name;
this.surname = surname;
this.incomes = incomes;
this.expenses = expenses;
}
totalIncome() {
return this.incomes.reduce((a, b) => a + b, 0);
}
totalExpense() {
return this.expenses.reduce((a, b) => a + b, 0);
}
accountInfo() {
return `${this.name} ${this.surname} has a total income of ${this.totalIncome()} and a total expense of ${this.totalExpense()}.`;
}
addIncome(income) {
this.incomes.push(income);
}
addExpense(expense) {
this.expenses.push(expense);
}
accountBalance() {
return this.totalIncome() - this.totalExpense();
}
}
const person = new PersonAccount('Nevzat', 'Atalay', [1000, 2000, 3000], [500, 1000]);
console.log(person.accountInfo()); // John Doe has a total income of 6000 and a total expense of 1500.
console.log(person.accountBalance()); // 4500