Open gnacuzzi opened 1 year ago
Y, la verdad que está bastante mal. Por un lado el hecho de tener 5 variables, pero además al ver esto:
int a = 0, e = 0, init = 0, o = 0, u = 0; if((s[i] == 'a' || s[i] == 'A') && a < n - 1){ m[a++][A] = i;
está claro que siempre va a guardar en la fila 0, tanto para a como para el resto. No está haciendo lo pedido y está mal planteado, tendrías que repensarlo. ¿El resto de la guía 6 lo hiciste? Porque a tu favor te aclaro que este ejercicio -para mi- es el más complejo de la guía.
ok gracias! lo vuelvo a pensar entonces solo que me estaba costando porque lo hice varias veces y siempre mal y quería saber si estaba por lo menos bien encaminada pero veo que no. sisi de la guia 6 solo me faltan los ultimos que pensaba hacer como modelo de parcial. el resto los fui pudiendo hacer pero este me mato, estaba hace 3 horas y no podia hacer que no me aborte el testeo.
Fijate de hacerlo por partes, como mostró Juan en los primeros videos. Primero hacé la parte de eliminar las vocacles (todas, sin límite). Luego agregás lo de guardar las posiciones. Y finalmente controlar el límite. Obviamente para eso no te van a servir los asserts que están ahora, pero podés tomar los ejemplos y agregar algunos printf para ver si cada parte la estás haciendo bien.
Buen dia marcelo, lo volvi a intentar y haciendolo por partes, me salieron bien las primeras dos cosas pero me trabo cuando le pongo el limite, me pasa que me pone todos los -1 en la tercera fila y no hace lo pedido. Quería saber si me podes dar alguna ayuda de como terminar de cerrarlo para que funcione. Gracias
int dondeEsta(char * voc, char elem){ int i, j = 0; for(i = 0; voc[i] != 0; i++){ if(voc[i] == elem) j = i; } return j; }
int elimVocales(char * s, int m[][CANT_VOCAL], unsigned int n){ int j, pos;
char voc[CANT_VOCAL] = "AEIOU";
int posc[CANT_VOCAL] = {0};
for(int i = 0; i < n; i++){
for(int j = 0; j< CANT_VOCAL; j++){
m[i][j] = 0;
}
}
int terminar = 0;
for(int i = j = 0; s[i] != 0 && !terminar; i++){
if(!IS_VOCAL(s[i])) {
s[j++] = s[i];
} else {
pos = dondeEsta(voc, toupper(s[i]));
if(posc[pos] < n - 1){
m[posc[pos]++][pos] = i;
} else{
terminar = 1;
}
}
}
for(int i = 0; i < CANT_VOCAL; i++){
m[posc[pos]][i] = -1;
}
if(terminar)
return ERROR;
s[j] = 0;
return EXITO;
}
En principio, no podés cortar en el medio, sino que tenés que seguir copiando el resto. Fijate que en los ejemplos muestra que deja de eliminar vocales pero el string queda bien. Ahora que el código está mejor armado es fácil arreglarlo, es simplemente cambiar if(!IS_VOCAL(s[i])) { por if( terminar || !IS_VOCAL(s[i])) {
y sacar la condición !terminar del ciclo
también agregar s[j++] = s[i]; al asignarle 1 a terminar
Y al final que quede así
s[j] = 0; if(terminar) return ERROR;
Y por favor, dejen de hacer los condiconales así (condición) ? 1 : 0; Ya la condición vale 1 ó 0, no es necesario el condicional
Buenas noches, se que no me esta copiando bien en la matriz las posiciones de las vocales pero no se porque. Queria saber si me podias ayudar y si me dirias que tan terrible es este error porque se que el código no logra lo pedido. Muchas gracias.
int ubicar(int m[][CANT_VOCAL], char * s, unsigned int i, unsigned int n){ int a = 0, e = 0, init = 0, o = 0, u = 0; if((s[i] == 'a' || s[i] == 'A') && a < n - 1){ m[a++][A] = i; } else if((s[i] == 'e' || s[i] == 'E') && e < n - 1){ m[e++][E] = i; } else if((s[i] == 'i' || s[i] == 'I') && init < n - 1){ m[init++][E] = i; } else if((s[i] == '0' || s[i] == 'O') && o < n - 1){ m[o++][O] = i; } else if((s[i] == 'u' || s[i] == 'U') && u < n - 1){ m[u++][U] = i; } m[a][A] = -1; m[e][E] = -1; m[init][I] = -1; m[o][O] = -1; m[u][U] = -1;
}
int elimVocales(char * s, int m[][CANT_VOCAL], unsigned int n){ int j, i; for(i = j = 0; s[i]; i++){ if(!(s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u' || s[i] == 'A' || s[i] == 'E' || s[i] == 'I' || s[i] == 'O' || s[i] == 'U')){ s[j++] = s[i]; } else if(ubicar(m, s, i, n)){ s[j] = 0; return ERROR; } } s[j] = 0; return EXITO; }