elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [vbs] traduciendo un lio
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [vbs] traduciendo un lio  (Leído 4,626 veces)
flacc


Desconectado Desconectado

Mensajes: 854



Ver Perfil WWW
[vbs] traduciendo un lio
« 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


« Última modificación: 19 Noviembre 2010, 19:19 pm por mini_nauta » En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: [vbs] traduciendo un lio
« Respuesta #1 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


En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
flacc


Desconectado Desconectado

Mensajes: 854



Ver Perfil WWW
Re: [vbs] traduciendo un lio
« Respuesta #2 en: 18 Noviembre 2010, 02:17 am »

aaa... voy a probar a ver si funka
En línea

flacc


Desconectado Desconectado

Mensajes: 854



Ver Perfil WWW
Re: [vbs] traduciendo un lio
« Respuesta #3 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
« Última modificación: 19 Noviembre 2010, 19:19 pm por mini_nauta » En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: [vbs] traduciendo un lio
« Respuesta #4 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
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
flacc


Desconectado Desconectado

Mensajes: 854



Ver Perfil WWW
Re: [vbs] traduciendo un lio
« Respuesta #5 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...
« Última modificación: 19 Noviembre 2010, 19:20 pm por mini_nauta » En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: [vbs] traduciendo un lio
« Respuesta #6 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
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
flacc


Desconectado Desconectado

Mensajes: 854



Ver Perfil WWW
Re: [vbs] traduciendo un lio
« Respuesta #7 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
« Última modificación: 19 Noviembre 2010, 19:19 pm por mini_nauta » En línea

flacc


Desconectado Desconectado

Mensajes: 854



Ver Perfil WWW
Re: [vbs] traduciendo un lio
« Respuesta #8 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:



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)
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: [vbs] traduciendo un lio
« Respuesta #9 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
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines