Your array is defined with a fixed limit of 1000 characters. What if the input file has more than 1000 characters? If it has more than you overrun the a array and overwrite whatever happens to be following in memory. This is the well-known buffer-overrun security issue! If you must read the file into an array first then you should check that you are not trying to write past the end of the array

Code:
#define FILESIZE 1000
float	Frequency(char chr, float num, char a[FILESIZE]);
void	Frequency_file2(char chr, float num, char a[FILESIZE]);
float	counts(char chr, float num, char a[FILESIZE]);
....

	while ((file1.eof() == false) && (counter < FILESIZE)) {
		file1 >> a[counter++];
	}
But what if the file has 1 million characters? 10 billion characters? How do you know what size to dimension the array? It would be better to do the analysis as each character is read from the file. You are only counting lowercase characters so have an array with 26 elements. Use islower(..) to check if a character read is lowercase and if it is use something like count[ch - 'a']++ (assuming ASCII). You then won't need the counts function.

You also don't need to terminate the alphabet and a arrays with \0 as they are not being treated as null-terminated strings but just as arrays of char.

Also, you are using multi-if statements for the analysis choice. A switch statement would be preferable. It makes the code more readable.

Code:
switch (choice) {
    case 1:
        ....
        break;

    case 2:
        .....
        break;

     case 0:
        break;

     default:
        cout << "Not a valid option." << endl;
        break;
}