Descargar

Lenguaje de programación para niños (página 4)

Enviado por jaimemontoya


Partes: 1, 2, 3, 4

Next

If variableenteraencontradaenlaasignacion = 1 And variablecadenaencontradaenlaasignacion <> 1 Then

arreglovariablesenteras(numeroarreglovariablesenteras) = arreglo(i – 4)

contadordevariablesenteras = contadordevariablesenteras + 1

numeroarreglovariablesenteras = numeroarreglovariablesenteras + 1

End If

If variablecadenaencontradaenlaasignacion = 1 And variableenteraencontradaenlaasignacion <> 1 Then

If (Val(provisional1) <> 0) Or (Val(provisional3) <> 0) Then

variableenteraencontradaenlaasignacion = 1

variablecadenaencontradaenlaasignacion = 1

Else

arreglovariablescadena(numeroarreglovariablescadena) = arreglo(i – 4)

contadordevariablescadena = contadordevariablescadena + 1

numeroarreglovariablescadena = numeroarreglovariablescadena + 1

End If

End If

'El For que aparece a continuación se usa también dentro del If que aparece justo después del Next que corresponde a este For. Esto debido a que este proceso debe realizarse cuando no se han inicializado variables con leer (variable), así como también cuando sí se ha hecho.

For ii As Integer = 1 To numeroarreglovariablesenteras 'Ciclo para determinar si las variables utilizadas dentro de una asignación ya han sido inicializadas o se están utilizando sin haberlas antes declarado o sin haberles dado valores.

If (provisional1 = arreglovariablesenteras(ii)) Or (Val(provisional1) <> 0) Then 'De x + y guardarlo_en a; provisional1 almacenaría x. Con esto se está comparando con cada una de las variables enteras almacenadas en el arreglo para ver si ya se ha inicializado con leer (variable) ó dándole valores.

variabledeclaradasiono1 = 1 'Cuando variabledeclaradasiono1 valga 1, entoncees las variables utilizadas en la asignación ya han sido declaradas. De lo contrario no han sido declaradas y se mandará un mensaje más adelante en el código donde se hará saber que se está utilizando una variable sin haberla declarado antes.

End If

If provisional3 = arreglovariablesenteras(ii) Or (Val(provisional3) <> 0) Then 'val(provisional3) <> 0 es para que si está poniendo un número, entonces el val(provisional3) dará el número, pero si es una letra o una cadena, el val(provisional1) dará cero. Esto para que un número no lo interprete como una variable no declarada. 'De x + y guardarlo_en a; provisional3 almacenaría y. Con esto se está comparando con cada una de las variables enteras almacenadas en el arreglo para ver si ya se ha inicializado con leer (variable) ó dándole valores.

variabledeclaradasiono2 = 1 'Cuando variabledeclaradasiono2 valga 1, entonces las variables utilizadas en la asignación ya han sido declaradas. De lo contrario no han sido declaradas y se mandará un mensaje más adelante en el código donde se hará saber que se está utilizando una variable sin haberla declarado antes.

End If

Next

'El For que aparece a continuación se usa también dentro del If que aparece justo después del Next que corresponde a este For. Esto debido a que este proceso debe realizarse cuando no se han inicializado variables con leer (variable), así como también cuando sí se ha hecho.

For ii As Integer = 1 To numeroarreglovariablescadena

If (provisional1 = arreglovariablescadena(ii)) Then 'val(provisional1) <> 0 es para que si está poniendo un número, entonces el val(provisional1) dará el número, pero si es una letra o una cadena, el val(provisional1) dará cero. Esto para que un número no lo interprete como una variable no declarada. 'De x + y guardarlo_en a; provisional1 almacenaría x. Con esto se está comparando con cada una de las variables cadena almacenadas en el arreglo para ver si ya se ha inicializado con leer (variable) ó dándole valores.

