Sei sulla pagina 1di 14

UNIVERSIDAD NACIONAL DE

INGENIERA
Facultad de Ingeniera Elctrica y Electrnica

Especialidad de Ingeniera Elctrica

Curso: PROGRAMACIN DIGITAL

Alumno: Vicente Horna, Antonio Francisco

Cdigo: 20162024G

Profesor Vilca Roman, Arturo Dionisio


:
Primera tarea de Programacin Digital
Informe:
Q
Seccin:

2017
Primera Tarea Programacin Digital MA-713 -Q
Alumno: Vicente Horna Antonio Francisco | Cdigo:20162024G | Especialidad: L1

1) Escriba en un programa en ANSI-C que determine si un ao es bisiesto. Un


ao es bisiesto si es mltiplo de 4 (por ejemplo: 2008). Sin embargo, los aos
mltiplos de 100 solo son bisiestos cuando a la vez son mltiplos de 400 (por
ejemplo, 1800 no es bisiesto, mientras que 2000 si lo es).

a) Ana lisis

Para este problema se usara el comando if (if simple), donde en el if se colocara las condiciones
para que un an o sea bisiesto, usando && y || para la unio n o interseccio n de condiciones.

b) Diagrama de flujo o pseudoco digo

Algoritmo: Tarea01

Entero: n

INICIO

Leer (n)

Si ((n%4==0 && n%100!=0) || n%400==0) hacer

Escribir (El ao es bisiesto)

Sino

Escribir (El ao no es bisiesto)

Fin si

Pa gina 2
c) Co digo Fuente (El co digo fue trasladado al notepad++)

#include <stdio.h>

int main (void){

int n;
printf("Digite el ao a analizar: ");
scanf("%d",&n);

if ((n%4==0 && n%100!=0)||n%400==0)


{
printf ("El ao es bisiesto");
}
else
{
printf ("El ao no es bisiesto");
}

return 0;
}

d) Verificacio n de la correcta compilacio n y ejecucio n del programa

Pa gina 3
e) Comentarios

Este programa me ha servido para darme cuenta de la importancia del && y || para reducir las
lneas de co digo y evitar usar los if anidados innecesariamente.

2) Escriba un programa en ANSI-C que muestre el da siguiente para el 2017.


El programa debe recibir 2 nmeros, digamos 15 y 4; los cuales representan
el 15 de abril, y por lo tanto, la salida del programa debera ser 16 de abril, el
da siguiente. Use tipos enumerados en el programa.

a) Ana lisis

En este programa se tendra en cuenta los meses que tienen 31 das, los meses que tienen 30 das,
y febrero, que en este an o 2017 tuvo 28 das.
Adema s, tambie n se tendra en cuenta el ultimo da del an o, es decir el 31 de diciembre.

b) Diagrama de flujo o pseudoco digo

Algoritmo Tarea02
Enteros: d, m, a, o
INICIO
Leer (d<-da)
Leer (m<-mes)
Si (d<32 && d>0 && m<=12 && m>0) hacer
Si (m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12)
Escribir (da siguiente, mes)
Sino (m==4 || m==6 || m==9 || m==11) hacer
Escribir (da siguiente, mes)
Sino (m==2)
Escribir (da siguiente, mes) para febrero
Sino
Escribir (Los datos no son lgicos)
Fin si

c) Co digo Fuente (El co digo fue trasladado al notepad++)

#include <stdio.h>

