Ver Mensaje Individual
  #9 (permalink)  
Antiguo 26/05/2015, 21:50
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: Portugol Studio / Ejercicio de programación

Cita:
Bueno, entonces ya si puedo decir que conozco a un experto en C++ que sabe portugol.
Jajaj.. tanto como saber portugol... XDD

A ver si le explico lo de las variables...
A la diferencia de portugol, en C y C++, estamos trabajando con la memoria todo el tiempo. Cuando decimos int o unsigned long long int o puede que otros nombres que te parezca de otro planeta XDD, con esas palabras reservamos una pequeña porción de memoria, lo hacemos para un tipo de dato en concreto que queremos almacenar, ya que es en la memoria RAM donde se almacenan todas las variables por que es el lugar más rápido de acceder de todo el pc.

Entonces en C un int me reserva espacio para un numero entero, pero si el espacio "es reservado", como dije, para nada eso quiere decir que es ilimitado. En mi computador un entero ocupa 4 Bytes, ese valor puede variar de un computador a otro, y en esos 4 Bytes puedo guardar un rango limitado de valores.

En esa tabla puedes ver cada tipo de dato cuanto ocupa en memoria y el rango de valores que puede albergar.

Puedes ver que un entero(int) puede guardar un valor mínimo de -2,147,483,648 e máximo +2,147,483,647, ese es su rango pero cuando hablamos de positivos simplemente ponemos 2,147,483,647 sin el +(no hace falta) al igual a la hora de crear no necesito decir signed int n; que quiere decir que si voy usar números negativos, no necesitamos especificar ambos casos, solo uno, y ese caso es cuando no vamos usar negativos, entonces hacemos unsigned in n; que es un entero sin signo(excluye negativos).

Al no poner signo en los positivos cuando se refiere a una variable signed(con signo) se refiera a que es negativa, y cuando se refiera a unsigned(sin signo) es que es positiva. ;)

Si declaro un int puedo guardar de -2,147,483,648 a 2,147,483,647 pero cuando digo unsigned int puedo guardar el doble de números como puedes ver en la tabla, pero solo sin signos, o sea positivos, estoy afirmando al programa que no le voy a meter números negativos, entonces el compilador me permite poner el doble de números positivos, sigue ocupando el mismo tamaño en memoria. El rango en nuestro caso del (unsigned long long int) seria: de 0 a 18,446,744,073,709,551,615, frente a -09,223,372,036,854,775,808 hasta 09,223,372,036,854,775,807 en el caso de (signed long long int)¿Capiche?

Entonces en C C++ realmente estas lidiando con memoria RAM. Y estas limitado a pedir lo justo que vas necesitar. Por ese motivo podemos controlar sistematicamente cuanta memoria RAM vamos a necesitarla y reservar previamente garantizando ese espacio a nuestro programa.
Claro esta que si necesito mayor espacio es solo buscar un tipo que me permita guardar números mayores.

¿Ahora que pasa si hago 18,446,744,073,709,551,615+1?? : tu ordenador comenzará a sonar una alarma y echara humo, también emitirá un aviso que en 30 segundos se auto destruirá JAJAJA. Es broma pasa que si hago 09,223,372,036,854,775,807+1 é igual a 0(cero) jajaja. Entramos por la otra punta que es cero(en caso de ser unsigned claro).

Claramente si lo anterior llega ocurrir puede que no sea lo que tu deseas no? XDD estas esperando un numero 234132531453415243214234124124123414124.... y te sale un 002 to churro por pantalla jajajajaj

Entonces cuando creamos una variable(o constante XD), estamos reservando una porción de memoria RAM en C/C++, y muchos otros lenguajes.

En portugol a lo mejor no necesitas decir cuanto vas a guardar ya que es el programa que se encarga de eso por ti, no tienes control sobre eso. Más fácil, menos poder.

Ahora la explicación de por que unas variables son double, int, long long blablabla, es porque queremos un trozo bueno de memoria que nos garantice que no nos salga un 002 churro por pantalla y que nos permita guardar lo que queramos. En otras palabras un long long int es un entero largo o una clase de entero inflado que al poner unsigned delante quiere decir que puedo guardar en el el doble de números positivos que podría normalmente sin poner unsigne o poniendo signed que es lo mismo.