cadenavariabledeclaradasiono1 = 1 'Cuando cadenavariabledeclaradasiono1 valga 1, entoncees las variables utilizadas en la asignación ya han sido declaradas. De lo contrario no han sido declaradas y se mandará un mensaje más adelante en el código donde se hará saber que se está utilizando una variable sin haberla declarado antes.

End If

If provisional3 = arreglovariablescadena(ii) Then 'De x + y guardarlo_en a; provisional3 almacenaría y. Con esto se está comparando con cada una de las variables cadena almacenadas en el arreglo para ver si ya se ha inicializado con leer (variable) ó dándole valores.

cadenavariabledeclaradasiono2 = 1 'Cuando cadenavariabledeclaradasiono2 valga 1 , entonces las variables utilizadas en la asignación ya han sido declaradas. De lo contrario no han sido declaradas y se mandará un mensaje más adelante en el código donde se hará saber que se está utilizando una variable sin haberla declarado antes.

End If

Next

If arreglovariablesenteras(1) = "" And arreglovariablescadena(1) = "" Then

arreglovariablesenteras(numeroarreglovariablesenteras) = arreglo(i – 4)

contadordevariablesenteras = contadordevariablesenteras + 1

For ii As Integer = 1 To numeroarreglovariablesenteras 'Ciclo para determinar si las variables utilizadas dentro de una asignación ya han sido inicializadas o se están utilizando sin haberlas antes declarado o sin haberles dado valores.

If (provisional1 = arreglovariablesenteras(ii)) Or (Val(provisional1) <> 0) Then 'val(provisional1) <> 0 es para que si está poniendo un número, entonces el val(provisional1) dará el número, pero si es una letra o una cadena, el val(provisional1) dará cero. Esto para que un número no lo interprete como una variable no declarada. De x + y guardarlo_en a; provisional1 almacenaría x. Con esto se está comparando con cada una de las variables enteras almacenadas en el arreglo para ver si ya se ha inicializado con leer (variable) ó dándole valores.

variabledeclaradasiono1 = 1 'Cuando variabledeclaradasiono1 valga 1, entoncees las variables utilizadas en la asignación ya han sido declaradas. De lo contrario no han sido declaradas y se mandará un mensaje más adelante en el código donde se hará saber que se está utilizando una variable sin haberla declarado antes.

End If

If (provisional3 = arreglovariablesenteras(ii)) Or (Val(provisional3) <> 0) Then 'val(provisional3) <> 0 es para que si está poniendo un número, entonces el val(provisional3) dará el número, pero si es una letra o una cadena, el val(provisional1) dará cero. Esto para que un número no lo interprete como una variable no declarada. De x + y guardarlo_en a; provisional3 almacenaría y. Con esto se está comparando con cada una de las variables enteras almacenadas en el arreglo para ver si ya se ha inicializado con leer (variable) ó dándole valores.

variabledeclaradasiono2 = 1 'Cuando variabledeclaradasiono2 valga 1, entoncees las variables utilizadas en la asignación ya han sido declaradas. De lo contrario no han sido declaradas y se mandará un mensaje más adelante en el código donde se hará saber que se está utilizando una variable sin haberla declarado antes.

End If

Next

numeroarreglovariablesenteras = numeroarreglovariablesenteras + 1

End If

End If

If (contadordepalabrasporlinea = 3) And (arreglo(i – 1) = "guardarlo_en") Then 'Porque en 3 guardarlo_en x; hay 5 palabras, y se cambiará mediante lo que hay dentro del if a x = 3;. Se le pone también And (arreglo(i – 2) = "guardarlo_en") porque de lo contrario aun en los if, cuando hayan líneas de 3 palabras, tomaría las condiciones como si fueran asignaciones.

provisional1 = arreglo(i – 2)

arreglo(i – 2) = Strings.Right(Strings.Left(arreglo(i), Strings.Len(arreglo(i)) – 1), Strings.Len(arreglo(i)) – 1) 'Con esto se cambia 3 guardarlo_en x; a x = 3;, cambiando el elemento x; por x en otra posición del arreglo.

