UTNianos

Versión completa: Ayuda con un ejercicio de arrays!
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Hola gente como andan?

Bueno estoy acá con un ejercicio que no termino de resolver y que no se que esta mal. No esta hecho en un 100%, pero si el 90% esta. Alguien se podría fijar que esta mal (no hace lo que quiero que haga) y decirme que puedo hacer? El código es:

http://www.copiatelo.com/index.php?show=d701e1eb3

Eso es todo. Espero que me puedan ayudar! Un saludo!
Que es lo que esta mal? no compila? no hace lo que vos queres? si es uno u otro deci cual es el mensaje si no compila o que hace mal y que deberia hacer.
no entiendo lo que haces en varias partes.

primero: para que vas preguntando en funcion si la posicion es par o impar? si vas a revisar que sea impar, empeza desde la psicion 1 e incrementala de 2 en 2.

2do para que usas el array auxiliar en funcion?

3ero si tenes una funcion y la denominas funcion llega un punto en el que no sabes si estoy hablando del tipo de funcion o de la funcion definida como funcion, ponele un nombre coherente.

4to
-------------------------------------------
while (contador < 8)
{
array_aux [contador] = ptr_1[contador];

if ( ptr_2 [contador] % 2 != 0)
{
if (contador % 2 == 0)
ptr_1 [contador + 2] = ptr_2[contador];
else
ptr_1 [contador + 1] = ptr_2[contador];
}
else
ptr_2 [contador] = array_aux [contador];
-----------------------------------------------

por que no haces algo como

while i< 8
arraydepares(i) = arraydeimpares(i+1)
i+=2

return(0)

algo que podes hacer en 3 lineas hiciste un terrible quilombo, o no estas explicando que tiene que hacer la funcion.
(12-06-2013 14:28)Abend escribió: [ -> ]Que es lo que esta mal? no compila? no hace lo que vos queres? si es uno u otro deci cual es el mensaje si no compila o que hace mal y que deberia hacer.

Compila, pero no hace lo que quiero Confused.

(12-06-2013 14:34)Maik escribió: [ -> ]no entiendo lo que haces en varias partes.

primero: para que vas preguntando en funcion si la posicion es par o impar? si vas a revisar que sea impar, empeza desde la psicion 1 e incrementala de 2 en 2.

2do para que usas el array auxiliar en funcion?

3ero si tenes una funcion y la denominas funcion llega un punto en el que no sabes si estoy hablando del tipo de funcion o de la funcion definida como funcion, ponele un nombre coherente.

4to
-------------------------------------------
while (contador < 8)
{
array_aux [contador] = ptr_1[contador];

if ( ptr_2 [contador] % 2 != 0)
{
if (contador % 2 == 0)
ptr_1 [contador + 2] = ptr_2[contador];
else
ptr_1 [contador + 1] = ptr_2[contador];
}
else
ptr_2 [contador] = array_aux [contador];
-----------------------------------------------

por que no haces algo como

while i< 8
arraydepares(i) = arraydeimpares(i+1)
i+=2

return(0)

algo que podes hacer en 3 lineas hiciste un terrible quilombo, o no estas explicando que tiene que hacer la funcion.

1. Tranquila Maik, no te alteres lol.

2. Lo que dijiste en el "primero" es lo mismo que lo que dijiste en lo 4to, asique te lo respondo acá: Porque no se me ocurrió jaja. Es verdad que tu método es mucho mas lógico, coherente y sencillo pero bue si se me hubiese ocurrido no estaría acá pidiendo ayuda, no? . De hecho ahora que lo leo lo que hice en esa parte no tiene sentido.

3. El array auxiliar lo uso para ir almacenando los valores que voy reemplazando en el array que estoy modificando. Cuando yo le guardo a la posición impar lo que habia en la posicion par del otro array, ese valor que estaba ahí (y que lo tengo que ubicar en la posición impar del otro array) lo pierdo. Para no perderlo, lo almaceno previamente en el array aux.

4. Ahi lo modifico. Aparentemente se me bugueo la pagina y no me deja modificarlo.
tal cual como dice maik, primero te enfocas en resolver el algoritmo, que en este caso son 3 lineas y una vez que te anda bien le agregas "estetica" imprimiendo previamente por pantalla los arrays originales y demas.
haces un while como dijo maik inicializando i=0.
(12-06-2013 14:50)fer59 escribió: [ -> ]tal cual como dice maik, primero te enfocas en resolver el algoritmo, que en este caso son 3 lineas y una vez que te anda bien le agregas "estetica" imprimiendo previamente por pantalla los arrays originales y demas.
haces un while como dijo mail inicializando i=0.

tal cual como dice maik, primero te enfocas en resolver el algoritmo, que en este caso son 3 lineas y una vez que te anda bien le agregas "estetica" imprimiendo previamente por pantalla los arrays originales y demas.
haces un while como dijo maik inicializando i=0.

Ya estoy re quemado, me dirías como quedaría entonces? Va si podes, sino todo bien thumbup3.
no estas pensando en c gonsha, ese est u problema =P

a ver si te lo explico con manzanas.


vos tenes un cajon con 8 manzanas rojas. (seria el array 1)

luego tenes un cajon con 8 cosas que puede ser cualquier cosa, pongamosle, lingotes de oro (o sea, array 2).

ahora, vos agarras las posiciones impares del cajon de manzanas rojas, y metes esas manzanas rojas en las posiciones pares del cajon que tiene lingotes de oro. ahora, la pregunta es : que tan importante es guardar los lingotes de oro? en caso de que no sea importante, vos metes las manzanas rojas en donde corresponde, y los lingotes se pierden. a lo que voy es, para que mierda queres un array auxiliar si los lingotes no son relevantes en el problema planteado?

pd. la funcion son 3 lineas, sentate y hacelas porque sino cuando tengas q eu hacer algo mas "serio" no vas a poder xD

NO ESTAS PENSANDO EN C
Te dejo la función:



void funcion (int *ptr_1, int *ptr_2){
int i,o;
int cont = 0, array_aux [10] = {0};
for(i=0,o=1,cont=0;(i<9)&&(o<10);i=i+2,o=o+2,cont++){
array_aux[cont] = ptr_1[o]; //Aca guardo los pares (buffer)
ptr_1[o] = ptr_2[i]; // Aca copio las pares de 2 en impares de 1.
ptr_2[i] = array_aux[cont]; //Aca copio los pares de 1 en impares de 2.
cont++;
}
}




Y este el programa entero:



#include <stdio.h>

void funcion (int *ptr_1, int *ptr_2);
/* Una funcion que copie el contenido de las posicions impares de un vector en las posiciones pares de
* otro vector.
*/

int main (void)
{
int array_1[10] = {5,4,32,1,5,2,1,2,8,70};
int array_2[10] = {6,7,10,23,1,56,19,98,0,12};
int contador;

/***** Imprimo el vector no modificado *****/

printf ("El Array 1 es:\n");
for (contador = 0 ; contador < 10 ; contador++)
printf("%d\t",array_1[contador]);
printf ("\nEl Array 2 es:\n");
for (contador = 0 ; contador < 10 ; contador++)
printf("%d\t",array_2[contador]);

/***** Llamo a funcion que modifica *****/

funcion(array_1,array_2);

/***** *****/

/***** Imprimo el vector modificado *****/

printf ("\nEl Array 1 es:\n");
for (contador = 0 ; contador < 10 ; contador++)
printf("%d\t",array_1[contador]);
printf ("\nEl Array 2 es:\n");
for (contador = 0 ; contador < 10 ; contador++)
printf("%d\t",array_2[contador]);

getchar();
return 0;
}

// Aca hago la funcion.

void funcion (int *ptr_1, int *ptr_2){
int i,o;
int cont = 0, array_aux [10] = {0};
for(i=0,o=1,cont=0;(i<9)&&(o<10);i=i+2,o=o+2,cont++){
array_aux[cont] = ptr_1[o]; //Aca guardo los pares (buffer)
ptr_1[o] = ptr_2[i]; // Aca copio las pares de 2 en impares de 1.
ptr_2[i] = array_aux[cont]; //Aca copio los pares de 1 en impares de 2.
cont++;
}
}



En cuanto a tu código, ni lo mire..., vi mucho comentado borre todo, siempre es la opción mas fácil.
Fijate si entendes lo que te hice, es al pepe usar taaanta herramienta cuando con un for se simplifica todo!!!
Y otra sugerencia, no comentes tooooodo tampoco, esta bueno comentar pero no esta bueno excederse.
Lo comente para que ustedes sepan bien que hice en cada paso. Pense que iba a ser mas facil. Gracias =).

Maik, fijate que feer tambien hizo un array aux. A feer no se le discute eh!

Feer probaste el programa? Porque lo probe y no esta funcionando bien. Puede ser que te hayas equivocado en la funcion y en vez de poner i = 1 y o = 0 pusiste al revés?

p.d:No dije nada, esta todo perfecto.
pero feer esta al pedo y quiere perder valiosos bits de programa.

recordemos lo que puede llegar a hacer un ingeniero electronico por un par de bits.
En realidad la variable aux la tuve que agregar para copiar después al nuevo vector, si no necesitaba de ese paso ni la creaba.
Eso lo agregué porque al final comentado decía que te faltaba eso jaja.

Suerte, cualquier duda avisa =)
Feer, una pregunta: Supongamos que tengo el abecedario desordenado, en un array de chars de 26 variables o posiciones (sin la ñ) y lo quiero ordenar. Como haría para comparar cada carácter? Se me ocurrió usando el componente ascii de c/ carácter, pero no sabría hacerlo. Como seria?
Te dejo la función:



