⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 output.cpp

📁 C实现模拟与或非门的逻辑电路
💻 CPP
字号:


#include "StdAfx.h"

//************输出函数******************************************************************************
void Output(const LinkList * L, char *outputfilename, int outputnum)
{
	int i;
	FILE *fp;
	LinkList *outputsignal = new LinkList[outputnum];
	for (i = 0; i < outputnum; i++)
	{
		outputsignal[i] = L[i];
	}

	fp=fopen(outputfilename, "w");                       //建立一个文字文件只写
	fputs("Delay:yes\n\nOutput\n", fp);                  //开始写数据
	for (i = 1; i <= outputnum; i++)		             //每循环一次,写入一行数据,即一个输出引脚的信号
	{
		fprintf(fp, "%s%d%c", "system.output", i, ':');
		while(1)
		{
			fprintf( fp,"%d%c%d%c", (outputsignal[i-1]->data).value, '(', (outputsignal[i-1]->data).lasttime, ')');
			outputsignal[i-1] = outputsignal[i-1]->next;
			if(outputsignal[i-1] == NULL)
				break;
			fputs(",", fp);						
		}
		
		fputs("\n", fp);
	}
	fputs("EndOutput", fp);		
	fclose(fp);
	printf("输出文本文件成功生成\n");			
}




//**********生成BMP图像函数**************************************************************************
void GetBMP(LinkList *L, char *bmpfilename, int outputnum)
{
	int totaltime;                               //输入和输出信号的时间长度
	LinkList *outputsignal;
	outputsignal = L;
	LinkList ptr=outputsignal[0];
//			output(ptr);
	while (ptr->next != NULL)
	{
		ptr = ptr->next;
	}
	totaltime = ptr->data.sumtime;

	int width = totaltime + 100;                 //图像宽度
	int height = 150 * outputnum;                //图像高度
	
    bmp_info bmp;
    bmp_init(&bmp);
    bmp_create(&bmp, width, height);             //创建图像
	
	int i, j;

	for (j = 1; j < height; j++)                 //画坐标轴
	{
		pixel_color *buffer = bmp_get_buffer_at(&bmp, 50, j);
		buffer->R = 250;
		buffer->G = 40;
        buffer->B = 0;
	}

	int base = 0;                                //记录每个信号在低点平时的y坐标
	
	for (int n = 0; n < outputnum; n++)          //每次循环画一个信号
	{
		base = 20 + 150 * (outputnum - n - 1);       //为基点赋初值,每个信号沿用150像素
		ptr = outputsignal[n];
		i = 50;                                  //信号从x坐标为50开始画
		while (ptr != 0)                         //每次循环画一条线段
		{
			for (; i < ptr->data.sumtime + 50; i++)   //每次循环画一个点
			{
				if (ptr->data.value == true)     //定义划线的y坐标
				{
					j = base + 100;
				} 
				else
				{
					j = base;
				}
				pixel_color *buffer = bmp_get_buffer_at(&bmp, i, j);
				buffer->R = 250;
				buffer->G = 40;
				buffer->B = 0;
			}
			
			ptr = ptr->next;
			
			if (ptr != 0)                         //画竖线
			{	
				for (j = base ; j < base + 100; j++)
				{				
					pixel_color *buffer = bmp_get_buffer_at(&bmp, i , j);
					buffer->R = 250;
					buffer->G = 40;
					buffer->B = 0;
				}
			}						
		}		
	}
	
	bmp_save_to_file(&bmp, bmpfilename);
	bmp_destroy(&bmp);
	printf("输出图像文件成功生成\n");

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -