Hola,
No creo que nadie te vaya a hacer esos ejercicios. Si te han puesto esa tarea se entiende que te han explicado los conceptos basicos para hacerlos. Eres tu quien debe de ponerse a pensar durante horas como resolverlo, así es la programación y más en los inicios.
Aun asi creo que te puedo dar una serie de pasos orientativos.
A)
- Declaras un array bidimensional para hacerlo dinamicamente puedes mirar en internet pero el concepto básico es:
arreglo =(char **) malloc (numero_de_palabras*sizeof(char *));
contador_palabras = 0;
while (contador_palabra < numero_de_palabras){
arreglo[contador_palabras] = (char *) malloc (13 * sizeof(char));
}
/** NOTA: Si las palabras son de 12 caracteres hay que sumarle uno por el fin de cadena (\x0) **/
/** NOTA 2: Como para leer el nombre tienes que declarar una variable, podrias calcular el tamaño dependiendo del largo de cada palabra. Es decir leer la palabra y en el malloc que esta dentro del bucle sustituyes el 13 por un strlen(variable) + 1
- La insercion de las palabras la puedes hacer directamente al reservar la memoria y solo es usar la funcion strcpy
a) No entiendo bien lo que te piden con eso del primero de acuerdo a un orden alfabetico, pero en todo caso seria recorrer el vector e ir comparando y cuando lo encuentre lo muestras y fin. Te recomiendo que uses un bucle tipo while con alguna bandera para detectar si hay que continuar. El esquema es algo asi:
i = 0;
encontrado = 0;
while ( i < numero_de_palabras && !encontrado)
{
if (/** comparacion que sea **/)
{
/** codigo que sea **/
encontrado = 1;
}
}
b) Un recorrido con saltos pares:
for (i = 0; i < numero_de_palabras; i+=2)
{
/** mostrar el elemento i **/
}
c) Es una variente del caso a, piensa un poco. strncmp te ayudará
B) En este caso puedes optar por hacer un array de estructuras (me parece lo mas sencillo) o bien por un array bidimensional. Como supongo que es lo que te piden lo plantearé como un array bidimensional.
- La reserva de memoria es identido al caso A, la diferencia es que la variable con la que leias palabras tiene que ser más larga. (No te olvides del strlen)
- Lees nombre y apellido con la funcion gets o con scanf, tal que scanf("%[^\n]", variable); para que puedas leer los espacios en blanco
- una vez cargados los nombres y apellidos:
-- la posicion 0 es la primeria inicial del nombre
-- la siguiente posicion al espacio en blanco es la primera letra del apellido. Puedes calcular esa posicion recorriendo el vector y cuendo lo encuentres vas mostrando los caracteres encontrados (es una manera simple de hacerlo, aunque no la más alegante)
-- finalmente muestras @gmail.com
Estructura ""pseudocodigo"":
para todas las palabras hacer
mostrar arreglo[i][0];
j = buscar_espacio_en_blanco(arreglo[i])
mientras no final de cadena
mostrar(arreglo[i][j+1])
incremeto j
fin_mientras
mostrar "@gmail.com"
mostrar_salto_de_linea
incremento i
fin_para
Los trozos de codigo estan pensados en C, si quieres hacerlo en C++ tienes que investigar el new, en vez del malloc, utilizar los metodos de la clase string en vez de los str[...], en fin ... solo es una orientacion, de ti depende hacerlo.
Suerte!