Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: newone en 28 Noviembre 2010, 19:15 PM

Título: matrices en c++ crash con algo basico en visualC++
Publicado por: newone en 28 Noviembre 2010, 19:15 PM
hola volviendo al estudio del c++ esoty con matrices,
uzando visualc++ esto compila asi pero hace un crasHHHH

como debo hacerlo ?

void inicializar_matriz_int(int** m,int filas,int columnas, int dato)
{
for(int i=0; i<filas; i++)
{
for(int j=0; j<columnas; j++)
{
    m[i][j]=dato;//CRASHHHHHHHHH!!!!!
}
}
}


int main()
{
      int fecha_actualizada[32][3];
      inicializar_matriz_int((int**)fecha_actualizada,32,3,101);

      return 0;
}



Título: Re: matrices en c++ crash con algo basico en visualC++
Publicado por: APOKLIPTICO en 28 Noviembre 2010, 20:42 PM
Me parece que el problema está cuando le pasas la matriz a la función, le haces un cast (int**) probá poniendo ** atrás de la matriz.
Osea:
Código (cpp) [Seleccionar]
inicializar_matriz_int(**fecha_actualizada,32,3,101);
Título: Re: matrices en c++ crash con algo basico en visualC++
Publicado por: Beakman en 28 Noviembre 2010, 21:03 PM
Eso funciona cuando es un puntero a puntero, una matriz dinámica.
Sería algo asi:
Código (c++) [Seleccionar]

int main()
{
      //int fecha_actualizada[32][3];
      int **fecha_actualizada = new int*[32];
     
      for( int x=0;x<32;x++ ) fecha_actualizada[x] = new int[3];
     
      inicializar_matriz_int( fecha_actualizada,32,3,101 );
     
      for( int x=0;x<32;x++ )
      for( int y=0;y<3;y++ )
      {
      cout << " Posicion " << x << " - " << y ;
      cout << " Dato: " << fecha_actualizada[x][y] << endl;
      }
     
      //libera memoria
      for(int x=0;x<32;x++)
      delete[] fecha_actualizada[x];
      delete[] fecha_actualizada;
      //libera memoria
      return 0;
}
Título: Re: matrices en c++ crash con algo basico en visualC++
Publicado por: ¡Micronet! en 26 Diciembre 2010, 19:58 PM
Cita de: qily en 28 Noviembre 2010, 21:03 PM
Eso funciona cuando es un puntero a puntero, una matriz dinámica.
Sería algo asi:
Código (c++) [Seleccionar]

int main()
{
      //int fecha_actualizada[32][3];
      int **fecha_actualizada = new int*[32];
     
      for( int x=0;x<32;x++ ) fecha_actualizada[x] = new int[3];
     
      inicializar_matriz_int( fecha_actualizada,32,3,101 );
     
      for( int x=0;x<32;x++ )
      for( int y=0;y<3;y++ )
      {
      cout << " Posicion " << x << " - " << y ;
      cout << " Dato: " << fecha_actualizada[x][y] << endl;
      }
     
      //libera memoria
      for(int x=0;x<32;x++)
      delete[] fecha_actualizada[x];
      delete[] fecha_actualizada;
      //libera memoria
      return 0;
}



Hola que tal pense hacer otro tema pero esta vez me puse a investigar (por fin jeje) y me tope con este tema.. que tiene casi el mismo error que yo... mi problema esque queria intentar llenar una matriz. de la siguiente manera en C++:

#include<iostream>
using namespace std;
int main (){
//Enteros
int e,r,s,f,i=0,j=0,x=0,y=0;
              int **mat= new int*[50];   ////Utilizando tecnica de qily
//Pide Valores de Matriz 1
cout<<"Valores: "<<endl;
cout<<"Numero de filas: "; cin>>e;
cout<<"Numero de columnas: "; cin>>f;
//Lleno matriz
for(i=0;i<e;i++){
for(j=0; j<f; j++){
mat[i][j]=rand()%100;      ///////"ERROR"
}
}
//Muestro matriz
for(i=0;i<e;i++){
for(j=0; j<f; j++){
cout<<mat[i][j]<<" ";
}cout<<endl;
}
system("pause");
return 0;
}


