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

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Mensajes
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 279
21  Programación / Programación General / Re: [Ehn-Dev 2013] - Concurso de desarrollo de aplicaciones - Hilo oficial en: 12 Junio 2013, 08:41 am
Autor: Leonardo Gutiérrez Ramírez.
Nombre de la aplicación: yarelang.
Lenguaje: C++.

yare es un pequeño lenguaje de programación en crecimiento que tiene algunas características peculiares que pudieran ser utilizadas para implementar un pequeño algoritmo de cálculo numérico o de otra índole.

yare tiene como característica que puedes programar en inglés o en español, por ejemplo, realizar un ciclo, es lo mismo que utilices la palabra reservada while o mientras.

yare está programado en C++ (aunque contiene elementos de C) utilizando Bison y Flex.

El proyecto yare, tiene licencia GPL v3.

Características

Variables
En Yare por defecto hay 26 variables globales listas para utilizarse en cualquier momento, estas tienen de identificador las letras del abecedario, desde A hasta Z.
Los identificadores para estas variables no son sensibles a mayúsculas y minúsculas.

Ejemplo de uso:

Código:
a = 1 + 2 * 3; 
z = a + 1;
.
El tema de asignación de variables lo veremos más adelante.

Variables definidas por el usuario
El usuario puede crear variables, pero estas deben estar delimitadas por el caracter ':', dentro de estos caracteres puede estar cualquier combinación entre estos símbolos:

Código:

'
Cualquier dígito (0-9)
Espacio
_
#
@
Cualquier letra (excepto la 'ñ')
Tabulador
+
-
^
|
(
)
\
/
!
Los identificadores pueden tener una longitud de hasta 99 caracteres.

Ejemplo de uso:
Código:
: hola ! : = -1; 
: esta es mi variable !!!! : = 2;
: : = 345345;
: : = 1 + 2 * 3;
:resultados simulacion : = -2.00023;
.

Literales de asignación

Los valores que pueden ser asignados a las variables son los siguientes:
Enteros o decimales, 123762, 3.141516.
Números hexadecimales, 0x0, 0x12a, 0xa, 0xb524, empezando por un cero, seguido de una 'x' mayúscula  o minúscula, seguido de cualquier combinación de digitos y de letras entre a y f.
Números octales, 123o, 423o, 76O, 624o, empezando por cualquier dígito entre 0 y 7, seguido de la letra 'o'.
Números binarios, 0101001b, 0001b, 0b, 1b, cualquier combinación entre 1 y 0's seguido de una letra 'b'.
Ejemplos de uso:
Código:
a = ((0x2 ^ 100b) - 3.141516) + 5o; 
printn(a);
.
Constantes numéricas
Yare cuenta actualmente con 9 constantes numéricas, son las siguientes:
Código:
pi – número pi
e – valor de e
log2e - valor de log2e
log10e – valor de log10e
ln2 – valor de loge2
ln10 – valor de loge10
sqrt2 – valor de pi entre 2.
sqrt3 – valor de pi entre 3.
sqrt5 – valor de pi entre 5.
Ejemplo de uso:
Código:
printn(const.pi); 
.

printn(const.pi + 2 * 11b);
.
Otras constantes pueden ser fácilmente añadidas.

Asignación de variables

La asignación de valores a las variables es bastante flexible.
Puede realizarse de las siguientes maneras:

Utilizando el operador =:

Código:
a = 1 + 2;
.
Utilizando el operador to:
Código:
a = 1; 
a to a + 1;
printn(a);
.
Utilizando la sentencia move y to:
Código:
move 1 + 2 * 3 to a; 
printn(a);
.
Utilizando la sintaxis tipo assembly:
Código:
mov a, 1 + 2 * 3; 
printn(a);
.
Utilizando la sintaxís <-:
Código:
a <- 1 + 2 * 3; 
printn(a);
.
Utilizando asignaciones tipo pascal:
Código:
a := 1 + 2 * 3; 
printn(a);
.
Utilizando let o set con =:
Código:
set x = 1 + 2 * 3; 
printn(x);
.
Código:
let x = 1 + 2 * 3; 
printn(x);
.
Utilizando let o set con to:
Código:
set x to 1 + 2 * 3; 
printn(x);
.

let x to 1 + 2 * 3;
printn(x);
.
Esta sintaxis aplica también a variables definidas por el usuario.

Asignación aleatoria
Se puede dar un valor aleatorio a una variable de la siguiente manera:
Código:
x = ?; 
printn(x);
.
Asignación con smileys
Se puede asignar/inicializar una variable a 1, 0 o -1 de la siguiente manera:
Ejemplo de uso:
Código:
a = :); 

