Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:lab2_3_4 / Prim_l2_указ_функ
.c//Дан массив типа 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--;
}
}
Соседние файлы в папке lab2_3_4