elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  validar limite para todas mis funciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: validar limite para todas mis funciones  (Leído 2,617 veces)
Micah Genji

Desconectado Desconectado

Mensajes: 52


learn more to life


Ver Perfil
validar limite para todas mis funciones
« en: 26 Junio 2010, 04:26 am »

hola a todos :D

Hoy tengo un problema grave; hasta al momento no tengo la idea especifica de como poder leer el limite de espacio que quiero separar y asi mismo usarlo para cada una de mis funciones a usar:
Código
  1. #include<iostream>
  2. #define LIM 3
  3.  
  4. using namespace std;
  5.  
  6. int vector_a[LIM][LIM];
  7. int vector_b[LIM][LIM];
  8. int vector_r[LIM][LIM];
  9.  
  10. int insertar(){
  11.    int fila, columna;
  12.    //vector a
  13.    for (fila=0; fila<LIM; fila++){
  14.        for (columna=0; columna<LIM; columna++){
  15.            cout<<"\nIngrese valor a vector a["<<fila<<"]["<<columna<<"] :";
  16.            cin>>vector_a[fila][columna];
  17.        }
  18.    }
  19.    //vector b
  20.     for (fila=0; fila<LIM; fila++){
  21.        for (columna=0; columna<LIM; columna++){
  22.            cout<<"\nIngrese valor a vector b["<<fila<<"]["<<columna<<"] :";
  23.            cin>>vector_b[fila][columna];
  24.        }
  25.    }
  26. }
  27.  
  28. int calcular(){
  29.    int fila, columna, aux;
  30.        for(fila=0; fila<LIM; fila++){
  31.                for(columna=0; columna<LIM; columna++){
  32.                    vector_r[fila][columna]=0;
  33.                    for(aux=0; aux<LIM; aux++){
  34.                        vector_r[fila][columna] += vector_a[fila][aux]*vector_b[aux][columna];
  35.                        }
  36.                    }
  37.            }
  38. }
  39.  
  40. int mostrar(){
  41.    //matriz a
  42.    int fila,columna;
  43.    cout<<"\nVector a: \n";
  44.    for (fila=0; fila<LIM; fila++){
  45.        for (columna=0; columna<LIM; columna++){
  46.            cout<<vector_a[fila][columna]<<"\t";
  47.            if(columna == (LIM-1)){
  48.                cout<<"\n";
  49.            }
  50.        }
  51.    }
  52.    //matriz b
  53.    cout<<"\nVector b: \n";
  54.    for (fila=0; fila<LIM; fila++){
  55.        for (columna=0; columna<LIM; columna++){
  56.            cout<<vector_b[fila][columna]<<"\t";
  57.            if(columna == (LIM-1)){
  58.                cout<<"\n";
  59.            }
  60.        }
  61.    }
  62.    //matriz resultado
  63.    cout<<"\nVector resultado: \n";
  64.    for (fila=0; fila<LIM; fila++){
  65.        for (columna=0; columna<LIM; columna++){
  66.            cout<<vector_r[fila][columna]<<"\t";
  67.            if(columna == (LIM-1)){
  68.                cout<<"\n";
  69.            }
  70.        }
  71.    }
  72. }
  73.  
  74. main(){
  75.    insertar();
  76.    calcular();
  77.    mostrar();
  78.    cin.get();
  79. }

alguna idea de como hacerlo, por que cada vez pongo un LIM para poder ingresarlo desde teclado tengo errores en STD.

lo que quiero lograr es lo siguiente:
Código
  1. ...
  2. leer(LIM)
  3. desde i <--0 hasta LIM hacer
  4.         leer (V[i])
  5. fin_desde
  6. ...

saludos


En línea

Only two things are infinite, the universe and human stupidity, and I'm not sure about the former : A.E
Og.


Desconectado Desconectado

Mensajes: 822


Aprendiendo de la vida


Ver Perfil
Re: validar limite para todas mis funciones
« Respuesta #1 en: 27 Junio 2010, 02:23 am »

No se si entendí bien tu duda, quieres poder hacer que el usuario ingrese el tamaño de las matrices que usaras?
si es así, manteniendo tu código lo mas similar posible seria:

