/*
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 <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
//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]<min && mainArray[count])
{
min=mainArray[count];
imin=count;
}
}
return imin;
}
//search max element
int maxSearch()
{
double max = mainArray[0];
int imax=0;
for(int count=0; 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");
}
}
}