Bueno, supongo que la frase la cargás en un string:
var Frase: string
Vocales,Consonantes,Ind: integer;
Princ: boolean;
write('Ingrese la frase:'); readln(Frase);
Vocales:= 0; Consonantes:= 0;
Princ:= true;
for Ind:= 1 to length(Frase) do //Vamos desde la primera letra hasta la última
begin
if Princ then
if Frase[Ind] in ['a','e','i','o','u'] then
inc(Vocales)
else
inc(Consonantes);
Princ:= Frase[Ind]=' '; //Si es un espacio, entones la próxima letra es la primera.
end;
Explicación: recorremos la cadena desde la primera posición hasta la última (length devuelve la longitud), si estamos al principio de una palabra (variable princ es TRUE) entonces nos preguntamos si la letra es una vocal (if Frase[Ind] in...) e incrementamos el contador de vocales o consonantes acorde. Después actualizamos la variable Princ para que no se procese la próxima letra.
Lo que ahora no recuerdo es si era in ['a','e'... o era [a,e,... es decir, sin comillas.
Un problema que existe con este enfoque son los signos de puntuación que pueden no ser ni vocales ni consontanes. Para solucionarlo se podría poner en el else del if, algo como if Frase[Ind] in ['b','c','d'....
En fin, espero que te sirva. Saludos y felices compiladas.
PD: OJO en Princ:= Frase[Ind]=' ', hay un espacio entre las comillas.