ya que despues de esto quiero utilizar esa misma matriz para hacer la suma de matrices

Cij= Aij+Bij

este programa ya lo tengo impreso desafortunadamente y... lo tengo en DevC++...

pero lo quiero pasar a C++


Preguntas:

  int **mat= new int*[50];         
me podrias explicar que se esta haciendo en este pedazo de codigo.  :-[


mat[j]=rand()%100;      ///////"ERROR"
Entonces si esto esta incorrecto como haria para rellenar la matriz en c++ ¿?

Título: Re: matrices en c++ crash con algo basico en visualC++
Publicado por: leogtz en 26 Diciembre 2010, 20:11 PM
Te da error porque no estás incluyendo la librería adecuada para rand(), dicha librería se encuentra en <cstdlib>

#include <cstdlib>

Lo que preguntas es sobre asignación dinámica de memoria, se crea espacio en memoria primero para las filas, te falta asignar espacio para las columnas.

Código (cpp) [Seleccionar]
signed int **matriz = new int *[filas];                         // Filas.
    for(unsigned int i = 0; i < filas; i++)
    matriz[i] = new int[columnas];                              // Columnas.


Y por supuesto hay que liberar la memoria, para evitar memory leaks.
Título: Re: matrices en c++ crash con algo basico en visualC++
Publicado por: ¡Micronet! en 27 Diciembre 2010, 18:25 PM
Cita de: Leo Gutiérrez. en 26 Diciembre 2010, 20:11 PM
Te da error porque no estás incluyendo la librería adecuada para rand(), dicha librería se encuentra en <cstdlib>

#include <cstdlib>

Lo que preguntas es sobre asignación dinámica de memoria, se crea espacio en memoria primero para las filas, te falta asignar espacio para las columnas.

Código (cpp) [Seleccionar]
signed int **matriz = new int *[filas];                         // Filas.
    for(unsigned int i = 0; i < filas; i++)
    matriz[i] = new int[columnas];                              // Columnas.


Y por supuesto hay que liberar la memoria, para evitar memory leaks.







#include<iostream>
#include <cstdlib>
using namespace std;
int main (){
//Enteros
int e,r,s,f,j=0,x=0,y=0;
          signed int **mat= new int *[50];   ////Utilizando tecnica de qily
//Pide Valores de Matriz 1
cout<<"Valores: "<<endl;
cout<<"Numero de filas: "; cin>>e;
cout<<"Numero de columnas: "; cin>>f;
//Lleno matriz
for(unsigned int i=0;i<e;i++){
mat[i]=new int *[50];   <<error
//a value of type"int **" cannot be assigment to an entity            <<error
//of type "signed int *"                                                             <<error
for(j=0; j<f; j++){
mat[i][j]=rand()%100;      ///////"ERROR"
}
}
//Muestro matriz
for(unsigned int i=0;i<e;i++){
for(j=0; j<f; j++){
cout<<mat[i][j]<<" ";
}cout<<endl;
}
system("pause");
return 0;
}
   




bueno use el codigo q me dijiste y masomenos como haya entendido
me salen esos errores.. y si lo de rand si fue por la libreria no me acordaba..
Título: Re: matrices en c++ crash con algo basico en visualC++
Publicado por: leogtz en 27 Diciembre 2010, 18:56 PM
Cita de: ¡Micronet! en 27 Diciembre 2010, 18:25 PM






#include<iostream>
#include <cstdlib>
using namespace std;
int main (){
//Enteros
int e,r,s,f,j=0,x=0,y=0;
          signed int **mat= new int *[50];   ////Utilizando tecnica de qily
//Pide Valores de Matriz 1
cout<<"Valores: "<<endl;
cout<<"Numero de filas: "; cin>>e;
cout<<"Numero de columnas: "; cin>>f;
//Lleno matriz
for(unsigned int i=0;i<e;i++){
mat[i]=new int *[50];   <<error
//a value of type"int **" cannot be assigment to an entity            <<error
//of type "signed int *"                                                             <<error
for(j=0; j<f; j++){
mat[i][j]=rand()%100;      ///////"ERROR"
}
}
//Muestro matriz
for(unsigned int i=0;i<e;i++){
for(j=0; j<f; j++){
cout<<mat[i][j]<<" ";
}cout<<endl;
}
system("pause");
return 0;
}
   




bueno use el codigo q me dijiste y masomenos como haya entendido
me salen esos errores.. y si lo de rand si fue por la libreria no me acordaba..

Mal, sigues teniendo errores, el código que te puse fue para que lo copiaras y pegaras, donde ponía filas debías poner tu variable que usaste para las filas, igual para las columnas.

Otra cosa, ¿por qué le pones nombres a las variables como e -> filas, f -> columnas?, los nombres para las variables deben ser especificos para lo que quieres hacer, para el contexto del programa, ayudate a ti mismo.



Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>
#include <ctime>
using std::cout;
using std::endl;
using std::cin;
int main(void)
{
    signed int filas;
    signed int columnas;

    srand(time(0));

    std::cout << "Filas : ";
    cin >> filas;
    std::cout << "Columnas : ";
    cin >> columnas;

    // Asignar espacio a la matriz:
    signed int **matriz = new int *[filas];                         // Filas.
    for(unsigned int i = 0; i < filas; i++)
    matriz[i] = new int[columnas];                              // Columnas.

    // Asignar valores a la matriz
    for(unsigned int i = 0; i < filas; i++)
    {
        for(unsigned int j = 0; j < columnas; j++)
        {
            matriz[i][j] = rand() % 100;
            cout << matriz[i][j] << " ";
        }
        cout << endl;
    }

    // Liberar el espacio de la matriz
    for(unsigned int i = 0; i < filas; i++)
    delete[] matriz[i];

    delete[] matriz;
    return 0;
}
Título: Re: matrices en c++ crash con algo basico en visualC++
Publicado por: ¡Micronet! en 30 Diciembre 2010, 08:54 AM
Cita de: Leo Gutiérrez. en 27 Diciembre 2010, 18:56 PM

Otra cosa, ¿por qué le pones nombres a las variables como e -> filas, f -> columnas?, los nombres para las variables deben ser especificos para lo que quieres hacer, para el contexto del programa, ayudate a ti mismo.



La verdad no ce... normalmente uso extras para trabajar mejor aunque se que
hago uso inecesario de memoria... pero intentare no hacerlo muchas gracias leo... logre lo que queria hacer en C++ =]


