-
Notifications
You must be signed in to change notification settings - Fork 3
01. Fundamentos de la programación
Es dar instrucciones precisas y ordenadas para realizar una tarea específica. En el contexto de la informática, la programación se centra en la creación de programas mediante la elaboración de algoritmos, que son secuencias de pasos definidos para que una máquina ejecute las acciones deseadas.
Los componentes fundamentales de un programa son el lenguaje de programación y los algoritmos.
Un lenguaje de programación es un sistema formal que permite a los programadores escribir una serie de instrucciones, acciones consecutivas, datos y algoritmos para resolver problemas.
Existen diferentes tipos de lenguajes de programación:
- Lenguaje máquina: Compuesto por una secuencia de dígitos binarios (0 y 1).
- Lenguajes de alto nivel: Permiten escribir código utilizando estructuras similares a los idiomas humanos. Para que estos códigos sean ejecutables, se traducen mediante traductores o compiladores. Por ejemplo: Java, Python, Ruby, C++, JavaScript, entre otros.
Los algoritmos son una serie de pasos organizados lógicamente que se utilizan para dar instrucciones a un programa y resolver problemas específicos.
El algoritmo se ejecuta de manera "secuencial", lo que significa que cada línea se ejecuta en orden, desde la declaración inicial hasta la palabra "fin".
Note
Todos los programas toman una entrada de información, lo procesan y luego dan una salida.
Palabras reservadas propias del lenguaje que sirven para un uso específico:
-
Algoritmo-> Inicio del código del programa. -
FinAlgoritmo-> Última línea del programa. -
Definir-> Declarar una variable. -
Como-> Tipo de dato.
En PSeInt, los tipos de datos que podemos utilizar incluyen: entero, real, caracter, cadena y lógico:
- Entero -> Permite guardar valores numéricos, sin decimales.
- Real -> Permite guardar valores numéricos, con decimales.
- Caracter -> Permite guardar letras, palabras, texto. También conocido como cadena de caracteres.
- Logico -> Permite guardar datos con valor de verdad (verdadero o falso).
-
Escribir-> Nos permite mostrar información por la salida del programa (función de salida).
Escribir "expresión o constante a imprimir separadas por comas"Ejemplo:
Escribir "Hola mundo! Soy", mi_nombre ,"y este es mi primer programa".-
Leer-> Función de entrada. Lee por teclado un valor que le he pedido al usuario para procesarlo dentro del programa.
Leer <variable donde quiero que se cargue el valor leído>
-
//-> Comentarios -
///-> Se usará para identificar decisiones genéricas que nos expliquen como utilizar funciones del lenguaje.
Son usadas cuando nos enfrentamos a múltiples opciones que están condicionadas por una evaluación específica.
Existen tres tipos principales de estructuras selectivas/alternativas:
- Simples: utiliza la instrucción "Si" (1 alternativa)
Si "expresión_logica" Entonces
"acciones_por_verdadero"
Fin Si- Dobles: Emplea las instrucciones "Si" y "Sino". (2 alternativas).
Si "expresión_logica" Entonces
"acciones_por_verdadero"
SiNo
"acciones_por_falso"
Fin Si- Múltiples: se desarrolla mediante instrucciones "Según" o "Si" anidado (n alternativas)
Segun `variable_numerica` Hacer
`opcion_1`:
`secuencia_de_acciones_1`
`opcion_2`:
`secuencia_de_acciones_2`
`opcion_3`:
`secuencia_de_acciones_3`
De Otro Modo:
`secuencia_de_acciones_dom`
Fin SegunNote
Los condicionales múltiples permiten tener distintas alternativas a partir de seleccionar un valor posible que tiene una expresión.
Los condicionales múltiples NO utilizan una condición lógica para resolver un problema. Usan una variable y un conjunto de valores posibles que pueden tomar esa variable.
- Mientras: primero se evalúa una condición (una expresión lógica). Si esta condición se evalúa como falsa, no se realiza ninguna acción y el programa continúa con la siguiente instrucción.
Mientras `expresion_logica` Hacer
`secuencia_de_acciones`
Fin Mientras- Hacer/Repetir - Mientras Que: El contenido del bucle se ejecuta al menos una vez.
Hacer/Repetir
`secuencia_de_acciones`
Mientras Que `expresion_logica`- Bucle Para: Permite ejecutar un conjunto de acciones para cada paso de un conjunto de elementos.
Para `variable_numérica` = `valor-inicial` Hasta `valor_final` Con Paso `paso` Hacer
`secuencia_de_acciones`
Fin Para
variable_numéricaes una variable de tipo contadorPasoes opcional y no es necesaria incluirla en el bucle. Por defecto la variación es de 1 en 1.
Note
Con el bucle para podemos predecir cuantas vueltas va a dar el bucle porque sabemos el valor inicial, el final y el paso. Bucle para es útil cuando podamos predecir la cantidad de vueltas que vamos a utilizar. Cuando no hay forma de saberlo, usamos el bucle mientras o el bucle hacer mientras
Es una característica que nos permiten los lenguajes de programación para que una estructura pueda estar dentro de otra estructura.
Variables: Permiten guardar cierto tipo de información en la memoria de la computadora y luego poder trabajar con esos valores. A las variables hay que
- Identificarlas.
- Identificar el tipo de dato.
- Inicializarla. Variable no definida: No se ha dado la instrucción para que la computadora reserve el lugar en la memoria para guardar la información. Variable no inicializada: La computadora ya reservó la memoria pero aún no tiene ningún valor.
Valor nulo: No hay valor/valor desconocido.
Valor vacío: En datos numéricos el valor vacío es el 0. "" también es un valor vacío.
Note
No utilizar palabras reservadas para los nombres de las variables.
Datos: Son la forma en la que la computadora entiende la representación de la información. - Numéricos: Enteros y reales. - Caracter - Lógico: Valor de verdad.
Expresión: combinación de operadores con variables, con constantes, con paréntesis, etc. Es una combinación de cualquier elemento que soporte el lenguaje de programación con el objetivo de obtener un resultado.
Operaciones:
- Matemáticas: Realizan cálculos.
- Relacionales: Comparan valores. Permiten operar con casi todos los tipos de datos y entregan un valor de tipo lógico.
- Lógicas: Evaluar decisiones en función de valores de verdad.
Precedencia de operadores: Conjunto de reglas que determina el orden en que se ejecutan las operaciones cuando hay paréntesis.
Un sub-programa se refiere a una porción de código dentro de un programa más grande que realiza una tarea específica.
En PSEINT, existen dos formas de implementar esta técnica:
- Las funciones: Devuelven un valor
- Los procedimientos(sub-procesos).
la diferencia entre un procedimiento y una función radica principalmente en si devuelven o no un único valor como resultado.
- Las funciones son un tipo de sub-programa. Son bloques de código que se pueden invocar múltiples veces.
- Una función debe devolver siempre un resultado, el cual puede ser de cualquier tipo de dato, pero siempre debe retornar un valor que será almacenado en la variable de retorno.
Formato general de una función:
Funcion <variable_de_retorno> <- <Nombre> ( Argumentos )
Defininr <variable_de_retorno> Como <tipo_de_dato>
// < sentencias >
Fin Funcion- Variable retorno: Donde la función almacena el resultado. Debe ser definida.
- Nombre de la función: Nombre que utilizaremos para invocar la función
- Conjunto de Parámetros (opcional): Puede tener una cantidad variable de parámetros, que permiten que el programa se comunique, enviando información a través de ellos.
Note
- Se pueden implementar diversas acciones dentro del bloque de código, pero solo se retorna el último valor almacenado en la variable creada para dicho fin.
- Los parámetros son variables en la definición de una función, mientras que los argumentos son los valores reales que se pasan a la función cuando se la invoca. La cantidad, tipo y orden de los argumentos enviados al invocar la función deben ser coherentes con los declarados en la misma.
Los parámetros son una forma de comunicación entre los programas y los subprogramas.
El resultado que devuelven las funciones se pueden utilizar:
- Directamente en cualquier expresión
- Invocarla
- Utilizarla dentro de otras funciones.
Una función es recursiva cuando se invoca a sí misma para resolver el problema que tiene que solucionar.
Es esencial que la función recursiva tenga una condición específica que permita que la recursión se detenga, conocida como "condición de base".
Es esencial considerar que los programas recursivos tienden a consumir más recursos, ya que requieren mantener una pila de llamadas. Por ende, se sugiere emplear la recursividad de manera moderada
Note
La función recursión tiene que tener alguna condición en donde la recursión se detenga, para que no se siga invocando infinitamente a sí misma (condición de base).
- Como pros, tenemos que los programas recursivos son fáciles de leer y mantener porque son cortos y a veces la técnica de recursividad es la mejor solución.
- Como contra, está que la recursión gasta más recursos porque hay que mantener la pila de llamada.
Todo programa que se escribe de forma recursiva, se puede escribir de forma no recursiva
Ejemplo:
Algoritmo FactorialRecursivo
Definir num Como Entero
Escribir "Ingrese un número:"
Leer num
Escribir "El factorial de ", num, " es ", funcionFactorial(num)
FinAlgoritmo
Funcion f <-funcionFactorial(n)
Definir f Como Entero
Si n = 0 O n = 1 Entonces
f=1 // funcion base que detiene la recursion
Sino
f= n * funcionFactorial(n - 1) // invocacion recursiva
FinSi
FinFuncionA diferencia de las funciones, los procedimientos no están obligados a retornar un valor.
SubProceso <nombre_procecimiento> ( Argumentos por Valor/Referencia )
<sentencias>
FinSubProceso- No es necesario tener una variable de retorno.
- Hay dos formas de pasar los parámetros a nuestro sub-programa: Por valor y por referencia.
- Por referencia: Tanto el programa que invocó como el programa invocado comparten una referencia en memoria.
- Por valor: Es la manera por defecto. Se realiza una copia por valor. En memoria son dos espacios distintos.
Con el paso del parámetro por referencia siempre tengo que definir una variable donde el sub-programa va a devolver el resultado.
- Referencia en memoria: Si dentro de un sub-programa modifico el valor del parámetro, también se modifica en memoria la misma posición del programa que invocó (Se comporta como u parámetro de entrada/salida)
- Ámbito/Scope: Lugar donde una variable habita y puede ser utilizada.
- Pila de llamada: Es la apilación de llamadas/invocaciones
Estructura que nos permite asociarle a una variable un conjunto de valores finitos que son siempre del mismo tipo.
Un array o arreglo es un conjunto finito y ordenado de elementos homogéneos.
Un arreglo es una estructura que permite guardar múltiples valores de un mismo tipo.
Los arreglos pueden tener múltiples dimensiones, aunque en la práctica se utilizan comúnmente en una o dos dimensiones. En este contexto, se les denomina vectores o matrices, según corresponda.
Note
Los arreglos, una vez se define el tamaño que va a tener el vector no se puede redimensionar (son estáticos). Y todos los valores son del mismo tipo.
Se representa gráficamente como una única fila con N columnas.
Consiste en una secuencia de elementos, dispuestos uno detrás del otro, y posee las siguientes características:
- Se identifica por un único nombre de variable.
- Sus elementos se almacenan en posiciones dentro del vector, cada una asociada a un subíndice.
- Se puede acceder a cada uno de sus elementos mediante su subíndice, ya sea de manera ordenada o aleatoria.
- Su tamaño es finito, lo que implica que una vez que se define, no puede cambiar.

Elemento: Cada uno de los vectores que puede guardar un vector. Índice/Subíndice: Permite leer cada uno de los elementos del vector.
Un vector se representa como una única fila por N columnas. Donde N es el tamaño del vector.
Para declarar un vector en PSInt:
Dimension nombre_variable(tamaño)
Definir nombre_variable tipoTenemos un índice para identificar las filas y un indice para identificar las columnas.
Una matriz puede concebirse como una colección de vectores organizados en filas y columnas. Está compuesta por elementos del mismo tipo, donde el orden de dichos elementos es crucial y se requiere la especificación de dos subíndices para identificar cada elemento en la estructura.
Matriz unidimensional = Se compone una sola columna de datos. Matriz bidimensional = Se compone de filas y columnas.

En la notación estándar, generalmente el primer subíndice indica la fila del arreglo, mientras que el segundo subíndice denota la columna.

En los arreglos multidimensionales el tamaño se calcula multiplicando la cardinalidad de cada dimensión.
Cardinalidad: Indica el largo de los índices/dimensiones del arreglo (cantidad de filas y columnas).
Ejemplo:
X[2,3] -> La primer dimensión tiene una cardinalidad 2 y la segunda tiene una cardinalidad de 3.
Tamaño = 2 x 3 = 6
En este caso la matriz puede almacenar 6 elementos.
Para recorrer los elementos de una matriz se necesitará un bucle por cada dimensión, lo que permitirá recorrer todos los elementos.

