过程式编程 drawShapes

//
//  main.m
//  3.2.1 过程式编程

#import <Foundation/Foundation.h>
typedef enum {
    kCircle,
    kRectangle,
    kOblateSpheroid,
    kTriangle
}ShapeType;
//绘制形状时可用的颜色
typedef enum {
    kRedColor,
    kGreenColor,
    kBlueCOlor,
}ShapeColor;

typedef struct {
    int x,y,width,height;
}ShapeRect;

typedef struct {
    ShapeType type;
    ShapeColor  fillColor;
    ShapeRect bounds;
}Shape;

//声明函数体
NSString *colorName(ShapeColor colorName);

void drawCirele(ShapeRect bounds,ShapeColor fillColor);

void drawShapes(Shape shapes[], int count);

int main(int argc, const char * argv[]) {
    Shape shapes[4];

    ShapeRect rect0 = {0,0,10,30};
    shapes[0].type = kCircle;
    shapes[0].fillColor = kRedColor;
    shapes[0].bounds = rect0;

    ShapeRect rect1 = {30,40,50,60};
    shapes[1].type = kRectangle;
    shapes[1].fillColor = kGreenColor;
    shapes[1].bounds = rect1;

    ShapeRect rect2 = {15,18,37,29};
    shapes[2].type = kOblateSpheroid;
    shapes[2].fillColor = kBlueCOlor;
    shapes[2].bounds = rect2;

    ShapeRect rect3 = {47,32,80,50};
    shapes[2].type = kTriangle;
    shapes[2].fillColor = kRedColor;
    shapes[2].bounds = rect3;

    drawShapes(shapes,4);

    return 0;
}
NSString *colorName(ShapeColor colorName){
    switch (colorName) {
        case kRedColor:
            return @"red";
            break;
        case kBlueCOlor:
            return @"blue";
            break;
        case kGreenColor:
            return @"green";
            break;

        default:
            break;
    }
    return @"no clue";
}

//此函数仅输出有边框的矩形和传递给它的颜色;
void drawCirele(ShapeRect bounds,ShapeColor fillColor){
    NSLog(@"drawing a cirecle at(%d %d %d %d) in %@",bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor));
}
//长方形
void drawRectangle(ShapeRect bounds,ShapeColor fillColor){
    NSLog(@"drawing a Rectangle at(%d %d %d %d) in %@",bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor));
}
//椭圆
void drawEgg(ShapeRect bounds,ShapeColor fillColor){
    NSLog(@"drawing a Egg at(%d %d %d %d) in %@",bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor));
}
//新增三角形
void drawTriangle(ShapeRect bounds,ShapeColor fillColor){
    NSLog(@"drawing a Egg at(%d %d %d %d) in %@",bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor));
}

void drawShapes(Shape shapes[], int count){
    int i ;
    for (i = 0; i<count; i++) {
        switch (shapes[i].type) {
            case kCircle:
                drawCirele(shapes[i].bounds,shapes[i].fillColor);
                break;
            case kRectangle:
                drawRectangle(shapes[i].bounds,shapes[i].fillColor);
                break;
            case kOblateSpheroid:
                drawEgg(shapes[i].bounds,shapes[i].fillColor);
                break;
            case kTriangle:
                drawTriangle(shapes[i].bounds,shapes[i].fillColor);
                break;
            default:
                break;
        }
    }
}
时间: 2024-10-14 11:50:58

过程式编程 drawShapes的相关文章

Objective-C中的面向对象编程

1.过程式编程实例,画出Shape数组中的图形: // // main.m // hello-obj // // Created by zhouyang on 16/4/4. // Copyright © 2016年 zhouyang. All rights reserved. // #import <Foundation/Foundation.h> //枚举变量,代表形状 typedef enum{ kCircle, kRectangle, kEgg } ShapeType; //枚举变量,

DAY9:bash脚本编程基础(1)

内容主要为: 一.编程基础 二.shell脚本及其基本格式 三.变量 四.运算 五.条件测试 六.流程控制 一.编程基础 1)程序 程序:指令+数据 程序编程风格: 过程式:以指令为中心,数据服务于指令(C,bash) 对象式:以数据为中心,指令服务于数据 (java,C++,Python) shell程序:提供了编程能力,解释执行 2)程序的执行方式 计算机:运行二进制指令: 编程语言: 低级:汇编 高级: 编译:高级语言-->编译器-->目标代码 java,C# 解释:高级语言-->

js 函数式编程 浅谈

js 函数式编程 函数式的思想, 就是不断地用已有函数, 来组合出新的函数. 函数式编程具有五个鲜明的特点: 1. 函数是"第一等公民" 指的是函数与其他数据类型一样,处于平等地位 2. 只用"表达式",不用"语句" "表达式"(expression)是一个单纯的运算过程,总是有返回值: "语句"(statement)是执行某种操作,没有返回值. 3. 没有"副作用" 指的是函数内部与外

?数学函数——在函数式编程背后的动力

函数式思维的动力来自数学.数学函数有很多特色--函数式语言试图模拟真实世界. 所以一开始,我们以一个加1函数开始: Add1(x) = x+1 这意思是什么?好吧,看起来十分直白.它意味着有一个操作以一个数字开始,然后给它加1. 我们引入一些术语: 可以被函数作为输入的值的集合叫做domain.这样,它可能是实数集合,为了简单,我们仅限于整数. 可以被函数作为输出的值的集合叫做range(更科学的应该是叫作codomain的image).还是仅限于整数. 函数被称作映射domain到range.

[转] 函数式编程初探

诞生50多年之后,函数式编程(functional programming)开始获得越来越多的关注. 不仅最古老的函数式语言Lisp重获青春,而且新的函数式语言层出不穷,比如Erlang.clojure.Scala.F#等等.目前最当红的Python.Ruby.Javascript,对函数式编程的支持都很强,就连老牌的面向对象的Java.面向过程的PHP,都忙不迭地加入对匿名函数的支持.越来越多的迹象表明,函数式编程已经不再是学术界的最爱,开始大踏步地在业界投入实用. 也许继"面向对象编程&qu

【转载】-如何写代码-编程智慧

原文地址:http://www.yinwang.org/blog-cn/2015/11/21/programming-philosophy 编程是一种创造性的工作,是一门艺术.精通任何一门艺术,都需要很多的练习和领悟,所以这里提出的"智慧",并不是号称一天瘦十斤的减肥药,它并不能代替你自己的勤奋.然而由于软件行业喜欢标新立异,喜欢把简单的事情搞复杂,我希望这些文字能给迷惑中的人们指出一些正确的方向,让他们少走一些弯路,基本做到一分耕耘一分收获. 反复推敲代码 既然"天才是百分

Linux中的shell脚本编程——基础篇

概述: shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础.脚本基本格式.变量.运算.条件测试这几个方面详细介绍shell脚本编程的基础内容,也是我们必须要掌握熟练的内容. 一.编程环境 1.程序:指令+数据 程序编程的风格有两种: 过程式:以指令为中心,数据服务与指令 对象式:以数据为中心,指令服务于数据 2.程序的执行方式: □计算机:只能识别二进制文件

Shell脚本编程

编程语言发展史:机器语言-->汇编语言-->高级语言 编程语言的分类:(1)根据运行方式 静态语言:编译型语言,事先转换成可执行格式 C.C++.JAVA.C#  编译运行:源代码-->编译器 (编译)-->可执行程序文件 动态语言:解释型语言,边解释边执行 shell.Python..Perl.ASP.PHP  解释运行:源代码-->运行时启动解释器,由解释器边解释边运行 (2)根据其编程过程中功能的实现是调用库还是调用外部程序文件来分      shell脚本编程:利用系

Shell脚本编程概述(一):算数运算和条件测试

一.shell脚本语言 1.编程语言的分类: (1)根据运行方式 编译运行:源代码 --> 编译器 (编译)--> 程序文件: 解释运行:源代码 --> 运行时启动解释器,由解释器边解释边运行: (2)根据其编程过程中功能的实现是调用库还是调用外部的程序文件: shell脚本编程:利用系统上的命令及编程组件进行编程: 完整编程:利用库或编程组件进行编程: (3)编程模型: 过程式编程语言:以指令为中心来组织代码,数据是服务于代码: 顺序执行.选择执行.循环执行:代表:C,bash 面向对