沃尔夫勒姆自动机时空图输出 C语言实现
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h> //行宽度
#define ROW_LEN 38 //比特位域结构
typedef struct bits bits;
struct bits{ unsigned int c0 : ;
unsigned int c1 : ;
unsigned int c2 : ;
unsigned int c3 : ;
unsigned int c4 : ;
unsigned int c5 : ;
unsigned int c6 : ;
unsigned int c7 : ;
}; //行类型
typedef bits row[( ROW_LEN + ) / ]; //读取行中元胞
unsigned int get_cell( row rw, int x ){ unsigned int re = ; if( x < - || x > ROW_LEN ){ puts( "get_cell: 坐标错误." ); return re;
} if( - == x ){ x = ROW_LEN - ;
} if( ROW_LEN == x ){ x = ;
} switch( x % ){ case :{ re = rw[x / ].c0;
}break; case :{ re = rw[x / ].c1;
}break; case :{ re = rw[x / ].c2;
}break; case :{ re = rw[x / ].c3;
}break; case :{ re = rw[x / ].c4;
}break; case :{ re = rw[x / ].c5;
}break; case :{ re = rw[x / ].c6;
}break; case :{ re = rw[x / ].c7;
}break;
} return re;
} //修改行中元胞
void set_cell( row rw, int x, unsigned int v ){ if( x < - || x > ROW_LEN ){ puts( "set_cell: 坐标错误." ); return;
} if( - == x ){ x = ROW_LEN - ;
} if( ROW_LEN == x ){ x = ;
} v = v % ; switch( x % ){ case :{ rw[x / ].c0 = v;
}break; case :{ rw[x / ].c1 = v;
}break; case :{ rw[x / ].c2 = v;
}break; case :{ rw[x / ].c3 = v;
}break; case :{ rw[x / ].c4 = v;
}break; case :{ rw[x / ].c5 = v;
}break; case :{ rw[x / ].c6 = v;
}break; case :{ rw[x / ].c7 = v;
}break;
}
} //演化行中元胞
unsigned int evo_cell( row rw, int x, unsigned char tab ){ unsigned char num = ; if( x < || x > ROW_LEN - ){ puts( "evo_cell: 坐标错误." ); return ;
} num |= ( unsigned char )get_cell( rw, x - );
num <<= ;
num |= ( unsigned char )get_cell( rw, x );
num <<= ;
num |= ( unsigned char )get_cell( rw, x + ); return ( tab >> num ) & 0x01;
} //演化行到另外一个行
void evo_row( row rw1, row rw2, unsigned char tab ){ int x; for( x = ; x < ROW_LEN; x++ ){ set_cell( rw2, x, evo_cell( rw1, x, tab ) );
}
} //随机初始化行
void rand_row( row rw ){ int x; for( x = ; x < ROW_LEN; x++ ){ set_cell( rw, x, rand() % );
}
} //显示行
void display_row( row rw ){ int x; for( x = ; x < ROW_LEN; x++ ){ printf( "%s", get_cell( rw, x ) ? "▉" : " " );
} printf( "\n" );
} //规则选择,这里选择为规则30,随机产生等腰三角形
//这种自动机是一种随机数算法的根基
#define TYPE_ID 30 //主函数
int main( int argc, char * argv[] ){ row rw1, rw2; srand( ( unsigned int )time( NULL ) ); rand_row( rw1 ); while( ){ display_row( rw1 ); _getch(); evo_row( rw1, rw2, TYPE_ID ); display_row( rw2 ); _getch(); evo_row( rw2, rw1, TYPE_ID );
} return ;
}
运行效果:

