AO1 Ruggieri Valentin - C
AO1 Ruggieri Valentin - C
Parte A (Teórico)
1.
Nombre del dispositivo Tipo de almacenamiento Capacidades
2.
2.a. Lenguaje de Bajo Nivel:
Lenguaje de programación C
Utilización:
Desarrollo de sistemas operativos.
Programación de sistemas embebidos.
Desarrollo de aplicaciones de tiempo real y sistemas de alto rendimiento.
Aplicaciones:
Sistemas operativos (ej., Unix, Linux).
Controladores de dispositivos.
Software de infraestructura (ej., intérpretes de lenguajes, compiladores).
Aplicaciones embebidas (ej., firmware para microcontroladores).
Características Generales:
Cercanía al Hardware: Proporciona acceso directo a la memoria y a los registros del
procesador.
Alta Eficiencia: Genera código máquina eficiente y rápido.
Portabilidad Condicionada: Aunque es más portátil que el ensamblador, el código C
puede necesitar ajustes para diferentes arquitecturas de hardware.
Punteros y Gestión Manual de Memoria: Permite un control preciso sobre la gestión
de memoria, pero esto también introduce riesgos de errores como desbordamientos
de búfer y fugas de memoria.
Amplio Uso: Es uno de los lenguajes más utilizados y ha influido en muchos otros
lenguajes de programación.
2.b. Lenguaje de Alto Nivel:
Lenguaje de programación Java
Utilización:
Desarrollo de aplicaciones empresariales.
Desarrollo de aplicaciones Android.
Aplicaciones web y servicios backend.
Programación de aplicaciones de escritorio.
Aplicaciones:
Aplicaciones web (ej., Spring Framework).
Aplicaciones móviles Android (usando Android SDK).
Aplicaciones empresariales (ej., sistemas de gestión de empresas).
Software de escritorio (ej., herramientas de desarrollo como IntelliJ IDEA).
Características Generales:
Orientación a Objetos: Java es un lenguaje completamente orientado a objetos, lo
que facilita la modularidad y el mantenimiento del código.
Portabilidad: Gracias a la Máquina Virtual de Java (JVM), el código Java puede
ejecutarse en cualquier plataforma que tenga una JVM, cumpliendo el lema "Write
Once, Run Anywhere".
Recolección de Basura Automática: Java maneja automáticamente la liberación de
memoria, reduciendo el riesgo de fugas de memoria.
Amplia Biblioteca Estándar: Proporciona una rica API que cubre desde estructuras
de datos y algoritmos hasta funciones de red y concurrencia.
Seguridad y Robustez: Incluye características como verificación de bytecode y
manejo de excepciones que aumentan la seguridad y estabilidad de las aplicaciones.
4.
Sintaxis:
Es como las reglas de gramática en un idioma. Nos dice cómo estructurar
correctamente nuestras instrucciones en el código para que la computadora las
pueda entender.
Por ejemplo, como cuando escribimos una oración en español, necesitamos poner
las palabras en el orden correcto y usar la puntuación adecuada para que tenga
sentido.
Semántica:
Se trata sobre el significado de nuestras instrucciones en el código. Es entender qué
hace exactamente nuestro código y qué resultados produce.
Por ejemplo, cuando lees una historia: no solo miras las palabras, sino que tratas de
entender el mensaje o la idea detrás de ellas.
Primitivas:
Las primitivas son como las herramientas básicas que usamos para construir cosas
más grandes. Son como los bloques de construcción de nuestro código. Incluyen
cosas como sumar números, comparar valores o repetir acciones.
En la programación la sintaxis se trata de seguir las reglas del lenguaje, como si
estuvieras siguiendo las instrucciones. Si te equivocas, el código simplemente no
funcionará.
5.
Diagrama de Flujo:
- Permite representar visualmente el flujo de un algoritmo utilizando formas
geométricas y flechas.
- Ayuda a identificar posibles problemas y a optimizar el flujo del algoritmo
antes de escribir el código real.
- Es una forma efectiva de comunicar la lógica del algoritmo a otros
programadores o personas no técnicas.
Pseudocódigo:
- Proporciona una descripción detallada del algoritmo en un lenguaje cercano
al natural.
- No está ligado a la sintaxis de un lenguaje de programación en particular por
lo que permite expresar la solución de manera más flexible.
- Ayuda a planificar y organizar la lógica del algoritmo antes de escribir el
código real, lo que puede ahorrar tiempo y reducir errores durante la
implementación.
El método de Polya
Es una guía paso a paso que te ayuda a abordar un problema de manera
organizada y lógica. El mismo fortalece la competencia y resolución de problemas.
Esta técnica se aplica cuando se necesita diseñar, implementar y operar el
pensamiento con un enfoque lógico.
1) Comprender el Problema:
En esta etapa, se analiza y comprende completamente el problema. Se
identifican los datos relevantes, se establecen los objetivos y se determina
qué se requiere para resolverlo.
2) Planear la Solución:
En esta etapa, se elabora un plan o estrategia para resolver el problema.
Esto puede implicar descomponer el problema en subproblemas más
manejables, identificar algoritmos o métodos relevantes y determinar los
pasos necesarios para implementar la solución.
3) Ejecutar el Plan:
Aquí es donde se lleva a cabo la implementación del plan previamente
diseñado. Se siguen los pasos planificados y se utilizan las herramientas y
técnicas adecuadas para resolver el problema.
4) Revisar y Evaluar:
Una vez que se ha encontrado una solución, se revisa y se evalúa su validez
y eficacia. Se verifica si la solución resuelve correctamente el problema y se
realizan ajustes si es necesario.
7.
Variables
Definición
Una variable es un nombre simbólico asociado a un espacio en la memoria del
ordenador donde se puede almacenar un dato. El valor de una variable puede
cambiar durante la ejecución del programa.
Explicación
Es como una caja en la que puedes guardar algo, como sal. Le pones una etiqueta a
la caja, para saber qué hay dentro y puedes cambiar la cantidad de cualquiera sea el
contenido de esa caja cuando lo necesites.
Características Técnicas
Identificador: Es el nombre que le das a la caja (la etiqueta).
Tipo de dato: Especifica qué tipo de cosa puedes guardar (números, texto, etc.).
Valor: Es lo que realmente guardas en la caja
INT edad = 25
let edad = 25
(cumple un año)
edad = 26
Una vez inicializada su valor puede variar tantas veces como se la modifique.
Constantes
Definición
Una constante es un nombre simbólico asociado a un valor que no cambia durante
la ejecución del programa. Una vez asignado, el valor de una constante no puede
ser modificado.
Explicación
Es como una caja en la cocina donde guardas algo que nunca cambia, como la
temperatura de congelación del agua (0 grados Celsius). Una vez que pones ese
valor en la caja, no lo puedes cambiar.
Características
Identificador: Nombre que se le da a la constante.
Tipo de dato: Especifica el tipo de dato que puede almacenar.
Valor: El dato que se almacena en la constante.
8.
Operadores Relacionales y Lógicos en Programación
Son herramientas fundamentales en la programación para comparar valores y tomar
decisiones basadas en esas comparaciones.
Son esenciales para el control de flujo en los programas.
Permiten realizar comparaciones y combinaciones de condiciones, facilitando la
toma de decisiones complejas dentro del código.
Operadores Relacionales
Los operadores relacionales permiten comparar dos valores y devuelven un
resultado de tipo booleano (True o False). Estos operadores se usan comúnmente
en condiciones de control, como en declaraciones if, while, y for.
a=4
b=5
resultado = a < b
a=5
b=4
resultado = a != b
Operadores Lógicos
Los operadores lógicos permiten combinar varias expresiones relacionales para
formar condiciones más complejas. Los resultados también son booleanos (True o
False).
a=4
b=5
resultado = (a < b) and (b > 3)
a=4
b=2
resultado = (a < b) or (b > 1)
a=4
resultado = not (a > 5)
9.
Pruebas de Escritorio
Definición
Son una técnica utilizada en la programación para verificar la lógica de un algoritmo
sin ejecutarlo en una computadora.
Consiste en simular manualmente la ejecución del algoritmo, paso a paso, utilizando
un conjunto específico de valores de entrada.
El objetivo es identificar errores lógicos, condiciones de borde y comportamientos
inesperados antes de la implementación o durante la depuración de un código.
Ejemplo pseudocódigo
Algoritmo Factorial
Entrada: Un número entero n
Salida: El factorial de n
si n < 0 entonces
imprimir "Error: el número debe ser no negativo"
sino
factorial := 1
para i desde 1 hasta n hacer
factorial := factorial * i
fin para
imprimir "El factorial de", n, "es", factorial
fin si
Fin Algoritmo
Tabla de Seguimiento
Inicialización
Las primeras 3 líneas muestran que las variables n, suma, i, nMayor y nVeces no
están definidas o inicializadas. Esto es típico al inicio de un programa antes de la
asignación de valores.
Asignación de Valores
En la línea 4(1), suma se inicializa a 0.
En la línea 6(1), nVeces se inicializa a 3.
Primer Bucle (Primer Número: 12)
En la línea 7(1), i se inicializa a 1.
En la línea 8(1), n se lee y se asigna el valor 12.
En la línea 9(1), suma se actualiza sumando n (0 + 12 = 12).
En la línea 10(1), como es la primera iteración, nMayor se inicializa a n (12).
La línea 12(1) finaliza la primera iteración del bucle.
Segundo Bucle (Segundo Número: 18)
En la línea 7(2), i se incrementa a 2.
En la línea 8(2), n se lee y se asigna el valor 18.
En la línea 9(2), suma se actualiza sumando n (12 + 18 = 30).
En la línea 10(2), n (18) es mayor que nMayor (12), por lo que nMayor se actualiza a
18.
La línea 12(2) finaliza la segunda iteración del bucle.
Tercer Bucle (Tercer Número: 5)
En la línea 7(3), i se incrementa a 3.
En la línea 8(3), n se lee y se asigna el valor 5.
En la línea 9(3), suma se actualiza sumando n (30 + 5 = 35).
En la línea 10(3), n (5) no es mayor que nMayor (18), por lo que nMayor no cambia.
La línea 12(3) finaliza la tercera y última iteración del bucle.
Finalización
Finalmente, en la línea 19(1), después de salir del bucle, el valor final de suma es 35
y el valor final de nMayor es 18.
Resumen Final
suma: 35 (la suma de 12, 18 y 5).
nMayor: 18 (el mayor número entre 12, 18 y 5).
nVeces: 3 (cantidad de números procesados).
10.
Estructuras lógicas
Las estructuras lógicas o de control nos dan el poder de alterar, controlar o modificar
el orden o el flujo en el que se ejecutan las instrucciones de un software a voluntad.
Gracias a las estructuras de control podemos abstraer algoritmos o secuencias de
instrucciones en un software para lograr su objetivo.
Secuenciales
Es la estructura más simple. Consiste en ejecutar una serie de instrucciones una tras
otra en el orden en que están escritas.
Ejemplo:
Inicio
Leer A
Leer B
Suma := A + B
Imprimir Suma
Fin
Gráfico:
Selectivas o de Selección
La selección permite tomar decisiones y ejecutar diferentes instrucciones basadas
en una condición. Las estructuras de selección más comunes son if-else y
switch-case.
Ejemplo:
Inicio
Leer X
Si X >= 0 Entonces
Imprimir "X es positivo o cero"
Sino
Imprimir "X es negativo"
Fin
Gráfico:
Iterativas o de Repetición
La repetición permite ejecutar una instrucción o un bloque de instrucciones varias
veces. Las estructuras de repetición más comunes son for, while y do-while.
Ejemplo:
Inicio
Leer N
i := 1
Mientras i <= N Hacer
Imprimir i
i := i + 1
Fin
Gráfico:
Parte B (Práctico)
1.
Problema a resolver
Calcular el área de una figura compuesta por dos triángulos rectángulos y una
semicircunferencia
Fórmulas:
1 2 2
Área del triángulo: AreaTriangulo = 2 · 𝑅 · 𝐻 −𝑅
1 2
Área de la semicircunferencia: AreaSemicircunferencia = 2
·π· 𝑅
Área total: AreaTotal = 2 · AreaTriangulo + AreaSemicircunferencia
2.
Problema resolver
Presupuesto total.
3.
Problema resolver
Calcular edades promedio por sexo, mayor edad por sexo y cantidad total de
alumnos por sexo
Edades promedio por sexo, mayor edad por sexo, cantidad total de alumnos por
sexo y total