「Mac玩转仓颉内测版41」小学奥数篇4 - 分数加减法

本篇将通过 PythonCangjie 双语解决简单的分数加减法问题,帮助学生理解分数的运算规则,并学会用编程解决数学计算问题。


关键词
  • 小学奥数
  • Python + Cangjie
  • 分数运算

一、题目描述

编写一个程序,接收两个分数并计算它们的和与差。输入的分数形式为分子/分母。程序将输出两个分数的和与差,要求结果以最简分数形式显示。

  • 输入格式:从控制台输入两个分数(格式为:a/bc/d)。
  • 输出格式:输出两个分数的和与差,均以最简分数的形式表示。

二、Python 实现
from math import gcd

# 解析分数
def parse_fraction(fraction):
    numerator, denominator = map(int, fraction.split('/'))
    return numerator, denominator

# 分数加法
def add_fractions(n1, d1, n2, d2):
    numerator = n1 * d2 + n2 * d1
    denominator = d1 * d2
    return simplify_fraction(numerator, denominator)

# 分数减法
def subtract_fractions(n1, d1, n2, d2):
    numerator = n1 * d2 - n2 * d1
    denominator = d1 * d2
    return simplify_fraction(numerator, denominator)

# 化简分数
def simplify_fraction(numerator, denominator):
    divisor = gcd(numerator, denominator)
    return numerator // divisor, denominator // divisor

# 接收用户输入
fraction1 = input("请输入第一个分数 (格式: a/b): ")
fraction2 = input("请输入第二个分数 (格式: c/d): ")

n1, d1 = parse_fraction(fraction1)
n2, d2 = parse_fraction(fraction2)

# 计算和与差
sum_result = add_fractions(n1, d1, n2, d2)
diff_result = subtract_fractions(n1, d1, n2, d2)

# 输出结果
print(f"和: {sum_result[0]}/{sum_result[1]}")
print(f"差: {diff_result[0]}/{diff_result[1]}")

三、Cangjie 实现
package cjcDemo

import std.console.*
import std.math.*
import std.convert.*

main(): Int64 {
    print("请输入第一个分数 (格式: a/b): ")
    let (n1, d1) = parseFraction(Console.stdIn.readln().getOrThrow())

    print("请输入第二个分数 (格式: c/d): ")
    let (n2, d2) = parseFraction(Console.stdIn.readln().getOrThrow())

    let (sum_num, sum_den) = addFractions(n1, d1, n2, d2)
    let (diff_num, diff_den) = subtractFractions(n1, d1, n2, d2)

    println("和: ${sum_num}/${sum_den}")
    println("差: ${diff_num}/${diff_den}")

    return 0
}

func parseFraction(input: String): (Int64, Int64) {
    let parts = input.split("/")
    return (Int64.parse(parts[0]), Int64.parse(parts[1]))
}

func addFractions(n1: Int64, d1: Int64, n2: Int64, d2: Int64): (Int64, Int64) {
    let num = n1 * d2 + n2 * d1
    let den = d1 * d2
    return simplifyFraction(num, den)
}

func subtractFractions(n1: Int64, d1: Int64, n2: Int64, d2: Int64): (Int64, Int64) {
    let num = n1 * d2 - n2 * d1
    let den = d1 * d2
    return simplifyFraction(num, den)
}

func simplifyFraction(num: Int64, den: Int64): (Int64, Int64) {
    let divisor = gcd(num, den)
    return (num / divisor, den / divisor)
}

四、图形展示(扩展部分)

以下代码使用 Python 生成了一个图形,展示了两个分数相加的过程。本部分是进阶扩展内容,当前阶段不要求理解

from PIL import Image, ImageDraw, ImageFont

# 设置画布大小和颜色
img = Image.new('RGB', (500, 300), color='white')
draw = ImageDraw.Draw(img)

# 定义字体
font = ImageFont.load_default()

# 绘制分数及计算过程
draw.text((10, 10), "分数计算: 1/2 + 1/3", fill="black", font=font)
draw.text((10, 40), "通分后: 3/6 + 2/6", fill="black", font=font)
draw.text((10, 70), "和: 5/6", fill="black", font=font)

