Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: flacc en 17 Noviembre 2010, 18:25 pm



Título: [vbs] traduciendo un lio
Publicado por: flacc en 17 Noviembre 2010, 18:25 pm
Hola, pues veran, hace un tiempo hice un programa para calcular la suma factorial o como se llame, en esos tiempos no tenia para un calculadora, y entre todos en el foro de c me ayudaron a hacerla en versión estandar, en ese tiempo estaba aprendiendo c y lo ise pensando en practicar whiley do while, ahora que estaba leyendo un manual de vbs, me dispuse a traducirlo desde el original ocupando la sentencia if, pero no me da...ojala me puedan ayudar, no logro ver en que fallo...

La versión vbs:

Código
  1. Option Explicit
  2. Dim n, k, nf, kf, resta, restaf, x, y
  3.  
  4. n = InputBox("Ingrese n" &vbCrLf& "(Solo valores numericos)", "NCR Calculator 1.0.7") 'ingreso de n y k
  5. k = InputBox("Ingrese k" &vbCrLf& "(Solo valores numericos)", "NCR Calculator 1.0.7")
  6.  
  7. nf = 1
  8. kf = 1
  9. resta = n - k
  10. restaf = 1
  11.  
  12. if n > 1 Then 'factorial de n
  13. nf = nf * n
  14. n = n - 1
  15. End if
  16.  
  17. if k > 1 Then 'factorial de k
  18. kf = kf * k
  19. k = k - 1
  20. End if
  21.  
  22.  
  23. 'calculando NCR
  24.  
  25. if resta > 1 Then
  26. restaf = restaf * resta
  27. resta = resta - 1
  28. End if
  29.  
  30. x = kf * restaf
  31. y = nf / x
  32.  
  33.  
  34. 'resultados
  35.  
  36. Dim var1
  37. var1 = MsgBox("n factorial: " &nf &vbCrLf &"k factorial: " &kf &vbCrLf &"(n - k)! = " &restaf &vbCrLf &"k! * (n - k)! = " &x &vbCrLf &"n! / [k! (n - k)!] = " &y &vbCrLf &vbCrLf &"Resultado final: " &y,0,"NCR Calculator 1.0.7")

y aqui la versión original no estandar en c:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio2.h>
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7.  signed long n, k, nf, kf, resta, resta_f, x, y;
  8.  for ( ; 1 ; ) /* bucle infinito */
  9.  {
  10.         gotoxy(17,1);
  11.         printf("NCR calculator v.1.0.5 by mini_nauta@hotmail.com \n");
  12.         gotoxy(30,3);
  13.         printf("foro.elhacker.net\n");
  14.         gotoxy(1,6);
  15.         printf( "ingrese n y k\n" ); /* ingreso de n y k */
  16.         scanf( "%d %d", &n, &k);
  17.         nf = 1;
  18.         kf = 1;
  19.         resta = n - k;
  20.         resta_f = 1;
  21.         do /* factorial de n*/
  22.         {
  23.               nf = nf * n;
  24.               n--;
  25.               } while (n > 1);
  26.         while (k > 1) /* factorial de k*/
  27.         {
  28.               kf = kf * k;
  29.               k--;
  30.               }
  31.         /* calculando ncr*/
  32.         while (resta > 1)
  33.         {
  34.               resta_f = resta_f * resta;
  35.               resta--;
  36.               }
  37.         x = kf * resta_f;
  38.         y = (float)nf / (float)x;
  39.         /*resultados*/
  40.         printf("n factorial: %d\n"
  41.                  "k factorial: %d\n"
  42.                  "(n - k)! = %d\n"
  43.                  "k! * (n - k)! = %d\n"
  44.                  "n! / [k! (n - k)!] = %d\n"
  45.                  "--------------------------\n"
  46.                  "resultado final(ncr): %d\n",nf, kf, resta_f, x, y, y);
  47.         getch();
  48.         clrscr();
  49.         }
  50.  return 0;
  51. }

Si se fijan en c la hice así para practicar la sentencia do while y while, y aclarar que no soy un master del c, solo practicaba lo aprendido y que mejor si me hacia de una calculadora para ncr o suma factorial o como se llame.... y de practica me dispuse a traducirlo a vbs, el problema es que como en c me da el resultado perfecto, no así en vbs, da todo mal, no se que es, lo ise todo como se hacerlo y no me da... ojala ustedes vean el error...saludoss y gracias


Título: Re: [vbs] traduciendo un lio
Publicado por: Novlucker en 17 Noviembre 2010, 18:41 pm
Los inputbox devuelven un string, si sumas strings da cero, debes de convertir a valores usando CInt(texto)

Saludos


Título: Re: [vbs] traduciendo un lio
Publicado por: flacc en 18 Noviembre 2010, 02:17 am
aaa... voy a probar a ver si funka


Título: Re: [vbs] traduciendo un lio
Publicado por: flacc en 19 Noviembre 2010, 18:21 pm
Oyr Novlucker gracais por la auda pero me da error, el code actual es así(fragmento)

Código
  1. n = InputBox("Ingrese n" &vbCrLf& "(Solo valores numericos)", "NCR Calculator 1.0.7") 'ingreso de n y k
  2. k = InputBox("Ingrese k" &vbCrLf& "(Solo valores numericos)", "NCR Calculator 1.0.7")
  3.  
  4.  
  5. CInt(n) 'conversión a enteros
  6. CInt(k)

pero da error, dice " La variable utiliza un tipo de automatización no aceptado en CInt" codigo 800A01CA

si me pudieras dar una mano porfis...gracias