arreglo(i – 1) = arreglo(i – 1)

arreglo(i) = provisional1 & ";" 'Como se ha cambiado de la forma 3 guardarlo_en x; a la forma x = 3;, entonces ya con los arreglos modificados hay que poner un punto y como al final del 3 para tener x = 3; y ya queda todo listo.

arreglovariablesenteras(numeroarreglovariablesenteras) = arreglo(i – 2)

contadordevariablesenteras = contadordevariablesenteras + 1

numeroarreglovariablesenteras = numeroarreglovariablesenteras + 1

End If

End If

If arreglo(i + 1) <> "" Then

contadordepalabrasporlinea = 0 'Porque ha terminado una línea y el contador de palabras por línea debe comenzar de cero nuevamente debido a que se comenzará con una nueva línea.

End If

End If

Next

For i As Integer = 1 To contadordevariablesenteras

If arreglovariablesenteras(1) = "" And arreglovariablescadena(1) = "" Then 'El if acá sirve para que imprima la sangría cuando es necesario.

concatenardeclaraciondevariablesenteras = concatenardeclaraciondevariablesenteras & arreglovariablesenteras(i) & " " & ":" & " " & "integer;" & Chr(10)

Else

If i <> contadordevariablesenteras Then 'Si no ha llegado a la última variable del arreglo, que imprima todavía espacios de sangría al final para la siguiente variable que aparecerá declarada.

concatenardeclaraciondevariablesenteras = concatenardeclaraciondevariablesenteras & arreglovariablesenteras(i) & " " & ":" & " " & "integer;" & Chr(10) & " "

Else

concatenardeclaraciondevariablesenteras = concatenardeclaraciondevariablesenteras & arreglovariablesenteras(i) & " " & ":" & " " & "integer;" & Chr(10) 'Aquí ya no imprime los espacios de sangría, pues de lo contrario el begin aparecería con sangría en la siguiente línea.

End If

End If

Next

If arreglovariablescadena(1) <> "" Then 'Para que le de la sangría a la primera variable string que se declare, pues de lo contrario aparecería sin sangría.

concatenardeclaraciondevariablesenteras = concatenardeclaraciondevariablesenteras + " "

End If

For i As Integer = 1 To contadordevariablescadena

If arreglovariablesenteras(1) = "" And arreglovariablescadena(1) = "" Then 'El if acá sirve para que imprima la sangría cuando es necesario.

concatenardeclaraciondevariablescadena = concatenardeclaraciondevariablescadena & arreglovariablescadena(i) & " " & ":" & " " & "string;" & Chr(10)

Else

If i <> contadordevariablescadena Then 'Si no ha llegado a la última variable del arreglo, que imprima todavía espacios de sangría al final para la siguiente variable que aparecerá declarada.

concatenardeclaraciondevariablescadena = concatenardeclaraciondevariablescadena & arreglovariablescadena(i) & " " & ":" & " " & "string;" & Chr(10) & " "

Else

concatenardeclaraciondevariablescadena = concatenardeclaraciondevariablescadena & arreglovariablescadena(i) & " " & ":" & " " & "string;" & Chr(10) 'Aquí ya no imprime los espacios de sangría, pues de lo contrario el begin aparecería con sangráa en la siguiente línea.

End If

End If

Next

programa = ""

programa = "program lenguaje_para_ninos (input, output);" & Chr(10)

programa = programa & concatenardeclaraciondevariablesenteras & concatenardeclaraciondevariablescadena

For i As Integer = 1 To numerodepalabras 'Teniendo ya el arreglo de palabras, comenzamos a analizar palabra por palabra para saber si se trata de palabras reservadas o no, e ir haciendo los cambios respectivos para transformar a código Pascal.

If arreglo(i) = "inicio" Then 'inicio es el nombre de una palabra reservada.

arreglo(i) = "begin" 'begin es el nombre de la palabra cambiada.

End If

If arreglo(i) = "fin" Then