Suma La matriz con la misma matriz las veces que quieras (por si se le es util a quien tubo el problema desde un inicio  ;) :

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main(void)
{
    signed int filas;
    signed int columnas;

    srand(time(0));

    std::cout << "Filas : ";
    cin >> filas;
    std::cout << "Columnas : ";
    cin >> columnas;

    // Asignar espacio a la matriz:
    signed int **matriz = new int *[filas];                         // Filas.
    for(unsigned int i = 0; i < filas; i++)
    matriz[i] = new int[columnas];                              // Columnas.

    // Asignar valores a la matriz
    for(unsigned int i = 0; i < filas; i++)
    {
        for(unsigned int j = 0; j < columnas; j++)
        {
            matriz[i][j] = rand() % 100;
            cout << matriz[i][j] << " ";
        }
        cout << endl;
    }
cout<<endl<<endl;

cout<<"Cuantas Veces quieres hacer la suma de tu matriz ";
int numv; cin>>numv; int ini=1;
while(ini<=numv){
//Sumando matriz
  for(unsigned int i = 0; i < filas; i++)
    {
        for(unsigned int j = 0; j < columnas; j++)
{
matriz[i][j]= matriz[i][j]+ matriz[i][j];
  cout << matriz[i][j] << " ";
}cout<<endl;}
  ini+=1;cout<<endl<<endl;
}
    // Liberar el espacio de la matriz
    for(unsigned int i = 0; i < filas; i++){delete[] matriz[i];}

delete[] matriz;
system ("pause");
    return 0;
}