Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab2_3_4 / Prim_l2_указ_функ

.c
Скачиваний:
14
Добавлен:
03.03.2016
Размер:
2.87 Кб
Скачать
//Дан массив типа double. Удалить из массива нулевые элементы,
//затем положительные элементы перенести в конец массива, сохраняя исходный порядок.
//Исходный массив х инициализируем константами в операторе описания. Создаем динамический
//массив у. Обработка массивов х и у выполняется одинаковыми процедурами.
#include<stdio.h>
#include<math.h>
#include<conio.h> /*Модуль функций расширения ввода-вывода(в Паскале аналогичный модуль CRT)*/
#include<windows.h>
void print_array(double *x,int n,char *msg);//Вывод строки заголовка msg и элементов массива х размером n 
void wait_press_key(char *msg);//Вывод строки msg и ожидание нажатия клавиши для продолжения программы.
void Del_Nil_array(double *x,int *n);//Удаление из массива нулевых элементов.
void plus_end_direct_array(double *x,int n);//Положительные элементы перемещаются в конец массива с сохранением исходного порядка
int main()
{
	int i,j,nx,ny,fl,col,iminus;
	double x[]={5,0,0,-4,3,2,0,4,8.4, 13.6, -34.5,16.3,-34.9, 18.25,0,12, -56.14,13, 18, 34, -102,66,-38,-71,23,0.4,15},buf,*y;
	//Подключение кирилицы в консольном окне
	SetConsoleOutputCP(1251);//Использует для вывода кодовую таблицу 1251
	SetConsoleCP(1251);      //Использует для ввода кодовую таблицу 1251
	printf("\t Введите размер массива nх <=20\n");
	scanf("%d",&nx); 
	print_array(x,nx,"Исходный массив х");
	//Удаляем нули 	
	Del_Nil_array(x,&nx);
	print_array(x,nx,"Массив х после удаления нулей");
	//Переставляем положительные элементы в конец массива
	plus_end_direct_array(x,nx);
	print_array(x,nx,"Результирующий массив х");
	wait_press_key("\nДля Продолжения программы нажмите любую клавишу\n");
	//---------------Обработка массива у
	printf("\t Введите размер массива ny <=20\n");
	scanf("%d",&ny); 
	y=(double *)malloc(sizeof(double)*ny);
	printf("\t Введите элементы массива y\n");
	for(i=0; i<ny;i++)
		scanf("%lf",y+i); 
	print_array(y,ny,"Исходный массив х");
	//Удаляем нули 	
	Del_Nil_array(y,&ny);
	print_array(y,ny,"Массив y после удаления нулей");
	//Переставляем положительные элементы в конец массива
	plus_end_direct_array(y,ny);
	print_array(y,ny,"Результирующий массив y");
	free(y);
	wait_press_key("\nДля завершения программы нажмите любую клавишу\n");
	return 0;
}
void print_array(double *x,int n,char *msg)
{	int i;
	printf("\n%s размером %d\n",msg,n);
	for(i=0; i<n;i++)
		printf("%8.2lf",x[i]); 
}
void wait_press_key(char *msg)
{
	printf(msg);
	getch();
}
void Del_Nil_array(double *x,int *n)
{	double *p1,*p2;//int i,j;
	for(p1=x+*n-1;p1>=x;p1--)
		if(*p1==0)
			{for(p2=p1;p2<x+*n-1;p2++)
				*p2=*(p2+1);
			(*n)--;
			}
}
void plus_end_direct_array(double *x,int n)
{
	double *p,*p1,*p2,buf;
	p=x+n-1;
	for(p1=p;p1>=x;p1--)
		if(*p1>0)
		{
		 buf=*p1;
		 for(p2=p1;p2<p;p2++) 
			*p2=*(p2+1);
		 *p=buf;
		 p--;
		}
}