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;
}
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:
inicializar_matriz_int(**fecha_actualizada,32,3,101);
Eso funciona cuando es un puntero a puntero, una matriz dinámica.
Sería algo asi:
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;
}
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:
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++ ¿?
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.
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.
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.
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..
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.
#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;
}
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;
}