z = :(;

y = :|;

printn(a);
printn(z);
printn(y);
.

Intercambio de valores de variables
Se puede intercambiar los valores de las variables por medio del operador <->:
Ejemplo de uso:
Código:
x = 2; 
:ok: = 3;

x<->:ok:;

printn(x);
printn(:ok:);
.
Imprimir en pantalla
Se puede utilizar la sentencia print o printn.
La sentencia print imprime el valor de la expresión pasado como argumento sin añadir un fin de línea.
La sentencia printn añade un fin de línea al argumento.
Ejemplo de uso:
Código:
print(const.pi + 2); 
.
Código:
printn(const.pi + 2); 
.
Se pueden imprimir también en pantalla cadenas de texto con la sentencia puts y putsn.

La sentencia puts imprime el texto en pantalla pero sin añadir un fín de línea.

La sentencia putsn añade un fín de línea al final del texto.

Ejemplos de uso:
Código:
puts("Hola mundo en Yare!"); 
.
Código:
putsn("Hola mundo en Yare!"); 
.
Caracteres de escape
Se pueden incluir cualquiera de estos caracteres en el texto a imprimir:
Código:
\n – Nueva línea
\t – Tab horizontal
\s – Espacio
\b – Backspace (retroceso)
\r – Retorno de carro
\f – Alimentación de página (sólo para impresora)
\q – Añade un caracter de comillas dobles '”'
\\ - Añade el caracter '\'
\u – Imprime el siguiente caracter en mayúscula
\l – Imprime el siguiente caracter en minúscula.
\[0-9] – Imprime la cantidad de fin de líneas especificado en el dígito.
Ejemplos de uso:
Código:
putsn("\tHola\smundo\5"); 
.
Sentencias de control

Sentencia IF

Toma una decisión referente a una acción, se ejecuta un bloque si es verdadero (1).

Se puede escribir if(expresión) o si(expresion).

Ejemplo de uso:
Código:
if(const.pi * 2 <= 10) { 
    putsn("Ok");
}
.

Usando else.

Código:
if(const.pi * 2 <= 10) { 
    putsn("Ok");
} else {
    putsn(“Nel ... “);
}
.

Usando else-if:

Código:
x = 2; 
if(x == 0) {
    putsn("cero...");
} else if(x == 1) {
    putsn("uno ...");
} else if(x == 2) {
    putsn("dos ... ");
} else {
    putsn("otro ... ");
}
.

Operadores lógicos y relacionales

Código:
|| - OR
&& - AND
>= - Mayor igual
<= - Menor igual
== - Igual
!= - Distinto
“or” - OR
“and” - AND
-eq - Igual
-neq – Distinto/Diferente a
-lt – Menor que
-gt – Mayor que
“menor” - Menor que
“menorigual” - Menor igual
“mayor” - Mayor que
“mayorigual” - Mayor o igual
“igual” - Igual
|, or a nivel de bits
&, and a nivel de bits
x = 2;
if(x igual 2) {
    putsn("ok");
}
.

x = 2;
y = x -eq 2;
printn(y);
.

x = 2;
if((x -eq 1) or (x == 2)) {
    putsn("Ok ... ");
} else {
    putsn("Nel ... ");
}
.

x = 6;
if(x menor 10) {
    putsn("bien ... ");
}
.


Operador ternario

yare cuenta con el clásico operador ternario utilizado para expresiones de la siguiente manera:

Código:
expresión-lógica ? valor-si-verdadero : valor-si-falso

Ejemplos de uso:

Código:
x = 2; 
x = (x mod 2 == 0) ? 0 : 1;
printn(x);
.
Se asigna el valor de 1 a x.

Operadores aritméticos

Código:
+
“mas” Operador de suma con palabra
-
“menos” Operador de resta con palabra
*
“por” Operador de multiplicación con palabra
/
“entre” Operador de división con palabra
%
mod Operador módulo con palabra
! Operador unario “not”
~ Operador unario “not”
not Operador unario “not”
no Operador unario “not”
^ Exponenciación
xorop Operador XOR
<< Desplazamiento de bits a la izquierda
>> Desplazamiento de bits a la derecha

Ciclos

while

Ejemplo de uso:

Código:
while(x menor 10) { 
    printn(x);
    x to x + 1;
}
.

while(x@+ menor 10) printn(x);
.

Las llaves de bloques se utilizan cuando queremos agrupar las sentencias al ciclo, pero si solo es una sentencia dentro del ciclo se pueden omitir las llaves de bloque.

do-while


Ejemplo de uso:

Código:
do { 
    printn(x);
    set x to x + 1;
} while(x menor 10);
.

for de rango

La sintaxis del ciclo for de rango es la siguiente:

Código:
for(expresion ...[.+] expresion, variable global de control) { 
bloque de código
}

Ejemplo de uso:

Código:
foreach(1 ...... 20, x) { 
printn(x);
}
.

Código:
foreach(1 .... rand(), x) { 
printn(x);
}
.

La variable global, en este caso x almacenará el valor de la iteración dentro del ciclo.
Se pueden utilizar la cantidad de puntos que se desee, siempre y cuando sean más de 3.

Sentencia break


Al igual que otros lenguajes de programación, yare tiene una sentencia break que ayudará a detener el ciclo.

Ejemplo de uso:

Código:
foreach(1 ... rand(), x) { 
if(x igual 5) {
break;
} else {
printn(x);
}
}
.
Pueden tenerse ciclos anidados. El siguiente programa genera un triangulo hecho con asteriscos utilizado un ciclo anidado.

Código:
foreach(1 ... 10, x) { 
foreach(1 ... x, y) {
puts("*");
}
puts("\n");
}
.




Comentarios

Hay diversas maneras de utilizar comentarios dentro de un programa yare, son los siguientes:

Código:
# Comentario tipo shell
La sintaxis del comentario anterior sirve para comentarios de una sola línea.

Ejemplo de uso:

Código:
x = 1 + 2; # Comentario ....
.

Código:
// Comentario tipo C++

La sintaxis del comentario anterior sirve para comentarios de una sola línea.

Ejemplo de uso:
Código:
x = 1 + 2; // Comentario .... 

Código:
rem Comentario tipo Basic

La sintaxis del comentario anterior sirve para comentarios de una sola línea.

Ejemplo de uso:

Código:
x = 1 + 2; rem Comentario .... 
rem ... Otro comentario ...
.

Código:
:: Comentario tipo Batch Scripts

La sintaxis del comentario anterior sirve para comentarios de una sola línea.

Ejemplo de uso:

Código:
x = 1 + 2; :: Mi comentario ... 
::: Hola!
.
Código:
-- Comentario tipo SQL


Aún hay más características por mostrar, pueden consultarlas en mi blog:

http://leonardogtzr.wordpress.com/

Pueden descargar el código desde aquí:

https://github.com/leogtzr/yarelang-c--/archive/master.zip

Pantallazo:

Factorial de un número:



¡Saludos!
22  Foros Generales / Foro Libre / Re: ¿Qué comandos utilizáis más y cuales echáis más de menos? en: 11 Junio 2013, 03:05 am
ls, mv, cat, grep, sed.

Existe cygwin sobre windows y sino tienes una "shell" bastante completa con Powershell.
23  Programación / Programación General / Re: [Ehn-Dev 2013] - Hilo de discusión / comentarios / dudas. en: 5 Junio 2013, 03:37 am
Yo me apunto :)
24  Foros Generales / Sugerencias y dudas sobre el Foro / Re: [Sugerencia] Ehn-Dev 2013 en: 21 Mayo 2013, 08:11 am
Estaría bien, este año sí tendría algo que presentar  :rolleyes:

 ::)