# 绘制装饰图形
draw.line((10, 100, 490, 100), fill="black", width=2)
draw.text((10, 120), "差: 1/6", fill="black", font=font)

# 保存图像
img_path = "fraction_calculation.png"
img.save(img_path)
print(f"图形已保存为 {img_path}")

生成的图形如下:

fraction_calculation.png


五、示例执行

示例 1

输入:
1/2
1/3
输出:
和: 5/6
差: 1/6

示例 2

输入:
2/5
1/5
输出:
和: 3/5
差: 1/5

六、小结

通过 PythonCangjie 实现分数加减法,学生可以掌握基本的分数运算规则,同时学习如何使用编程来处理数学问题,并体验到GCD算法的应用。


上一篇: 「Mac玩转仓颉内测版40」小学奥数篇3 - 找出神秘数字
下一篇: 「Mac玩转仓颉内测版42」小学奥数篇5 - 圆和矩形的面积计算

作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=377
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/929166.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于频谱处理的音频分离方法

基于频谱处理的音频分离方法 在音频处理领域,音频分离是一个重要的任务,尤其是在语音识别、音乐制作和通信等应用中。音频分离的目标是从混合信号中提取出单独的音频源。通过频谱处理进行音频分离是一种有效的方法,本文将介绍其基本原理、公…

力扣-图论-1【算法学习day.51】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…

工业—使用Flink处理Kafka中的数据_ChangeRecord2

使用 Flink 消费 Kafka 中 ChangeRecord 主题的数据,每隔 1 分钟输出最近 3 分钟的预警次数最多的 设备,将结果存入Redis 中, key 值为

PortSwigger 原型污染

一、什么是原型污染 原型污染是一种 JavaScript 漏洞,它使攻击者能够向全局对象原型添加任意属性,然后这些属性可能被用户定义的对象继承。 二、JavaScript 原型和继承基础 1、原型 JavaScript 中的每个对象都链接到某种类型的另一个对象,称…

AMEYA360:上海永铭电子全新高压牛角型铝电解电容IDC3系列,助力AI服务器电源高效运转

随着数据中心和云计算的高速发展,AI服务器的能效要求日益提高。如何在有限空间内实现更高的功率密度和稳定的电源管理,成为AI服务器电源设计的一大挑战。永铭推出全新高压牛角型铝电解电容IDC3系列,以大容量、小尺寸的创新特性,为…

jmeter基础_打开1个jmeter脚本(.jmx文件)

课程大纲 方法1.菜单栏“打开” 菜单栏“文件” - “打开” (或快捷键,mac为“⌘ O”),打开文件选择窗口 - 选择脚本文件,点击“open”,即可打开脚本。 方法2.工具栏“打开”图标 工具栏点击“打开”图标&…

基于微信小程序的教学质量评价系统

​ 私信我获取源码和万字论文,制作不易,感谢点赞支持。 基于微信小程序的教学质量评价系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于微信小程序的教学质量评价系统的开发全过…

数据结构-最小生成树

一.最小生成树的定义 从V个顶点的图里生成的一颗树,这颗树有V个顶点是连通的,有V-1条边,并且边的权值和是最小的,而且不能有回路 二.Prim算法 Prim算法又叫加点法,算法比较适合稠密图 每次把边权最小的顶点加入到树中&#xff0…

增量预训练网络安全大模型的一次尝试

一、背景 探索使用网络安全知识,对开源基模型进行增强,评估是否能使基模型在网络安全领域表现出更好地专业度。 项目基于云起无垠SecGPT开源项目,在hugeface开源数据集的基础上,增加了自有预训练数据,进行增量预训练…

从零开始配置 Docker 网络:快速掌握各类型网络的设置与使用场景

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 Docker 网络类型概述🎯 Bridge 驱动🎯 Host 驱动🎯 None 驱动🎯 Overlay 驱动🎯 Macvlan 驱动🔖 获取网络接口📝 总结:选择合适的网络类型⚓️ 相关链接 ⚓️📖 介绍 📖 如果你曾经在搭建…

