ayuda con algoritmo no queda!!

Iniciado por Crowgray, 20 Junio 2010, 03:18 AM

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

Crowgray

hola espero me puedan ayudar con este ejercicio

elaborar un programa para calcular

1(1x2x3x....xn)+2(1x2x3...xn)+m(1x2x3x...xn)

proponer m y n

segun yo el algoritmo va asi, pero salen puros simbolos raros espero me echen una
mano ya me desespere.




#include <stdio.h>
#include <conio.h>
#include <iostream>
void funcion(int, int);
int main()
{
    int m, n;
    double s;
    printf("Da el valor de m");
    scanf("%d", &m);
    printf("Da el valor de n");
    scanf("%d", &m);
    funcion(m, n);
    getch();

}

void funcion(int m, int n)
{
      float p=1;
      double s=0;
      int i, j;
     
      for(j=1; j<=m; j++)
      {
      for(i=1; i<=n; i++)
      {
      p=p*i*j;
      }
      s=s+p;
      }
      printf("El valor de s= %f", s);

}




Mr.Blue

Código (cpp) [Seleccionar]
    printf("Da el valor de m");
    scanf("%d", &m);
    printf("Da el valor de n");
    scanf("%d", &m);


lo primero q vi

estas guardando el ingreso en la misma variable.

satu

Hola
Yo lo haría de esta forma

-Pides n y m
-Una función que calcule el factorial de n (1*2*3*...*n)
-Y otra función que calcule (1+2+...+m)
-Después solo multiplicas el resultado de las 2 funciones y listo

Saludos
Breakbeat como forma de vida

leogtz

El error principal, aparte de que el algoritmo no hace su tarea está aquí:

printf("Da el valor de n");
    scanf("%d", &m);


Vuelves a guardar el valor de m, y debería de ser el valor de "n", debido a eso se le manda a la función "funcion" un valor basura de n.

Corrigiendo la función debíera ser así:

void funcion(int m, int n)
{
      float p=1;
      double s=0;
      int i, j;

      for(j = 1; j <= m; j++)
      {
        for(i = 1; i <= n; i++)
        {
            p = p * i;
        }
        s = s + p * j;
        p = 1.0;                         /* Reinicializamos p para el productorio */
      }
      printf("El valor de s= %lf", s);
}


-Tienes errores de indentación.
-No debes usar conio.h, no es standard
-Decidete entre C ó C++, lo digo por la inclusión de iostream.

Yo la dejaría así:

#include <stdio.h>
void funcion(int, int);
int main(void)
{
    /* Da lo mismo signed que unsignes en este caso, puesto que no podemos
    jugar con numeros muy grandes */
    signed int m, n;
    printf("Da el valor de m : ");
    scanf("%d", &m);
    printf("Da el valor de n : ");
    scanf("%d", &n);
    funcion(m, n);
    while(getchar() != '\n');
    getchar();
    return 0;
}

void funcion(int m, int n)
{
      signed int p = 1;
      double s = 0;
      signed int i, j;
      for(j = 1; j <= m; j++)
      {
        for(i = 1; i <= n; i++)
            p *= i;
        s += p * j;
        p = 1;
      }
      printf("El valor de s = %lf", s);
}


satu tiene razón, podrías resolver el problema con dos funciones, una para el factorial y otra para la suma de 1 a m.

Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

do-while

¡Buenas!

Y simplificandolo un poco mas

1+2+...+m = (m·(m+1))/2,

Asi que el resultado sera ((m · (m+1))/2) · n!

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

nicolas_cof

printf( "Da el valor de m : " );
fflush( stdout );
scanf( "%d", &m );
printf( "Da el valor de n : " );
fflush( stdout );
scanf( "%d", &n );


Crowgray, acuerdate de utilizar las etiquetas GeSHI o code para que sea mas legible el codigo

[code=c]codigo fuente C[/code]

[code]codigo fuente[/code]

Salu10.