Universidad Rafael Urdaneta
Facultad de Ingeniería
Escuela de Ingeniería de Computación
Cátedra:
Programación I
- Semestre 2012-1 (Sección “G”)
Profesor: Jaime Soto
Examen #1 - Fecha: 27-02-2012
Cédula :Nombre :
1.- Defina que es un Lenguaje de Programación y nombre un mínimo de 3 [2]
Respuesta:
Un lenguaje de programación es un lenguaje que puede ser utilizado para controlar el comportamiento de una máquina, particularmente una computadora.
Es un lenguaje artificial, diseñado para representar algoritmos de forma inteligible por el computador
Tres lenguajes de programación: C, Java y Visual FoxPro (cualquier otro Visual Basic, Delphi, Pascal, Cobol, entre otros).
2.- ¿Qué es un algoritmo? Describa tres (3) propiedades o características de un algoritmo [2]
Respuesta:
Un Algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para resolver un problema. Un programa normalmente implementa (traduce a un lenguaje de programación concreto) un algoritmo. Nótese que es la secuencia de instrucciones en sí la que debe ser finita, no el número de pasos realizados como la ejecución de ellas.
Un Algoritmo es el medio por el que se explica cómo puede resolverse un problema, mediante aproximaciones paso a paso. Se puede formular de muchas formas con el cuidado de que no exista ambigüedad.
Propiedades de un algoritmo (solo era necesario nombrar tres (3) de estas):
1. Carácter finito. "Un algoritmo siempre debe terminar después de un número finito de pasos". 2. Precisión. "Cada paso de un algoritmo debe estar precisamente definido; las operaciones a llevar a
cabo deben ser especificadas de manera rigurosa y no ambigua para cada caso".
3. Entrada. "Un algoritmo tiene cero o más entradas: cantidades que le son dadas antes de que el algoritmo comience, o dinámicamente mientras el algoritmo corre. Estas entradas son tomadas de conjuntos específicos de objetos".
4. Salida. "Un algoritmo tiene una o más salidas: cantidades que tienen una relación específica con las entradas".
3.- ¿Cuántos bits debe tener un computador para representar 3000 símbolos diferentes? [2]
Respuesta:
Un bit puede estar en un estado de dos posibles: 0 ó 1
Un bit puede representar dos (2) símbolos: 0 ó1. El “0” puede ser la letra “a” y el “1” la letra “b”
Las combinaciones de dos (2) bit pueden representar 4 símbolos diferentes, en el siguiente ejemplo las primeras cuatro letras del abecedario
0 0 a 0 1 b 1 0 c 1 1 d
Las combinaciones que se pueden obtener con tres (3) bit, serían 2^3 = 8 Las combinaciones que se pueden obtener con cuatro (4) bit, serían 2^4 =16 Las combinaciones que se pueden obtener con cinco (5) bit, serían 2^5 =32 Las combinaciones que se pueden obtener con seis (6) bit, serían 2^6 =64 Las combinaciones que se pueden obtener con siete (7) bit, serían 2^7 =128 Las combinaciones que se pueden obtener con ocho (8) bit, serían 2^8 =256 Las combinaciones que se pueden obtener con nueve (9) bit, serían 2^9 =512 Las combinaciones que se pueden obtener con diez (10) bit, serían 2^10 =1024 Las combinaciones que se pueden obtener con once (11) bit, serían 2^11 =2048 Las combinaciones que se pueden obtener con doce (12) bit, serían 2^12 =4096
Como se puede observar, cada vez que se agrega un bit, se duplica la cantidad de símbolos que podemos representar con las combinaciones de 0s y 1s.
El problema actual requiere saber la cantidad de bits, como mínimo, que debe tener un computador ideal para representar “por lo menos” 3000 símbolos diferentes. Si se observa la tabla anterior, con once (11) bits se obtenían 2048 combinaciones o diferentes símbolos y con doce (12) se obtienen 4096; por lo tanto, se requiere un computador que tenga como mínimo DOCE (12) BITS.
4- ¿Cuántos bits debe tener un computador que requiera simplemente contar números enteros positivos hasta un máximo de 3000? (tip: el número más grande, no las combinaciones) [2]
Respuesta:
En el anterior ejercicio se requería determinar el número de bits que debía tener un computador que estuviera en capacidad de representar un mínimo de 4000 símbolos (combinaciones de 0s y 1s). Para determinar ese número es suficiente identificar el exponte al que se debe elevar el número 2 (base binaria) y encontrar tal número o el que lo sobrepase inmediatamente. En este ejercicio, se requiere determinar el número de bits necesarios para contar números desde 0 hasta 3000. Para un (1) bit, 1 x 2^0 =1 (todo número elevado a la “0” da uno (1). Observemos la siguiente tabla con el valor de posición de cada número binario:
Número de bit 12 11 10 9 8 7 6 5 4 3 2 1 Posición
Valor del exponente 11 10 9 8 7 6 5 4 3 2 1 0
Bit 1 1 1 1 1 1 1 1 1 1 1 1
Operación exponencial 2^11 2^10 2^9 2^8 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 SUMA
Sumatoria para 11 bits 1024 512 256 128 64 32 16 8 4 2 1 2047
Sumatorio para 12 bits 2048 1024 512 256 128 64 32 16 8 4 2 1 4095
5.- Calcule la siguiente expresión aritmética: [2]
a. 1 + (5 * 2) + 8 / 2 * 2 + 12 - 6 + 5 + 1 + 1,5 b. 1 + (5 * 2) + 8 / 2 * 2 + 12 % 6 + 5 + 1 + 1,5 Respuesta:
La regla de prioridad de operaciones aritmética es la siguiente: 1. SeOperaciones entre paréntesis, se evalúan primero los más internos. 2. Operadores (*, /)
3. Operadores (%) – Residuo 18 % 6 = 0 . Cuando la división es exacta como este caso el residuo es 0. Cuando no es exacta, es diferente a 0. Ejemplo, (14 MOD 4) o ( 14 % 4) = 2 (residuo de la división)
4. Operadores (+, -)
a. 1 + (5 * 2) + 8 / 2 * 2 + 12 - 6 + 5 + 1 + 1.5 Paréntesis
1 + 10 + 8 / 2 * 2 + 12 - 6 + 5 + 1 + 1.5 Multiplicación/División.
En este caso se encuentran dos operadores de igual prioridad (*,/). Por lo tanto se evalúa de izquierda a derecha, primero la división y después la multiplicación.
1 + 10 + 8 / 2 * 2 + 12 - 6 + 5 + 1 + 1.5 División.(se resuelve izq a der).
1 + 10 + 4 * 2 + 12 - 6 + 5 + 1 + 1.5 Multiplicación
1 + 10 + 8 + 12 – 6 + 5 + 1 + 1.5 Sumas
38.5 – 6 Restas
32.5 Resultado
b. 1 + (5 * 2) + 8 / 2 * 2 + 12 % 6 + 5 + 1 + 1.5 Paréntesis
1 + 10 + 8 / 2 * 2 + 12 % 6 + 5 + 1 + 1.5 Multiplicación/División.
1 + 10 + 8 / 2 * 2 + 12 % 6 + 5 + 1 + 1.5 División (se resuelve izq a der)
1 + 10 + 4 * 2 + 12 % 6 + 5 + 1 + 1.5 Multiplicación
1 + 10 + 8 + 12 % 6 + 5 + 1 + 1.5 Residuo (MOD %) división exacta
1 + 10 + 8 + 0 + 5 + 1 + 1.5 Sumas
26.5 Resultado
6.- Realice las siguientes conversiones [2]
a. binario: 11011001 a decimal b. binario: 11000011 a hexadecimal c.- hexadecimal: FA01 a decimal d. hexadecimal: E9 a binario
a. Para convertir un binario en decimal
Posición 8 7 6 5 4 3 2 1
Exponente 7 6 5 4 3 2 1 0
1 x 2^7 1 x 2^6 0 x 2^5 1 x 2^4 1 x 2^3 0 x 2^2 0 x 2^1 1 x 2^0
BINARIO
1
1
0
1
1
0
0
1
128 64 0 16 8 0 0 1
DECIMAL
217
b. Para convertir un binario en hexadecimal (cada 4 bits es un nibble)
Posición 4 3 2 1 4 3 2 1
Exponente 3 2 1 0 3 2 1 0
1 x 2^3 1 x 2^2 0 x 2^1 0 x 2^0 0 x 2^3 0 x 2^2 1 x 2^1 1 x 2^0
BINARIO
1
1
0
0
0
0
1
1
DECIMAL 8 4 0 0 0 0 2 1
12
3
HEXADECIMAL
C
3
HEXADECIMAL
C3
c. Para convertir un hexadecimal en decimal
Posición 4 3 2 1
Exponente 3 2 1 0
15 x 16^3 10 x 16^2 0 x 16^1 1 x 16^0
HEXADECIMAL
F
A
0
1
BINARIO
1111
1010
0000
0001
DECIMAL 61440 2560 0 1
DECIMAL
64001
d. Para convertir un hexadecimal en binario
HEXADECIMAL
E
9
BINARIO
1110
1001
BINARIO
11101001
Tabla de conversión
Dec Hex Bin Dec Hex Bin Dec Hex Bin
0 0 0000 5 5 0101 10 A 1010
1 1 0001 6 6 0110 11 B 1011
2 2 0010 7 7 0111 12 C 1100
3 3 0011 8 8 1000 13 D 1101
4 4 0100 9 9 1001 14 E 1110
7.- Cuantos bytes se requieren para almacenar los siguientes datos (cada dato y el total): [2] Edad = 45 Nombre = “Kepler” Temperatura = 12.5
Respuesta:
Variable Tipo Tipo en C Número de bytes
Edad Entero int 2
Nombre Cadena de caracteres char Nombre[6] 6
Temperatura Real float 4
TOTAL 12
8.- Elabore una tabla con los resultados de este algoritmo. [4]
x = 1; y = 2; c = 2; mientras (c < 6) hacer
x = x+y
si (c > 3) entonces
y = y+2 x = x+1 fin_si
x = x-1
imprimir(c,x,y) c++
fin_mientras
Respuesta:
Regla de parada o condición para terminar el ciclo “cuando c deje de ser menor que 6”. Los valores en la tabla durante los ciclos son los del momento de imprimir
Ciclos x y c x=x+y y=y+2 x=x+1 x=x-1 C < 6 C > 3
Inicial 1 2 2 -- -- -- -- V F
1 2 2 2 X=1+2=3 -- -- X=3-1=2 V F
2 4 2 3 X=2+2=4 -- -- X=4-1=3 V F
3 6 4 4 X=4+2=6 y=2+2=4 X=6+1=7 X=7-1=6 V V
4 10 6 5 X=6+4=10 y=4+2=6 X=10+1=11 X=11-1=10 V V
9.- Un turista se dirige al aeropuerto para viajar de Maracaibo a Caracas. Elabore un diagrama de flujo que calcule el costo del viaje. Datos: 2 taxis (para ir al aeropuerto y del aeropuerto al destino), tasa de salida, costo del boleto (cancela extra por primera clase, si así lo desea) y costo por sobrepeso de equipaje (si lleva equipaje y este es mayor de 40kg). [4]
Respuesta:
Datos:
Costo Taxi en Maracaibo al aeropuerto La Chiníta taxi_mcbo Costo taxi desde el aeropuerto de Maiquetía a Caracas taxi_ccs
Tasa de salida aeroportuaria tasa
Costo boleto boleto
Costo extra en caso de viajar en 1ra clase boleto_extra Costo sobrepeso de equipaje si lleva equipaje y pasa de los 40 kg. peso_equipaje
Costo de Kilo de sobrepeso costo_kilo
Kilos de sobrepeso sobre_peso
Costo total del viaje total
Fin
IMPRIMIR/ESCRIBIR
total Inicio
CALCULAR
total = taxi_mcbo + taxi_ccs + tasa + boleto
INGRESAR/LEER
taxi_mcbo, taxi_ccs,
tasa, boleto, peso, costo_kilo
CALCULAR
total = total + boleto_extra ¿Va en 1ra
clase? SI
NO
¿Tiene sobrepeso?
CALCULAR
sobre_peso = (peso – 40 kg) * costo_kilo total = total + sobre_peso SI
10.- Escriba una porción de código en lenguaje C que sume los números entre 10 y 20 (incluidos ambos) e imprima la suma obtenida. [6]
Código fuente:
/*
* Archivo: main.cpp
* Autor: Ing. Jaime Soto
* Ejercicio: Problema nro. 10 - Examen
* Plataforma: Netbeans + compilador C++ cygwin */
#include <cstdlib> #include <stdio.h>
using namespace std; /* */
int main() {
int nro_inf = 10; int nro_sup = 20; int suma = 0;
for (int k=nro_inf; k<= nro_sup; k++) { suma = suma + k;
printf("\nNumero / Suma acumulada: %2i / %3i ", k, suma); }
printf("\n\nSuma numeros entre %i y %i es: %i", nro_inf, nro_sup, suma); return 0;
}
SALIDA:
Número / Suma acumulada: 10 / 10 Número / Suma acumulada: 11 / 21 Número / Suma acumulada: 12 / 33 Número / Suma acumulada: 13 / 46 Número / Suma acumulada: 14 / 60 Número / Suma acumulada: 15 / 75 Número / Suma acumulada: 16 / 91 Número / Suma acumulada: 17 / 108 Número / Suma acumulada: 18 / 126 Número / Suma acumulada: 19 / 145 Número / Suma acumulada: 20 / 165
BONO: En el ejercicio 10, modifique el programa para sumar solo números impares. (tip: función MOD podría serle útil) [2].
Respuesta:
En color amarillo se encuentra la porción de código necesaria para permitir la suma de solamente números pares. Se puede observar el operador MOD “%” que calcula el residuo de una operación de división. Si la división no es exacta, el residuo es diferente a “0”. Esto indica que se trata de un número impar ya que en este caso la división se hizo entre el número “2”.
Código fuente: /*
* Archivo: main.cpp
* Autor: Ing. Jaime Soto
* Ejercicio: Problema nro. 10 - Examen
* Plataforma: Netbeans + compilador C++ cygwin */
#include <cstdlib> #include <stdio.h>
using namespace std; /* */
int main() {
int nro_inf = 10; int nro_sup = 20; int suma = 0;
for (int k=nro_inf; k<= nro_sup; k++) {
if (k%2 ¡=0) {
suma = suma + k;
printf("\nNumero / Suma acumulada: %2i / %3i ", k, suma);
} }
printf("\n\nSuma numeros impares entre %i y %i es: %i",nro_inf,nro_sup,suma); return 0;
}
SALIDA:
Numero / Suma acumulada: 11 / 11 Numero / Suma acumulada: 13 / 24 Numero / Suma acumulada: 15 / 39 Numero / Suma acumulada: 17 / 56 Numero / Suma acumulada: 19 / 75