Título: Re: [vbs] traduciendo un lio
Publicado por: Novlucker en 19 Noviembre 2010, 18:25 pm
Código
  1. n = InputBox("Ingrese n" &vbCrLf& "(Solo valores numericos)", "NCR Calculator 1.0.7")
  2. a = cint(n)
  3.  
  4. 'Segunda y mejor opcion
  5.  
  6. n = cint(InputBox("Ingrese n" &vbCrLf& "(Solo valores numericos)", "NCR Calculator 1.0.7"))

Saludos


Título: Re: [vbs] traduciendo un lio
Publicado por: flacc en 19 Noviembre 2010, 18:44 pm
si me di cuenta, estaba por responder que habia allado la solución, una pregunta, como le haces para poner en color el codigo, porque con code=vbs no sirve... pero me sigue dando lo mismo...  este es el code con CInt

Código
  1. Option Explicit
  2. Dim n, k, nf, kf, resta, restaf, x, y
  3.  
  4. n = CInt(InputBox("Ingrese n" &vbCrLf& "(Solo valores numericos)", "NCR Calculator 1.0.7")) 'ingreso de n y k
  5. k = CInt(InputBox("Ingrese k" &vbCrLf& "(Solo valores numericos)", "NCR Calculator 1.0.7"))
  6.  
  7. nf = 1
  8. kf = 1
  9. resta = n - k
  10. restaf = 1
  11.  
  12. if n > 1 Then 'factorial de n
  13. nf = nf * n
  14. n = n - 1
  15. End if
  16.  
  17. if k > 1 Then 'factorial de k
  18. kf = kf * k
  19. k = k - 1
  20. End if
  21.  
  22.  
  23. 'calculando NCR
  24.  
  25. if resta > 1 Then
  26. restaf = restaf * resta
  27. resta = resta - 1
  28. End if
  29.  
  30. x = kf * restaf
  31. y = nf / x
  32.  
  33.  
  34. 'resultados
  35.  
  36. Dim var1
  37. var1 = MsgBox("n factorial: " &nf &vbCrLf &"k factorial: " &kf &vbCrLf &"(n - k)! = " &restaf &vbCrLf &"k! * (n - k)! = " &x &vbCrLf &"n! / [k! (n - k)!] = " &y &vbCrLf &vbCrLf &"Resultado final: " &y,0,"NCR Calculator 1.0.7")

me sigue dando los mismos resultados que sin CInt... ni idea de porque...


Título: Re: [vbs] traduciendo un lio
Publicado por: Novlucker en 19 Noviembre 2010, 18:55 pm
No había prestado suficiente atención a tu código :silbar:

Código
  1. if n > 1 Then 'factorial de n
  2. nf = nf * n
  3. n = n - 1
  4. End if
Donde hay un while ahí? El problema es que eso pasa solo una vez, así que como multiplicas por el primer valor de nf, el cual es 1, siempre da el mismo número que has ingresado :P (igual para el k)

Por cierto, no hay etiqueta de vbs, pero si de VB, y sintacticamente son iguales

Saludos


Título: Re: [vbs] traduciendo un lio
Publicado por: flacc en 19 Noviembre 2010, 19:14 pm
A con razon, pero eso significaría que yo al usar do while y while solo por practicar lo ise sin querer bien, entonces que lo que paso fue un error fortuito  :laugh: :laugh: ;-) ;-), interesante, nunca se me habría pasado por la cabeza, para mi era lo mismo usar while que if o for, aunque me cuestionaba el que pasaría si lo isiera de otra forma... primeramente el code hecho en era con if else, despues de largas horas de lectura cuando llegue a la parte de while, y ya que no podia hacer los ejercicios propuestos en el libro porque en el colegio todavia no nos pasan esa materia, ise la calculadora, ademas me sirvio porque n otenia dinero para comprar una casio con mas funciones... solo tenia un calculadora china .. esas de 2 dolares aprox...

pero que interesante descubrimiento...jajajaj.. esto es lo bello de aprender... voy a probar el misco code traducido a c, con los if a ver que tal... despues me paso a mostrar los resultados...saludoss y gracias


Título: Re: [vbs] traduciendo un lio
Publicado por: flacc en 19 Noviembre 2010, 20:38 pm
Efectivamente lo probe y da lo mismo que en vbs, aqui las capturas con n = 6 y k = 2:
(http://uploadingit.com/file/4czsymk2i3sescnf/error%20ncr%20calculator.jpg)

(http://uploadingit.com/file/yjvqzptkznz7ggkm/correcto.jpg)

asi que como hasta lo que tengo aprendido no conozco algun for en vbs voy a probar con for... y otra pregunta... se puede?

Código
  1. var = CInt(n, k)

o s daria error?...
saludoss y gracais por toda la ayuda....

pd:( todavi no logro hacer que de decimales en c :xD)


Título: Re: [vbs] traduciendo un lio
Publicado por: Novlucker en 19 Noviembre 2010, 20:41 pm
Para lo de los decimales en C, no uses int entonces :rolleyes:

Sobre lo del Cint, la función acepta un único parámetro, así que se partiría

Saludos


Título: Re: [vbs] traduciendo un lio
Publicado por: flacc en 20 Noviembre 2010, 02:56 am
tu dices declararlos como float variable;?
pero si lo declaro asi me daria obligatoriamente 1,5 o me podria dar 1?.. es que estoy aprendiendo.. como veras en un principio cuando vi el foro era mucho mas ignorante..jjajaj

wiii ;D ;D ;D... funciona.. ahora a a las cosas extras.... gracias por la ayuda me fue muy util...saludoss en la proxima pasada posteo el código, quizas le sirev a alguien mas...saludoss