zoukankan      html  css  js  c++  java
  • 2020软件工程作业03

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10494
    这个作业的目标 实现一个命令行程序,不妨称之为Sudoku
    作业正文 如下
    其他参考文献 百度

     

    1、Github项目地址

     https://github.com/qqxy799/20177602

    2、PSP表格

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划  20  60
    Estimate 估计这个任务需要多少时间  600  1000
    Development 开发 360 540
    Analysis 需求分析 (包括学习新技术) 60 240
    Design Spec 生成设计文档 30 40 
    Design Review 设计复审 20 30 
    Coding Standard 代码规范 (为目前的开发制定合适的规范) 20 20 
    Design 具体设计 40 60 
    Coding 具体编码 60 150 
    Code Review 代码复审 30 30 
    Test 测试(自我测试,修改代码,提交修改) 30 30 
    Reporting 报告 20 20 
    Test Repor 测试报告 20 20 
    Size Measurement 计算工作量 20 20
    Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 20 30 
    合计   1350 2290

     3、思路描述

    1、了解数独的规则,完成数独的算法

    2、用cmd命令行的形式来读出写入文件

    3、进行性能改进以及单元测试

    4、代码说明

    #define _CRT_SECURE_NO_DEPRECATE
    #include <fstream>
    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int main(int argc, char* argv[])
    {
    int m, n;
    FILE* fp1;
    FILE* fp2;
    m = atoi(argv[2]);//命令行输入的第三个参数:宫格阶级
    n = atoi(argv[4]);//命令行输入的第五个参数:待解答盘面数目
    //以文本只读方式打开intput.txt
    fp1 = fopen("input.txt", "r");
    if (fp1 == NULL) //打开文件失败
    return -1;
    //打开output.txt,并立即关闭
    fp2 = fopen("output.txt", "w");
    if (fp2 == NULL) //打开文件失败
    return -1;
    fclose(fp2);//关闭文件
    int i, j, k, num, w, p, q;
    int sudoku[10][10];
    int sign[4] = { 0 };//存放行列中已经出现的数
    fp2 = fopen("output.txt", "a");
    for (num = 0; num < n; num++)
    {
    //输入表盘的二维数组
    for (i = 0; i < m; i++)
    {
    for (j = 0; j < m; j++)
    {
    fscanf(fp1, "%d", &sudoku[i][j]);
    }
    }
    while (1)
    {
    w = 0;
    //判断表盘中是否还有未填数的空格
    for (i = 0; i < m; i++)
    {
    for (j = 0; j < m; j++)
    {
    if (sudoku[i][j] == 0)
    {
    w++;
    }
    }
    }
    if (w == 0)//表示表盘已经填完
    {
    break;
    }
    for (i = 0; i < m; i++)
    {
    for (j = 0; j < m; j++)
    {
    if (sudoku[i][j] != 0)
    continue;
    //若该空格为填入,则进行行列遍历,找到已出现的数
    if (sudoku[i][j] == 0)
    {
    //行遍历
    for (q = 0; q < 3; q++)
    {
    if (sudoku[i][q] != 0)
    {
    sign[sudoku[i][q]] = 1;
    }
    }
    //列遍历
    for (q = 0; q < 3; q++)
    {
    if (sudoku[q][j] != 0)
    {
    sign[sudoku[q][j]] = 1;
    }
    }
    p = 0;//p用于记录该空格的候选数数量
    for (q = 1; q < 4; q++)
    {
    if (sign[q] == 0)//表示该空格所在行列中均没有q
    {
    p++;
    k = q;
    }
    }
    }
    if (p == 1)
    {
    sudoku[i][j] = k;
    }
    //初始化sign[]
    for (q = 0; q < 4; q++)
    {
    sign[q] = 0;
    }
    }
    }
    }
    //输出完整表盘
    for (i = 0; i < 3; i++)
    {
    for (j = 0; j < 3; j++)
    {
    fprintf(fp2, "%d ", sudoku[i][j]);
    if (j == 2)
    fprintf(fp2, " ");
    }
    }
    fprintf(fp2, " ");
    }
    return 0;
    }

    5、调试以及输入输出

     

     6、总结

    在众多大佬以及网络上的各种搜索资料的帮助下,终于是完成了这次作业。通过这次的作业,更是学到了不少东西,典型的就是github。希望能够在以后的学习中,更上一层楼。

    <iframe src="https://free.modao.cc/app/9b2570508a478d7ab4dfa65e447133fc2010d7e9/embed/v2" width="500" height="1000" allowTransparency="true" frameborder="0"></iframe>

  • 相关阅读:
    页面内容[置顶] 采用Div+Css布局——牛腩
    区域函数[置顶] linux 3.4.10 内核内存管理源代码分析5:伙伴系统初始化
    安装应用android批量安装APK
    选择版本Win7系统VS2010下搭建qt开发环境
    字体格式The format of Oracle tnsnames.ora file
    程序执行vhdl中延时器的编写
    概率链接nbu 2416 奇怪的散步
    中国主题ASP.Net课堂实验4
    要求终点HDU1010:Tempter of the Bone
    解决方案编程苦B和二B程序员别忘了养生
  • 原文地址:https://www.cnblogs.com/suibian799/p/12622091.html
Copyright © 2011-2022 走看看