Ayuda por favor para terminar este programa

Iniciado por Faceless, 1 Mayo 2016, 22:43 PM

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

Faceless

Muy buenas necesito ayuda para terminar con este programa, me quedé estancado en las ultimas 2 funciones que no se bien como hacerlas.

Como verán , el programa almacena valores ingresados por el usuario en forma de matriz y luego los imprime en pantalla.

Me quedan por hacer las siguientes funciones..

void sumas(int MATRIZ[N][M],int Suma[N]):

Esta función toma como argumentos una matriz tamaño NxM y un vector de longitud N. Se debe calcular la sumatoria de cada fila y almacenarlo en el vector Suma en la posición cuyo índice sea el mismo que la fila en cuestión.

int busca_mayor(int Suma[N],int &fila):

Esta función toma como argumentos un vector de tamaño N por referencia la variables fila. Se debe buscar el máximo valor del vector y devolverlo como valor de retorno, a su vez se debe almacenar en fila la posición del máximo valor.


#include <iostream>
#include <iomanip>
using namespace std;

const int N=3;
const int M=4;
int f,c;

void mostrar_matriz(int [N][M]);
void sumas(int [N][M],int [N]);
int busca_mayor(int [N],int &);


int main()
{

int MATRIZ[N][M];



for(f=0;f<N;f++)
{
  for(c=0;c<M;c++)
  {
     cout<<"Ingrese el elemento ("<<f<<" , "<<c<<") =";
     
     cin>>MATRIZ[f][c];
     
     while(MATRIZ[f][c]<0)
     {
      cout<<"Los valores deben ser positivos\n"<<endl;
      cout<<"Vuelva a ingresar el elemento ("<<f<<" , "<<c<<") =";
cin>>MATRIZ[f][c];
cout<<"\n\n";
 }
     
}
 
}

mostrar_matriz(MATRIZ);





system("pause");
return 0;

}



void mostrar_matriz(int MATRIZ[N][M])
{
cout<<"La matriz ingresada es: "<<endl;

for(f=0;f<N;f++)
{
cout<<endl;
for(c=0;c<M;c++)
{
cout<<setw(4)<<MATRIZ[f][c];
}

}
cout<<"\n\n";



}


void sumas(int MATRIZ[N][M],int Suma[N])
{


}

int busca_mayor(int Suma[N],int &fila)
{

}


i-node

Lo he hecho deprisa y corriendo y reutilizando tu codigo, que me ire ahora a dormir.. Mañana si quieres te lo hago de cero. Asi a bote pronto, que recuerde..

No te recomiendo hacer ese using namespace std. Usa un using por cada funcion que vayas a utilizar. Debajo del include de su libreria.
Si pasas fila por referencia, no te hace falta hacer ningun return, ya que estas modificando la variable declarada en main directamente, asi que esa funcion debe ser sin retorno (void).
Las mayusculas se suelen usar para nombres de constantes si no me equivoco, no para un nombre de matriz.
No necesitas la funcion system para hacer eso, ademas su uso es muy peligroso, no te la recomiendo bajo ningun concepto.

Por cierto, ese codigo no compilaba.

Gracias a esto he aprendido que los arrays multidimensionales deben tener declarado el tamaño de al menos su primera dimension :D

Bueno, espero que te sirva.

#include <iostream>

using std::cout;
using std::cin;
using std::endl;

#include <iomanip>

using std::setw;

#include <cstdlib>

const int N=3;
const int M=4;
int f,c;

void mostrar_matriz(int [N][M]);
void sumas(int [N][M],int [N]);
void busca_mayor(int [N],int &);


int main()
{
int MATRIZ[N][M],
Suma[N] = { 0 },
fila = 0,
pausa;

for(f=0;f<N;f++) {
for(c=0;c<M;c++) {
cout<<"Ingrese el elemento ("<<f<<" , "<<c<<") =";

cin>>MATRIZ[f][c];

while(MATRIZ[f][c]<0) {
cout<<"Los valores deben ser positivos\n"<<endl;
cout<<"Vuelva a ingresar el elemento ("<<f<<" , "<<c<<") =";
cin>>MATRIZ[f][c];
cout<<"\n\n";
}

}
}


mostrar_matriz(MATRIZ);

cout << "[C]ontinuar? ";
cin >> pausa;

sumas(MATRIZ, Suma);

busca_mayor(Suma, fila);

cout << "El elemento mayor es Suma[" << fila << "] = " << Suma[fila] << "\n";

return 0;
}

void mostrar_matriz(int MATRIZ[N][M]) {
cout<<"La matriz ingresada es: "<<endl;

for(f=0;f<N;f++) {
cout<<endl;
for(c=0;c<M;c++) {
cout<<setw(4)<<MATRIZ[f][c];
}
}

cout<<"\n\n";
}


void sumas(int MATRIZ[N][M],int Suma[N]) {
for(int i = 0; i < N; i++)
for(int j = 0; j < M; j++)
Suma[i] += MATRIZ[i][j];

for(int i = 0; i < N; i++)
cout << "Suma[" << i << "] = " << Suma[i] << "\n";
}

void busca_mayor(int Suma[N],int &fila) {
for(int i = 1; i < N; i++)
if(Suma[i] > Suma[fila])
fila = i;
}

Faceless

#2
Gracias por la ayuda i-node.

He podido avanzar bastante, y el programa esta casi listo. Lo único que me falta es un detalle muy pequeño

Has visto que la ultima función, se encarga de buscar cual es el mayor numero de las 3 sumatorias en el vector.

Lo único que me falta ahora, es que el programa me diga, a cual fila corresponde la mayor de las tres sumatorias. Si a la 1, la 2 o a la 3. Es un detalle muy pequeño pero no se me ocurre como hacerlo

El programa ahora está asi:
#include <iostream>
#include <iomanip>

using namespace std;

const int N=3;
const int M=4;
int f,c;

void mostrar_matriz(int [N][M]);
void sumas(int [N][M],int [N]);
int busca_mayor(int [N],int &);



int main()
{
 
int MATRIZ[N][M];
int Suma[N]={0,0,0}
int fila;
 
 
for(f=0;f<N;f++)
{
  for(c=0;c<M;c++)
  {
     cout<<"Ingrese el elemento ("<<f<<" , "<<c<<") =";
     
     cin>>MATRIZ[f][c];
     
     while(MATRIZ[f][c]<0)
     {
        cout<<"Los valores deben ser positivos\n"<<endl;
        cout<<"Vuelva a ingresar el elemento ("<<f<<" , "<<c<<") =";
     cin>>MATRIZ[f][c];
     cout<<"\n\n";
    }
  }
}
mostrar_matriz(MATRIZ);

sumas(MATRIZ,Suma);
   

cout<<"el mayor es  "<<busca_mayor(Suma,fila)<<" de la fila "<<fila<<endl;





system("pause");
return 0;
   
}
   


void mostrar_matriz(int MATRIZ[N][M])    
{
  cout<<"La matriz ingresada es: "<<endl;
   
  for(f=0;f<N;f++)
  {
     cout<<endl;
     for(c=0;c<M;c++)
     {
        cout<<setw(4)<<MATRIZ[f][c];
     }
     
  }
  cout<<"\n\n";
   
   
   
}
   
   
void sumas(int MATRIZ[N][M],int Suma[N])
{
   
   int i,j;
   for (i=0;i<N;i++) // filas        
       for (j=0;j<M;j++) // columnas        
           Suma[i] += MATRIZ[i][j];
   

}

int busca_mayor(int Suma[N],int &fila)
{
  int mayor;
   for (fila=0;fila<N;fila++) // filas    
       if (Suma[fila] > mayor)
           mayor = Suma[fila];
           
           
           
           
           return mayor;


}




i-node

#3
En el codigo que te he puesto esta hecho asi.

No se pq te empeñas en seguir llamando a system y pause. Ese codigo no es portable y tampoco es seguro.



Ese codigo no va a compilar. Estas operando con la variable fila sin inicializar. Ademas no tiene mucho sentido esa variable, pero bueno.