【编程练习】收集的一些c++代码片,算法排序,读文件,写日志,快速求积分等等

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:     写日志: class LogFile{public: static LogFile &instance(); operator FILE *() const { return m_file; }private LogFile(const char *filen...

 

 

写日志:

class LogFile
{
public:
  static LogFile &instance();
  operator FILE *() const { return m_file; }
private
  LogFile(const char *filename)
  {
     m_file = fopen(filename, "a+");
  }
  ~LogFile()
  {
     fclose(m_file);
  }
  FILE *m_file;
};

LogFile &LogFile::instance()
{
   static LogFile log("AppLog.txt");
   return log;
}

用的时候可以这么写:
fwrite("abc", 1, 3, LogFile::instance());

 

 

 

读取文件信息:

 c语言实现如下功能 输入全部文件名(绝对路径加文件名)得到,文件名,扩展名,文件长度

/* MAKEPATH.C */
#include<string.h>
#include <stdlib.h>
#include <stdio.h>

#define LENGTH 200


struct FILEHEAD
{
	char path_buffer[LENGTH];
	char filename[LENGTH];
	char ext[LENGTH];
	unsigned int length;
	
};

FILEHEAD file; 

void getFileInformation(FILEHEAD file)
{
	memset(&file,0,sizeof(file)); 
	
	//_makepath( path_buffer, "c", "\\sample\\crt\\", "makepath", "c" );
	printf( "Path created with : \n\n");
	scanf("%s",file.path_buffer);
	_splitpath( file.path_buffer, NULL, NULL, file.filename, file.ext );
	
	FILE *fp= NULL;
	fp=fopen(file.path_buffer,"r");
	if (NULL==fp)
	{
		printf("cannot open the %s \n",file.path_buffer);
		exit(0);
	}
	
	fseek(fp,0l,SEEK_END);
	file.length=ftell(fp);
	
	fclose(fp);
	fp = NULL; //需要指向空,否则会指向原打开文件地址
	
	
	
	printf( "Path extracted with _splitpath:\n" );
	//printf( "  Drive: %s\n", drive );
	//printf( "  Dir: %s\n", dir );
	printf( "  Filename: %s\n", file.filename );
	printf( "  Ext: %s\n", file.ext );
	printf( "  length is btye: %ld btye\n", file.length );
}

int main( void )
{
	
	getFileInformation(file);

	system("pause");

	return 0;
}



算法排序框架:

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define TRUE 1
#define FALSE 0
#define MAX 10000

typedef int KeyType;
typedef int OtherType;

typedef struct
{
	KeyType key;
	OtherType other_data;
}RecordType;


// All kinds of seek.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "headfile.h"
#include "windows.h"
#include  "conio.h "

#include"WinBase.h"
#include "Psapi.h"

#pragma  once
#pragma  message("Psapi.h --> Linking with Psapi.lib")
#pragma  comment(lib,"Psapi.lib")


int Data[MAX]={0};

void produceData(int a[],int length)       //给数组生成数据,用于随即查找
{
	time_t t;
	srand(time(&t));
	for (int i=0;i<length;i++)
	{
		a[i]=rand()%length;
	}


}

void printData(int a[],int length)		//打印数字,到控制台,每五个换一行
{
	for (int i=0;i<length;i++)
	{
		printf("%8d",a[i]);
		if (0==i%5)
		{
			printf("\n");
		}
	}

}

double showMemoryInfo()   
{   

	double MemorySize;					//单位MB
	HANDLE handle=GetCurrentProcess();   

	PROCESS_MEMORY_COUNTERS pmc;   
	GetProcessMemoryInfo(handle,&pmc,sizeof(pmc)); 
	MemorySize=pmc.WorkingSetSize/1024;

	printf("内存使用:  %8lf \n",MemorySize);	//WorkingSetSize The current working set size, in bytes.

	return MemorySize;

} 

void writeRecordtime(unsigned rTime)//将程序结果运行时间写入文件
{
	FILE *fpRecord=NULL; 

	char *s="your programm running time is:   ";
	char *c="ms   ";

	if((fpRecord=fopen("record.txt","wt+"))==NULL) 

	{ 

		printf("Cannot open file strike any key exit!"); 

		getchar(); 

		exit(1); 

	} 

	fprintf( fpRecord, "%s", s);
	fprintf( fpRecord, "%d", rTime);
	fprintf( fpRecord, "%s", c);

	fprintf( fpRecord, "\n");
	fprintf( fpRecord, "your programm use %fMB size of memory!!!", showMemoryInfo());



	fclose(fpRecord); 


}





int _tmain(int argc, _TCHAR* argv[])
{
	produceData(Data,MAX);
	printData(Data,MAX);

	getchar();

	return 0;
}

 

 

快速求积分办法:

// Integral-romberg方法求积分.cpp : 定义控制台应用程序的入口点。
//
/*
romberg方法求积分
方法也称为逐次分半加速法。它是在梯形公式,simpson公式和newton-cotes公式之间的关系的基础上,
构造出一种加速计算积分的方法。作为一种外推算法,它在不增加计算量的前提下提高了误差的精度。
在等距基点的情况下,用计算机计算积分值通常都采用吧区间逐次分半的方法进行。
这样,前一次分割得到的函数值在分半以后仍然可以被利用,并且易于编程。

运行结果如下:
输入:
0 
3.14159 
输出:Romberg- -12.0703
增加迭代次数或提高精度时,程序运行
得到的结果几乎没有什么变化。可以看到,
和Simpson方法运行的结果基本一致,但
Romberg法速度更快、精度更高


*/

#include "stdafx.h"



#include<iostream>
#include<math.h>
#define epsilon 0.00001
#define COUNT 100
using namespace std;

double fun(double x)
{
	return x*x;
}

double Romberg(double a,double b)
{
	int m ,n;
	double h,x,s,q,ep;
	double p,*R =new double[COUNT];
		
			h=b-a;
			R[0]= h*(fun(a)+ fun(b))/2.0;
			m=1;
			n=1;
			ep=epsilon+1.0;
			while ((ep >= epsilon)&& (m <COUNT))
			{
				p = 0.0;
			{
				for(int i=0;i<n;i++)
				{
					x = a+ (i+0.5)*h ;
					p= p + fun(x);
				}
					p= (R[0]+ h*p)/2.0;
					s = 1.0;
					for(int k=1;k<=m;k++)
					{
						s = 4.0*s;
						q= (s*p-R[k-1])/(s-1.0);
							R[k-1]= p;
							p =q;
					}
					p=fabs(q -R[m-1]);
					m =m + 1;
					R[m-1]= q;
					n = n + n;
					h = h/2.0;
				}
				return (q);
			}
}

int _tmain(int argc, _TCHAR* argv[])
{
	double a,b;
	cout<<"Input a,b:a为下限,b为上限"<<endl;
	cin>>a>>b;
	cout<<"Romberg="<<Romberg(a,b)<<endl;
	system("pause");
	return 0;
}



 

 

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1天前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
15 2
|
29天前
|
存储 算法 C++
高精度算法(加、减、乘、除,使用c++实现)
高精度算法(加、减、乘、除,使用c++实现)
333 0
高精度算法(加、减、乘、除,使用c++实现)
|
29天前
|
存储 缓存 分布式计算
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
这篇文章是关于数据结构与算法的学习指南,涵盖了数据结构的分类、数据结构与算法的关系、实际编程中遇到的问题以及几个经典的算法面试题。
28 0
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
|
1月前
|
缓存 Linux 编译器
【C++】CentOS环境搭建-安装log4cplus日志组件包及报错解决方案
通过上述步骤,您应该能够在CentOS环境中成功安装并使用log4cplus日志组件。面对任何安装或使用过程中出现的问题,仔细检查错误信息,对照提供的解决方案进行调整,通常都能找到合适的解决之道。log4cplus的强大功能将为您的项目提供灵活、高效的日志管理方案,助力软件开发与维护。
49 0
|
1月前
|
算法 Python
Python算法编程:冒泡排序、选择排序、快速排序
Python算法编程:冒泡排序、选择排序、快速排序
|
1月前
|
存储 算法 决策智能
【算法】博弈论(C/C++)
【算法】博弈论(C/C++)
|
1月前
|
存储 算法 C++
【算法】哈希映射(C/C++)
【算法】哈希映射(C/C++)
|
1月前
|
机器学习/深度学习 人工智能 算法
【算法】最长公共子序列(C/C++)
【算法】最长公共子序列(C/C++)
|
1月前
|
人工智能 算法 BI
一篇带你速通差分算法(C/C++)
一篇带你速通差分算法(C/C++)
|
17天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。