/* This file contains the source code to the lab items 1 to the system software. Task: Variant ?10 No one-dimensional array of positive real numbers. Convert the array as follows: first reset the minimum element, then the maximum of the other, then the minimum of the other, etc. as long as there will be a single element. Display the value and index the remaining elements. Roman Kozar & Valery Zhezhel - All rights reserved. Copyright - 2015. 06March2015 */ //constants #define true 1 #define elem 100 #include #include #include #include //prototypes of the functions void inputOfArray(); void inputRandom(); void inputKeyboard(); void algorithmExec(); void outputOfArray(); float intInput(int); int minSearch(); int maxSearch(); int mainMenu(); //main array float mainArray[elem]; int number=0; void main() { char ch[2]; int compare; while(true) { printf("Input the number of elements of the array (from 1 to %d):\n",elem); //compareing variable compare=scanf("%3d%1[^\n]", &number, ch); //clearing buffer fflush(stdin); if(compare!=1) { printf("Error!\n"); continue; } if(number > elem || number < 0) printf("\nEnter retry!\n"); else { break; } printf("\n"); } printf("\nElements in the array.\n"); printf("\n"); while(true) { //menu items switch(mainMenu()) { case 1: inputRandom(); break; case 2: inputKeyboard(); break; case 3: outputOfArray(); break; case 4: algorithmExec(); break; case 5: return; default: printf("Error of the input. Try again.\n"); break; } printf("\nPlease, press any key to continue."); /* returns the next character read from the console, but does not display this symbol on the screen. */ getch(); //clean the screen system("cls"); } } //function of main menu int mainMenu() { int solution, compare; char chSymbol[2]; printf( "Main Menu:\n1. Input the array with random.\n2. Input the array with keyboard\n3. Output the array.\n4. Run the task.\n5. Exit\n" ); while(true) { printf("Your choise:\n "); compare=scanf("%2d%1[^\n]", &solution, chSymbol); //clearing buffer fflush(stdin); if(compare != 1) { printf("Error!\n"); continue; } if(solution > 5 || solution < 0) printf( "\nEnter retry!\n" ); else break; printf("\n"); } return solution; } //Directly to the algorithm void algorithmExec() { //count - counter, coordinate is the position of the element int count=0, coordinate; while(count!=number-1) { coordinate=minSearch(); mainArray[coordinate]=0; count++; if(count!=number-1) { coordinate=maxSearch(); mainArray[coordinate]=0; count++; } if(count==number-1) coordinate = maxSearch(); } outputOfArray(); //output the results printf("\nElement: %f; Position of the element: %d\n",mainArray[coordinate], coordinate); } //search min element int minSearch() { int indicator=0; while(mainArray[indicator] == 0) indicator++; double min=mainArray[indicator]; int imin=indicator; for(int count=indicator; count < number; count++) { if(mainArray[count]max && mainArray[count]!=0) { max = mainArray[count]; imax=count; } } return imax; } //function of random filling void inputRandom() { printf("\nRange fill with random numbers from 0.1 to 1000.\n"); //randome filling part srand(time(0)); for(int count=0; count < number; count++) { mainArray[count] = (float)rand() / RAND_MAX * (1000 - 0.1) + 0.1; } outputOfArray(); } //function of filling by keyboard void inputKeyboard() { printf("Enter the array elements :\n"); for(int count=0; count < number; count++) { printf( "Element number[%d]: ", count+1 ); intInput(count); } outputOfArray(); } //output of array void outputOfArray() { printf("\nFinal output of array:\n"); for(int count=0; count < number; count++) { printf("%.2f ", mainArray[count]); } } float intInput(int count) { char chSymbol[6]; int compare; while(true) { compare=scanf( "%3f%1[^\n]", &mainArray[count], chSymbol ); //clearing buffer fflush(stdin); if(compare == 1) { return mainArray[count]; } else { printf("Error!\n"); printf("Element number[%d]: ", count+1); printf("\n"); } } }