arreglo(i) = "end"

End If

If arreglo(i) = "leer" Then

arreglo(i) = "read"

End If

If arreglo(i) = "mostrar" Then

arreglo(i) = "write"

End If

If arreglo(i) = "mostrars" Then

arreglo(i) = "writeln"

End If

If arreglo(i) = "leers" Then

arreglo(i) = "readln"

End If

If arreglo(i) = "si" Then

arreglo(i) = "if"

End If

If arreglo(i) = "entonces" Then

arreglo(i) = "then"

End If

If arreglo(i) = "guardarlo_en" Then

arreglo(i) = ":="

End If

If arreglo(i) = "repetir" Then

arreglo(i) = "for"

End If

If arreglo(i) = "desde_aqui" Then

arreglo(i) = ":="

End If

If arreglo(i) = "hasta_aqui" Then

arreglo(i) = "to"

End If

If arreglo(i) = "hacer" Then

arreglo(i) = "do"

End If

If arreglo(i) = "de_lo_contrario" Then

arreglo(i) = "else"

End If

If arreglo(i) = "y_si" Then

arreglo(i) = "and"

End If

If arreglo(i) = "o_si" Then

arreglo(i) = "or"

End If

If arreglo(i) = "fin_si" Then

arreglo(i) = ";"

End If

If arreglo(i) = "leerl" Then

arreglo(i) = "read"

End If

If arreglo(i) = "leerls" Then

arreglo(i) = "readln"

End If

If arreglo(i) = "mostrarl" Then

arreglo(i) = "write"

End If

If arreglo(i) = "mostrarls" Then

arreglo(i) = "writeln"

End If

If arreglo(i) = "=" Then

arreglo(i) = ":="

End If

If arreglo(i) = "fin_repetir" Then

arreglo(i) = "end;"

End If

If Strings.Right(arreglo(i), 1) = ";" Or arreglo(i) = "begin" Or arreglo(i) = "then" Or arreglo(i) = "do" Or arreglo(i) = "end" Then

programa = programa + arreglo(i) + Chr(10) 'La variable programa es la que contiene lo que se imprimirá al final de todo.

Else

programa = programa + arreglo(i) + " " 'La variable programa es la que contiene lo que se imprimirá al final de todo.

End If

Next

If value = 1 Then 'value puede valer aleatoriamente entre 1 y 6. Si llega a valer 1 estos son los colores de la letra para el RichTextBox1 y para el RichTextBox2.

RichTextBox1.ForeColor = Color.Green

RichTextBox2.ForeColor = Color.Blue

End If

If value = 2 Then 'value puede valer aleatoriamente entre 1 y 6. Si llega a valer 2 estos son los colores de la letra para el RichTextBox1 y para el RichTextBox2.

RichTextBox1.ForeColor = Color.Purple

RichTextBox2.ForeColor = Color.Green

End If

If value = 3 Then 'value puede valer aleatoriamente entre 1 y 6. Si llega a valer 3 estos son los colores de la letra para el RichTextBox1 y para el RichTextBox2.

RichTextBox1.ForeColor = Color.Blue

RichTextBox2.ForeColor = Color.Purple

End If

If value = 4 Then 'value puede valer aleatoriamente entre 1 y 6. Si llega a valer 4 estos son los colores de la letra para el RichTextBox1 y para el RichTextBox2.

RichTextBox1.ForeColor = Color.Purple

RichTextBox2.ForeColor = Color.Blue

End If

If value = 5 Then 'value puede valer aleatoriamente entre 1 y 6. Si llega a valer 5 estos son los colores de la letra para el RichTextBox1 y para el RichTextBox2.

RichTextBox1.ForeColor = Color.Red

RichTextBox2.ForeColor = Color.Blue

End If

If value = 6 Then 'value puede valer aleatoriamente entre 1 y 6. Si llega a valer 6 estos son los colores de la letra para el RichTextBox1 y para el RichTextBox2.

