ayuda con un programa de c++

Iniciado por max9100, 4 Abril 2014, 12:39 PM

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

max9100

bueno me dijeron que trabajara en el codigo ok trabaje jeje pero no me salio como me lo piden creo tengo una menera no rustica de programar  esto es lo que me piden
Realizar un programa que suma de manera recursiva los elementos de una matriz de 2 columnas y 2 filas. El algoritmo debe tener los siguientes elementos:
1. Declaración de dos valores constantes enteras Fila y Columna
2. Una función recursiva Sumar que retorne un entero, debe recibir como parámetro un arreglo bidimensional y dos enteros (Fila y Columna). Debe realizar las siguientes acciones:
a. Imprimir el valor de la Fila y Columna
b. Validar si el valor de la Fila y Columna es igual a cero si es asi ha de retornar el elemento del arreglo en la posición 0,0.
c. Si no se cumple la validación anterior se ha de validar si el valor de la columna es menor que cero si es así debe retornar el valor de la invocación de la función Sumar pasándole el arreglo, el valor de la Fila menos 1 y la posición 1.
d. Si no se cumple la condición anterior se ha de retornar el arreglo posición Fila, Columna más la invocación de la función Sumar pasándole el arreglo, la fila y la columna menos 1.
3. Un procedimiento Cargar_Datos que cargue los valores del arreglo con números aleatorios, debe recibir como parámetro un arreglo y dos enteros (Fila y Columna).
4. Un procedimiento Imprimir_Datos , que imprima los datos del arreglo debe recibir como parámetro un arreglo y dos enteros (Fila y Columna).
5. Un procedimiento principal que contenga los siguientes elementos:
a. Declaración de un arreglo de dos filas dos columna
b. Invocación del procedimiento Cargar_Datos para cargar los valores del arreglo, debe pasar el arreglo y los valores de Fila y Columna.
c. Invocación del procedimiento Imprimir_Datos para imprimir los valores del arreglo.
d. Imprimir el valor de la suma de los elementos del arreglo mediante la invocación de la función Sumar.

#include <stdio.h>
#include <iostream>
using namespace std ;

int sumaR(int mat[][2], int fil, int col){//problema no deve ir todo aqui
printf("En columna = %d\n",col);
printf("En fila = %d\n",fil);

    if (col==0 && fil==0){

        return mat[0][0];
       
    }else if (col<0){


        return sumaR(mat, fil-1, 1);
   
    }else{

return mat[fil][col] + sumaR(mat, fil, col-1);

}
}                                                         
int main(){                                 
    int A[2][2];
int i=0,j;
for(i=0;i<2;i++){
printf("----Ingrese numero entero en la fila %d----\n",i+1);       
j=0;
for(j=0;j<2;j++){
printf("Ingrese numero entero en la columna %d\n",j+1);     
scanf("%d",&A[i][j]);
}
}                         
   

                                       
    printf("La suma recursiva de los elementos es: %d\n",sumaR(A,1,1));
system ("pause");
    return 0;

}
         

como podemos ver donde e puesto el comentario tengo problemas porque como entiendo que me lo piden es en diferentes funciones no en una sola pero solo haci lo puedo hacer haci que necesito ayuda de como pasar a funciones separadas.
o en caso de que este bien que es lo que nesesita para terminarlo   :huh: :huh:
           

eferion

Cita de: max9100 en  4 Abril 2014, 12:39 PM
1. Declaración de dos valores constantes enteras Fila y Columna

Código (cpp) [Seleccionar]

const int MaxFilas = 2;
const int MaxColumnas = 2;


Cita de: max9100 en  4 Abril 2014, 12:39 PM
a. Imprimir el valor de la Fila y Columna

estás en C++, luego es más correcto usar:

Código (cpp) [Seleccionar]

cout << "En la columna = " << col << endl;
cout << "En la fila = " << col << endl;


Cita de: max9100 en  4 Abril 2014, 12:39 PM
b. Validar si el valor de la Fila y Columna es igual a cero si es asi ha de retornar el elemento del arreglo en la posición 0,0.
c. Si no se cumple la validación anterior se ha de validar si el valor de la columna es menor que cero si es así debe retornar el valor de la invocación de la función Sumar pasándole el arreglo, el valor de la Fila menos 1 y la posición 1.
d. Si no se cumple la condición anterior se ha de retornar el arreglo posición Fila, Columna más la invocación de la función Sumar pasándole el arreglo, la fila y la columna menos 1.

Correcto

Cita de: max9100 en  4 Abril 2014, 12:39 PM
3. Un procedimiento Cargar_Datos que cargue los valores del arreglo con números aleatorios, debe recibir como parámetro un arreglo y dos enteros (Fila y Columna).
4. Un procedimiento Imprimir_Datos , que imprima los datos del arreglo debe recibir como parámetro un arreglo y dos enteros (Fila y Columna).
5. Un procedimiento principal que contenga los siguientes elementos:
a. Declaración de un arreglo de dos filas dos columna
b. Invocación del procedimiento Cargar_Datos para cargar los valores del arreglo, debe pasar el arreglo y los valores de Fila y Columna.
c. Invocación del procedimiento Imprimir_Datos para imprimir los valores del arreglo.
d. Imprimir el valor de la suma de los elementos del arreglo mediante la invocación de la función Sumar.

Esto falta

Por lo demás, el código está bien, cumple con lo que te piden.

Y sí, tu comentario "problema no deBe ir todo aqui" es erróneo.

max9100

#2
termine el codigo completo  >:D >:D >:D  nesesito la opinion por si me salte algun detalle jeje

aqui esta lo que me pedian


Realizar un programa que suma de manera recursiva los elementos de una matriz de 2 columnas y 2 filas. El algoritmo debe tener los siguientes elementos:
1. Declaración de dos valores constantes enteras Fila y Columna
2. Una función recursiva Sumar que retorne un entero, debe recibir como parámetro un arreglo bidimensional y dos enteros (Fila y Columna). Debe realizar las siguientes acciones:
a. Imprimir el valor de la Fila y Columna
b. Validar si el valor de la Fila y Columna es igual a cero si es asi ha de retornar el elemento del arreglo en la posición 0,0.
c. Si no se cumple la validación anterior se ha de validar si el valor de la columna es menor que cero si es así debe retornar el valor de la invocación de la función Sumar pasándole el arreglo, el valor de la Fila menos 1 y la posición 1.
d. Si no se cumple la condición anterior se ha de retornar el arreglo posición Fila, Columna más la invocación de la función Sumar pasándole el arreglo, la fila y la columna menos 1.
3. Un procedimiento Cargar_Datos que cargue los valores del arreglo con números aleatorios, debe recibir como parámetro un arreglo y dos enteros (Fila y Columna).
4. Un procedimiento Imprimir_Datos , que imprima los datos del arreglo debe recibir como parámetro un arreglo y dos enteros (Fila y Columna).
5. Un procedimiento principal que contenga los siguientes elementos:
a. Declaración de un arreglo de dos filas dos columna
b. Invocación del procedimiento Cargar_Datos para cargar los valores del arreglo, debe pasar el arreglo y los valores de Fila y Columna.
c. Invocación del procedimiento Imprimir_Datos para imprimir los valores del arreglo.
d. Imprimir el valor de la suma de los elementos del arreglo mediante la invocación de la función Sumar.

y aqui esta el codigo terminado demen su opinión si necesita algo mas


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <iostream>

const int MaxFilas = 2;
const int MaxColumnas = 2;

using namespace std ;

int sumaR(int [][MaxColumnas], int , int );
void Cargar_Datos(int [][MaxColumnas]);
void Imprimir_Datos(int [][MaxColumnas]);

int sumaR(int mat[][MaxColumnas], int fil, int col){
cout<<"En columna = \t"<<col<<endl;
cout<<"En fila = \t"<<fil<<endl;

   if (col==0 && fil==0){

      return mat[0][0];
     
   }else if (col<0){
       return sumaR(mat, fil-1, 1);
 
   }else{
return mat[fil][col] + sumaR(mat, fil, col-1);
}
}      
void Cargar_Datos(int mat[][MaxColumnas]){
   srand(time(0));
   for (int i=0;i<MaxFilas;i++)
   {
       for (int j=0;j<MaxColumnas;j++)
       {
           mat[i][j]=rand()%21;
       }  
   }
}
void Imprimir_Datos(int mat[][MaxColumnas]){
for (int i=0;i<MaxFilas;i++)
   {
       for (int j=0;j<MaxColumnas;j++)
       {
cout <<"El numero ser :"<<mat[i][j]<<"\t";
       }
     cout<<"\n\n";
   }
}

int main(){
   int A[MaxFilas][MaxColumnas];
int i=0;
Cargar_Datos(A);
Imprimir_Datos (A);                                      
cout<<"La suma recursiva de los elementos es: \t"<<sumaR(A,1,1)<<endl;
system ("pause");
   return 0;
}        
     

por cierto me sale el siguiente error alguien me da una explicacion warning C4244: 'argument' : conversion from 'time_t' to 'unsigned int', possible loss of data.
creo que es porque utilizo Time.h o cTime.

rir3760

Lo primero que deberías hacer es:
* Eliminar la inclusión de <stdio.h> y <conio.h> (no se recomienda el uso de esta ultima, mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|).
* Cambiar el nombre de los encabezados <stdlib.h> y <time.h> por <cstdlib> y <ctime>.
* Eliminar la variable "i" de main ya que no se utiliza en la función.

El mensaje de advertencia que mencionas se debe a la llamada a srand, para que no se genere debes convertir explícitamente el valor de retorno de la función time, de esta forma:
Código (cpp) [Seleccionar]
srand((unsigned) time(0));

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

max9100