Bueno tengo que hacer un programa en c++ donde el usuario ingrese el tamaño de un arreglo bidimensional... y me pide que el usuario también ingrese los valores de este arreglo...
Esto es lo que llevo hasta ahora:
using namespace std;
void main()
{
int x;
int y;
cout << "A continuación se pedirá que indiques el tamaño de un arreglo de 2 dimensiones" << endl;
cout << "Primer valor del arreglo" << endl;
cin >> x;
cout << "Segundo valor del arreglo" << endl;
cin >> y;
cout << "el tamaño del arreglo es: " << x << " por " << y << endl;
int arreglo[x][y];
system("PAUSE");
}
Y el ejercicio que me piden es el siguiente:
CitarDesarrolla un programa que solicite al usuario la cantidad de renglones y de columnas de un arreglo de 2 dimensiones y luego pida los datos para llenar el arreglo.
El programa sirve para decirle al usuario si un dato dado se encuentra o no en el arreglo, y si se encuentra indicar en qué posición se encuentra.
Por ejemplo:
Supón que los datos del arreglo son los siguientes:
2 4 6 8
3 5 7 9
Si el usuario teclea el valor 5, el programa le dirá: El dato 5 se encuentra en el renglón 1 columna.
Alguien me puede ayudar?
-----
Antes que nada gracias por la ayuda a Leo Gutierrez...
Bueno, ya resolví esto, y creo que no quedó "perfecto" pero bueno sirve para su propósito. Dejo el código por si alguien tiene un problema similar o si ven algo que pueda mejorar también pónganlo.
#include "stdafx.h"
#include <iostream>
#include<cstdlib>
using namespace std;
typedef int* ApuntArregloInt;
void llenar_filas(int a[], int tamanio)
{
cout << "Escriba " << tamanio << " enteros";
for(int indice=0; indice<tamanio; indice++)
cin>>a[indice];
}
void llenar_columnas(int a[], int tamanio)
{
cout << "Escriba " << tamanio << " enteros: ";
for(int indice=0; indice<tamanio; indice++)
cin>>a[indice];
}
int main()
{
cout << "Este programa es un arreglo dinamico..." << endl;
int tamanio_arreglo;
int *p;
cout << "Ingresa el tamaño de las filas en enteros : " << endl;
cin >> tamanio_arreglo;
p = new int[tamanio_arreglo];
if(p==NULL)
{
cout << "No hay memoria suficiente..." << endl;
exit(1);
}
llenar_filas(p, tamanio_arreglo);
cout << "Los numeros del arreglo son..." << endl;
for(int i=0; i<tamanio_arreglo; i++)
cout << p[i] << endl;
cout << "Ingresa el tamaño de las columnas en enteros : " << endl;
cin >> tamanio_arreglo;
p = new int[tamanio_arreglo];
if(p==NULL)
{
cout << "No hay memoria suficiente..." << endl;
exit(1);
}
llenar_columnas(p, tamanio_arreglo);
cout << "Los numeros del arreglo son..." << endl;
for(int i=0; i<tamanio_arreglo; i++)
cout << p[i] << endl;
system ("PAUSE");
}
Necesitas asignación dinámica de memoria para esto, ya que el usuario dará la cantidad de filas y columnas.
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
int main(void)
{
unsigned int filas, columnas;
cout << "Filas : ";
cin >> filas;
cout << "Columnas : ";
cin >> columnas;
signed int **matriz = new int*[filas];
for(unsigned int i = 0; i < filas; i++)
matriz[i] = new int[columnas];
// Algoritmo para lo demás
for(unsigned int i = 0; i < filas; i++)
delete[] matriz[i];
delete[] matriz;
return 0;
}
Solo falta el algoritmo para saber en qué posición está el número, publica tus avances y te ayudaremos.
No entendí mucho lo del algoritmo, podrías explicarme mas?
Es decir, como saber en qué posición está el elemento.
Dí si no sabes hacerlo para ayudarte.
No no se hacerlo, :-(
Simplemente es una busqueda secuencial, vas recorriendo las filas y columnas y comparando con el valor a buscar, si son iguales guardas las filas y guardas las columnas, algo así:
void encontrar(const int **m, const int& f, const int &c, const int &valor)
{
int posF = -1, posC = -1;
for(unsigned int i = 0; i < f; i++)
for(unsigned int j = 0; j < c; j++)
if(m[i][j] == valor)
{
posF = i;
posC = j;
break;
}
if(posF != -1)
cout << "El dato " << valor << " se encuentra en la fila " << posF << " columna " << posC << endl;
else
cout << "Valor no encontrado" << endl;
}
Muchas gracias!