diff --git a/README.md b/README.md
index a80d2f6..395bac9 100644
--- a/README.md
+++ b/README.md
@@ -1,1108 +1,4 @@
-# Índice
-- [Intro](#1-intro)
-- [Sentencias de control](#2-sentencias-de-control)
-- [Arrays](#3-arrays)
-- [Cadenas de carácteres](#4-cadenas-de-caracteres)
-- [Estructuras](#5-estructuras)
-- [Funciones](#6-funciones)
-- [Ejercicios](#ejercicios)
-
-
-# Curso de lenguaje C
-
-En estos repositorios dejo algunas prácticas que hice con el latín de los lenguajes de programación. No todo es perfecto, pero en su momento lo hice con mucho cariño.
-
-Los ejercicios y apuntes los tome en clases de Juantxi Rodríguez (juantxiacademiahiperion@gmail.com)
-
-Estos son los **Apuntes de Lenguaje C**:
-
-# **1. Intro**
-## **1.1 De interés**
-Lenguajes más usados según tiobe:
-
-## **1.2 Guías**
-Guía:
-
-w3school
-
-Codeforwin
-
-Documentación:
-
-Chuleta:
-
-## **1.3 Documentación concreta**
-Lista de funciones: [https://es.wikipedia.org/wiki/Anexo:Funciones_de_la_biblioteca_est%C3%A1ndar_de_C](https://es.wikipedia.org/wiki/Anexo:Funciones_de_la_biblioteca_estándar_de_C)
-
-Lista de todas las especificaciones de formato:
-
-## **1.4 Notas**
-
-Lenguaje C → Estructurado
-
-Java → orientado a objetos
-
-C++ → orientado a objetos
-
-C# → orientado a objetos
-
-
-Windows
-
-` `Dev C++
-
-` `CodeBlocks
-
-Mac
-
-` `Clion
-
-` `Xcode
-
-Linux
-
-` `Línea de comandos
-
-` `nano
-
-` `gedit
-
-./ ….
-
-gcc
-
-![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.001.png)
-
-
-Variables
-
-` `Numéricos.
-
-` `Enteros int shoert long
-
-` `Reales float double
-
-` `Otros tipos
-
-` `byte
-
-` `Caracter char
-
-
-\* → Puntero. Tipo de dato que almacena una dirección de memoria.
-
-
-
-Constantes
-
-` #define NOMBRE valor`
-
-`nombre = valor; `
-
-`int numero1;`
-
-
-Definición:
-
-` `tipo nombre ;
-
-
-nombre: No puede empezar por un número. No puede estar reservado
-
-La diferencia principal entre constante y variable es que una constante no se puede modificar una vez se define, mientras que una variable sí.
-
-Especificadores de formato:
-
-`%d` → entero
-
-`%f` → reales
-
-`%c` → 1 carácter
-
-`%s` → cadenas de caracteres
-
-Allá donde veas un `&` se trata de una dirección de memoria.
-
-Asignación `=`
-
-Aritmético `+ - * / %`
-
-Relacionales `== != > < >= <=`
-
-Lógicos `! NOT && AND || OR`
-
-
-
-Crear un programa en C que pida al usuario dos números enteros y nos muestre por pantalla su suma, su diferencia, su producto y la división del primero entre el segundo.
-
-pide2NumerosYCalcula.c
-
-![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.002.png)
-
-He hecho otro programa que compara 3 números e indica el valor mayor [ compara3Numeros.c ], pero no tiene bien la estructura de control. Si pones una letra no da error sino que dice un resultado extraño:
-
-![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.003.png)
-
-# **2. Sentencias de control**
-## **2.1 Condicionales**
-### **2.1.1.** ***if***
-```
- if(expresión){
-
- }else{
-
- }
-```
-### **2.1.2.** ***if-else (anidadas)***
-```
- if(expresión){
-
- }else if{
-
- }else{
-
- }
-```
-
-### **2.1.3** ***switch***
-```
- case
- switch(){
- case ___:
-
- break;
- case ___:
-
- break;
- default:
-
- }
-```
-
-Siempre tendrá valores constantes, no se pueden usar operadores. El switch se utiliza mucho para menus.
-
-
-Para introducir funciones de operaciones aritméticas se debe invocar:
-```
- #include
-```
-y cuando se compila se debe poner la opción -lm
-
-Ejemplo de switch:
-```
-#include
-#include
-
-int main(){
-/* Variables */
-int menu, num1, num2;
-float potencia;
-
-/* Solicitamos valores para las variables */
-printf("\nIntroduce el primer numero para operar\n");
-scanf("%d", &num1);
-printf("\nIntroduce el segundo numero para operar\n");
-scanf("%d", &num2);
-
-/* Elegir opción */
-printf("\nIntroduce una opción del 1 al 5: ");
-printf("\n1 Suma ");
-printf("\n2 División");
-printf("\n3 diferencia");
-printf("\n4 producto");
-printf("\n5 potencia\n");
-
-scanf("%d", &menu);
-
-/* Condicional case para seleccionar el número mayor */
-switch (menu) {
-
- case 1:
- printf("\nEl resultado de la suma es: %d\n", num1+num2);
- break;
-
- case 2:
- printf("\nEl resultado de la división es: %d\n", num1/num2);
- break;
-
- case 3:
- printf("\nEl resultado de la resta es: %d\n", num1-num2);
- break;
-
- case 4:
- printf("\nEl resultado de la multiplicación es: %d\n", num1\*num2);
- break;
-
- case 5:
- potencia=pow(num1, num2);
- printf("\nEl resultado de la división es: %f\n", potencia);
- break;
-
- default:
- printf("\nNo es un valor correcto\n\n");
-}
-}
-```
-Para la potencia se usa la función pow de la biblioteca math
-
-funciones de la biblioteca math.h en C:
-## **2.2 Repetitivas**
-### **2.2.1** ***for → Desde***
-```
-for (init; condition; increment){
-
- Instrucción 1;
- Instrucción 2;
- …
- …
- Instrucción 3;
-}
-```
-### **2.2.2** ***while → mientras***
-```
-While (condition){
- statement(s);
- Incrementation;
-}
-```
-
-### **2.2.3** ***do-while → repetir mientras***
-```
-do {
- statement(s);
-}while( condition );
-```
-### Notas
-
-**Main:**
-
-` void main (void)` [turbo C]
-
-` int main (void)` Si devuelve 0 la ejecución correcta
-
-` return 0;` Si no está es como si estuviera
-
-` int main(int argc, char \*argv[])` Para recibir argumentos
-
-` int argc` n.º de argumentos que tiene el programa
-
-` char \*argv[]` Los propios argumentos
-
-
-**Especificadores de formato:**
-
-`%d %i` → entero
-
-`%f` → reales
-
-`%c` → 1 carácter
-
-`%s` → cadenas de caracteres
-
-Más info:
-
-
-**Funciones `stdlib.h`**
-
-`atoi` - Esta función devuelve el número integral convertido como un valor int. Si no se ha podido realizar una conversión válida, devuelve cero.
-
-`Itoa` - convierte el tipo de datos int en tipo de datos string. La sintaxis de esta función es la siguiente
-```
- char \* itoa ( int valor, char \* str, int base );
-```
-### **2.2.4 Bucles ¿Conozco de antemano cuántas veces se va a repetir?**
-
-**Si lo sabemos** → `for` . También para recorrer arrays. Se maneja con un índice que suele ser `int i`
-
-inicio → condición → paso
-```
- for (inicio; condición; paso){
- - - - - - - - -
-}
-```
-```
-for(i=1;i<100;i++){
- printf(“%d “. i”);
-}
-```
-
-
-
-
-
-
-**No lo sabemos** → Podemos elegir entre:
-
-- `while` - 1º evalúa y después pide
-
-- `do while` – al menos se ejecuta una vez. 1º pide después evalúa. Se usa en menús
-
-
-
-### Ejercicio
-Pedir al usuario dos enteros y sacar por pantalla todos los números pares entre el más pequeño y el más grande.
-```
-#include
-
-int main (){
-
-int num1, num2, menor, mayor, i;
-
-printf("\nIntroduce un número donde empieza el conteo de pares: ");
-
-scanf("%d", &num1);
-
-printf("\nIntroduce un número para finalizar el conteo de pares: ");
-
-scanf("%d", &num2);
-
-if(num1
-
-int main (){
-
-int num;
-
-int suma=0;
-
-float media;
-
-int contador=0;
-
-printf("\nSi el número que introduces es par");
-
-do{
-
-printf("\nIntroduce un número: ");
-
-scanf("%d", &num);
-
-suma=suma+num;
-
-contador++;
-
-} while (num%2==0);
-
-media=(float)suma/contador;
-
-printf("%f ",media);
-
-}
-```
-
-Conversión binario
-
-
-
-
-Ejercicio 1: Programa que pida números al usuario hasta que este introduzca un número que sea primo.
-```
-#include
-
-int main (){
-
-// Variables
-
-int numero=0;
-
-int divisores=0;
-
-int primo=0; // primo = 0 no primo = 1
-
-// Solicitar numero entero hasta valor -1
-
-do
-
-{
-
-printf("\nIntroduce un número, si es primo se cerrará el programa: ");
-
-scanf(" %d",&numero);
-
-if(numero!=-1 && numero>0)
-
-{
-
-// el numero es mayor que 0, comprobar si es primo
-
-primo=0;
-
-divisores=2;
-
-while(divisoresCaptura de esbozo de Juantxi Rodríguez
-
-## **3.3 Buscar un elemento**
-
-```
-for(i=o; iCaptura a la pantalla de Juantxi Rodríguez
-
-Un return 0 significa que todo ha ido bien.
-
-Cuando el valor es otro significa que no ha ido bien.
-## **3.5 Array bidimensionales - matrices**
-
-Anteriormente hemos visto los unidimensionales
-
-` `unidimensionales → vectores
-
-` `bidimensionales → matrices
-
-`matriz [filas] [columnas]`
-
-Ejemplo
-
- int m1[3] [4]
-
-
-
-
-```
-m1[0][2]=12;
-```
-```
-m1[1] [3]=22;
-```
-```
-m1[2] [0]=14;
-```
-
-
-
-Para darle valor a las posiciones hay que usar un doble bucle.
-
-` `Un for externo para las filas
-
-` `Un for interno para las columnas
-```
-for(i=0; iCaptura de bosquejo de Juantxi Rodríguez
-
-# **4. Cadenas de caracteres**
-Parecido a los arrays.
-
-Estructura de datos chav \0
-
-que termina en un carácter dinal
-
-‘’ 1 carácter
-
-“” cadenas
-
-`char cadena[n]`
-
-Podremos usar todas las opciones de la librería:
-
- #include
-
-`String` → Cadena de caracteres
-
-Ejemplo:
-```
-char cadena[50];
-
-printf(“\nIntroduce una cadena: ”);
-
-fflush(stdin);
-```
-Tenemos 3 vías para almacenar en el char:
-```
-scanfc(“%s”, cadena); ##### sin & porque ya tiene la cadena |||| La más fácil pero la más insegura
-```
-```
-gets(cadena); ###### Da problemas en Mac y Linux.
-```
-```
-Scanf(“%[^\n]”, cadena);
-```
-![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.014.png)
-
-
-![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.015.png)
-
-strlen → Longitud de cadenas
-
-strcmp → Comparar cadenas
-
-strcpy → Asignar una cadena a otra
-
-
-## **4.1 strlen**
-
-`int strlen(char\*cad);` → int longitud;
-```
-…
-longitud=strlen(cadena3);
-printf(“\n …… ”, longitud);
-printf(“\n ….. ”,strlen(cadena));
-```
-
-
-## **4.2 strcmp**
-String comparar
-
-`int strcmp(char\*cad1, char\*cad2);`
-
-Resultados:
-
-` `0 sin iguales
-
-` `<0 cad1 es anterior a cad2
-
-` `>0 cad2 es anterior a cad1
-```
-if (strcmp(cadena2,cadena3)==0){
-` `printf(“\n son iguales”);
-}else{
-` `printf(“\n no son iguales”);
-}
-```
-
-## **4.3 strcpy**
-String copy
-
-`char cadena1[5];`
-
-`char cadena2[50];`
-
-A cadena1 asignarle el contenido de cadena2.
-```
-cadena1=cadena2 X
-```
-```
-strcpy(cadena1, cadena2);
-```
-` `destino origen
-
-Sigue la misma nomenclatura de lo anteriormente visto:
-
-`Numero=20;`
-
-
-## **4.4 strrev**
-String reverse
-
-**Ejercicio**:
-
-Programa en C que pida al usuario 2 cadenas de 100 caracteres y les cargue información. Después
-
-- las muestra
-- indicará la longitud de cada una
-- indicará si son iguales entre ellas o no
-- copia el contenido de la primera en la segunda y mostrar de nuevo ambás.
-```
-#include
-#include
-#include
-
-int main(){
- /* Variables */
- char cadena1[100];
- char cadena2[100];
- int longitud;
-
- printf("\nintroduce la primera cadena: ");
- fflush(stdin);
- scanf("%[^\n]", cadena1);
-
-fflush(stdin);
- printf("\nintroduce la segunda cadena: ");
- fflush(stdin);
- scanf("%[^\n]", cadena2);
- /* Mostrar */
- printf("\nCadena 1: %s", cadena1);
- printf("\nCadena 2: %s", cadena2);
-
- /* indicará la longitud de cada una */
- longitud=strlen(cadena1);
- printf("\nLa Cadena 1 mide: %d", longitud);
-
- longitud=strlen(cadena2);
-
- printf("\nLa Cadena 2 mide: %d", longitud);
-
- /* indicará si son iguales entre ellas o no */
-
- if (strcmp(cadena1,cadena2)==0){
- printf("\n son iguales");
- }else{
- printf("\n no son iguales");
- if(strcmp(cadena1, cadena2)<0){
- printf("\nCadena 1 es alfabeticamente anterior a cadena2");
- }else{
- printf("\nCadena 2 es alfabeticamente anterior a cadena 1");
- }
- }
-
- /* copia el contenido de la primera en la segunda y mostrar de nuevo ambás.*/
-
- strcpy(cadena2,cadena1);
-
- printf("\nCadena 1: %s", cadena1);
-
- printf("\nCadena 2: %s", cadena2);
-
-}
-```
-
-# **5. Estructuras**
-Son los tipos de datos definidos por el desarrollador.
-
-Persona
-
-Nombre → cad 50
-
-edad → entero
-
-email → cad 50
-
-altura → real
-
-Al principio del programa haremos una definición (No la variable).
-```
-struct persona{
- char nombre[50];
- int edad;
- char email[50];
- float altura;
-};
-```
-Cada uno de los datos se llaman miembro (o también llamado campo).
-
-Después se deben declarar las variables.
-
-`struct persona p1;`
-
-Para darle valor a cada uno de los campos hay que hacerlo uno a uno. Puede ser desordenado.
-
-Utilizamos el operador `.`
-
-El operador `.` se conoce como acceso a miembro de una estructura
-
-
-Ejemplo:
-
-![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.016.png)
-
-![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.017.png)
-
-## **5.1 Estructuras anidadas**
-Para definir fecha se podría anidar dentro de la estructura otra estructura.
-
-![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.018.png)
-
-Para acceder habría que poner las estructura anidada
-
-![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.019.png)
-
-# **6. Funciones**
-
-Si decidimos hacer nuestras propias funciones
-
-1. Prototipo → resumen
-
-"dato devuelto" "nombre" "(argumentos)"
-
-
-
-Los argumentos pueden ser varios
-
-
-
-
-
-1. Desarrollo de la función. Definición → Bloque de código
-
-Es el cuerpo del código
-
-
-3. Llamada (invocación al código)
-
-
-
-
-Las funciones sirven para encapsular el código y para reutilizar el código
-
-Propósitos:
-
-- Modularización del código. Encapsular, mejora la visibilidad,
-- Reutilización. No repetir la escritura del código, reutilizar el mismo. Cuanto más se programe, menos se tenga que programar.
--
-# EJERCICIOS
-## **Funciones para el tres en raya**
-
-- Comprobar si gana el jugador 1 → Pueden devolver 0 si no ha ganado o 1 si ha ganado
-- Comprobar si gana el jugador 2 → Pueden devolver 0 si no ha ganado o 1 si ha ganado. (Debe recibir como argumento matriz y carácter que defina el jugador)
-- Empate
-- Mostrar el tablero → `void`
-
-Habría que pasar la matriz como argumento.
-
-Probamos meter como argumento una matriz.
-
-Solo se necesita indicar las columnas de la matriz: void cargar(int m[][COLUMNAS])
-
-
-
-Un puntero es un tipo de variable capaz de almacenar una dirección de memoria.
-
-` `Se suele decir que apunta a una dirección de memoria. Apunta a una variable o a una zona de memoria reservada.
-
-Los vectores dinámicos reservan espacio de memoria para definir en la ejecución. Los punteros posibilitan hacer las matrices dinámicas.
-
-
-
-El nombre de una array o de una cadena de caracteres es de por sí un puntero al primer elemento del array o de la cadena.
-
-Los punteros permiten:
-
-- arrays dinámicos
-- estructuras dinámicas → Listas enlazadas
-
-## **Hundir la flota**
-
-
-
-## **Arrays de estructuras.**
-(Examen de uni)
-
-
-
-Funciona igual que un array teniendo en cuenta que cada posición es del tipo definido por nosotros.
-
-Por ejemplo, si queremos almacenar en un array una agenda de contacto. De cada contacto tendremos:
-
-- Nombre – Cadena de 60
-- Teléfono – Cadena de 15
-- Edad – Entero
-
-En nuestra agenda habrá espacio para un máximo de 100 contactos.
-
-
-
-```
-#define MAX 100 /* Nos sirve para definir el tamaño. */
-
-int main (){
- struct contacto {
- char nombre[60];
- char telefono[15];
- int edad;
- }
- // tipo nombre [Tamaño]
- struct contacto agenda [MAX];
-}
-```
-Para acceder a los datos se hace con el operador .
-
-. Se llama acceso a miembro de una estructura
-```
-agenda[1].nombre
-
-agenda[1].telefono
-
-agenda[1].edad
-```
-
-## Menú
-
-1 Cargar datos
-
-2 Mostrar datos
-```
-#include
-#include
-
-#define MAX 3
-
-struct contacto {
- char nombre[60];
- char telefono[15];
- int edad;
-};
-
-int main (){
-
- // Defino variables
- int menu;
- int i;
-
- // tipo nombre [Tamaño]
- struct contacto agenda [MAX];
-
- //elabora un menú con estas opciones: 1. cargar 2. mostrar 0 . salir
- do{
- printf("\nMenú");
- printf("\n1 Cargar agenda");
- printf("\n2 Mostrar agenda");
- printf("\n0 Salir\n");
- printf("\nIntroduce una opción reseñada: ");
-
- fflush(stdin);
- scanf("%d", &menu);
-
- switch(menu){
-
- case 1:
- for(i=0; i
+
+## **1.2 Guías**
+Guía:
+
+w3school
+
+Codeforwin
+
+Documentación:
+
+Chuleta:
+
+## **1.3 Documentación concreta**
+Lista de funciones: [https://es.wikipedia.org/wiki/Anexo:Funciones_de_la_biblioteca_est%C3%A1ndar_de_C](https://es.wikipedia.org/wiki/Anexo:Funciones_de_la_biblioteca_estándar_de_C)
+
+Lista de todas las especificaciones de formato:
+
+## **1.4 Notas**
+
+Lenguaje C → Estructurado
+
+Java → orientado a objetos
+
+C++ → orientado a objetos
+
+C# → orientado a objetos
+
+
+Windows
+
+- Dev C++
+- CodeBlocks
+
+Mac
+
+- Clion
+- Xcode
+
+Linux
+
+- Línea de comandos
+- nano
+- gedit
+
+./ ….
+
+gcc
+
+![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.001.png)
+
+
+Variables
+
+- Numéricos
+- Enteros int shoert long
+- Reales float double
+- Otros tipos
+- byte
+- Caracter char
+
+\* → Puntero. Tipo de dato que almacena una dirección de memoria.
+
+
+Constantes
+
+`#define NOMBRE valor`
+
+`nombre = valor; `
+
+`int numero1;`
+
+
+Definición:
+
+- tipo nombre ;
+
+nombre: No puede empezar por un número. No puede estar reservado
+
+La diferencia principal entre constante y variable es que una constante no se puede modificar una vez se define, mientras que una variable sí.
+
+Especificadores de formato:
+
+`%d` → entero
+
+`%f` → reales
+
+`%c` → 1 carácter
+
+`%s` → cadenas de caracteres
+
+Allá donde veas un `&` se trata de una dirección de memoria.
+
+Asignación `=`
+
+Aritmético `+ - * / %`
+
+Relacionales `== != > < >= <=`
+
+Lógicos `! NOT && AND || OR`
+
+
+
+Crear un programa en C que pida al usuario dos números enteros y nos muestre por pantalla su suma, su diferencia, su producto y la división del primero entre el segundo.
+
+pide2NumerosYCalcula.c
+
+![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.002.png)
+
+He hecho otro programa que compara 3 números e indica el valor mayor [ compara3Numeros.c ], pero no tiene bien la estructura de control. Si pones una letra no da error sino que dice un resultado extraño:
+
+![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.003.png)
+
+# **2. Sentencias de control**
+## **2.1 Condicionales**
+### **2.1.1.** ***if***
+```
+if(expresión){
+
+}else{
+
+}
+```
+### **2.1.2.** ***if-else (anidadas)***
+```
+if(expresión){
+
+}else if{
+
+}else{
+
+}
+```
+
+### **2.1.3** ***switch***
+```
+ case
+switch(){
+case ___:
+
+ break;
+case ___:
+
+ break;
+default:
+
+}
+```
+
+Siempre tendrá valores constantes, no se pueden usar operadores. El switch se utiliza mucho para menus.
+
+
+Para introducir funciones de operaciones aritméticas se debe invocar:
+```
+#include
+```
+y cuando se compila se debe poner la opción -lm
+
+Ejemplo de switch:
+```
+#include
+#include
+
+int main(){
+/* Variables */
+int menu, num1, num2;
+float potencia;
+
+/* Solicitamos valores para las variables */
+printf("\nIntroduce el primer numero para operar\n");
+scanf("%d", &num1);
+printf("\nIntroduce el segundo numero para operar\n");
+scanf("%d", &num2);
+
+/* Elegir opción */
+printf("\nIntroduce una opción del 1 al 5: ");
+printf("\n1 Suma ");
+printf("\n2 División");
+printf("\n3 diferencia");
+printf("\n4 producto");
+printf("\n5 potencia\n");
+
+scanf("%d", &menu);
+
+/* Condicional case para seleccionar el número mayor */
+switch (menu) {
+
+ case 1:
+ printf("\nEl resultado de la suma es: %d\n", num1+num2);
+ break;
+
+ case 2:
+ printf("\nEl resultado de la división es: %d\n", num1/num2);
+ break;
+
+ case 3:
+ printf("\nEl resultado de la resta es: %d\n", num1-num2);
+ break;
+
+ case 4:
+ printf("\nEl resultado de la multiplicación es: %d\n", num1\*num2);
+ break;
+
+ case 5:
+ potencia=pow(num1, num2);
+ printf("\nEl resultado de la división es: %f\n", potencia);
+ break;
+
+ default:
+ printf("\nNo es un valor correcto\n\n");
+}
+}
+```
+Para la potencia se usa la función pow de la biblioteca math
+
+funciones de la biblioteca math.h en C:
+## **2.2 Repetitivas**
+### **2.2.1** ***for → Desde***
+```
+for (init; condition; increment){
+
+ Instrucción 1;
+ Instrucción 2;
+ …
+ …
+ Instrucción 3;
+}
+```
+### **2.2.2** ***while → mientras***
+```
+While (condition){
+ statement(s);
+ Incrementation;
+}
+```
+
+### **2.2.3** ***do-while → repetir mientras***
+```
+do {
+ statement(s);
+}while( condition );
+```
+### Notas
+
+**Main:**
+
+`void main (void)` [turbo C]
+
+`int main (void)` Si devuelve 0 la ejecución correcta
+
+`return 0;` Si no está es como si estuviera
+
+`int main(int argc, char \*argv[])` Para recibir argumentos
+
+`int argc` n.º de argumentos que tiene el programa
+
+`char \*argv[]` Los propios argumentos
+
+
+**Especificadores de formato:**
+
+`%d %i` → entero
+
+`%f` → reales
+
+`%c` → 1 carácter
+
+`%s` → cadenas de caracteres
+
+Más info:
+
+
+**Funciones `stdlib.h`**
+
+`atoi` - Esta función devuelve el número integral convertido como un valor int. Si no se ha podido realizar una conversión válida, devuelve cero.
+
+`Itoa` - convierte el tipo de datos int en tipo de datos string. La sintaxis de esta función es la siguiente
+```
+char \* itoa ( int valor, char \* str, int base );
+```
+### **2.2.4 Bucles ¿Conozco de antemano cuántas veces se va a repetir?**
+
+**Si lo sabemos** → `for` . También para recorrer arrays. Se maneja con un índice que suele ser `int i`
+
+inicio → condición → paso
+```
+for (inicio; condición; paso){
+ - - - - - - - -
+}
+```
+```
+for(i=1;i<100;i++){
+ printf(“%d “. i”);
+}
+```
+
+
+
+
+
+
+**No lo sabemos** → Podemos elegir entre:
+
+- `while` - 1º evalúa y después pide
+
+- `do while` – al menos se ejecuta una vez. 1º pide después evalúa. Se usa en menús
+
+
+
+### Ejercicio
+Pedir al usuario dos enteros y sacar por pantalla todos los números pares entre el más pequeño y el más grande.
+```
+#include
+
+int main (){
+
+int num1, num2, menor, mayor, i;
+
+printf("\nIntroduce un número donde empieza el conteo de pares: ");
+
+scanf("%d", &num1);
+
+printf("\nIntroduce un número para finalizar el conteo de pares: ");
+
+scanf("%d", &num2);
+
+if(num1
+
+int main (){
+
+ int num;
+
+ int suma=0;
+
+ float media;
+
+ int contador=0;
+
+ printf("\nSi el número que introduces es par");
+
+ do{
+
+ printf("\nIntroduce un número: ");
+
+ scanf("%d", &num);
+
+ suma=suma+num;
+
+ contador++;
+
+ } while (num%2==0);
+
+ media=(float)suma/contador;
+
+ printf("%f ",media);
+
+}
+```
+
+Conversión binario
+
+
+
+
+Ejercicio 1: Programa que pida números al usuario hasta que este introduzca un número que sea primo.
+```
+#include
+
+int main (){
+
+ // Variables
+
+ int numero=0;
+
+ int divisores=0;
+
+ int primo=0; // primo = 0 no primo = 1
+
+ // Solicitar numero entero hasta valor -1
+
+ do
+
+{
+
+printf("\nIntroduce un número, si es primo se cerrará el programa: ");
+
+scanf(" %d",&numero);
+
+if(numero!=-1 && numero>0)
+
+{
+
+ // el numero es mayor que 0, comprobar si es primo
+
+ primo=0;
+
+ divisores=2;
+
+ while(divisoresCaptura de esbozo de Juantxi Rodríguez
+
+## **3.3 Buscar un elemento**
+
+```
+for(i=o; iCaptura a la pantalla de Juantxi Rodríguez
+
+Un return 0 significa que todo ha ido bien.
+
+Cuando el valor es otro significa que no ha ido bien.
+## **3.5 Array bidimensionales - matrices**
+
+Anteriormente hemos visto los unidimensionales
+
+` `unidimensionales → vectores
+
+` `bidimensionales → matrices
+
+`matriz [filas] [columnas]`
+
+Ejemplo
+
+ int m1[3] [4]
+
+
+
+
+```
+m1[0][2]=12;
+```
+```
+m1[1] [3]=22;
+```
+```
+m1[2] [0]=14;
+```
+
+
+
+Para darle valor a las posiciones hay que usar un doble bucle.
+
+` `Un for externo para las filas
+
+` `Un for interno para las columnas
+```
+for(i=0; iCaptura de bosquejo de Juantxi Rodríguez
+
+# **4. Cadenas de caracteres**
+Parecido a los arrays.
+
+Estructura de datos chav \0
+
+que termina en un carácter dinal
+
+‘’ 1 carácter
+
+“” cadenas
+
+`char cadena[n]`
+
+Podremos usar todas las opciones de la librería:
+
+ #include
+
+`String` → Cadena de caracteres
+
+Ejemplo:
+```
+char cadena[50];
+
+printf(“\nIntroduce una cadena: ”);
+
+fflush(stdin);
+```
+Tenemos 3 vías para almacenar en el char:
+```
+scanfc(“%s”, cadena); ##### sin & porque ya tiene la cadena |||| La más fácil pero la más insegura
+```
+```
+gets(cadena); ###### Da problemas en Mac y Linux.
+```
+```
+Scanf(“%[^\n]”, cadena);
+```
+![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.014.png)
+
+
+![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.015.png)
+
+strlen → Longitud de cadenas
+
+strcmp → Comparar cadenas
+
+strcpy → Asignar una cadena a otra
+
+
+## **4.1 strlen**
+
+`int strlen(char\*cad);` → int longitud;
+```
+…
+longitud=strlen(cadena3);
+printf(“\n …… ”, longitud);
+printf(“\n ….. ”,strlen(cadena));
+```
+
+
+## **4.2 strcmp**
+String comparar
+
+`int strcmp(char\*cad1, char\*cad2);`
+
+Resultados:
+
+` `0 sin iguales
+
+` `<0 cad1 es anterior a cad2
+
+` `>0 cad2 es anterior a cad1
+```
+if (strcmp(cadena2,cadena3)==0){
+` `printf(“\n son iguales”);
+}else{
+` `printf(“\n no son iguales”);
+}
+```
+
+## **4.3 strcpy**
+String copy
+
+`char cadena1[5];`
+
+`char cadena2[50];`
+
+A cadena1 asignarle el contenido de cadena2.
+```
+cadena1=cadena2 X
+```
+```
+strcpy(cadena1, cadena2);
+```
+` `destino origen
+
+Sigue la misma nomenclatura de lo anteriormente visto:
+
+`Numero=20;`
+
+
+## **4.4 strrev**
+String reverse
+
+**Ejercicio**:
+
+Programa en C que pida al usuario 2 cadenas de 100 caracteres y les cargue información. Después
+
+- las muestra
+- indicará la longitud de cada una
+- indicará si son iguales entre ellas o no
+- copia el contenido de la primera en la segunda y mostrar de nuevo ambás.
+```
+#include
+#include
+#include
+
+int main(){
+ /* Variables */
+ char cadena1[100];
+ char cadena2[100];
+ int longitud;
+
+ printf("\nintroduce la primera cadena: ");
+ fflush(stdin);
+ scanf("%[^\n]", cadena1);
+
+fflush(stdin);
+ printf("\nintroduce la segunda cadena: ");
+ fflush(stdin);
+ scanf("%[^\n]", cadena2);
+ /* Mostrar */
+ printf("\nCadena 1: %s", cadena1);
+ printf("\nCadena 2: %s", cadena2);
+
+ /* indicará la longitud de cada una */
+ longitud=strlen(cadena1);
+ printf("\nLa Cadena 1 mide: %d", longitud);
+
+ longitud=strlen(cadena2);
+
+ printf("\nLa Cadena 2 mide: %d", longitud);
+
+ /* indicará si son iguales entre ellas o no */
+
+ if (strcmp(cadena1,cadena2)==0){
+ printf("\n son iguales");
+ }else{
+ printf("\n no son iguales");
+ if(strcmp(cadena1, cadena2)<0){
+ printf("\nCadena 1 es alfabeticamente anterior a cadena2");
+ }else{
+ printf("\nCadena 2 es alfabeticamente anterior a cadena 1");
+ }
+ }
+
+ /* copia el contenido de la primera en la segunda y mostrar de nuevo ambás.*/
+
+ strcpy(cadena2,cadena1);
+
+ printf("\nCadena 1: %s", cadena1);
+
+ printf("\nCadena 2: %s", cadena2);
+
+}
+```
+
+# **5. Estructuras**
+Son los tipos de datos definidos por el desarrollador.
+
+Persona
+
+Nombre → cad 50
+
+edad → entero
+
+email → cad 50
+
+altura → real
+
+Al principio del programa haremos una definición (No la variable).
+```
+struct persona{
+ char nombre[50];
+ int edad;
+ char email[50];
+ float altura;
+};
+```
+Cada uno de los datos se llaman miembro (o también llamado campo).
+
+Después se deben declarar las variables.
+
+`struct persona p1;`
+
+Para darle valor a cada uno de los campos hay que hacerlo uno a uno. Puede ser desordenado.
+
+Utilizamos el operador `.`
+
+El operador `.` se conoce como acceso a miembro de una estructura
+
+
+Ejemplo:
+
+![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.016.png)
+
+![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.017.png)
+
+## **5.1 Estructuras anidadas**
+Para definir fecha se podría anidar dentro de la estructura otra estructura.
+
+![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.018.png)
+
+Para acceder habría que poner las estructura anidada
+
+![](img/Aspose.Words.49c12fff-a89e-4b3d-97ea-e0f742c30e14.019.png)
+
+# **6. Funciones**
+
+Si decidimos hacer nuestras propias funciones
+
+1. Prototipo → resumen
+
+"dato devuelto" "nombre" "(argumentos)"
+
+
+
+Los argumentos pueden ser varios
+
+
+
+
+
+1. Desarrollo de la función. Definición → Bloque de código
+
+Es el cuerpo del código
+
+
+3. Llamada (invocación al código)
+
+
+
+
+Las funciones sirven para encapsular el código y para reutilizar el código
+
+Propósitos:
+
+- Modularización del código. Encapsular, mejora la visibilidad,
+- Reutilización. No repetir la escritura del código, reutilizar el mismo. Cuanto más se programe, menos se tenga que programar.
+-
+# EJERCICIOS
+## **Funciones para el tres en raya**
+
+- Comprobar si gana el jugador 1 → Pueden devolver 0 si no ha ganado o 1 si ha ganado
+- Comprobar si gana el jugador 2 → Pueden devolver 0 si no ha ganado o 1 si ha ganado. (Debe recibir como argumento matriz y carácter que defina el jugador)
+- Empate
+- Mostrar el tablero → `void`
+
+Habría que pasar la matriz como argumento.
+
+Probamos meter como argumento una matriz.
+
+Solo se necesita indicar las columnas de la matriz: void cargar(int m[][COLUMNAS])
+
+
+
+Un puntero es un tipo de variable capaz de almacenar una dirección de memoria.
+
+` `Se suele decir que apunta a una dirección de memoria. Apunta a una variable o a una zona de memoria reservada.
+
+Los vectores dinámicos reservan espacio de memoria para definir en la ejecución. Los punteros posibilitan hacer las matrices dinámicas.
+
+
+
+El nombre de una array o de una cadena de caracteres es de por sí un puntero al primer elemento del array o de la cadena.
+
+Los punteros permiten:
+
+- arrays dinámicos
+- estructuras dinámicas → Listas enlazadas
+
+## **Hundir la flota**
+
+
+
+## **Arrays de estructuras.**
+(Examen de uni)
+
+
+
+Funciona igual que un array teniendo en cuenta que cada posición es del tipo definido por nosotros.
+
+Por ejemplo, si queremos almacenar en un array una agenda de contacto. De cada contacto tendremos:
+
+- Nombre – Cadena de 60
+- Teléfono – Cadena de 15
+- Edad – Entero
+
+En nuestra agenda habrá espacio para un máximo de 100 contactos.
+
+
+
+```
+#define MAX 100 /* Nos sirve para definir el tamaño. */
+
+int main (){
+ struct contacto {
+ char nombre[60];
+ char telefono[15];
+ int edad;
+ }
+ // tipo nombre [Tamaño]
+ struct contacto agenda [MAX];
+}
+```
+Para acceder a los datos se hace con el operador .
+
+. Se llama acceso a miembro de una estructura
+```
+agenda[1].nombre
+
+agenda[1].telefono
+
+agenda[1].edad
+```
+
+## Menú
+
+1 Cargar datos
+
+2 Mostrar datos
+```
+#include
+#include
+
+#define MAX 3
+
+struct contacto {
+ char nombre[60];
+ char telefono[15];
+ int edad;
+};
+
+int main (){
+
+ // Defino variables
+ int menu;
+ int i;
+
+ // tipo nombre [Tamaño]
+ struct contacto agenda [MAX];
+
+ //elabora un menú con estas opciones: 1. cargar 2. mostrar 0 . salir
+ do{
+ printf("\nMenú");
+ printf("\n1 Cargar agenda");
+ printf("\n2 Mostrar agenda");
+ printf("\n0 Salir\n");
+ printf("\nIntroduce una opción reseñada: ");
+
+ fflush(stdin);
+ scanf("%d", &menu);
+
+ switch(menu){
+
+ case 1:
+ for(i=0; i