Note
La dimensión de un arreglo se puede determinar por la cantidad de índices necesarios para acceder a un elemento del arreglo.
Funciona revisando cada elemento de la lista que va a ser ordenada con el siguiente, intercambiándolos de posición si están en el orden equivocado. Es necesario revisar varias veces toda la lista hasta que no se necesiten más intercambios, lo cual significa que la lista está ordenada
Proceso burbuja
Dimension vector[20];
Definir vector Como Entero;
Definir i,j,k,aux Como Entero;
Escribir "ordenar los numeros de un vector de forma ascendente.";
Para i<-0 Hasta 19 Con Paso 1 Hacer
Escribir "ingrese el siguiente numero: ";
Leer vector[i];
FinPara
Para j<-1 Hasta 19 Hacer
Para k<-0 Hasta 19-j Hacer
Si vector[k] > vector[k+1] Entonces
aux <- vector[k];
vector[k]<-vector[k+1];
vector[k+1]<-aux;
FinSi
FinPara
FinPara
Para i<-0 hasta 19 Hacer
Escribir "posicion ",i," es: ",vector[i];
FinPara
FinProcesoEl algoritmo de ordenación por selección procede encontrando el mayor elemento del vector e intercambiando su posición con el último elemento.
Proceso seleccion2
Dimension vector[10];
Definir vector Como Entero;
Definir i, c, aux, min Como Entero;
Escribir "Ordenar los números de un vector.";
Para i <- 0 Hasta 9 Hacer
Escribir "Ingrese el siguiente número: ";
Leer vector[i];
FinPara
// Comparaciones posibles son n-1, que serían 9. Por lo que se itera desde la posición 0 hasta la 8.
Para i <- 0 Hasta 8 Hacer
min <- i;
Para c <- i+1 Hasta 9 Hacer
Si vector[min] > vector[c] Entonces
min <- c; // Se le asigna la posición de C, que sería la posición del número más pequeño, hasta ese momento.
FinSi
FinPara
aux <- vector[i];
vector[i] <- vector[min];
vector[min] <- aux;
FinPara
Para i <- 0 Hasta 9 Hacer
Escribir "Posición ", i, " es: ", vector[i];
FinPara
FinProcesoInicialmente se tiene un solo elemento, que obviamente es un conjunto ordenado. Después, cuando hay k elementos ordenados de menor a mayor, se toma el elemento k+1 y se compara con todos los elementos ya ordenados, deteniéndose cuando se encuentra un elemento menor.
Proceso porInsercion
Dimension vector[10];
Definir vector Como Entero;
Definir i, j, aux Como Enteros;
Escribir "Ordenar los números de un vector.";
Para i <- 0 Hasta 9 Con Paso 1 Hacer
Escribir "Ingrese el siguiente número: ";
Leer vector[i];
FinPara
// Ordenamiento por inserción
Para i <- 0 Hasta 9 Con Paso 1 Hacer
aux <- vector[i]; // El valor del elemento actual.
j <- i - 1; // j es el índice del elemento inmediatamente anterior a i.
Mientras (j >= 0) Y (vector[j] > aux) Hacer
vector[j + 1] <- vector[j];
j <- j - 1;
FinMientras
vector[j + 1] <- aux;
FinPara
Para i <- 0 Hasta 9 Hacer
Escribir "Posición ", i, " es: ", vector[i];
FinPara
FinProceso