RichTextBox1.ForeColor = Color.Blue

RichTextBox2.ForeColor = Color.Red

End If

RichTextBox2.Text = programa

If arreglo(1) <> "begin" Then

RichTextBox2.Text = ""

MsgBox("Debe escribir 'inicio' para comenzar el programa", MsgBoxStyle.OkOnly, "Error")

RichTextBox1.Focus()

Else

If arreglo(numero) <> "end" Then 'arreglo(numero) sería la última palabra que escribió el niño, y se le pone también lo de arreglo(numero-1) por si el niño después de haber puesto 'fin' le da uno o más enter, independientemente de los espacios si le da o no.

RichTextBox2.Text = ""

MsgBox("Debe escribir 'fin' para terminar el programa", MsgBoxStyle.OkOnly, "Error")

RichTextBox1.Focus()

Else

If arreglovariablesenteras(1) = "" And arreglovariablescadena(1) = "" Then

RichTextBox2.Text = ""

MsgBox("No ha utilizado ninguna variable en el programa", MsgBoxStyle.OkOnly, "Error")

RichTextBox1.Focus()

Else

If arreglo(numero – 1) = arreglo(numero) Then 'Para que solamente se escriba 'fin' una vez para finalizar el programa.

If arreglo(numero) = "end" Then

RichTextBox2.Text = ""

MsgBox("Para terminar el programa debe escribir 'fin' solamente una vez", MsgBoxStyle.OkOnly, "Error")

RichTextBox1.Focus()

End If

End If

End If

End If

End If

If (cadenavariabledeclaradasiono1 <> 1 And cadenavariabledeclaradasiono2 <> 1) Then 'Significa que no se ha declarado ninguna variable tipo cadena, entonces se procede a evaluar si se han usado variables cadena no declaradas.

If (variabledeclaradasiono1 <> 1 Or variabledeclaradasiono2 <> 1) And lineade5palabras = 1 And (arreglo(2) <> "read") And (arreglo(2) <> "readln") Then 'Porque si no es igual a uno la variable lineadecincopalabras significa que no hubo ninguna asignación, entonces variabledeclaradasiono1 siempre sería diferente de uno y por lo tanto todo el tiempo se estaría diciendo que se ha utilizado una variable sin haberla declarado, incluso cuando ni siquiera se haya hecho una asignación. Por lo tanto hay dos condiciones en este if para que se llegue a decir que se ha utilizado una variable sin haberla asignado antes. Si arreglo(2) es diferente de "leer", se ve que no se ha declarado variable alguna.

'If arreglovariablesenteras(1) = "" And arreglovariablescadena(1) = "" Then

RichTextBox2.Text = ""

MsgBox("Está utilizando una variable que no ha sido inicializada", MsgBoxStyle.OkOnly, "Error")

RichTextBox1.Focus()

'End If

End If

End If

If (variabledeclaradasiono1 <> 1 And variabledeclaradasiono2 <> 1) Then 'Significa que no se ha declarado ninguna variable tipo entero, entonces se procede a evaluar si se han usado variables enteras no declarados.

If (cadenavariabledeclaradasiono1 <> 1 Or cadenavariabledeclaradasiono2 <> 1) And lineade5palabras = 1 And (arreglo(2) <> "read") And (arreglo(2) <> "readln") Then 'Porque si no es igual a uno la variable lineadecincopalabras significa que no hubo ninguna asignación, entonces variabledeclaradasiono1 siempre sería diferente de uno y por lo tanto todo el tiempo se estaría diciendo que se ha utilizado una variable sin haberla declarado, incluso cuando ni siquiera se haya hecho una asignación. Por lo tanto hay dos condiciones en este if para que se llegue a decir que se ha utilizado una variable sin haberla asignado antes.

RichTextBox2.Text = ""

MsgBox("Está utilizando una variable que no ha sido inicializada", MsgBoxStyle.OkOnly, "Error")

RichTextBox1.Focus()

End If

End If