Ahora hablando de funciones... En C/C++ funciones si son funciones no eso que tienes ahí XD. una función es un trozo de código que realiza una tarea concreta. Realmente la definición de función es algo como "un grupo de instrucciones que tiene como finalidad resolver un problema dado", ...algo así XD

Entonces cada vez que llamo a por ejemplo funcion(x,y) esa función puede hacer muchas cosas, imaginamos que suma x a y. La puedo usar cuando quiera para que me sume 2 números para mi.

en el código incluyo una función que es la pow() que me saca la potencia de X elevada a i (pow(x,i)). Pero la cosa es que todo en C/C++ acepta variables y retorna variables, cada variables tiene su tipo como has visto en la tabla, pero también pueden ser convertidas. La función pow() acepta 2 variables tipo double y nos retorna el resultado que es double también. as veces pasas un entero a ella, sabes que va funcionar, pero el compilador hace chillar y chillar quejándose que esta mal, por que espera un double y le estoy pasando un int. asi que digo que ese int no es un int si no que es un double y que se calle de una vez XDDD

En fin, creo que si calculas a mano te sale antes el resultado por que de portugol voy pillado XD:

x =10
n=5
a=[5,4,3,2,1,0]

fx = a[0]; //fx = 5

repetir 5 vezes: //fx = (fx + a[i])*(x^i)

1º fx = (5 + 4) * (10^1)
2º fx = (90 + 3) * (10^2)
3º fx = (9300 + 2) * (10^3)
4º fx = (9302000 + 1) * (10^4)
5º fx = (93020010000 + 0) * (10^5)

uff ya me canso XD

fx según he calculado a mano mismo, y después comprobé con mi programa da:
fx = 9302001000000000

¡Puedo equivocarme! No de por sentado, calcula tu.

y no le podía meter en un entero ya que 9302001000000000 es muuuucho mayor que 2147483647, y por ese motivo necesite un tipo de datos mas contundente como unsigned long long int que le cabe 18446744073709551615.

Puedes ver que unsigned long long int le sobra.
18446744073709551615
9302001000000000

Por ese motivo todos en brasil corren como nenas al portugol... Por que tocar la memoria les produce dolor de barriga. Pero si no aprendes a gestionar la memoria, me temo que es como programar en una calculadora. Haréis muy poco. XD

Yo como un tio majo que soy(XD) te aconsejo que dejes eso antes de iniciar XDD, el objetivo de portugol es de facilitar el aprendizaje sobre C u otros lenguajes que vienen luego enseguida, ya que realmente nadie programa en portugol. Realmente no hace falta aprender portugol, yo que yo puedo dar fé que aprendí mucho mejor sobre C/C++, "SOLO", con una mano atada a la espalda, con tutoriales de Internet y sin duda con la ayuda de compañeros como eferion(Es un Maquina XD) anchacom, leosam.... Ah! Y foros como este muchos.

La en Brasil también ando por allá XD. http://www.scriptbrasil.com.br/forum/forum/20-c-c/

En ese mismo foro tienes uno de lógica de programación(asi lo llaman ellos allá en Brasil), que hay muchas preguntas de visual G que es también portugol http://www.scriptbrasil.com.br/forum...e-programacao/ Pero en ese no ando yo XDDD.

Bueno ya no aburro más que me acaba el papel XDD. Suerte



Me pregunto la gracia que te va hacer cuando tengas aprendido el portugol ese, y veas que estas completamente limitado y que después de meses lo que lleva aprender un lenguaje tengas que iniciar de cero y encima con gestión de memoria según el lenguaje que escojas ya que en ese harás muy poco. XDD
Seguramente tu vas a creer que te troleo o algo parecido, o que soy un tonto de esos que andan por foros etc etc, pero la verdad aquí estamos todo el día ayudando a universitarios incluyendo los de portugol jaja. Vaya a un Java o lo que quieras pero portugol es un atraso de vida.

...le va doler pero tengo que decir por su bien... Vaya! eso aun estaba encendido... ¿Sera que ha escuchao? XDD

No ahora en serio XD. Suerte hagas lo que haga, si te podemos ayudar aquí estamos, si algo no sabemos lo aprendemos. Si el portugol ese me lo como con papas en 2 horas =D