Tipos de datos primitivos

Bytes

A byte is a group of 8 bits. A bit is the most basic unit and can be either 1 or 0. A byte is not just 8 values between 0 and 1, but 256 (28) different combinations (rather permutations) ranging from 00000000 via e.g. 01010101 to 11111111. Thus, one byte can represent a decimal number between 0(00) and 255.

Estructuras de control selectivo

IF

If - else

If - else anidado

Ejercicio

Switch

Ejercicio

Operador ternario

Short-circuit

&&, ||

Estructuras de control repetitivo

While

Ejercicio

For

Ejercicio

do ... while

Ejercicio

Evaluación de algoritmos

Orden de magnitud - Big O Notation

Estructuras de Datos simples

// Online C compiler to run C program online
#include <stdio.h>
#include <math.h>

// Llenar arreglo de valores 1 - 10
// Imprimir la potencia cubica de c/valor

int main() {
    int valores[10];
    int i = 2;
    
    for (i = 0; i<10; i++) {
        valores[i] = i + 1;
        //printf("%d \n", valores[i]);
    }
    
    for(i = 0; i<10; i++) {
        int p = (int) pow(valores[i], 3);
        printf("%d^3 = %d \n", valores[i], p);
    }

    return 0;
}

Arrays

Matrices

#include <stdio.h>
#include <math.h>

// En una matriz de 10x10, primera columna es el numero del al 10, y las 9 columnas siguientes es el numero a la potencia de la columna.
// Matriz[2,1] = 2
// Matriz[2,2] = 2 ^ 2 = 4
// Matriz[2,3] = 2 ^ 3 ... 2 ^ 10

int main() {
    long valores[10][10];
    
    for (int i = 0; i<10; i++) {
        for (int j = 0; j<10; j++) {
            valores[i][j] = (long) pow(i+1, j+1);
        }
    }
    
    for (int i = 0; i<10; i++) {
        for (int j = 0; j<10; j++) {
            printf("Matriz[%d,%d] = %d^%d = %li \n", i+1, j+1, i+1, j+1, valores[i][j]);
        }
    }
    return 0;
}

Strings

#include <stdio.h>
#include <math.h>

int main() {
    char alfa[14] = "Hola mundo! :)";
    char *alfadir = &alfa;
    
    // HEAP - Espacio dinamico de memoria
    //MEM16 ["H"]["o"]["l"]["a"]...[")"]
    //MEM17 MEM16
    
    // ROM - Espacio estatico de memoria
    // MEM50 MEM16 set ["H"]["o"]["l"]["a"]...[")"]
    // MEM51 MEM17 set MEM16
    
    
    for(int i=0; i<sizeof(alfa); i++) {
        printf("%c", alfa[i]);
    }
    
    printf("\n%s", alfadir);
    
    return 0;
}

Recursividad

// Funciones
// f(x) => y
// sin(x) => a
// sininv(x) => b
// Logica propsicional -> Absurdo
// si sininv(x) es a y sin(x) es a si y solo si sininv(x) = sin(x) => Es un absurdo y es negativo/falso. sininv(x) =/= sin(x)

// [a] => [x]
// [b] => [y]

// fn(type_1) => type_2 ====> type[char/int/double/float/long/Structures/arrays[uni-multi]]
// ascii(int) => char // Convertir un entero en caracter.

// Crear una funcion que retorne la serie de fibonacci hasta un numero n.
// 1 1 2 3 5 7 
// a0 = 1 -> inicial
// a1 = a0 + 0 = 1 -> inicial
// a2 = a0 + a1 = 2
// a3 = a1 + a2 = 3
// a4 = a2 + a3 = 3
// a5 = a3 + a4 = 3
// ...
// an = a[n-2] + a[n-1]

int *fibonacci (int n) {
    static int fibo[10];
    fibo[0] = 1;
    fibo[1] = 1;
    
    for (int i = 2; i < n; i++) {
        fibo[i] = fibo[i-2] + fibo[i-1];
    }
    
    return fibo;
}
/** Prueba de escritorio
 * fibonacci(2) => 1 1
 * fibo[2]
 * fibo [0] = 1
 * fibo[1] = 1
 * i = 2; 2 < 2? FALSE
 * return 1 1
 * 
 * fibonacci(5) => 1 1 2 3 5
 * fibo[5] // [0,0,0,0,0]
 * fibo[0] = 1
 * fibo[1] = 1
 * i = 2; 2 < 5? TRUE
 * fibo[2] = fibo[2-2] + fibo[2-1] = fibo[0] + fibo[1] = 1 + 1 = 2 // fibo = [1,1,2]
 * i = i++ = 2 + 1 = 3
 * i = 3; 3 < 5? TRUE
 * fibo[3] = fibo[3-2] + fibo[3-1] = fibo[1] + fibo[2] = 1 + 2 = 3 // fibo = [1,1,2,3]
 * i = 3 + 1 = 4
 * i = 4; 4 < 5? TRUE
 * fibo[4] = fibo[4-2] + fibo[4-1] = fibo[2] + fibo[3] = 2 + 3 = 5 // fibo = [1,1,2,3,5]
 * i = 4 + 1 = 5
 * i = 5; 5 < 5? FALSE
 * return [1,1,2,3,5]
 */

int main() {
    // Write C code here
    int n = 10;
    int *fibo = fibonacci(n);
    
    for (int i = 0; i < n; i++) {
        printf( "%d\n", *(fibo + i));
    }
    
    return 0;
}
int r_fibonacci (int n) {
    // Parada
    // if (sentencia) return valor_por_defecto;
    if (n <= 2) return 1;
    //if (n == 0) return 1;
    
    // Recursividad
    // Codigo normal
    return r_fibonacci(n-2) + r_fibonacci(n-1);
}

// MEMORIA
// r_fibonacci(-1)
// r_fibonacci(1-2) + r_fibonacci(1-1)  
// r_fibonacci(2-1) // 1
// 1 + r_fibonacci(2-1)
// r_fibonacci(0) + r_fibonacci(1)

// MEMORIA
// 1
// r_fibonacci(1-1) // 
// 0 + r_fibonacci(1-1)  
// r_fibonacci(2-1) // 1
// 1 + r_fibonacci(2-1)
// r_fibonacci(0) + r_fibonacci(1)

// MEMORIA
// 5

// r_fibonacci (2) // n = 2
// n == 0? 2 == 0? FALSE
// r_fibonacci(2-2) + r_fibonacci(2-1)
// 1 + r_fibonacci(1-1)

// r_fibonacci(2-2) // n = 0
// n == 0? 0 == 0 
// return 1

// r_fibonacci(1) // n = 1
// n == 0? 1 == 0? false
// r_fibonacci(1-2) + r_fibonacci(1-1)

// CICLO INFINITO // sin 2da parada
// r_fibonacci(1-2) // r_fibonacci(-1) // n = -1
// n == 0? -1 == 0? false
// r_fibonacci(-1-2) + r_fibonacci(-1-1) 
// r_fibonacci(-3) + r_fibonacci(-2)

// r_fibonacci(1-2) // n = -1
// return;

Recursividad

def fibonacci(n):
    fibo = [1, 1]
    
    for i in range(2, n):
        fibo.append(fibo[i-2] + fibo[i-1])
        
    return fibo

n = 10
fibo = fibonacci(n)

print(fibo)

Factorial

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)
        
        
print(factorial(4)) # 4! = 4x3x2x1 = 24

Fibonacci

No recursivo

Fibonacci

Recursivo

Algoritmos de Ordenamiento

Bubble sort

Selection sort

Quick Sort

Algoritmos de busqueda

Algoritmos de busqueda

Algoritmos de busqueda

Paradigmas de programacion

LIFO - FIFO

LIFO

Last in first out

Pila ( Stack )

// Pila.h

class Pila() {
    int AnadeP(int dato); // push -> Ponerlo al final
    int BorrarP(); // Pop -> Borrar el ultimo -> devolver
    bool EsVaciaP(); // empty
    Pila Pila() // VaciaP -> Crear la pila vacia
    boolean EstallenaP() // Si la pila esta llena
    int PrimeroP() // Devuelve el primero
}
[1,2,2,3,4,5,X];
pila.push(6);
[1,2,2,3,4,5,6];

[1,2,X,X,X,X,X];
pila.push(6);
[1,2,6,X,X,X,X];
pila.pop(); -> 6
[1,2,X,X,X,X,X];
pila.empty() -> false
pila.isFull() -> false

FIFO

First in First Out

Cola (Queue)

class Cola() {
    int AnadeC(int dato); // push -> Ponerlo al final
    int BorrarC(); // Pop -> Borra el primero / Mueve todos los valores -1 espacio -> devolver
    bool EsVaciaC(); // empty
    Cola Cola() // VaciaP -> Crear la cola vacia
    boolean EstallenaC() // Si la cola esta llena
    int PrimeroC() // Devuelve el primero
}
[1,2,2,3,4,5,X];
cola.push(6);
[1,2,2,3,4,5,6];

[1,2,X,X,X,X,X];
cola.push(6);
[1,2,6,X,X,X,X];
cola.pop(); -> 1
[2,6,X,X,X,X,X];
cola.empty() -> false
cola.isFull() -> false

Terminal

C

#include <stdio.h>

int *fibonacci(int n) {
  int *fibo = malloc(n * sizeof(int));
  fibo[0] = 1;
  fibo[1] = 1;

  for (int i = 2; i < n; i++) {
    fibo[i] = fibo[i-2] + fibo[i-1];
  }

  return fibo;
}

int main() {
  int n = 15;

  int *fibo = fibonacci(n);

  for (int i = 0; i < n; i++) {
    printf("[%d]:%d\n", fibo+i, *(fibo+i));
  }

  return 0;
}

Malloc

Parametros por Valor / Refencia & Debugging

#include <stdio.h>

// Pure Function
int pure_power(int b) {
  return b * b;
}

// Impure Function
int power(int *b) {
  *b = 5;
  return *b * *b;
}

int main() {
  int x = 3;
  int pure_p = pure_power(x);
  int p = power(&x);
    
  printf("x: %d\n", x);
  printf("p: %d\n", p);
  printf("pure: %d\n", pure_p);
}
gcc program.c -o program
gdb program
>> break 17
>> run
>> print x
>> print pure_p
>> run
>> quit

deck

By Dave Rivera

deck

  • 356