Está en la página 1de 17

FUNDAMENTOS DE PROGRAMACIÓN

2019-1

EJERCICIOS

1
Ejercicio 1: Ex.Esp. 2018-1 Preg.1
Escriba un programa en lenguaje C que permita calcular el perímetro de un
polígono. El algoritmo comenzará leyendo los valores x y y en base octal para
el primer punto del polígono en el plano cartesiano. Posteriormente,
continuará leyendo pares de valores x y y (en base octal) hasta que el usuario
ingrese como valor para la coordenada x un número que dentro de sus dígitos
contiene uno que no pertenece a la base octal. Cada vez que se lea una
coordenada adicional, se debe convertir el número a base decimal y calcular
la distancia al punto previo y agregarlo al perímetro. Cuando se ingresa un
número que no pertenece a la base para la coordenada x, el algoritmo debe
agregar al perímetro la distancia del último punto al primero. Entonces se
deberá mostrar el perímetro total. En el caso de que el polígono sea un
triángulo, deberá mostrarse además del perímetro, el tipo de triángulo
ingresado según sus lados (equilátero – si todos sus lados son de igual
medida, isósceles – si dos de sus lados son iguales, escaleno – si todos sus
lados son de distinta medida). En el caso de que el polígono tenga más de tres
lados, el algoritmo deberá determinar además del perímetro, si se trata de un
polígono regular o uno irregular. Implemente algún mecanismo que fuerce al
usuario a ingresar más de dos coordenadas para el correcto funcionamiento
del algoritmo. Un ejemplo de entrada y salida se muestra a continuación:

2
Ex.Especial 2018-1 Preg.1

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

int esta_en_base_octal(int num);


int convertir_base_octal_a_decimal(int num);
double calcular_distancia_entre_dos_puntos(int x1, int y1, int x2, int y2);
void determinar_imprimir_tipo_triangulo(int distancias_iguales, double dist,
double dist_punto_ini_punto_fin, double primera_distancia);

/* Calcula Perímetro y Tipo de Polígono */


int main(){
int x_ini, y_ini, x, y, x_ant, y_ant, contPuntos=0, distancias_iguales=1;
double perimetro=0.0, dist, dist_anterior=0.0, primera_distancia,
dist_punto_ini_punto_fin;

4
do {
printf("Ingrese la parte x de la coordenada: ");
scanf("%d", &x);
if (!esta_en_base_octal(x) && contPuntos < 3) {
printf("Debio ingresar un numero en base octal!.\n");
return 1;
} else if (!esta_en_base_octal(x) && (contPuntos >= 3)){
break;
}
x = convertir_base_octal_a_decimal(x);

printf("Ingrese la parte y de la coordenada: ");


scanf("%d", &y);
if (!esta_en_base_octal(y) && contPuntos < 3) {
printf("Debio ingresar un numero en base octal!.\n");
return 1;
}
y = convertir_base_octal_a_decimal(y);
contPuntos++;

5
if (contPuntos >=2){
dist = calcular_distancia_entre_dos_puntos(x_ant, y_ant, x, y);
if (dist != dist_anterior && contPuntos>= 3){
distancias_iguales = 0;
}
if (contPuntos == 2) {
primera_distancia = dist;
}
dist_anterior = dist;
perimetro += dist;
printf("Perimetro: %.4f\n", perimetro);
} else {
x_ini = x;
y_ini = y;
}
x_ant = x;
y_ant = y;
} while (1);

6
dist_punto_ini_punto_fin = calcular_distancia_entre_dos_puntos(x_ini,

y_ini, x_ant, y_ant);


perimetro += dist_punto_ini_punto_fin;
printf("El perimetro del poligono es %.4f.\n", perimetro);

if (contPuntos == 3) {
determinar_imprimir_tipo_triangulo(distancias_iguales, dist,
dist_punto_ini_punto_fin, primera_distancia);
} else {
if (distancias_iguales && dist_punto_ini_punto_fin == dist)
printf("El poligono es regular.\n");
else
printf("El poligono es irregular.\n");
}
return 0;
}

7
int esta_en_base_octal(int num){
int ult_digito;
do {
ult_digito = num % 10;
if (ult_digito >=8) return 0;
} while (num/=10);
return 1;
}

int convertir_base_octal_a_decimal(int num){


int ult_digito, res=0, cont=0;
do {
ult_digito = num % 10;
res += ult_digito * pow(8, cont++);
} while (num/=10);
return res;
}

8
double calcular_distancia_entre_dos_puntos(int x1, int y1, int x2, int y2){
return sqrt( pow(x2-x1 , 2) + pow (y2-y1, 2));
}

void determinar_imprimir_tipo_triangulo(int distancias_iguales, double dist,


double dist_punto_ini_punto_fin, double primera_distancia){
if (distancias_iguales && dist == dist_punto_ini_punto_fin)
printf ("Es un triangulo equilatero.\n");
else if ((distancias_iguales && dist != dist_punto_ini_punto_fin) ||
(!distancias_iguales && dist == dist_punto_ini_punto_fin) ||
(!distancias_iguales && primera_distancia == dist_punto_ini_punto_fin))
printf("Es un triangulo isosceles.\n");
else
printf("Es un triangulo escaleno.\n");
}

9
Ejercicio 2

Elaborar una aplicación que permita calcular los valores de Fibonacci y factorial
para un rango de valores

Evaluar funciones de un
rango de numeros

Leer datos Calcular funciones Mostrar


para un numero resultados

Calcular Calcular
fibonacci de factorial de
un numero un numero

10
11
12
13
14
15
16
Bibliografía

• Joyanes, L. (2008). Fundamentos de programación (4a. ed.).


Madrid: McGraw-Hill/Interamericana de España.
• Joyanes, L. y Zahonero, I. (2010). Programación en C, C++,
Java y UML (1a. ed.). México, D.F.: McGraw-
Hill/Interamericana Editores.
• Lopez, L. (2005). Programación estructurada en lenguaje C
(1a. ed.). México, D.F.: Alfaomega Grupo Editor.
• Correa, G. (1992). Desarrollo de algoritmos y sus
aplicaciones en Basic, Pascal, Cobol y C (3a. ed.). Santafé de
Bogotá: McGraw-Hill Interamericana.

17

También podría gustarte