Código
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. int LIM;
  5.  
  6. int **vector_a;
  7. int **vector_b;
  8. int **vector_c;
  9. int **vector_r;
  10.  
  11. int insertar(){
  12.    int fila, columna;
  13.    //vector a
  14.    for (fila=0; fila<LIM; fila++){
  15.        for (columna=0; columna<LIM; columna++){
  16.            cout<<"\nIngrese valor a vector a["<<fila<<"]["<<columna<<"] :";
  17.            cin>>vector_a[fila][columna];
  18.        }
  19.    }
  20.    //vector b
  21.     for (fila=0; fila<LIM; fila++){
  22.        for (columna=0; columna<LIM; columna++){
  23.            cout<<"\nIngrese valor a vector b["<<fila<<"]["<<columna<<"] :";
  24.            cin>>vector_b[fila][columna];
  25.        }
  26.    }
  27. }
  28.  
  29. int calcular(){
  30.    int fila, columna, aux;
  31.        for(fila=0; fila<LIM; fila++){
  32.                for(columna=0; columna<LIM; columna++){
  33.                    vector_r[fila][columna]=0;
  34.                    for(aux=0; aux<LIM; aux++){
  35.                        vector_r[fila][columna] += vector_a[fila][aux]*vector_b[aux][columna];
  36.                        }
  37.                    }
  38.            }
  39. }
  40.  
  41. int mostrar(){
  42.    //matriz a
  43.    int fila,columna;
  44.    cout<<"\nVector a: \n";
  45.    for (fila=0; fila<LIM; fila++){
  46.        for (columna=0; columna<LIM; columna++){
  47.            cout<<vector_a[fila][columna]<<"\t";
  48.            if(columna == (LIM-1)){
  49.                cout<<"\n";
  50.            }
  51.        }
  52.    }
  53.    //matriz b
  54.    cout<<"\nVector b: \n";
  55.    for (fila=0; fila<LIM; fila++){
  56.        for (columna=0; columna<LIM; columna++){
  57.            cout<<vector_b[fila][columna]<<"\t";
  58.            if(columna == (LIM-1)){
  59.                cout<<"\n";
  60.            }
  61.        }
  62.    }
  63.    //matriz resultado
  64.    cout<<"\nVector resultado: \n";
  65.    for (fila=0; fila<LIM; fila++){
  66.        for (columna=0; columna<LIM; columna++){
  67.            cout<<vector_r[fila][columna]<<"\t";
  68.            if(columna == (LIM-1)){
  69.                cout<<"\n";
  70.            }
  71.        }
  72.    }
  73. }
  74.  
  75. main(){
  76.    cout << "ingrede el limite: ";
  77.    cin >> LIM;
  78.    vector_a = new int*[LIM];
  79.    vector_b = new int*[LIM];
  80.    vector_c = new int*[LIM];
  81.    vector_r = new int*[LIM];
  82.    for(int i=0;i<LIM;i++)
  83.    {
  84.      vector_a[i] = new int[LIM];
  85.      vector_b[i] = new int[LIM];
  86.      vector_c[i] = new int[LIM];
  87.      vector_r[i] = new int[LIM];
  88.    }
  89.    insertar();
  90.    calcular();
  91.    mostrar();
  92.    cin.get();
  93.    delete vector_a;
  94.    delete vector_b;
  95.    delete vector_c;
  96.    delete vector_r;
  97. }

Saludos!!


En línea

|-
Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: validar limite para todas mis funciones
« Respuesta #2 en: 27 Junio 2010, 03:29 am »

Og. estas liberando la memoria en forma incorrecta:

Código
  1. for(i=0; i < LIM; i++)
  2.   delete[] vector_x[i];
  3.  
  4. delete[] vector_x;
  5.  

Y para Micah Genji, main siempre debe devolver un entero (int main). Evita las declaraciones globales al menos que realmente las necesites.

Saludos
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Micah Genji

Desconectado Desconectado

Mensajes: 52


learn more to life


Ver Perfil
Re: validar limite para todas mis funciones
« Respuesta #3 en: 29 Junio 2010, 20:32 pm »

agradezco al aporte a ambos :)

pero tengo unas dudas, si pueden aclararme:

Código
  1. int **vector_a
esta instruccion es acaso: doble puntero.

Código
  1. vector_a = new int*[LIM];
-la instruccion new no tengo una idea de que es lo que hace.

agradezco a q me expliquen su forma de uso.

La verdad es que muy poco programo en c++. conozco mas la algoritmia pero en la implementacion estoy pesimo.

Ah Littlehorse gracias por la sugerencia pero casi siempre eh obviado el int. creo que mi teoria dice que esta funcion no retorna algun valor valido, por eso ya ni hago return o estoy equivocado.

Saludos.
En línea

Only two things are infinite, the universe and human stupidity, and I'm not sure about the former : A.E
Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: validar limite para todas mis funciones
« Respuesta #4 en: 29 Junio 2010, 21:40 pm »

Con el operador new reservas memoria dinámica de el heap (malloc en C, por ejemplo).

En el contexto que mencionas, lo que haces es reservar memoria para un arreglo de punteros a entero, y luego recorres dicho arreglo reservando memoria para cada puntero a entero. La liberación de la memoria es el proceso inverso, es decir, liberas lo que reservaste para cada puntero en el arreglo, luego liberas el arreglo de punteros.

Seria algo así:


STACK                 HEAP                      HEAP
  Pila                 Montículo                 Montículo

        new int*[LIM]                   new int[LIM]               
**ptr-----------> arreglo[0]----------->arreglo
                                         new int[LIM]
                        arreglo[1]----------->arreglo
                                         new int[LIM]
                        arreglo[2]----------->arreglo
                           etc                         etc


En cuanto a lo del int. Acorde al estándar la función principal debe devolver un entero. En el estándar actual, ya sea si pones o no pones el return al final, el return 0; esta implícito. Por otro lado el int main debe estar puesto en forma explicita al inicio.

Puede ser que tu teoría diga eso, ya que en estándares anticuados, poner solo main se sobrentendía como int main, pero ahora mismo eso invoca comportamiento indefinido.

Saludos
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines