Iniciación a la Programación
@acmupm
¡Apuntaros!
@acmupm
https://forms.gle/YsPJHht7ihCH1F8P8
Índice
1. ¿Qué es programar?
2. Tipos y variables.
3. Operadores aritméticos.
4. Lógica y condicionales.
5. Funciones. Recursión.
6. Listas indexadas: Arrays.
7. Manejo de Strings.
8. Control de flujo: for, while y switch.
@acmupm
¿Qué es programar?
@acmupm
Paradigmas de la programación
@acmupm

@acmupm
@acmupm

Java
@acmupm
Compilado / Interpretado
@acmupm
@acmupm

Tipos y variables
- Tipos
boolean, byte, short,
char, int, long,
float, double,
int[], char[]- Variables
int x = 5;
String y = "acm";

@acmupm
Tipos y variables
- Ámbito de las variables
{
int a = 0;
{
int b = 0;
{
int c = 0;
int d = 0;
} // c y d deja de ser accesible
{
int c = 0;
} // c deja de ser accesible
} // b deja de ser accesible
} // a deja de ser accesibleint i = 0;
while (...) {
int a = i++;
int b;
if (a > 5) {
b = a * 6;
} else {
int c = a * 2;
b = c - 3;
} // c deja de ser accesible
} // b deja de ser accesible@acmupm
Operadores aritméticos
Importante: en las operaciones entre números de diferentes tipos, Java siempre devuelve el resultado como el tipo más grande.
@acmupm
Operadores aritméticos
- Operadores binarios.
| Operador | Forma | Ejemplo |
|---|---|---|
| Suma | a + b | 9 + 1 = 10 |
| Resta | a - b | 6 - 9 = -3 |
| Multiplicación | a * b | 7 * 3 = 21 |
| División | a / b | 10 / 5 = 2 10 / 4 = 2 10 / 4.0 = 2.5 |
| Resto | a % b | 10 % 4 = 2 |
x += y es lo mismo que hacer x = x + y
Funciona con todos los operadores de esta tabla
@acmupm
Operadores aritméticos
- Operadores unarios.
| Operador | Forma | Ejemplo |
|---|---|---|
| Valor negado | -a | -(1 + 5) = -6 |
| Preincremento | ++a |
|
| Postincremento | a++ |
|
int x = 5;
int b = 1;
b = ++x;
//b = 6;
//x = 6;int x = 5;
int b = 1;
b = x++;
//b = 5;
//x = 6;@acmupm
Lógica
- Operaciones básicas:
| A | B | Q |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Operación AND (Y)
| A | Q |
|---|---|
| 0 | 1 |
| 1 | 0 |
Operación NOT (negación)
A
Q
@acmupm
Lógica
- Operaciones básicas:
| A | B | C |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Operación XOr (Ó exclusiva)
| A | B | Q |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Operación OR (Ó)
@acmupm
Lógica
- Lógica aplicada a Java:
1 =>
0 =>
}
Valores booleanos
| Operación | Forma | Ejemplo |
|---|---|---|
| AND | a && b | true && false = false |
| OR | a || b | true || false = true |
| XOr | a ^ b | true ^ true = false |
| NOT | !a | !false = true |
It's funny because it's true!
@acmupm
Lógica
- Lógica aplicada a Java:
| Operación | Forma | Ejemplo |
|---|---|---|
| Igualdad | a == b | 6 == 6 = true |
| Mayor | a > b | 3 > 5 = false |
| Mayor o igual | a >= b | 1 >= 1 = true |
| Menor | a < b | 5 < 1 = false |
| Menor o igual | a <= b | 1 <= 5 = true |
Estos operadores solo se pueden usar entre números, no entre booleanos!!
@acmupm
Lógica
Ejemplos:
boolean entre(int minimo, int maximo, int numero) {
return numero > minimo && numero < maximo;
}boolean esMultiplo(int numero, int posibleMultiplo) {
return posibleMultiplo % numero == 0;
}boolean esPar(int numero) {
return esMultiplo(2, numero);
}@acmupm
Lógica
- Bloques condicionales:
if (<valor booleano>) {
//<Código si el valor es true.>
} else {
// <Código si el valor es false.>
}- ó bien:
if (<valor booleano 1>) {
//Código si el valor 1 es true.
} else if (<valor booleano 2>) {
// Código si el valor 2 es true.
}
...
} else if (<valor booleano n>) {
// Código si el valor n es true.
} else {
// Código si todos los valores son false.
}@acmupm
Lógica
if (true) {
System.out.println("Verdadero!");
} else {
System.out.println("Nope!");
}
(Este if es un pelín estúpido porque la condición siempre se cumple)
Ejemplos con bloques condicionales:
if (x > 1) {
//Hacer algo si x es mayor que uno.
} else {
//Hacer otra cosa si x es menor o igual que 1.
}
if (x == 1 && y > 1) {
//Hacer algo si x es igual a 1 e y mayor que 1.
} else if (x > 1 && y < 2) {
//Hacer algo si x es mayor que 1 e y sea menor que 2.
}
@acmupm
Funciones
- Funciones:
double cos(double alpha);
int f(int x);
double g(int a, double b);@acmupm
Funciones
- Funciones en Java:
<tipo de salida> <nombre> ([<tipo param1> <nombre param1>][, <tipo param2> <nombre param2>]...) {
//Código
//...
return valor_de_salida;
}int succ(int num) {
return num + 1;
}
double max(double a, double b) {
return (a + b + Math.abs(a - b)) / 2;
}
double parabola(double a, double b, double c, double x) {
return a * x * x + b * x + c;
}@acmupm
Funciones
- Más ejemplos de funciones:
double abs(double n) {
if (n > 0) {
return n;
} else {
return -n;
}
}String graduacion(double nota) {
if (nota == 0) {
return "Subnormal";
} else if (nota < 5) {
return "Suspenso";
} else if (nota < 7) {
return "Aprobado";
} else if (nota < 9) {
return "Notable"
} else {
return "Puto amo";
}
}@acmupm
Funciones
- Función recursiva
Aquella que se llama a sí misma para devolver un valor

