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

📄 shift.c

📁 Many C samples. It is a good sample for students to learn C language.
💻 C
字号:
/*Phuong phap SHIFT tim tri rieng gan nhat voi 1 gia tri cho truoc */

#include <stdio.h>
#include <conio.h>
#include <math.h>

enum BOOLEAN { false = 0 , true };

void main()
{
	int i , j , k , n , max , m;
	float  s , epslon , t0 , t1 , ts , max1 , c;
	enum BOOLEAN t , tn;
	char sua ;
	float  x0[50] , x1[50] ;
	float a[50][50] , b[50][50] , d[50][50];

	clrscr();
	printf("PHUONG PHAP LAP SHIFT TIM TRI RIENG GAN NHAT GIA TRI ts CHO TRUOC \n");
	printf("CAP MA TRAN n = ");
	scanf("%d",&n);
	printf("DOC SO LIEU MA TRAN A \n");
	for ( i = 0 ; i < n ; i++ )
	{
		printf("HANG THU %d : " , i);
		for ( j = 0 ; j < n ; j++ )		scanf("%f" , &a[i][j]);
	}
	t = true ;
	while ( t )
	{
		printf("CO SUA MA TRAN KHONG ? (c/k) : ");
		fflush(stdin);
		scanf("%c" , &sua );
		if ( toupper(sua) == 'C' )
		{
			printf("CHI SO HANG  i = ");
			fflush(stdin);
			scanf("%d" , &i);
			printf("CHI SO COT  j = ");
			fflush(stdin);
			scanf("%d" , &j);
			printf("a[%d,%d] =",i,j);
			fflush(stdin);
			scanf("%f" , &a[i][j]);
		}
		if ( toupper(sua) == 'K' ) t= false ;
	}
	tn = true ;
	while (tn)
	{
		printf("NHAP GIA TRI GAN GIA TRI RIENG CAN TINH ts =");
		fflush(stdin);
		scanf("%f" , &ts);
		printf("LAP MA TRAN D =A - ts.I\n");
		for (i = 0 ; i < n ; i++)
			for (j = 0 ; j < n ; j++)
			{
				if ( j != i) 	d[i][j] = a[i][j] ;
				if ( j == i) 	d[i][j] = a[i][j] -ts ;
			}
		printf("MA TRAN D \n");
		for (i = 0 ; i < n ; i++)
			{
				for (j = 0 ; j < n ; j++) printf("%6.3f\n" , d[i][j] );
				printf("\n");
			}
		printf("AN MOT PHIM DE TIEP TUC\n");
		getch();
		printf("LAP MA TRAN DAO B CUA D\n");
		for (i = 0 ; i < n ; i++)
			for (j = 0 ; j < n ; j++)
				if ( j == i) 	b[i][j] = 1 ;
				else b[i][j] = 0 ;
		i = 0 ;
		t = true;
		while (t)
		{
			if (d[i][i] == 0)
			{
				m = i ;
				max1 = 0 ;
				for (k = i + 1 ; k < n ; k++)
					if ( max1 < fabs(d[k][i]) )
					{
						m = k ;
						max1 = fabs(d[k][i]) ;
					}
				if ( m != i )
				{
					for (j = i ; j < n ; j++)
					{
						c = d[i][j] ;
						d[i][j] =  d[k][j] ;;
						d[k][j] = c;
					}
					for (j = 0 ; j < n ; j++)
					{
						c = b[i][j] ;
						b[i][j] =  b[k][j] ;
						b[k][j] = c;
					}
				}
				if ( m == i )
				{
					t = tn = false ;
					printf("MA TRAN D SUY BIEN\n");
				}
			} //END d[i][i] == 0
			if (d[i][i] != 0)
			{
				c = 1.0 / d[i][i] ;
				for (j = i + 1 ; j < n ; j++) 		d[i][j] *= c  ;
				for (j = 0 ; j < n ; j++) 		b[i][j] *= c  ;
				for (k = 0 ; k < n ; k++)
					if (k !=i )
					{
						s = d[k][i] ;
						for (j = i + 1 ; j < n ; j++) d[k][j] -= d[i][j]*s ;
						for (j = 0 ; j < n ; j++) b[k][j] -= b[i][j]*s ;
					}
				i++ ;
				if (i > (n-1) ) t = false ;
			} //end d[i][i] != 0
		}
		printf("DOC VECTOR BAN DAU x0\n");
		for (i = 0 ; i < n ; i++) 	scanf("%f" , &x0[i]) ;
		printf("SO BUOC LAP CHON TRUOC max = ");
		scanf("%d" , &max);
		printf("SAI SO CHON TRUOC epslon = ");
		scanf("%f" , &epslon);
		printf("\n");
		printf("THUC HIEN LAP VOI ts = %6.3f\n" , ts);
		printf("PHUONG PHAP SHIFT \n");
		printf("CHO MA TRAN A =\n");
		for (i = 0 ; i < n ; i++)
		{
			for (j = 0 ; j < n ; j++)	printf("%8.4f" , a[i][j]);
			printf("\n");
		}
		printf("TRI GAN TRI RIENG ts =%8.4f\n " , ts);
		printf("VECTOR DAU x0 =\n");
		for (i = 0 ; i < n ; i++) 	printf("  %6.3f" , x0[i]) ;
		printf("\n");
		printf("SAI SO epslon = %12.11f\n" , epslon);
		printf("MA TRAN D =\n");
		for (i = 0 ; i < n ; i++)
		{
			for (j = 0 ; j < n ; j++)	printf("  %10.4f" , d[i][j]);
			printf("\n");
		}
		printf("MA TRAN DAO CUA D, B=\n");
		for (i = 0 ; i < n ; i++)
		{
			for (j = 0 ; j < n ; j++)	printf("%10.4f" , b[i][j]);
			printf("\n");
		}
		k = 1 ;
		t = false ;
		t1 = 0 ;
		do
		{
			t0 = t1 ;
			for (i = 0 ; i < n ; i++)
			{
				x1[i] = 0 ;
				for (j = 0 ; j < n ; j++)
					x1[i] += b[i][j] * x0[j] ;
			}
			s = 0.0 ;
			j = 0 ;
			for (i = 0 ; i < n ; i++)
				if ( s < fabs(x1[i]) )
				{
					j = i ;
					s = fabs(x1[i]) ;
				}
			t1 = x1[j] ;
			for (i = 0 ; i < n ; i++)  	x1[i] /= t1 ;
			if ( fabs(t1 - t0) < epslon )
			{
				printf("SO BUOC LAP DA THUC HIEN k = %d\n " , k);
				t1 = 1.0/t1 ;
				t1 += ts ;
				printf("TRI RIENG GAN ts=%6.3f NHAT   t=%6.3f\n" ,ts , t1);
				printf("VECTOR RIENG TUONG UNG\n");
				printf("\tX =");
				for (i = 0 ; i < n ; i++)  	printf("  %f" , x1[i] );
				printf("\n");
				t = true ;
			}
			if ( fabs(t1 - t0) >= epslon )
			{

				for (i = 0 ; i < n ; i++)  	x0[i] = x1[i] ;
				k++ ;
			}
			if (k > max )	t = true ;
		} while (!t) ;
		printf("CO TINH ts KHAC KHONG ?(c/k) :");
		scanf("%c" , &sua);
		if ( toupper(sua) != 'C') 	tn = false ;
	}
	getch();
}

⌨️ 快捷键说明

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