Dev - C++ - Porque se cambian los elementos de mi vector?

 
Vista:

Porque se cambian los elementos de mi vector?

Publicado por Frant Perez (1 intervención) el 03/07/2022 09:28:47

En un problema dónde me pedían que recorra una matriz en forma de espiral y columna, me di cuenta que cuando escribía la impresión de mi vector v1[ ] se cambian los datos si los coloco en otra posición¿Por qué se cambian si no hay algo que afecte al v1[ ]

.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <iomanip>
 
using namespace std;
 
int main(){
    srand(time(NULL));
    int f,c,aux=0;
    cout<<"Ingrese el nro de filas de la matriz: ";cin>>f;
    cout<<"Ingrese el nro de columnas de la matriz: ";cin>>c;
    int v[f][c],v1[f*c+5],v2[f*c];
    cout<<endl<<"Sea la matriz: "<<endl;
    for(int i=0;i<f;i++){
        for(int j=0;j<c;j++){
            v[i][j]=rand()%199-99;cout<<setw(4)<<v[i][j];
        }cout<<endl;
    }
 
    int i=0,j=0,min,aux2=0;
    if(f<c){min=f;
    }else{min=c;}
 
    for(int k=0;k<(min+1)/2;k++){
    for(j;j<c-k;j++){
        v1[aux]=v[i][j];aux++;aux2++;
    }j--;aux--;
 
    if(aux2!=1){aux2=0;
    for(i;i<f-k;i++){
        v1[aux]=v[i][j];aux++;aux2++;
    }i--;aux--;
 
    if(aux2!=1){aux2=0;
    for(j;j>=k;j--){
        v1[aux]=v[i][j];aux++;aux2++;
    }j++;aux--;
 
    if(aux2!=1){aux2=0;
    for(i;i>=1+k;i--){
        v1[aux]=v[i][j];aux++;
    }i++;aux--;}}}}cout<<endl;
 
    cout<<"El recorrido en forma de espiral es: ";
    for(int l=0;l<f*c-1;l++){
        cout<<v1[l]<<" , ";
    }cout<<v1[f*c-1]<<"";cout<<endl<<endl;
 
    i=0,j=0,aux=0;
    bool b=true;
 
    for(int k=0;k<(c+1)/2;k++){
 
    for(i;i<f;i++){
        v2[aux]=v[i][j];aux++;
    }i--;aux--;
 
    if(j+1==c){b==false;}
    if(b){
    for(j;j<2+2*k;j++){
        v2[aux]=v[i][j];aux++;
    }j--;aux--;
 
 
    for(i;i>=0;i--){
        v2[aux]=v[i][j];aux++;
    }i++;aux--;
    if(j+1==c){b==false;}
    if(b){
    for(j;j<3+2*k;j++){
        v2[aux]=v[i][j];aux++;
    }j--;aux--;
    }}}
 
 
    cout<<"El recorrido de columna a columna es: ";
    for(int l=0;l<f*c-1;l++){
        cout<<v2[l]<<" , ";
    }cout<<v2[f*c-1];
 
cout<<endl<<endl<<"El recorrido en forma de espiral es: ";
    for(int l=0;l<f*c-1;l++){
        cout<<v1[l]<<" , ";
    }cout<<v1[f*c-1]<<"";cout<<endl<<endl;
    return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Porque se cambian los elementos de mi vector?

Publicado por Pointgamer2001 (1 intervención) el 06/07/2022 17:34:01
De mis cursos de C++ recuerdo que no es una buena practica de programación declarar una matriz o array con variables, puede ser esa la causa de tu error, revisa el tema de matrices dinámicas recuerdo que hay una forma de crear matrices sin necesidad de declarar sus dimensiones con unas variables directamente, sin embargo debes utilizar punteros. Revisa este video, esta bastante bueno, tal vez te sea útil, ¡Saludos!

https://www.youtube.com/watch?v=i7cgXSfNhAQ

De igual forma te dejo este texto que no tiene tanta relación pero vaya que me ha causado gracia.

De forma recíproca, la existencia o no existencia de un puntero no implica la existencia o la inexistencia del objeto. De la misma forma que el hecho de no señalar a un árbol, no implica la inexistencia del árbol. Algo más oscuro es si tenemos un puntero para árboles, que no esté señalando a un árbol. Un puntero de ese tipo no tendría uso si estamos en medio del mar: tener ese puntero no crea árboles de forma automática cuando señalemos con él. Es un puntero, no una varita mágica. :-D,
Obtenido de: https://conclase.net/c/curso/cap12
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar