一本通2073:【例2.16 】三角形面积

本文介绍如何使用海伦公式解决编程问题,通过C++实现求解给定三角形边长的面积,展示了如何运用数学原理进行程序设计。

2073:【例2.16 】三角形面积


时间限制: 1000 ms         内存限制: 65536 KB
提交数: 3958     通过数: 2745

【题目描述】

传说古代的叙拉古国王海伦二世发现的公式,利用三角形的三条边长来求取三角形面积。已知△ABC中的三边长分别为a,b,c,求△ABC的面积。

提示:海伦公式

s=p(p−a)(p−b)(p−c)√s=p(p−a)(p−b)(p−c),其中p=a+b+c2。

【输入】

三角形的三条边长。

【输出】

面积。(保留3位小数)

【输入样例】

2.1 3.1 4.1

【输出样例】

3.179
#include<bits/stdc++.h>
using namespace std;
int main()
{
	double p,a,b,c,s;
	cin>>a>>b>>c;
	p=(a+b+c)/2;
	s=sqrt(p*(p-a)*(p-b)*(p-c));
	cout<<fixed<<setprecision(3)<<s<<endl;
}

在C++中处理包含嵌套位置和方向信息的数据结构,可使用结构体来表示不同层次的数据,并借助JSON解析库(如`nlohmann/json`)解析JSON格式的数据。以下是详细的实现步骤和示代码: ### 定义结构体 定义结构体来表示位置、方向、姿态等信息: ```cpp #include <iostream> #include <string> #include <nlohmann/json.hpp> // 定义位置结构体 struct Position { double x; double y; double z; }; // 定义方向结构体 struct Orientation { double z; double w; }; // 定义内层姿态结构体 struct InnerPose { Position position; Orientation orientation; }; // 定义外层姿态结构体 struct OuterPose { InnerPose pose; }; // 定义包含姿态的结构体 struct Data { OuterPose pose; }; ``` ### 实现JSON解析 使用`nlohmann/json`库将JSON数据解析为定义好的结构体: ```cpp // 实现JSON序列化和反序列化的模板特化 void from_json(const nlohmann::json& j, Position& p) { j.at("x").get_to(p.x); j.at("y").get_to(p.y); j.at("z").get_to(p.z); } void from_json(const nlohmann::json& j, Orientation& o) { j.at("z").get_to(o.z); j.at("w").get_to(o.w); } void from_json(const nlohmann::json& j, InnerPose& ip) { j.at("position").get_to(ip.position); j.at("orientation").get_to(ip.orientation); } void from_json(const nlohmann::json& j, OuterPose& op) { j.at("pose").get_to(op.pose); } void from_json(const nlohmann::json& j, Data& d) { j.at("pose").get_to(d.pose); } ``` ### 主函数中进行解析和使用 ```cpp int main() { std::string json_str = "{\"pose\": {\"pose\": {\"position\": {\"x\": 5.43, \"y\": -2.16, \"z\": 0.0}, \"orientation\": {\"z\": 0.707, \"w\": 0.707}}}}"; nlohmann::json j = nlohmann::json::parse(json_str); Data data = j.get<Data>(); // 输出解析后的数据 std::cout << "Position: (" << data.pose.pose.position.x << ", " << data.pose.pose.position.y << ", " << data.pose.pose.position.z << ")" << std::endl; std::cout << "Orientation: (z = " << data.pose.pose.orientation.z << ", w = " << data.pose.pose.orientation.w << ")" << std::endl; return 0; } ``` ### 代码解释 1. **结构体定义**:定义了`Position`、`Orientation`、`InnerPose`、`OuterPose`和`Data`结构体,用于表示不同层次的数据。 2. **JSON解析**:过模板特化`from_json`函数,将JSON数据解析为对应的结构体。 3. **主函数**:将JSON字符串解析为`nlohmann::json`对象,再将其转换为`Data`结构体,并输出解析后的数据。 ### 编译和运行 确保已经安装了`nlohmann/json`库,然后使用以下命令编译代码: ```sh g++ -std=c++17 main.cpp -o main ``` 运行编译后的可执行文件: ```sh ./main ``` ### 注意事项 - 要确保JSON数据的格式与定义的结构体匹配,否则解析会失败。 - 可根据实际需求扩展结构体和解析逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值