void ordenar_vector(char *string){

int i,j,buffer;
int tamano = 0;
tamano = strlen(string);
for(i=0;i<(tamano-1);i++){
for(j=i+1;j<tamano;j++){
if(string[i]>string[j]){
buffer = string[j];
string[j] = string[i];
string[i] = buffer;
}
}
}
}




Te dejo el código entero:



#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void ordenar_vector(char *string);

int main(void){

char abc[]={'a','c','b','z','f','y'};
int i;
printf("Vector desordenado: ");
for(i=0;i<6;i++)
printf("%c ",abc[i]);
ordenar_vector(abc);
printf("Vector ordenado: ");
for(i=0;i<6;i++)
printf("%c ",abc[i]);
getchar();
return(0);
}


void ordenar_vector(char *string){

int i,j,buffer;
int tamano = 0;
tamano = strlen(string);
for(i=0;i<(tamano-1);i++){
for(j=i+1;j<tamano;j++){
if(string[i]>string[j]){
buffer = string[j];
string[j] = string[i];
string[i] = buffer;
}
}
}
}




Saludos.
Nono, sin usar stings ni funciones que involucren cosas de strings. Solo con arrays y punteros (si estos son necesarios). Se te ocurre algo? Va en realidad lo lei y no usaste strings (simplemente usaste la func. strlen)

Gracias Feer =).
En ves de mandarle un solo parámetro le mandas también el tamaño (26) y listo..



void ordenar_vector(char *string, int tamano){

int i,j,buffer;
for(i=0;i<(tamano-1);i++){
for(j=i+1;j<tamano;j++){
if(string[i]>string[j]){
buffer = string[j];
string[j] = string[i];
string[i] = buffer;
}
}
}
}



Suerte!
Páginas: 1 2
URLs de referencia