Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mikem en 18 Octubre 2014, 20:17 pm



Título: Array bidimensional y uni. ¿Por qué el arreglo d[i] no se imprime en pantalla???
Publicado por: mikem en 18 Octubre 2014, 20:17 pm
Código:
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <stdio.h>
using namespace std;
const int TAM=10;

//Prototipos de funciones:

void Leer(int a [TAM][TAM],int n);
void Imprimir (int a[TAM][TAM], int n);

void Diag (int a [TAM][TAM], int n, int d[TAM]);
void Printdiag (int d[TAM], int n);

int main ()
{
int n;
int i,j;
int a[TAM][TAM];
int d[TAM];

do
{

cout<<"Ingrese tam. de la matriz, por favor: \n";
cin >>n;

}
while (n<1 || n>TAM);
if (n<1 || n>TAM)
{
cout<<"Invalido. \n";
}
//Llamada de funciones:
Leer (a,n);
Imprimir (a,n);
system ("PAUSE");
system ("cls");
Diag (a,n,d);
Printdiag (d,n);
}
void Leer (int a [TAM][TAM], int n)
{
cout<<"Ingrese datos a la matriz: \n \n";
int i,j;
for (i=0; i<n; i++)
for (j=0; j<n; j++)
{
cin >>a[i][j];
}
}
void Imprimir (int a [TAM][TAM], int n)
{
cout<<"La matriz ingresada es: \n";
for(int i=0; i<n; i++)
for (int j=0; j<n; j++)
cout <<setw(3)<<a[i][j]<<"\n\n";
}
void Diag (int a[TAM][TAM], int n, int d[TAM])
{
cout<<"Te voy a dar la diagonal principal: \n\n";
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
d[i]==a[i][j];
}

void Printdiag (int d[TAM], int n)
{
//AQUÍ ESTÁ EL PROBLEMA:
//¿por qué no imprime el vector d como corresponde?
//Sale en pantalla todos números raros...
for (int i=0; i<n; i++)
cout<<d[i];
}
¿Qué cosa debería modificar?
Saludos :D


Título: Re: Array bidimensional y uni. ¿Por qué el arreglo d[i] no se imprime en pantalla???
Publicado por: avesudra en 18 Octubre 2014, 21:29 pm
Hola, creo que el problema está en que en el for cuando calculas la diagonal estás usando un operador de igualdad en lugar del de asignación, concretamente aquí:
Código
  1. void Diag (int a[TAM][TAM], int n, int d[TAM])
  2. {
  3.    cout<<"Te voy a dar la diagonal principal: \n\n";
  4.    for (int i=0; i<n; i++)
  5.        for (int j=0; j<n; j++)
  6.            d[i]==a[i][j]; //<-- Aquí
  7. }
En efecto, ese es el fallo. Una cosa, cuando publiques código hazlo entre las etiquetas GeSHi para que te salga coloreado, y otra cosa la biblioteca stdio.h no es de C++ es de C, si quieres usar esas funciones tienes que incluir cstdio y no la que has puesto.

Un saludo.


Título: Re: Array bidimensional y uni. ¿Por qué el arreglo d[i] no se imprime en pantalla???
Publicado por: rir3760 en 19 Octubre 2014, 03:54 am
¿Qué cosa debería modificar?
Ademas (y respondiendo a tu otro tema sobre el mismo programa, deberías haber respondido en este) para obtener la diagonal principal solo necesitas de un bucle, la funcion "Diag" hay que cambiarla a:
Código
  1. void Diag(int a[TAM][TAM], int n, int d[TAM])
  2. {
  3.   cout << "Te voy a dar la diagonal principal:" << endl;
  4.  
  5.   for (int i = 0; i < n; i++)
  6.      d[i] = a[i][i];
  7. }

Un saludo