If variableenteraencontradaenlaasignacion = 1 And variablecadenaencontradaenlaasignacion = 1 Then

MsgBox("No se puede operar una letra con un número", MsgBoxStyle.OkOnly, "Error")

RichTextBox1.Focus()

RichTextBox2.Text = ""

End If

For i As Integer = 1 To contadordevariablesenteras 'Este For sirve para comparar cada una de las variables de tipo entero con cada una de las variables de tipo cadena. Si hay una o más variables que aparecen tanto en el arreglo de variables enteras como también en el arreglo de variables cadena, significa que hay ambiguedad de operadores, es decir que se ha declarado o se ha usado una misma variable tanto como cadena como también como entero, y por eso se mandará mensaje para que se corrija esa cuestión.

For ii As Integer = 1 To contadordevariablescadena

If arreglovariablesenteras(i) = arreglovariablescadena(ii) Then

ambiguedaddeoperadores = 1 'Cuando ambiguedaddeoperadores valga uno, se está usando una misma variable como cadena y como entero a la vez. De lo contrario no.

End If

Next

Next

If ambiguedaddeoperadores = 1 Then

RichTextBox2.Text = ""

MsgBox("Una misma variable no puede ser usada como Número y como Letra al mismo tiempo", MsgBoxStyle.OkOnly, "Error")

RichTextBox1.Focus()

End If

End Sub

Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)

End Sub

Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)

End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

Me.Hide()

Form4.Show()

End Sub

Private Sub ReglasDelLenguajeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ReglasDelLenguajeToolStripMenuItem.Click

Me.Hide()

Form4.Show()

End Sub

Private Sub EjemploIfToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EjemploIfToolStripMenuItem.Click

RichTextBox1.Text = "inicio" & Chr(10) & "leer (x);" & Chr(10) & "si x = 2 entonces" & Chr(10) & "3 guardarlo_en z;" & Chr(10) & "fin_si" & Chr(10) & "fin"

End Sub

Private Sub EjemploForToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EjemploForToolStripMenuItem.Click

RichTextBox1.Text = "inicio" & Chr(10) & "repetir n desde_aqui 2 hasta_aqui 5 hacer" & Chr(10) & "b + 2 guardarlo_en b;" & Chr(10) & "fin_repetir" & Chr(10) & "fin"

End Sub

Private Sub EjemploVariableNoDeclaradaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EjemploVariableNoDeclaradaToolStripMenuItem.Click

RichTextBox1.Text = "inicio" & Chr(10) & "x + y guardarlo_en x;" & Chr(10) & "fin"

End Sub

Private Sub EjemploVariableMalDeclaradaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EjemploVariableMalDeclaradaToolStripMenuItem.Click

RichTextBox1.Text = "inicio" & Chr(10) & "leer (x);" & Chr(10) & "leerl (x);" & Chr(10) & "fin"

End Sub

Private Sub EjemploSumaLetraYNúmeroToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EjemploSumaLetraYNúmeroToolStripMenuItem.Click

RichTextBox1.Text = "inicio" & Chr(10) & "leer (numero);" & Chr(10) & "leerl (letra);" & Chr(10) & "letra + numero guardarlo_en variable;" & Chr(10) & "fin"

End Sub

Private Sub EjemploLetraGuardaNúmerosToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EjemploLetraGuardaNúmerosToolStripMenuItem.Click

RichTextBox1.Text = "inicio" & Chr(10) & "leerl (a);" & Chr(10) & "leerl (b);" & Chr(10) & "a + 3 guardarlo_en b;" & Chr(10) & "fin"

End Sub

Private Sub AutoresToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AutoresToolStripMenuItem.Click

Form7.Show()

End Sub

Private Sub RichTextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)

End Sub

End Class

 

Jaime Oswaldo Montoya Guzmán

Santa Ana, 24 de noviembre de 2006

 

Partes: 1, 2, 3, 4
 Página anterior Volver al principio del trabajoPágina siguiente