-
Notifications
You must be signed in to change notification settings - Fork 0
/
main_menu.cpp
225 lines (185 loc) · 11.3 KB
/
main_menu.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
//************************************************************************************
// File: main.cpp
// Author: Amauri Tuoni Version 2.2
//
// Program to test search algorithms. User can choose the size of the array that will be
// tested.
//
// Created on 26 de Setembro de 2020, 17:40
//************************************************************************************
#include <cstdlib> //general library
#include <iostream> //library for the cout function
#include <new> //library for the new function
#include <limits> // library
#include "linear_search.h" //header linear search
#include "better_linear_search.h" //header better linear search
#include "sentinel_linear_search.h" //header sentinel linear search
#include "recursive_linear_search.h" //header recursive linear search
#include "array_generator.h" //header of the array generator
#include "binary_search.h"
#define RAND_MAX 10 // define the random number range
void print_result (int,int); //prototype of the print result function
int data_array_size(void); //prototype of the data array size function
void show_data_array(int*,int); //prototype of the show data array funtion
int get_search_item(void); //prototype of the get search data function
using namespace std;
//************************************************************************************
// * Main function (Show menu screen)
//**********************************************************************************
int main(void)
{
int menu_item, answer, search_item; //variables
int size_array; //variable to save the size of data_array
int *data_array; // pointer to the data array
cout << " ********************** Search Algorithms v2.2 **************** Made by: A.T. " << endl<<endl; // print on the screen the name of the program
size_array=data_array_size(); // call the function to get the size of the data array
try
{
data_array=new int [size_array]; // create a dynamic memory allocation of the data array
}
catch (bad_alloc &memoryAllocationException) //treat exception bad allocation of memory
{
cerr << "Exception occurred: "<< memoryAllocationException.what() << endl; //print on the screen a message
}
array_generator(data_array,size_array); //call funtion to generate the array elements
do //print the menu on the screen
{
cout<<"\nChoose the algorithm: "<<endl;
cout <<"1 - Linear search"<<endl;
cout<<"2 - Better Linear search"<<endl;
cout<<"3 - Sentinel Linear search"<<endl;
cout<<"4 - Recursive Linear search"<<endl;
cout<<"5 - Binary search with bubble sort"<<endl;
cout<<"6 - Show array generated"<<endl;
cout<<"7 - Modify array generated"<<endl;
cout<<"8 - Exit"<<endl<<endl;
cout<<"Type the menu option: "<<endl; //print on the screen message
cin.clear(ios::goodbit); //clean the goodbit
cin >> menu_item; //get the menu option
while (!cin.good()) //loop while an incorrect value is typed
{
cout<<"Incorrect data typed! Type a number..."<<endl;
cin.clear(ios::goodbit); //clean the goodbit
cin.ignore(numeric_limits<streamsize>::max(),'\n');
cin>> menu_item; //get the menu item option from the user
}
switch(menu_item) //test menu option chosen by user
{
case 1:
search_item = get_search_item(); //call function to get the search data
answer = linear_search(data_array,size_array,search_item); //call function to do a linear search
show_data_array(data_array,size_array); //call function to show the data array created
print_result(answer,menu_item); //call function to print the result on the screen
break;
case 2:
search_item = get_search_item(); //call function to get the search data
answer = better_linear_search(data_array,size_array,search_item); //call funtion to do a better linear search
show_data_array(data_array,size_array); //call function to show the data array created
print_result(answer,menu_item); //call function to print the result on the screen
break;
case 3:
search_item = get_search_item(); // call function to get the search data
answer = sentinel_linear_search(data_array,size_array,search_item); //call funtion to do a sentinel linear search
show_data_array(data_array,size_array); //call function to show the data array created
print_result(answer,menu_item); //call function to print the result on the screen
break;
case 4:
search_item = get_search_item(); //call function to get the search data
answer = recursive_linear_search(data_array,0,size_array,search_item); //call function to do a recursive linear search
show_data_array(data_array,size_array); //call function to show the data array created
print_result(answer,menu_item); // call function to print the result on the screen
break;
case 5:
search_item = get_search_item(); //call function to get the search data
answer = binary_search(data_array,size_array,search_item); //call function to do a binary search
print_result(answer,menu_item); // call function to print the result on the screen
break;
case 6:
show_data_array(data_array,size_array); //call funtion to show the array generated
break;
case 7:
size_array=data_array_size(); // call the function to get the new size of the data array
delete [] data_array; // delete the old data array that was allocated (free space)
try // verify the allocation done
{
data_array= new int[size_array]; // create a new memory dynamic allocation of the data array
}
catch (bad_alloc &memoryAllocationException) //treat exception bad allocation of memory
{
cerr << "Exception occurred: "<< memoryAllocationException.what()<< endl; //print on the screen a message
}
array_generator(data_array,size_array); //call funtion to generate the new array elements
break;
case 8:
cout<<"Ending..."<<endl; //print on screen a exit message
delete [] data_array; //delete the old data array that was allocated before exit
exit(0); //terminate program and go to the system
break;
default:
cout<<"Incorrect menu option...Try again! "<<endl; //print on the screen a message about the wrong option
cout<<endl;
break;
}
}while(1); //loop to show the menu forever
} //end of main function
//************************************************************************************************************************************************************
//Function to print the result of the search selected
//************************************************************************************************************************************************************
void print_result(int data, int menu_item)
{
if(data==0) // if data is 0 (not found)
{
cout<<"Search finished. Item not found !"<< endl<<endl; // print on the screen a message that was not found
}
if(data!=0 && menu_item != 1 && menu_item != 4) // if data was found and it was selected menu item not equal 1 and 4
{
cout<<"Item was found at position: "<< data <<endl; //print a message with the position of the element
}
} // end of the function
//*******************************************************************************************************************************************************
// Function to get the size of the data array
//*******************************************************************************************************************************************************
int data_array_size(void)
{
cout<<"Type the size of the data array :"<<endl; //print on the screen the message
int size; // create the variable to store the size of array
cin.clear(ios::goodbit); //clean the goodbit
cin >> size; // get the array size
while (!cin.good()) //loop while an incorrect value is typed
{
cout<<"Incorrect size data! Type a number..."<<endl; //print on the screen a message of error
cin.clear(ios::failbit); //clean the goodbit
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //check unexpected type
cin >> size; // get the array size again
}
cout<<"Data Array Interval 0 - "<<RAND_MAX<<" with "<<size<<" elements"<< endl; //print on the screen the number elements and the range of the array that will be generated
return size; //return the size of array value
} //end of the function
//**********************************************************************************
// Function to show the data array generated
//**********************************************************************************
void show_data_array(int *data, int size)
{
cout<<"data_array = {"; //print on the screen
for(int element=0;element<size;element++) //loop to run the elements of the array
cout<<data[element]<<","; //print on the screen the element
cout<<"}"<<endl; //print on the screen
} //end of the function
//************************************************************************************************************
// Function to get the search data from the user
//************************************************************************************************************
int get_search_item(void)
{
int search; //variable to save the search data
cout<<"Type the search item: "<<endl; //print on the screen
cin.clear(ios::goodbit); //clean the goodbit
cin >> search; //get the number to search in the array
while (!cin.good()) //loop while an incorrect value is typed
{
cout<<"Incorrect search data! Type a number..."<<endl; //print on the screen a message of error
cin.clear(ios::goodbit); //clean the goodbit
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //check unexpected type
cin>>search; // get the search data from the user
}
return search; //return the search data
}//end of the function