Array bidimensional y uni. ¿Por qué el arreglo d[i] no se imprime en pantalla???

Iniciado por mikem, 18 Octubre 2014, 20:17 PM

0 Miembros y 1 Visitante están viendo este tema.

mikem

#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

avesudra

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 (cpp) [Seleccionar]
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]; //<-- Aquí
}

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.
Regístrate en

rir3760

Cita de: mikem en 18 Octubre 2014, 20:17 PM¿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 (cpp) [Seleccionar]
void Diag(int a[TAM][TAM], int n, int d[TAM])
{
   cout << "Te voy a dar la diagonal principal:" << endl;
   
   for (int i = 0; i < n; i++)
      d[i] = a[i][i];
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language