@acmupm
Funciones
- Función recursiva
Un ejemplo de función recursiva es el factorial:
@acmupm
Funciones
- Función recursiva
int factorial(int x) {
if (x == 1) {
return 1;
} else {
return x * factorial(x - 1);
}
}@acmupm
Listas indexadas: Arrays
Una array es una lista de elementos del mismo tipo:
- Tiene un tamaño fijo.
- Los elementos pueden estar repetidos.
0
1
2
3
Longitud: 4
Los índices de las arrays en Java comienzan en 0!!
(Por tanto, van de 0 hasta su longitud - 1)
[1, 6, 3, 45, 12, 9, 0]
Longitud: 7
0
1
2
3
4
5
6
@acmupm
Listas indexadas: Arrays
- Creación de arrays:
new tipo[tamaño]; //Crea una array del tipo y tamaño dados.
new tipo[] {e1, e2, ..., en} //Crea una array del tipo dado y con los elementos dados.//Crea una array de enteros de 10 elementos, y la guarda en la variable x
//Todos los elementos están a 0.
int[] x = new int[10];
//Crea una array de floats de tamaño 4, con los elementos: [1, 6, 9, 123]
//y la guarda en la variable y.
float[] y = new float[] {1.1f, 6.4f, 9.2f, 123.0f};
//Lo mismo que lo de arriba.
float[] z = {1.1f, 6.4f, 9.2f, 123.0f};@acmupm
Listas indexadas: Arrays
- Conocer el tamaño de una array:
//Devuelve un int que indica el tamaño de la array.
<array>.length;int[] array = new int[10];
//Guarda en 'count' el valor 10.
int count = array.length;@acmupm
Listas indexadas: Arrays
- Acceso y modificación de elementos de una array:
//Obtener un elemento de la array
<array>[<índice>];
//Establecer un elemento de la array
<array>[<índice>] = <valor>;//Crea una nueva array.
int[] array = new int[5];
array[0] = 6;
array[1] = 1;
array[4] = -8;
//Imprime el elemento 0 en la
//consola.
System.out.println(array[0]);| Índice | Valor |
|---|---|
| 0 | 6 |
| 1 | 1 |
| 2 | 0 |
| 3 | 0 |
| 4 | -8 |
Los índices de las arrays en Java comienzan en 0!!
(Por tanto, van de 0 hasta su longitud - 1)
Listas indexadas: Arrays
Ejemplo de uso de arrays:
int sumar(int[] numeros, int longitud) {
if (longitud == 0) {
return 0;
} else {
return numeros[longitud - 1] + sumar(numeros, longitud - 1);
}
}int[] numeros = {1, 5, 1, 3};
//Devuelve 10
sumar(numeros, numeros.length);Utilizamos un algoritmo recursivo para acceder a los elementos de la array y sumarlos (lo común en Java es usar bucles, pero aún no los hemos visto :P)
@acmupm
Manejo de Strings
Un String es una cadena de carácteres, invariable y con un tamaño fijo.
Internamente un String es una array de carácteres, con métodos para poder trabajar con ellos más fácilmente.
String s = "Acm Mola :P";
System.out.println(s);@acmupm
Manejo de Strings
- Funciones útiles:
| Definición | Descripción | Ejemplo |
|---|---|---|
| int length(); | Devuelve la longitud del String. | "gato".length() => 4 |
| char charAt(int index); | Devuelve el carácter en la posición dada. | "gato".charAt(3) => 'o' |
| String toUpperCase() | Devuelve un nuevo String con los carácteres del actual en mayúscula. | "acm".substring(1) => "cm" |
| String toLowerCase() | Devuelve un nuevo String con los carácteres del actual en minúscula. | "Informática".substring(3, 6) => "for" |
| boolean startsWith(String other); | Devuelve true si el string actual empieza por el dado. False de lo contrario. | "naranja".startsWith("nara") => true "naranja".startsWith("NAra") => false |
| boolean endsWith(String other); | Devuelve true si el string actual termina por el dado. False de lo contrario. | "naranja".endsWith("anja") => true |
@acmupm
Manejo de Strings
- Operador "+" con Strings:
Java permite usar el operador "+" entre Strings y entre un String y otro tipo. El resultado son ambos valores concatenados.
String x = "A" + "CM"; //x = "ACM"
x = x + 4; //x = "ACM4"
x = x + "EVAH"; //x = "ACM4EVAH"@acmupm
Manejo de Strings
- Igualdad entre Strings:
Podemos comparar dos strings usando el método .equals(String) que hemos dicho antes. Los strings en Java NO se deben comparar con ==
String a = "ACM"; // a = "ACM";
String b = "A" + "CM"; // b = "ACM";
a == b; // Devuelve false (CUIDADO!)
a.equals(b); // Devuelve true (que es lo correcto)@acmupm
Manejo de Strings
Ejemplos con Strings:
String notaString(int nota) {
return "Tu nota es de: " + nota;
}String siglasNombre(String nombre, String apellido1, String apellido2) {
String siglas = "";
//x += y es lo mismo que hacer x = x + y !
if (nombre.length() > 0) {
siglas += nombre.charAt(0);
}
if (apellido1.length() > 0) {
siglas += apellido1.charAt(0);
}
if (apellido2.length() > 0) {
siglas += apellido2.charAt(0);
}
return siglas;
}@acmupm
Control de flujo
- Bucles while:
while (<valor booleano>) {
// Código a ejecutar.
}En este tipo de bucle while, la condición se comprueba antes de ejecutar el código de dentro. Por tanto, el código de dentro puede no ejecutarse.
do {
// Código a ejecutar.
} while (<valor booleano>)En este tipo de bucle while, la condición se comprueba después de ejecutar el código de dentro. Por tanto, el código de dentro se ejecuta como mínimo una vez.
- Bucles do...while:
@acmupm
Control de flujo
- Bucles while vs. do...while:
While
Do...while
@acmupm
Control de flujo
Ejemplos con bucles while:
int sumar(int[] sumandos) {
int actual = 0;
int suma = 0;
while (actual < sumandos.length) {
suma += sumandos[actual];
}
return suma;
}int buscar(char caracter, char[] array) {
int ubicacion = -1;
int i = 0;
while (i < array.length && ubicacion == -1) {
if (array[i] == caracter) {
ubicacion = i;
}
i++;
}
return ubicacion;
}@acmupm
Control de flujo
- Bucles for:
for ([inicio]; [condición de parada]; [post]) {
//Código
}- Inicio: sentencia que se ejecuta antes de comenzar el bucle por primera vez.
- Condición de parada: valor booleano que determina si el bucle debe continuar. Se comprueba cada vez antes de entrar en el bucle.
- Post: sentencia que se ejecuta después de cada ejecución del bucle.
@acmupm
Control de flujo
- Bucles for:
@acmupm
Control de flujo
- Bucle for típico:
for (int i = 0; i < 5; i++) {
// Código
}@acmupm
Control de flujo
- Bucle while como bucle for:
for (int i = 0; i < 5; i++) {
// Código
}int i = 0;
while (i < 5) {
// Código
i++;
}.... es equivalente a ....
@acmupm
Control de flujo
Ejemplo de bucles for:
int sumar(int[] sumandos) {
int suma = 0;
for (int i = 0; i < sumandos.length; i++) {
suma += sumandos[i];
}
return suma;
}int buscar(char caracter, char[] array) {
int ubicacion = -1;
for (int i = 0; i < array.length
&& ubicacion == -1; i++) {
if (array[i] == caracter) {
ubicacion = i;
}
}
return ubicacion;
}@acmupm
Control de flujo
- Bloques switch:
switch (valor) {
case <caso_1>:
// Código
[break;]
case <caso_2>:
// Código
[break;]
...
case <caso_n>:
// Código
[break;]
[default:]
// Código
}@acmupm
Control de flujo
- Bloques switch:
int x = 5;
switch (x) {
case 1:
System.out.println("Caso 1!");
break;
case 2:
System.out.println("Caso 2!");
break;
default:
System.out.println("Otro caso");
}Salida:
Otro caso@acmupm
Control de flujo
- Bloques switch:
int x = 1;
switch (x) {
case 1:
System.out.println("Caso 1!");
case 2:
System.out.println("Caso 2!");
break;
default:
System.out.println("Otro caso");
}Salida:
Caso 1!
Caso 2!Cuidado: En un bloque switch, se ejecutan hacia abajo las instrucciones, hasta que se sale del bloque o se encuentra un break!
@acmupm
Control de flujo
Ejemplo con bloque switch:
int diasDelMes(String mes) {
int dias;
switch (mes) {
case "enero":
case "marzo":
case "mayo":
case "julio":
case "agosto":
case "octubre":
case "diciembre":
dias = 31;
break;
case "febrero":
dias = 28;
break;
default:
dias = 30;
break;
}
return dias;
}@acmupm
ESTO ES TODO
(DE MOMENTO)
@acmupm
intr_prog_acm
By devcexx
intr_prog_acm
- 964