int main (void) {

int d,m;
int a,o;

Pa gina 4
printf("Ingrese el dia a analizar: ");
scanf("%d",&d);
printf("Ingrese el mes en el que se encuentra el dia digitado
anteriormente: ");
scanf("%d",&m);

a=d+1;
o=m+1;

if (d>0 && d<32 && m>0 && m<=12)


{

if (m==1||m==3||m==5||m==7||m==8||m==10||m==12)
{

if (m<12)
{
if (d<31 && m<12)
{
printf("\nEl dia es: %d y el mes es: %d",a,m);
}
else if (d==31 && m<12)
{
printf("\nEL dia es: 1 y el mes es: %d",o);
}
}
else if (d<31 && m==12)
{
printf("\nEl dia es: %d y el mes es: %d",a,m);
}
else
{
printf("\nEs 1 de enero del 2018\nFeliz ao nuevo :D");
}

else if (m==4||m==6||m==9||m==11)
{

if (d!=31)
{
if (d<30)
{
printf("\nEl dia es: %d y el mes es: %d",a,m);
}
else
{
printf("\nEl dia es: 1 y el mes es: %d",o);
}
}
else
{

Pa gina 5
printf("\nEl dia ingresado no existe");
}

else if (m==2)
{

if (d!=29 && d!=30 && d!=31 && d>0)


{
if (d<28)
{
printf("\nEl dia es: %d y el mes es: %d",a,m);
}
else
{
printf("\nEl dia es: 1 y el mes es: %d",o);
}
}
else
{
printf("\nEl dia ingresado no existe");
}

else
{
printf("\nLos datos ingresados no son logicos");
}

return 0;
}

d) Verificacio n de la correcta compilacio n y ejecucio n del programa

Pa gina 6
e) Comentarios

En este programa se ha hecho uso del if, else if y else, para el caso de los meses que tienen 30 dias,
31 dias y febrero (de 28 dias). Tambie n se ha refinado el programa para que, por ejemplo, si
ingresamos 31 12, el programa devuelva 1 13.
Se ha puesto e nfasis a la condicio n del problema, la cual dice que solo debera n ser digitados los
dias pertenecientes al 2017.
Se ha usado con cuidado los comandos if, else if y else para cooperar con la legibilidad del co digo.

3) Escriba un programa en ANSI-C que acepte un ao escrito en cifras


arbigas y visualice el ao escrito en nmeros romanos, dentro del rango de
1000 a 2000.

a) Ana lisis

Para este problema se usara el comando do-while, donde do le pedira al usuario que ingrese el
nu mero en el rango determinado; y while generara los bucles necesarios para encontrar las
centenas, decenas y unidades; para luego ser transformadas a notacio n romana. El switch que se
encuentra dentro del while permite generar casos para los cuales se puede escribir la notacio n
romana.

b) Diagrama de flujo o pseudoco digo

Algoritmo Tarea03
Entero: n, c=0

Pa gina 7
INICIO
Repetir
Leer (n)
Mientras (n>=1000 && n>2000)
Si (n==2000) hacer
Escribir (MM)
Sino
Escribir (M)
//Buscamos centenas
n=n-1000
Si (n>99) hacer
Repetir
n=n-100
c=c+1
Mientras (n>=100)
Segn valor (n) hacer
Valor 1
Escribir (C)
Valor 2
Escribir (CC)
Valor 3
Escribir (CCC)
..
Valor 9
Escribir (CM)
FinSegn _valor
//Buscando las decenas
c=0
Si (n>10) hacer
Repetir
n=n-10
c=c+1
Mientras (n>=10)
Segn valor (n) hacer
Valor 1
Escribir (X)
Valor 2
Escribir (XX)
Valor 3
Escribir (XXX)
..
Valor 9
Escribir (XC)
FinSegn _valor

//Buscando las unidades


c=0
Si (n!=0) hacer
Segn valor (n) hacer
Valor 1
Escribir (I)
Valor 2
Escribir (II)

Pa gina 8
Valor 3
Escribir (III)
..
Valor 9
Escribir (IX)
FinSegn _valor
FIN

c) Co digo Fuente (El co digo fue trasladado al notepad++)

#include <stdio.h>

int main (void){

int num, cont=0;


do
{
printf ("Digite un numero en el rango de 1000 a 2000: ");
scanf ("%d",&num);
}
while(num<1000 || num>2000);
if (num==2000)
{
printf("El numero digitado en numeracion romana es:MM");
}

else
{
// Buscando las centenas
printf("El numero digitado en numeracion romana es:M");

num=num-1000;
if (num> 99)
do
{
num = num - 100;
cont ++;
}

while (num >= 100);

switch (cont)
{
case 1: printf ("C"); break;
case 2: printf ("CC"); break;
case 3: printf ("CCC"); break;
case 4: printf ("CD"); break;
case 5: printf ("D"); break;
case 6: printf ("DC"); break;
case 7: printf ("DCC"); break;
case 8: printf ("DCCC"); break;

Pa gina 9
case 9: printf ("CM"); break;
default: break;
}
// Buscando las decenas
cont = 0;
if (num > 10)
do
{
num = num - 10;
cont ++;
}
while (num >= 10);

switch (cont)
{
case 1: printf ("X"); break;
case 2: printf ("XX"); break;
case 3: printf ("XXX"); break;
case 4: printf ("XL"); break;
case 5: printf ("L"); break;
case 6: printf ("LX"); break;
case 7: printf ("LXX"); break;
case 8: printf ("LXXX"); break;
case 9: printf ("XC"); break;
default: break;
}
// Buscando las unidades
cont=0;
if (num != 0)

switch (num)
{
case 1: printf ("I"); break;
case 2: printf ("II"); break;
case 3: printf ("III"); break;
case 4: printf ("IV"); break;
case 5: printf ("V"); break;
case 6: printf ("VI"); break;
case 7: printf ("VII"); break;
case 8: printf ("VIII"); break;
case 9: printf ("IX"); break;
default: break;
}
}
printf ("\n");

return 0;
}

