首页 > 其他分享 >设计模式DP-表驱动模式

设计模式DP-表驱动模式

时间:2024-03-28 16:22:06浏览次数:18  
标签:%. back fun 2f front 驱动 设计模式 data DP

  • 静态结构体数组式构建
  • 链表式构建
  • 链接式构建
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
	
// 加 
double fun_add(double data_front, double data_back)
{
	return data_front + data_back;
}
// 减 
double fun_sub(double data_front, double data_back)
{
	return data_front - data_back;
}
// 乘 
double fun_mul(double data_front, double data_back)
{
	return data_front * data_back;
}
// 除 
double fun_div(double data_front, double data_back)
{
	if(0 == data_back) return 0;
	return data_front / data_back;
}
	
// 定义表驱动数据结构 
typedef struct {
	char *id;
	double (*callback)(double, double);
}test_fun;

// 初始化表 
const test_fun fun_table[] = {
	{"+", fun_add}, // id, callback function
	{"-", fun_sub},
	{"*", fun_mul},
	{"/", fun_div}
};
// 计算表长度 
int fun_table_len = sizeof(fun_table) / sizeof(fun_table[0]); // 计算表长度 

// 遍历表id, 执行对应function 
double cal_fun(const char *id, double data_front, double data_back) {
	for (int i= 0; i < fun_table_len; i++) {
		if (strcmp(fun_table[i].id, id) == 0) {
			return fun_table[i].callback(data_front, data_back);
		}
	}
	return 0;
}
	
// if else方法,判断运算符,执行对应函数 
double cal_fun_if(const char *id, double data_front, double data_back) 
{
	if (strcmp("+", id) == 0) { 	   // +
		return fun_add(data_front, data_back);
	} else if (strcmp("-", id) == 0) { // -
		return fun_sub(data_front, data_back);
	} else if (strcmp("*", id) == 0) { // *
		return fun_mul(data_front, data_back);
	} else if (strcmp("/", id) == 0){  // /
		return fun_div(data_front, data_back);
	}  
	return 0;
}
	
int main(int argc, char *argv[]) 
{
	// test this
	double front = 20, back = 5;

	printf("if-else Methods test as follow: \n");
	printf("%.2f + %.2f = %.2f\n", front, back, cal_fun_if("+", front, back));
	printf("%.2f - %.2f = %.2f\n", front, back, cal_fun_if("-", front, back));
	printf("%.2f * %.2f = %.2f\n", front, back, cal_fun_if("*", front, back));
	printf("%.2f / %.2f = %.2f\n", front, back, cal_fun_if("/", front, back));
	printf("\n");
	printf("Table-Driven Methods test as follow: \n");
	printf("%.2f + %.2f = %.2f\n", front, back, cal_fun("+", front, back));
	printf("%.2f - %.2f = %.2f\n", front, back, cal_fun("-", front, back));
	printf("%.2f * %.2f = %.2f\n", front, back, cal_fun("*", front, back));
	printf("%.2f / %.2f = %.2f\n", front, back, cal_fun("/", front, back));
}

标签:%.,back,fun,2f,front,驱动,设计模式,data,DP
From: https://www.cnblogs.com/starcos/p/18101991

相关文章

  • 设计模式-----观察者模式
    一、概念1、Observer模式的概念         (Observer)被称作发布-订阅者模式或消息机制,定义了一种依赖关系,解决了主体对象与观察者之间功能的耦合。        (Observer)模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对......
  • 设计模式DP-模版模式
    #include<stdio.h>#include<string.h>#include<stdlib.h>typedefstructInterface_t{ /*初始化外设USB、SPI、IIC等*/ void(*init_peripheral)(void*obj); /*初始化硬盘*/ void(*init_disk)(void*obj); /*初始化内存*/ void(*init_memory)(void*obj);......
  • 设计模式DP-原型模式
    #include<stdio.h>#include<string.h>#include<stdlib.h>//定义抽象接口typedefstructinterface_t{ structinterface_t*(*clone)(void*obj); void(*set)(void*obj,constchar*name,intage); void(*show)(void*obj); charname[32];......
  • AGI的数据驱动:大数据数据挖掘与知识图谱
    AGI的数据驱动:大数据、数据挖掘与知识图谱作者:禅与计算机程序设计艺术1.背景介绍人工通用智能(AGI)的实现一直是人工智能领域的终极目标。然而,要实现AGI需要解决诸多关键技术难题,其中数据驱动是其中最为重要的一环。大数据、数据挖掘以及知识图谱等技术的发展为AGI的......
  • openGaus DB4AI-数据库驱动AI
    DB4AI:数据库驱动AI可获得性本特性自openGauss2.1.0版本开始引入。特性简介DB4AI是指利用数据库的能力驱动AI任务,实现数据存储、技术栈的同构。通过在数据库内集成AI算法,令openGauss具备数据库原生AI计算引擎、模型管理、AI算子、AI原生执行计划的能力,为用户提供普惠AI技术......
  • 一类适合记忆化搜索的区间dp
    https://www.luogu.com.cn/problem/P5752https://codeforces.com/contest/598/problem/Ecf这个题考虑dp预处理,状态是三维的,转移是分割方案和所分块需要获得的巧克力数量。最后题目多次询问可以o(1)快速查询的//Problem:E.ChocolateBar//Contest:Codeforces-Educational......
  • 分享23种追女生的方式,教你同时把追MM和设计模式融汇贯通(下
    想知道咱们公司最新MM情报吗?加入公司的MM情报邮件组就行了,tom负责搜集情报,他发现的新情报不用一个一个通知我们,直接发布给邮件组,我们作为订阅者(观察者)就可以及时收到情报啦。观察者模式:观察者模式定义了一种一队多的依赖关系,让多个观察者对象同时监听某一个主题对象......
  • TCP与UDP:传输层协议对比
    ......
  • DDPG强化学习算法应用到TORCS仿真平台
    一、DDPG算法介绍1.前身DQN算法在介绍DDPG算法之前,需要首先明确它的前身DQN算法。DQN(DeepQ-Network)是一种用于强化学习的深度学习算法,由DeepMind公司开发。它结合了深度学习和Q-learning算法,旨在解决复杂环境下的强化学习问题。DQN算法在解决复杂环境下的强化学习问题方面取......
  • ThreadPool-线程池使用及原理
    1.线程池使用方式示例代码://一池N线程Executors.newFixedThreadPool(int)//一个任务一个任务执行,一池一线程Executors.newSingleThreadExecutorO//线程池根据需求创建线程,可扩容,遇强则强Executors.newCachedThreadPool()//自定义线程池方式newThreadPoolExec......