Foros del Web » Programación para mayores de 30 ;) » .NET »

tengo codigos en c# que fallan y no entiendo

Estas en el tema de tengo codigos en c# que fallan y no entiendo en el foro de .NET en Foros del Web. Hola, soy nuevo en esto de la programacion en c# y tengo que hacer una seriede ejercicios para un curso que estoy haciendo, si alguien ...
  #1 (permalink)  
Antiguo 03/02/2012, 15:07
 
Fecha de Ingreso: febrero-2012
Mensajes: 13
Antigüedad: 12 años, 3 meses
Puntos: 0
tengo codigos en c# que fallan y no entiendo

Hola, soy nuevo en esto de la programacion en c# y tengo que hacer una seriede ejercicios para un curso que estoy haciendo, si alguien me puede ayudar ... la ayuda que necesito es que me revisen el código que ya he generado y que me digan donde está el fallo. mi mail es [email protected] Gracias
  #2 (permalink)  
Antiguo 03/02/2012, 17:54
 
Fecha de Ingreso: febrero-2012
Mensajes: 75
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: tengo codigos en c# que fallan y no entiendo

cuelga lo trozos de código que no te "agradan". Por aquí hay gente muy buena que te puede ayudar.
__________________
Si quieres conseguir resultados diferentes no hagas siempre lo mismo.

Mejora tu entorno. MestralCadiz con su comunidad.
  #3 (permalink)  
Antiguo 04/02/2012, 06:48
 
Fecha de Ingreso: febrero-2012
Mensajes: 13
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: tengo codigos en c# que fallan y no entiendo

El proceso de suma iterativa me funciona bien pero el de reiterativa no, supongo que es la formula de resultado. Debe de hacer para por ejemplo dos valores 4*5=4+4+4+4+4


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SumaIterativaReiterativa
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int SumaIterativa(int a, int b)
{
int i, resultado;
resultado = 0;
for (i = 1; i <= a; i++)
{
resultado = resultado + b;
}
return resultado;
}
int SumaRecursiva(int a, int b)
{
int resultado;
if (b == 0)
{
resultado = a;
}
else
{
resultado = a+SumaRecursiva(a, b-1);
}
return resultado;

}

private void button1_Click(object sender, EventArgs e)
{
int a, b,resultado;
a = int.Parse(textBox1.Text);
b = int.Parse(textBox2.Text);
resultado = SumaIterativa(a, b);
MessageBox.Show("Suma Iterativa: "+resultado.ToString());
}

private void button2_Click(object sender, EventArgs e)
{
int a, b, resultado;
a = int.Parse(textBox1.Text);
b = int.Parse(textBox2.Text);
resultado = SumaRecursiva(a, b);
MessageBox.Show("Suma Recursiva: "+resultado.ToString());
}
}
}
  #4 (permalink)  
Antiguo 04/02/2012, 15:51
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: tengo codigos en c# que fallan y no entiendo

El caso base es cuando b = 1, no cuando b =0, porque si no estás haciendo una suma de más.
  #5 (permalink)  
Antiguo 04/02/2012, 16:07
 
Fecha de Ingreso: febrero-2012
Mensajes: 75
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: tengo codigos en c# que fallan y no entiendo

Creo que tu problema está ahí:
Cita:
Iniciado por elchache Ver Mensaje
int SumaRecursiva(int a, int b)
{
int resultado;
if (b == 0)
{
resultado = a;
}
else
{
resultado = a+SumaRecursiva(a, b-1);
}
return resultado;

}
Imagina que tienes 4*5 como pusiste. El programa hace:

resultado = 4(b=5) +4(b=4) + 4(b=3) +4 (b=2) + 4(b=1)
Pero entonces haces esto:
resultado = 4
Porqué en el caso b=0 estás asignando, no sumando.

Yo te aconsejaría hacer un for:
for(i=0; i<b; i++){
resultado += a;
}
__________________
Si quieres conseguir resultados diferentes no hagas siempre lo mismo.

Mejora tu entorno. MestralCadiz con su comunidad.
  #6 (permalink)  
Antiguo 04/02/2012, 20:29
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: tengo codigos en c# que fallan y no entiendo

Creo que te estás confundiendo caperutxa. La variable resultado es local, es decir, solo conserva su valor dentro de la función y, por tanto, al salir de ella ya no existe.

Lo que ha puesto es como debe ser, el problema es, como he dicho antes, que el caso base es cuando b=1, y no cuando b=0.

Por ejemplo:

a = 4, b= 3;

La traza de llamadas sería:

Suma(4,3) = 4 + Suma(4,2)

Suma(4,2) = 4+Suma(4,1)

Suma(4,1) = 4;

Y si juntas todo:

Suma(4,3) = 4+ 4 + 4 = 12 = 4*3

Etiquetas: c#
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:02.