C语言(一维数组练习)

键盘录入一组数列&#xff0c;利用冒泡排序将数据由大到小排序 #include <stdio.h>int main(int argc,char *argv[]) {int i,j,tmep;int arr[10];printf("请输入10个测试整数&#xff1a;\n");int lensizeof(arr)/sizeof(arr[0]);for(i0;i<len;i){scanf(&q…

PostgreSQL实现透视表查询

PostgreSQL 8.3版本发布时&#xff0c;引入了一个名为tablefunc的新扩展。这个扩展提供了一组非常有趣的函数。其中之一是交叉表函数&#xff0c;用于创建数据透视表。这就是我们将在本文中讨论的内容。 需求说明 解释此函数如何工作的最简单方法是使用带有数据透视表的示例…

消息中间件-Kafka1-实现原理

消息中间件-Kafka 一、kafka简介 1、概念 Kafka是最初由Linkedin公司开发&#xff0c;是一个分布式、支持分区&#xff08;partition&#xff09;、多副本的&#xff08;replica&#xff09;&#xff0c;基于zookeeper协调的分布式消息系统&#xff0c;它的最大的特性就是可以…

protobuf实现Hbase数据压缩

目录 前置HBase数据压缩效果获取数据(反序列化) 前置 安装说明 使用说明 HBaseDDL和DML操作 HBase数据压缩 问题 在上文的datain中原文 每次写入数据会写入4个单元格的内容&#xff0c;现在希望能对其进行筛减&#xff0c;合并成1格&#xff0c;减少存储空间&#xff08;序列…

爬虫专栏第二篇:Requests 库实战:从基础 GET 到 POST 登录全攻略

简介&#xff1a;本文聚焦 Requests 库的强大功能与应用实战。首先介绍其安装步骤及版本选择要点&#xff0c;随后深入讲解 GET 请求&#xff0c;以百度页面为例&#xff0c;展示如何发起基本 GET 请求、巧妙添加 headers 与参数以精准搜索&#xff0c;以及正确设置 encoding 避…

【Leetcode】19. 删除链表的第N个节点

【Leetcode】19. 删除链表的第N个节点 1. 题目介绍2. 方法一&#xff1a;计算链表长度逻辑流程:代码复杂度分析 1. 题目介绍 题目描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,…

工业齐套管理虚拟现实仿真模拟软件

工业齐套管理虚拟现实仿真模拟软件是与法国最大的汽车制造商合作开发的一款虚拟现实仿真模拟软件&#xff0c;借助身临其境的虚拟现实环境&#xff0c;无需停止生产线&#xff0c;即可模拟仓库和提货区域。 工业齐套管理虚拟现实仿真模拟软件不仅适用于汽车工业&#xff0c;安全…

【嘟嘟早教卡】 小程序源码分享带后台管理

【嘟嘟早教卡】是专门为 3-6 岁婴幼儿童学习普通话、英语研发的早教启蒙认知识字的小程序 小程序由 Taro 及 Tailwind CSS 构建而成&#xff0c;后台管理使用 Laravel 及 Tailwind CSS 想法源于小时候玩的认知卡片&#xff0c;基本大部分家庭都买过认知卡片&#xff0c;我按照…

概率论相关知识随记

作为基础知识的补充&#xff0c;随学随记&#xff0c;方便以后查阅。 概率论相关知识随记 期望&#xff08;Expectation&#xff09;期望的定义离散型随机变量的期望示例&#xff1a;掷骰子的期望 连续型随机变量的期望示例&#xff1a;均匀分布的期望 期望的性质线性性质期望的…

FastAPI 响应状态码:管理和自定义 HTTP Status Code

FastAPI 响应状态码&#xff1a;管理和自定义 HTTP Status Code 本文介绍了如何在 FastAPI 中声明、使用和修改 HTTP 状态码&#xff0c;涵盖了常见的 HTTP 状态码分类&#xff0c;如信息响应&#xff08;1xx&#xff09;、成功状态&#xff08;2xx&#xff09;、客户端错误&a…