沃尔夫勒姆自动机时空图输出 C语言实现的更多相关文章
- 【1024打卡】C++字符串的输出((c语言风格)
c++字符串输出(c语言风格) 文章目录 c++字符串输出(c语言风格) 杂记 代码 杂记 今天程序设计竞赛白给了,果然还是太弱了,y总带带我TAT ┭┮﹏┭┮1024快乐 代码 c语言学习 #inc ...
- 贪吃蛇游戏(printf输出C语言版本)
这一次我们应用printf输出实现一个经典的小游戏—贪吃蛇,主要难点是小蛇数据如何存储.如何实现转弯的效果.吃到食物后如何增加长度. 1 构造小蛇 首先,在画面中显示一条静止的小蛇.二维数组canva ...
- PAT 1006 换个格式输出 C语言
让我们用字母B来表示“百”.字母S表示“十”,用“12...n”来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数.例如234应该被输出为BBSSS1234,因为它有2个“百”. ...
- Problem O: 逆序输出——C语言初学者百题大战之二十
#include<stdio.h> int main() { int a,b,c,d,e,n; scanf("%d",&n); a=n/; b=n%/; c=n ...
- 输出C语言中 变量的类型
使用gcc的警告信息间接知道变量的类型 #include <stdio.h> #include <stdlib.h> #include <stddef.h> #in ...
- Mathematica
Mathematica是一款科学计算软件,很好地结合了数值和符号计算引擎.图形系统.编程语言.文本系统.和与其他应用程序的高级连接.很多功能在相应领域内处于世界领先地位,它也是使用最广泛的数学软件之一 ...
- 杂项-数学软件:Mathematica
ylbtech-杂项-数学软件:Mathematica Mathematica是一款科学计算软件,很好地结合了数值和符号计算引擎.图形系统.编程语言.文本系统.和与其他应用程序的高级连接.很多功能在相 ...
- BKDR Hash 函数实现
K&R一书中提出的BKDR Hash算法,这里给出C函数实现,实际用的时候分布比较好而且实现简单.唯一不明白的就是为什么选择131这种模式的数字作为种子,隐隐有沃尔夫勒姆31号自动机的似曾相识 ...
- Stephen Wolfram自述
Stephen Wolfram自述 作者: 阮一峰 大家听说过Stephen Wolfram(斯蒂芬·沃尔夫勒姆)吗? 了解他的经历和成就吗? 我对他了解不多,但是读了下面这篇2005年的演讲,联 ...
随机推荐
- web和servlet一样的用法但是有区别
- mysql 简称
一:DTS(Data Transformation Service) 数据转换服务 大多数组织都使用多种格式和多个位置来存储数据. 为了支持决策.改善系统性能或对现有系统进行升级,经常必须将数据从一个 ...
- k-近邻算法-手写识别系统
手写数字是32x32的黑白图像.为了能使用KNN分类器,我们需要把32x32的二进制图像转换为1x1024 1. 将图像转化为向量 from numpy import * # 导入科学计算包numpy ...
- Django-model基础
Django-model基础 在Django-ORM中表和类存在映射关系 表名<------------>类名 字段<------------>属性 表记录<------ ...
- mysql存储过程的学习(mysql提高执行效率之进阶过程)
1:存储过程: 答:存储过程是sql语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理:存储过程存储在数据库内,可以由应用程序调用执行,而且允许用户声明变量以及进行流程控制,存储类型可以接受 ...
- rabbitmq更换数据文件和日志文件的存放位置
原来的默认位置是/var下 需要将这些文件更换位置 1.先创建数据文件和日志文件存放位置的目录并给权限 mkdir -p /usr/local/rabbitmq/mnesia mkdir -p /us ...
- EF批量插入数据(Z.EntityFramework.Extensions)
EF用原生的插入数据方法DbSet.ADD()和 DbSet.AddRange()都很慢.所以要做大型的批量插入只能另选它法. 1.Nugget 2.代码 using EF6._0Test.EF; u ...
- alpha冲刺9/10
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:冲刺倒计时之9 团队部分 后敬甲(组长) 过去两天完成了哪些任务 答辩准备中 和大佬们跟进进度 接下来的计划 准备答辩 ...
- js判断手机邮箱格式(正则)
function fun() { var realname = document.getElementById("realname"); var telephone = docum ...
- Python select解析
一.首先列一下,sellect.poll.epoll三者的区别 1.select a.select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监控多个文件描述符的数组,当 ...