Harmonyos应用实例98:约分和通分工具
·
应用实例八:约分和通分工具
知识点:掌握约分和通分的方法。
功能:输入一个分数,工具可以一步步展示其约分过程(找出公因数,分子分母同时除以公因数)。输入两个分数,工具可以展示通分过程(找最小公倍数,化为同分母分数)。
// SimplifyCommonDenominator.ets
@Entry
@Component
struct SimplifyCommonDenominator {
@State numerator: number = 8;
@State denominator: number = 12;
@State fraction2Num: number = 3;
@State fraction2Den: number = 4;
@State mode: 'simplify' | 'common' = 'simplify';
@State steps: string[] = [];
build() {
Column({ space: 20 }) {
Text('约分与通分工具')
.fontSize(26)
Row({ space: 15 }) {
Button('约分模式').onClick(() => { this.mode = 'simplify'; this.steps = []; })
Button('通分模式').onClick(() => { this.mode = 'common'; this.steps = []; })
}
if (this.mode === 'simplify') {
// 约分界面
Row({ space: 10 }) {
Text('分数:')
TextInput({ text: this.numerator.toString() }).width(100).onChange(v => this.numerator = parseInt(v) || 0)
Text('/')
TextInput({ text: this.denominator.toString() }).width(100).onChange(v => this.denominator = parseInt(v) || 0)
}
Button('开始约分').onClick(() => this.simplify())
} else {
// 通分界面
Row({ space: 10 }) {
TextInput({ text: this.numerator.toString() }).width(30).onChange(v => this.numerator = parseInt(v) || 0)
Text('/')
TextInput({ text: this.denominator.toString() }).width(30).onChange(v => this.denominator = parseInt(v) || 0)
Text('和')
TextInput({ text: this.fraction2Num.toString() }).width(30).onChange(v => this.fraction2Num = parseInt(v) || 0)
Text('/')
TextInput({ text: this.fraction2Den.toString() }).width(30).onChange(v => this.fraction2Den = parseInt(v) || 0)
}
Button('开始通分').onClick(() => this.findCommonDenominator())
}
// 步骤展示
List({ space: 8 }) {
ForEach(this.steps, (step: string) => {
ListItem() {
Text(step).fontSize(16)
}
})
}
.height(200)
.width('90%')
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Start)
.padding(20)
}
private simplify() {
this.steps = [];
// 寻找最大公因数
let gcd = this.gcd(this.numerator, this.denominator);
this.steps.push(`最大公因数是 ${gcd}`);
this.steps.push(`分子分母同时除以 ${gcd}:`);
this.steps.push(`${this.numerator} ÷ ${gcd} = ${this.numerator / gcd}`);
this.steps.push(`${this.denominator} ÷ ${gcd} = ${this.denominator / gcd}`);
this.steps.push(`结果: ${this.numerator / gcd}/${this.denominator / gcd}`);
}
private findCommonDenominator() {
this.steps = [];
// 找最小公倍数
let lcm = this.lcm(this.denominator, this.fraction2Den);
this.steps.push(`最小公倍数是 ${lcm}`);
this.steps.push(`第一个分数变化:`);
this.steps.push(`${this.numerator}/${this.denominator} = ${this.numerator * (lcm / this.denominator)}/${lcm}`);
this.steps.push(`第二个分数变化:`);
this.steps.push(`${this.fraction2Num}/${this.fraction2Den} = ${this.fraction2Num * (lcm / this.fraction2Den)}/${lcm}`);
}
// 计算最大公因数
private gcd(a: number, b: number): number {
return b === 0 ? a : this.gcd(b, a % b);
}
// 计算最小公倍数
private lcm(a: number, b: number): number {
return a * b / this.gcd(a, b);
}
}
更多推荐


所有评论(0)