25  Programación / Java / Re: [Ayuda] Como cambiar el boton del JoptionPane en: 19 Mayo 2013, 03:08 am
Investiga sobre la modad de los jdialog, en concreto el método setModal(), con eso debería bastar.

http://acercadejava.blogspot.mx/2010/07/dialogos-modales-y-no-modales-en-java.html
26  Programación / Java / Re: [Ayuda] Como cambiar el boton del JoptionPane en: 19 Mayo 2013, 02:20 am
Utiliza JDialog.
27  Programación / Programación C/C++ / Re: Se puede hacer esto ?? .. porque? en: 11 Mayo 2013, 00:46 am
Se puede, pero debería darte un warning.
28  Programación / Scripting / Re: Acciones sobre archivos de texto. [Batch] en: 6 Mayo 2013, 01:50 am
Ajá, pero pones un ejemplo ...

¿Con cuántas líneas debe salir el primer archivo? y el segundo? el tercero?

Especifícalo, no tenemos por qué estar adivinando.
29  Programación / Scripting / Re: Acciones sobre archivos de texto. [Batch] en: 6 Mayo 2013, 01:35 am
Lo hice así porque en ningún momento definiste con cuántas líneas había que crear el archivo o cuál sería el delimitador para saber cómo separar los archivos.
30  Programación / Scripting / Re: Acciones sobre archivos de texto. [Batch] en: 6 Mayo 2013, 00:52 am
Código:
@echo off
setlocal enabledelayedexpansion
set /a i=0
for /f "tokens=*" %%_ in (file.txt) do (
set /a i+=1
echo %%_ > "file_!i!.txt"
)
set /p "="

Te hacen falta unas clases de ortografía, más que de programación.

Saludos.
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 279
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines