intercambio componentes vector

Iniciado por nilcosta, 27 Noviembre 2016, 20:43 PM

0 Miembros y 1 Visitante están viendo este tema.

nilcosta

buenas, estoy haciendo un ejercicio y no me sale del todo bien

creo que el error esta cuando hago el intercambio de las componentes del vector, parece que esta bien, pero al imprimir el vector, la primera componente no se cambia:

como hago el intercambio:

if(sumX>sumY){/*quan el sumatori del segon vecotr es menor que el del primer, fem un intercanvi*/
        for(i=0; i<n; i++){
            aux[i]=x[i];
            x[i]=y[i];
            y[i]=aux[i];
        }
    }


prograama completo

/*demana les components de dos vectors, comprova si son diferents, si son diferents els ordena segons la definició*/
#include <stdio.h>
#define DIM 10
int main (void){
    int n, x[DIM], y[DIM], aux[DIM], sumX=0, sumY=0, i, iguals=0;

    printf("n?\n");
    scanf("%d", &n);
    while(n>10){
        printf("n ha de ser menor o igual que 10\n");
        scanf("%d", &n);
    }
    printf("doneu les componens del vector X\n");
    for(i=0; i<n; i++){
        scanf("%d", &x[i]);
    }
    printf("doneu les componens del vector Y\n");
    for(i=0; i<n; i++){
        scanf("%d", &y[i]);
    }

    for(i=0; i<n; i++){/*mirem si els vecotors son iguals*/
        if(x[i]!=y[i]){
            iguals++;
        }
    }
    if(iguals==0){
        printf("els vecotrs son iguals\n");
        return 1;
    }

    for(i=0; i<n; i++){
        sumX+=x[i]*x[i];
        sumY+=y[i]*y[i];
    }

    if(sumX>sumY){/*quan el sumatori del segon vecotr es menor que el del primer, fem un intercanvi*/
        for(i=0; i<n; i++){
            aux[i]=x[i];
            x[i]=y[i];
            y[i]=aux[i];
        }
    }
   
    if(sumX<sumY){
        printf("Son dos vectors diferents i (");
        for(i=0; i<n-1; i++){
            printf("%d, ", x[i]);
        }
        printf("%d) << (", x[i]);
        for(i=0; i<n-1; i++){
            printf("%d, ", y[i]);
        }
        printf("%d)", y[i]);
    }

    if(sumX==sumY){/*en aquest cas el sumatori es igual*/
        for(i=0; i<n; i++){
            if(x[i]<y[i]){
                printf("Son dos vectors diferents i ");
                printf("(");
                for(i=0; i<n-1; i++){
                    printf("%d, ", x[i]);
                }
                printf("%d) << (", x[i]);
                for(i=0; i<n-1; i++){
                    printf("%d, ", y[i]);
                }
                printf("%d)", y[i]);
                return 1;
            }

            if(x[i]>y[i]){
                for(i=0; i<n; i++){
                aux[i]=x[i];
                x[i]=y[i];
                y[i]=aux[i];
                printf("Son dos vectors diferents i ");
                printf("(");
                for(i=0; i<n-1; i++){
                    printf("%d, ", x[i]);
                }
                printf("%d) << (", x[i]);
                for(i=0; i<n-1; i++){
                    printf("%d, ", y[i]);
                }
                printf("%d)", y[i]);
                return 1;
                }
            }
        }
    }
        return 0;
}

engel lex

intentaste seguir el intercambio con el dubbuger y colocando breakpoints?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

nilcosta

si, lo he intentado y sigue sin hacerlo correctamente :(

engel lex

Cita de: nilcosta en 27 Noviembre 2016, 22:25 PM
si, lo he intentado y sigue sin hacerlo correctamente :(

XD eso es un "no, no lo he intentado" el debugger no arregla los errores solo... el hecho no arregla errores, quien los arregla eres tu, el debugger es simplemente un visualizador del programa XD y si lo usas, podrías ver el porqué falla

que ide usas y que haces al activar el debugger?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

nilcosta

#4
XD esque no me ubico muy bien en esto de la programacion, en el codeblocks he usado la opción debugger pero no lo entiendo mucho
ya lo he solucionado, el error es un tema de el for y de if, gracias, y gracias por haber dicho lo de el debugger, ahora ya conozco una nueva herramienta.


engel lex

aprende a usarlo bien, ya que es una de las herramientas más potentes de programación... ver que hace tu programa por dentro
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.