미국 사는 유학생인대요, 프로그래밍 공부하다가 막혀서요, 이게 틀린지 맞는지 확인이 안되서 질문해요
Write the insertion using pointer arithmetic. The data to be sorted are to be read from a file. The array is to be dynamically allocated in the heap after reading the file to determine the number of elements While reading the data to determine the size of array you will require, print them 10 integers to a line. Use the test data shown below
838 758 113 515 51 627 10 419 212 86
749 767 84 60 225 543 89 183 137 566
966 978 495 311 367 54 31 145 882 736
524 505 394 102 851 67 754 653 561 96
628 188 85 143 967 406 165 403 562 834
353 920 444 803 962 318 422 327 457 945
479 983 751 894 670 259 248 757 629 306
606 990 738 516 414 262 116 825 181 134
343 22 233 536 760 979 71 201 336 61
The data will be sorted as they are read into the array. Do not fill the array and then sort the data. After the array has been sorted, print the data again using the same format you used for the unsorted data.
#include <stdio.h>
#include <stdlib.h>
#define MEM_ERROR printf("Not enough memory!\n")
#define MAX_ARY_SIZE 300
FILE *getFile(void);
int integerCount( FILE * loadData );
void reset( FILE * fPointer);
int *readInteger ( FILE * fPointer, int cnt, int *pAry );
void insertionSort ( int *list , int size);
void printResult (int *pAry, int size );
int main(void)
{
//Local Declarations
FILE * fp;
int count;
int Ary[MAX_ARY_SIZE];
//Statements
fp = getFile();//File opened
count = integerCount( fp );//number of integers counted
reset( fp );//file pointer rewinded
readInteger ( fp, count, Ary);//read Integers, populate array after sorted in the heap
printResult (Ary, count);//Sorted data printed
fclose(fp);// file closed
return 0;
}//main
FILE *getFile(void)
{
//Local Declaration
FILE *filePointer;
// Statements
filePointer = fopen("input.txt","r");//file opened
if(filePointer == NULL)
printf("Cannot open the file!\n");
return filePointer;
}//getFile
int integerCount( FILE *loadData )
{
//Local Declartions
int cnt=0;
int fend;
int *list;
//Statements
list = (int *) malloc (MAX_ARY_SIZE * sizeof(int));
while(1)//infinite loop
{
fend=fscanf(loadData,"%d", list+cnt);
if(fend==EOF) break;//stops when it is end of file
cnt++;//counting integers
}
realloc ( list, cnt * sizeof(int));
printResult( list, cnt );//printing result
free(list);
return cnt;
}//integerCount
void reset( FILE *fPointer)
{
rewind(fPointer);//file pointer rewinded
}
int *readInteger( FILE *fPointer, int cnt, int *pAry)
{
//Local Declartions
int *list;
//Statements
list= (int *) malloc ( cnt * sizeof(int));
if(list==NULL)
{
MEM_ERROR;
exit(100);
}
for(int i=0; i<cnt; i++){
fscanf(fPointer,"%d", (list+i));
}
insertionSort( list, cnt);//Sorting data stored in heap
for(int i=0; i<cnt; i++){
*(pAry+i)= *(list+i);}//populating array with sorted data
free(list);
return pAry;
}
void insertionSort ( int *list , int size )
{
int temp;
int walk;
bool located;
for(int current = 1; current < size; current++)
{
located = false;
temp =* ( list + current );
for( walk = current - 1 ; walk >= 0 && !located;)
if(temp < *(list+walk))
{
*(list+ walk + 1) = *( list + walk );
walk--;
}
else
located = true;
*(list + walk + 1) = temp;
}
return ;
}
void printResult( int *pAry, int count)
{
for( int i=0; i< count; i++)
{
if( i%10 == 0)
printf("\n");
printf("%d\t", *( pAry + i ) );
}
}