Pa gina 10
d) Verificacio n de la correcta compilacio n y ejecucio n del programa

e) Comentarios

Este programa me ha servido para ver que el comando do while junto con el comando switch
permiten crear condiciones para mu ltiples casos que se pueden generar en un problema.
Se creo condiciones para que el programa no tenga errores cuando el usuario digite los valores
extremos de la condicio n, es decir, 1000 y 2000.
Tambie n se puso una condicio n para que el usuario se limite solo a colocar el an o entre 1000 y
2000, es decir, el usuario no puede desobedecer la condicio n.

Pa gina 11
4) Escriba un programa que encuentre la interseccin de una lnea y un
circulo. Dada la lnea y=ax+b, y el circulo x 2+y2=r2 , las soluciones pueden ser
igual a 0, 1 o 2; dependiendo de que la lnea y el circulo no se intersecten,
sean tangentes o se intersecten en dos puntos.

a) Ana lisis

En este problema se usara un dato implcito que se usa para hallar la interseccio n de dos lugares
geome tricos, el cual es el discriminante de la ecuacio n resultante luego de reemplazar la variable
de una ecuacio n en la otra.
Si el discriminante es mayor que cero, existira dos soluciones reales y distintas, es decir, dos
intersecciones.
Si el discriminante es igual a cero, existira una solucio n real, es decir, tan solo una interseccio n, por
lo tanto, se trata de dos lugares geome tricos tangentes.
Si el discriminante es menor que cero, entonces no existe ninguna solucio n real, es decir, no existe
interseccio n entre los dos lugares geome tricos.

f) Diagrama de flujo o pseudoco digo

Algoritmo Tarea04
Reales <-a
Reales <-b
Reales <-r
Reales <-D
Reales <-d
Reales <-x1
Reales <-x2
Reales <-y1
Reales <-y2

Escribir(a)
Escribir(b)
Escribir(r)

D=(4*(a*a*b*b)) - (4*(a*a +1)*(b*b - r*r))


d=raiz(D)

Si D>0 Entonces
x1=(-2*a*b + d)/(2*(a*a + 1));
y1=a*x1 + b;
x2=(-2*a*b - d)/(2*(a*a + 1));
y2=a*x2 + b;
Escribir La circunferencia con la recta se cortan en 2 puntos
Escribir Los puntos son x1,y1,x2,y2
sino D=0
Pa gina 12
x1=(-2*a*b + d)/(2*(a*a + 1));
y1=a*x1 + b;
Escribir La circunferencia con la recta se cortan en 1 puntos
Escribir Los puntos son x1,y1
Sino
Escribir La circunferencia y la recta no se cortan en ningun
punto
Fin Si

g) Co digo Fuente (El co digo fue trasladado al notepad++)

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

int main(void){

float a,b;
float r,D,d;
float x1,x2,y1,y2;
printf ("Sea la recta y=ax+b");
printf ("\nDigite el valor de a: ");
scanf ("%f",&a);
printf ("Digite el valor de b: ");
scanf ("%f",&b);
printf ("Dada la ecuacion de la circunferencia: x^2 + y^2 = r^2");
printf("\nDigite el valor del radio: ");
scanf ("%f",&r);

D=(4*(a*a*b*b)) - (4*(a*a +1)*(b*b - r*r));


d=sqrt(D);
if (D>0)
{
x1=(-2*a*b + d)/(2*(a*a + 1));
y1=a*x1 + b;
x2=(-2*a*b - d)/(2*(a*a + 1));
y2=a*x2 + b;

printf("La circunferencia y la recta se cortan en 2 puntos\n");


printf("\nLos puntos son:(%.2f,%.2f) y (%.2f,%.2f)",x1,y1,x2,y2);
}
else if (D==0)
{
x1=(-2*a*b + d)/(2*(a*a + 1));
y1=a*x1 + b;
printf("La circunferencia y la recta se cortan en 1 punto\n");
printf("\nLos puntos son:(%.2f,%.2f)",x1,y1);
}
else
{
printf("La circunferencia y la recta no se cortan en ningun
punto\n");
}

Pa gina 13
return 0;
}

h) Verificacio n de la correcta compilacio n y ejecucio n del programa

i) Comentarios

En este programa se ha vuelto a utilizar los comandos if, else if, y else; ya que el problema a mi
parecer se ha destinado a usar estos comandos.
El programa discierne de acuerdo a los valores que toma el discriminante del sistema de
ecuaciones para la interseccio n de la circunferencia y la recta.

Pa gina 14

Potrebbero piacerti anche