04。仓颉表达式 / if...else / while

1,什么是仓颉表达式?

        ~凡是可以求值的语言元素都是仓颉表达式


    / / 语言元素可以理解为:如 if ... else 、while 、do ... while 这些程序可执行有规则的元素组合


2,什么叫算数表达式?

        ~一个或多个操作数经过零个或多个操作符计算结果的表达式。


        / / 操作数:就是可以计算的对象。如:1,2,3.。。。等。

        / / 操作符:就是算术运算符;如:+ 、 - 、 * 、/ 等。


3,仓颉的条件表达式包括 ?if 表达式?

        ~1,if  表达式 、if - let 表达式

**************************************************************************************************************

        ~2,if  表达式的样式:

                if ( 条件1) {

                        分支1 

                } else if(条件2) {

                        分支2

                }else {

                        分支3

                }

                // 分支1、2、3都是代码块,条件1、2都是 boolean 类型表达式

                /*

                        if 表达式执行顺序:

                         #1,条件1 的值是true ,就转到第2步;条件2 的值是 true,就转到第3步;如果都不满足,就转到第4步。

                        #2,执行分支1,转到第5步

                        #3,执行分支2,转到第5步

                        #4,执行分支3,转到第5步

                        #5,执行  if 表达式后边的代码

                */

        ~3,实战样例:

                

                   **************************************************************************************************************

4,仓颉的循环表达式?while 、do ... while 表达式?

        ~1,while 、do ... while 、 for - in 、while - let 表达式

        ~2,表达式样式:

                while (条件表达式) {

                        循环体

                }


        /*

                #1,如果条件是true,则跳转第2步,为false就跳转到第3步

                #2,执行循环体;再次判断条件表达式,是true继续第2步,是false跳转第3步

                #3,执行while表达式后面代码

        */


                do {

                        循环体

                }while(条件表达式)


        /*

                #1, 执行循环体,如果条件表达式,是true则跳转第2步;为false则跳转第3步

                #2,执行循环体;再次判断条件表达式,是true则继续第2步,是false跳转第3步

                #3,执行do ... while 表达式后边的代码

        */


        ~3,实战样式:

      

       

5,仓颉程序执行流程一般只会涉及到三种基本结构 ?

        ~顺序结构 、 分支结构 、 循环结构


        ~ 一般程序都是从头执行到尾的,所以都是顺序结构。

        ~ 分支结构呢,就是  条件表达式

        ~ 循环结构呢,就是  循环表达式


6,什么叫代码块?

        ~由大括号包含的零个或多个表达式就叫做代码块


        / / 代码块中,有一个以上表达式时,代码块的值和类型就是最后一个表达式的值和类型。

        / / 代码块中,没有表达式时,代码块的类型就是 “ Unit ” ,值就是 “  ( ) ”


独立储能的现货电能量与调频辅助服务市场出清协调机制(Matlab代码实现)内容概要:本文围绕“独立储能的现货电能量与调频辅助服务市场出清协调机制”展开,提出了一种基于Matlab代码实现的优化模型,旨在协调独立储能系统在电力现货市场与调频辅助服务市场中的联合出清问题。文中结合鲁棒优化、大M法和C&CG算法处理不确定性因素,构建了多市场耦合的双层或两阶段优化框架,实现了储能资源在能量市场和辅助服务市场间的最优分配。研究涵盖了市场出清机制设计、储能运行策略建模、不确定性建模及求解算法实现,并通过Matlab仿真验证了所提方法的有效性和经济性。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事电力市场、储能调度相关工作的工程技术人员。; 使用场景及目标:①用于研究独立储能在多电力市场环境下的协同优化运行机制;②支撑电力市场机制设计、储能参与市场的竞价策略分析及政策仿真;③为学术论文复现、课题研究和技术开发提供可运行的代码参考。; 阅读建议:建议读者结合文档中提供的Matlab代码与算法原理同步学习,重点关注模型构建逻辑、不确定性处理方式及C&CG算法的具体实现步骤,宜在掌握基础优化理论的前提下进行深入研读与仿真调
// src/main.cj package demo2 struct RString { let runes: Array<String> let size: Int64 init(text: String) { var charArray = Array<String>() for i in 0...text.count{ // 通过索引获取单个字符 let startIdx = text.index(text.startIndex, offsetBy: i) let endIdx = text.index(text.startIndex, offsetBy: i + 1) let charStr = String(text[startIdx..endIdx]) charArray = charArray + [charStr] } runes = charArray size = Int64(runes.size) } } // 需要在函数外部定义DPState结构体 struct DPState { var minCount: Int64 var ways: Int64 } func solve(verse: String, words: Array<String>): Int64 { let n = Int64(verse.count) if (n == 0) { return 1 } // 词表去重 let uniqueWords = Array(Set(words)) // 按长度分组词语 let maxWordLength = 20 var lengthMap2 = Array<Array<String>>(repeating: Array<String>(), count: maxWordLength + 1) for (word in uniqueWords) { let len = word.count if (len == 0 || len > maxWordLength) { continue } // 替换append方法 lengthMap2[len] = lengthMap2[len] + [word] } let INF: Int64 = 1000000000 var dp = Array<DPState>(repeating: DPState(minCount: INF, ways: 0), count: Int(n + 1)) dp[0] = DPState(minCount: 0, ways: 1) // 动态规划 - 修正循环语法 for (i in 0..Int32(n)) { if (dp[i].minCount >= INF) { continue } // 遍历所有可能的词长度 var len = 1 while (len <= maxWordLength) { let next = i + len if (next > Int(n)) { len = len + 1 continue } // 跳过没有词的长度 if (lengthMap2[len].size == 0) { len = len + 1 continue } // 提取子串 let startIdx = verse.index(verse.startIndex, offsetBy: i) let endIdx = verse.index(verse.startIndex, offsetBy: next) let subStr = String(verse[startIdx..endIdx]) // 检查是否有匹配的词 if (lengthMap2[len].contains(subStr)) { let newCount = dp[i].minCount + 1 if (newCount < dp[next].minCount) { dp[next].minCount = newCount dp[next].ways = dp[i].ways } else if (newCount == dp[next].minCount) { dp[next].ways = dp[next].ways + dp[i].ways } } len = len + 1 } } if (dp[Int(n)].minCount >= INF) { return 0 } return dp[Int(n)].ways } // 主函数 main() { var verse = "" // 仓颉语言中,if语句可能不需要括号,赋值用 = 而不是 <- // 尝1:直接读取 let line1 = readLine() if (line1 != nil) { verse = line1 } var words = Array<String>() // 读取第二行 let line2 = readLine() if (line2 != nil) { // 分割字符串,仓颉语言可能有不同的split方法 // 尝手动分割 var currentWord = "" for (char in line2 ){ if (char == ',') { if (!currentWord.isEmpty) { words = words + [currentWord] currentWord = "" } } else { currentWord = currentWord + String(char) } } // 添加最后一个词 if (!currentWord.isEmpty) { words = words + [currentWord] } } let result = solve(verse: verse, words: words) print(result) } 你跑一下仓颉语言代码,修改错误
12-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值