informática i: ejercicios resueltos

134
2012 Informática I: Ejercicios Resueltos Practica 1..................................................3 Ejercicio 1.1.................................................... 3 Ejercicio 1.2.................................................... 3 Ejercicio 1.3.................................................... 4 Ejercicio 1.4.................................................... 5 Ejercicio 1.5.................................................... 6 Ejercicio 1.6.................................................... 6 Ejercicio 1.7.................................................... 7 Ejercicio 1.8.................................................... 8 Ejercicio 1.9.................................................... 9 Ejercicio 1.10.................................................. 11 Ejercicio 1.11.................................................. 13 Ejercicio 1.12.................................................. 14 Ejercicio 1.13.................................................. 16 Ejercicio 1.14.................................................. 17 Ejercicio 1.15.................................................. 19 Ejercicio 1.16.................................................. 22 Ejercicio 1.17.................................................. 23 Ejercicio 1.18.................................................. 25 Ejercicio 1.19.................................................. 26 Ejercicio 1.20.................................................. 29 Practica 2.................................................31 Estructuras de repetición..................................31 Ejercicio 2.1................................................... 31 Ejercicio 2.2................................................... 31 Ejercicio 2.3................................................... 32 Ejercicio 2.4................................................... 33 Ejercicio 2.5................................................... 34 Ejercicio 2.6................................................... 35 Ejercicio 2.7................................................... 36 Ejercicio 2.8................................................... 38 1

Upload: alvin-jacobs

Post on 15-Jun-2015

1.776 views

Category:

Engineering


5 download

DESCRIPTION

Ejercicios resueltos informatica I UCA

TRANSCRIPT

Page 1: Informática I:  Ejercicios Resueltos

2012

Informática I: Ejercicios ResueltosPractica 1....................................................................................................................................... 3Ejercicio 1.1........................................................................................................................................3Ejercicio 1.2........................................................................................................................................3Ejercicio 1.3........................................................................................................................................4Ejercicio 1.4........................................................................................................................................5Ejercicio 1.5........................................................................................................................................6Ejercicio 1.6........................................................................................................................................6Ejercicio 1.7........................................................................................................................................7Ejercicio 1.8........................................................................................................................................8Ejercicio 1.9........................................................................................................................................9Ejercicio 1.10....................................................................................................................................11Ejercicio 1.11....................................................................................................................................13Ejercicio 1.12....................................................................................................................................14Ejercicio 1.13....................................................................................................................................16Ejercicio 1.14....................................................................................................................................17Ejercicio 1.15....................................................................................................................................19Ejercicio 1.16....................................................................................................................................22Ejercicio 1.17....................................................................................................................................23Ejercicio 1.18....................................................................................................................................25Ejercicio 1.19....................................................................................................................................26Ejercicio 1.20....................................................................................................................................29

Practica 2.................................................................................................................................... 31

Estructuras de repetición...................................................................................................... 31Ejercicio 2.1......................................................................................................................................31Ejercicio 2.2......................................................................................................................................31Ejercicio 2.3......................................................................................................................................32Ejercicio 2.4......................................................................................................................................33Ejercicio 2.5......................................................................................................................................34Ejercicio 2.6......................................................................................................................................35Ejercicio 2.7......................................................................................................................................36Ejercicio 2.8......................................................................................................................................38Ejercicio 2.9......................................................................................................................................39Ejercicio 2.10....................................................................................................................................40Ejercicio 2.11....................................................................................................................................42Ejercicio 2.12....................................................................................................................................44Ejercicio 2.13....................................................................................................................................46Ejercicio 2.14....................................................................................................................................47Ejercicio 2.15....................................................................................................................................49

1

Page 2: Informática I:  Ejercicios Resueltos

2012

Ejercicio 2.16....................................................................................................................................50Ejercicio 2.17....................................................................................................................................52Ejercicio 2.18....................................................................................................................................54Ejercicio 2.19....................................................................................................................................55Ejercicio 2.20....................................................................................................................................56Ejercicio 2.21....................................................................................................................................57

Practica 3.................................................................................................................................... 59

Arreglos....................................................................................................................................... 59Ejercicio 3.1......................................................................................................................................59Ejercicio 3.2......................................................................................................................................60Ejercicio 3.3......................................................................................................................................60Ejercicio 3.4......................................................................................................................................66Ejercicio 3.5......................................................................................................................................75Ejercicio 3.6......................................................................................................................................77Ejercicio 3.7......................................................................................................................................79

Practica 4.................................................................................................................................... 81

Funciones.................................................................................................................................... 81Ejercicio 4.1......................................................................................................................................81Ejercicio 4.2......................................................................................................................................82Ejercicio 4.3......................................................................................................................................84Ejercicio 4.4.................................................................................................................................86Ejercicio 4.5......................................................................................................................................88Ejercicio 4.6......................................................................................................................................88Ejercicio 4.7......................................................................................................................................90Ejercicio 4.8......................................................................................................................................92Ejercicio 4.9......................................................................................................................................94Ejercicio 4.10....................................................................................................................................95Ejercicio 4.11....................................................................................................................................96Ejercicio 4.12....................................................................................................................................98Ejercicio 4.13..................................................................................................................................107Ejercicio 4. 14...........................................................................................................................112

2

Page 3: Informática I:  Ejercicios Resueltos

2012

Practica 1

Ejercicio 1.1Elaborar un programa en el que se ingrese un número y que muestre el resto de dividirlo por 2. Lodebe mostrar justificado hacia la derecha en 10 espacios.

#include <stdio.h>

#include <stdlib.h>

int main()

{

int num;

printf("Por favor, ingrese el numero:\n");

scanf("%d", &num);

printf(" %d/2=%d\n resto:%d", num, num/2, num%2);

return 0;

}

Ejercicio 1.2Realizar un programa en el que se ingrese la base y la altura de un triángulo e informe susuperficie. El programa debe imprimir una leyenda que incluya los datos de entrada y el resultadocon una precisión de 2 dígitos decimales.Ejemplo:Ingrese la base del triángulo: 8Ingrese la altura del triángulo: 5La superficie del triangulo de base 7 y altura 5 es 17.50

#include <stdio.h>

#include <stdlib.h>

3

Page 4: Informática I:  Ejercicios Resueltos

2012

int main()

{

double base, alt, sup;

printf("Ingrese la base del triangulo:");

scanf("%lf", &base);

printf("Ingrese la altura del triangulo:");

scanf("%lf", &alt);

sup=base*alt/2;

printf("La superficie del triangulo de base %.2lf y altura %.2lf es %.2lf", base, alt, sup);

return 0;

}

Ejercicio 1.3Elaborar un programa en el que se ingrese por teclado un número real y, a continuación, semuestre la parte entera de dicho número y la parte fraccionaria (por separado).Ejemplo:Ingrese numero: 48.151Parte entera: 48Parte fraccionaria: 0.151

#include <stdio.h>

#include <stdlib.h>

int main()

{

double num, Fnum, Enum;

printf("Ingrese numero: ");

scanf("%lf", &num);

Fnum=num-(int)num;

4

Page 5: Informática I:  Ejercicios Resueltos

2012

Enum=num-Fnum;

printf("Parte entera: %g\n", Enum);

printf("Parte fraccionaria: %g\n", Fnum);

return 0;

}

Ejercicio 1.4Desarrollar un programa en el que se ingrese un número de 5 dígitos y que luego muestre cadadígito separado por un guión.Ejemplo:Ingrese numero: 45212Separacion en dígitos: 4-5-2-1-2.

#include <stdio.h>

#include <stdlib.h>

int main()

{

int num, num1, num2, num3, num4, num5;

printf("Ingrese numero: ");

scanf("%d", &num);

num5=num%10;

num=num/10;

num4=num%10;

num=num/10;

num3=num%10;

num=num/10;

num2=num%10;

num=num/10;

num1=num%10;

5

Page 6: Informática I:  Ejercicios Resueltos

2012

//lo hice asi choto a proposito podria haber validado y usado un while. includo un arreglo.

printf("Separacion en digitos: %d-%d-%d-%d-%d.\n", num1, num2, num3, num4, num5);

return 0;

}

Ejercicio 1.5Hacer un programa en el que se ingrese la medida de los catetos de un triángulo rectángulo y quese calcule y muestre el perímetro de dicho triángulo. Incluir math.h a fin de utilizar la funciónsqrt(expresión) que calcula la raíz cuadrada de un número.

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

int main()

{

double ct1,ct2, perim;

printf("Ingrese el primer cateto: ");

scanf("%lf", &ct1);

printf("Ingrese el segundo cateto: ");

scanf("%lf", &ct2);

perim=ct1+ct2+sqrt(ct1*ct1+ct2*ct2);

printf("El perimetro del triangulo ingresado mide %.2lf", perim);

return 0;

}

Ejercicio 1.6

6

Page 7: Informática I:  Ejercicios Resueltos

2012

Elaborar un programa en el que se ingrese una cantidad expresada en segundos y luego laexprese en días, horas, minutos y segundos.Ejemplo:Ingrese tiempo en segundos: 937141 dia(s), 2 hora(s), 1 minuto(s), 54 segundo(s).

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

int main()

{

int num, seg, dias, horas, min;

printf("Ingrese tiempo en segundos: ");

scanf("%d", &num);

seg=num%60;

num=num/60;

min=num%60;

num=num/60;

horas=num%24;

dias=num/24;

printf("%d dia(s), %d hora(s), %d minuto(s), %dsegundo(s)", dias, horas, min, seg);

return 0;

}

Ejercicio 1.7Desarrollar un programa en el que se ingresen dos números enteros positivos y que genere ymuestre un tercer numero que esté compuesto por las unidades del primer número y por lasdecenas del segundo.

Ejemplo:

7

Page 8: Informática I:  Ejercicios Resueltos

2012

Ingrese el primer numero: 427Ingrese el segundo numero: 52El numero resultante es: 57

#include <stdio.h>

#include <stdlib.h>

int main()

{

int num1, num2, res;

printf("Ingrese el primer numero: ");

scanf("%d", &num1);

printf("Ingrese el segundo numero: ");

scanf("%d", &num2);

num2=num2/10;

num2=num2%10;

num1=num1%10;

res=num1+num2*10;

printf("El numero resultante es: %d", res);

return 0;

}

Ejercicio 1.8Hacer un programa que calcule las raíces reales de una ecuación cuadrática. El usuario ingresarálos coeficientes a, b y c tal que ax² + bx + c=0. Cuando las raíces no sean reales, se mostrará unmensaje indicando esta situación.Ejemplo:Ingrese coeficiente a: 2Ingrese coeficiente b: 3Ingrese coeficiente c: 1La raíz 1 es: 0.50La raíz 2 es: 1.00

#include <stdio.h>

8

Page 9: Informática I:  Ejercicios Resueltos

2012

#include <stdlib.h>

#include <math.h>

int main()

{

double a, b, c, x1, x2, d;

printf("Ingrese coeficiente a: ");

scanf("%lf", &a);

printf("Ingrese coeficiente b: ");

scanf("%lf", &b);

printf("Ingrese coeficiente c: ");

scanf("%lf", &c);

d=b*b-4*a*c;

if(d<0)

{

printf("Las raices no son reales.");

}

else

{

d=sqrt(d);

x1=(b+d)/(2*a);

x2=(b-d)/(2*a);

printf("La raíz 1 es: %.2lf", x1);

printf("\nLa raíz 2 es: %.2lf", x2);

}

return 0;

9

Page 10: Informática I:  Ejercicios Resueltos

2012

}

Ejercicio 1.9Escriba un programa en el que se ingresen 2 números y un carácter (+,-,*,/) e informe el resultadode la operación.Ejemplo:Ingrese el primer número: 8Ingrese el segundo número: 2Ingrese la operación (+,-,*, /): +8 + 2 =10

#include <stdio.h>

#include <conio.h>

int main()

{

int num1, num2;

char sign;

printf("Ingrese el primer numero: ");

scanf("%d", &num1);

printf("Ingrese el segundo numero: ");

scanf("%d", &num2);

printf("Ingrese la operacion (+,-,*, /): ");

sign=getche();

printf("\n");

switch (sign)

{

case '+':

printf("%d+%d=%d",num1, num2, num1+num2);

10

Page 11: Informática I:  Ejercicios Resueltos

2012

break;

case '-':

printf("%d-%d=%d",num1, num2, num1-num2);

break;

case '*':

printf("%d*%d=%d",num1, num2, num1*num2);

break;

case '/':

if (num2!=0)

printf("%d/%d=%d",num1, num2, num1/num2);

else

printf("El denominador no puede ser igual a 0");

break;

default:

printf("El caracter ingresado es incompatible");

break;

}

return 0;

}

Ejercicio 1.10Realizar un programa en el que se ingresen por teclado 3 letras que pueden ser mayúsculas ominúsculas (no necesariamente todas del mismo tipo). A continuación el programa deberá indicarcuál se encuentra primero en el alfabeto.

#include <stdio.h>

#include <conio.h>

11

Page 12: Informática I:  Ejercicios Resueltos

2012

//el programa verifica el dato pero muy primitivamente... necesitaria un while para hacerlo en serio.

int main()

{

char let1, let2, let3,l1, l2, l3;

printf("Ingrese la primer letra: ");

l1=getche();

if(l1>='a'&&l1<='z')

let1=l1;

else

{

if(l1>='A'&&l1<='Z')

let1=l1+32;

}

printf("\nIngrese la segunda letra: ");

l2=getche();

if(l2>='a'&&l2<='z')

let2=l2;

else

{

if(l2>='A'&&l2<='Z')

let2=l2+32;

}

printf("\nIngrese la tercera letra: ");

l3=getche();

if(l3>='a'&&l3<='z')

12

Page 13: Informática I:  Ejercicios Resueltos

2012

let3=l3;

else

{

if(l3>='A'&&l3<='Z')

let3=l3+32;

}

if(let1<let2&&let1<let3)

printf("\nLa letra que aparece primero en el alfabeto es '%c'", l1);

else

{

if(let2<let1&&let2<let3)

printf("\nLa letra que aparece primero en el alfabeto es '%c'", l2);

else

{

if(let3<let2&&let3<let1)

printf("\nLa letra que aparece primero en el alfabeto es '%c'", l3);

}

}

return 0;

}

Ejercicio 1.11Hacer un programa en el que se ingrese un número real y que se muestre si el número espositivo, negativo o cero. Adicionalmente deberá indicar si es natural, entero o real.Ejemplo:Ingrese un número: 13.4El número es positivo y real.

#include <stdio.h>

13

Page 14: Informática I:  Ejercicios Resueltos

2012

#include <stdlib.h>

int main()

{

double num;

printf("Ingrese numero\n");

scanf("%lf", &num);

if(num>0)

{

if(num-(int)num==0)

printf("el numero es positivo y natural");

else

printf("el numero es positivo y real");

}

else

{

if(num==0)

printf("el numero es 0");

else

if(num-(int)num==0)

printf("el numero es negativo y entero");

else

printf("el numero es negativo y real");

}

return 0;

}

14

Page 15: Informática I:  Ejercicios Resueltos

2012

número es positivo y real.

Ejercicio 1.12Realizar un programa que solicite al usuario ingresar una letra. Si la letra es mayúscula, debeconvertirla a minúscula y viceversa. Luego deberá informar si la letra ingresada es una vocal o unaconsonante. Cualquier otro caracter ingresado debe ser impreso sin modificaciones peroindicando que no se trata de una letra.

Ejemplo 1:Ingrese una letra: aLa letra ingresada es una vocal. Su mayúscula es A.Ejemplo 2:Ingrese una letra: $No se ingresó una letra.

#include <stdio.h>

#include <stdlib.h>

int main()

{

char letr;

printf("Ingrese una letra: ");

letr=getche();

printf("\n");

if(letr>='a'&&letr<='z')

{

if(letr=='a'||letr=='e'||letr=='i'||letr=='o'||letr=='u')

printf("la letra ingresada el vocal. Su mayuscula es %c", letr-32);

else

printf("La letra ingresada el consonante. Su mayuscula es %c", letr-32);

}

else

15

Page 16: Informática I:  Ejercicios Resueltos

2012

{

if(letr>='A'&&letr<='Z')

{

if(letr=='A'||letr=='E'||letr=='I'||letr=='O'||letr=='U')

printf("la letra ingresada el vocal. Su minuscula es %c", letr+32);

else

printf("La letra ingresada el consonante. Su minuscula es %c", letr+32);

}

else

printf("El caracter no es una letra");

}

return 0;

}

Ejercicio 1.13Realizar un programa en el que se ingresen dos números enteros positivos. Luego deberá restarel mayor del menor e indicar si dicha diferencia es un valor que está entre ambos números (esdecir, es mayor que el más chico y menor que el más grande de los ingresados).

#include <stdio.h>

#include <stdlib.h>

int main()

{

int num1, num2, res;

printf("Ingrese un numero: ");

scanf("%d", &num1);

16

Page 17: Informática I:  Ejercicios Resueltos

2012

printf("Ingrese otro numero: ");

scanf("%d", &num2);

if(num1>=num2)

{

res=num1-num2;

if(res>=num2&&res<=num1)

printf("\nEl numero resultante de la resta esta entre los dos intresados");

else

printf("\nEl numero resultante de la resta NO esta entre los dos intresados");

}

else

{

res=num2-num1;

if(res>=num1&&res<=num2)

printf("\nEl numero resultante de la resta esta entre los dos intresados");

else

printf("\nEl numero resultante de la resta NO esta entre los dos intresados");

}

return 0;

}

Ejercicio 1.14Elaborar un programa que calcule el impuesto que se aplica a una cierta compra de la siguienteforma:• Si el importe de una compra es mayor a $500.- el impuesto será del 16%.• En caso contrario, el impuesto será del 18%.

17

Page 18: Informática I:  Ejercicios Resueltos

2012

Sin embargo, ante la escasez de monedas de 1 centavo, el importe final de la compra debe serredondeado, en favor del cliente, hasta un múltiplo de 5 centavos. Es decir, si el importe fuera de$5,17.- entonces la suma a abonar sería $5,15.-. El programa debe solicitar el ingreso de lacompra y calcular y mostrar el subtotal (compra + impuesto) y el total a abonar (subtotalredondeado).Ejemplo:Valor de la compra: 521Subtotal: 604.36Importe a abonar: 604.35

#include <stdio.h>

#include <stdlib.h>

//lo hice pensando en el redondeo clasico. si queres redondeo del tipo q hacen en el supermercado, hasta seria mas facil. if(num>5){num=5;}else{num=0;}

int main()

{

double compra, subtotal, importe, num;

printf("Valor de la compra: ");

scanf("%lf", &compra);

if(compra>500)

{

subtotal=compra+compra*0.16;

}

else

{

subtotal=compra+compra*0.18;

}

num=subtotal*10;

importe=(int)num;

18

Page 19: Informática I:  Ejercicios Resueltos

2012

num=subtotal*100-importe*10;

if(num>=2.5&&num<=7.5)

{

num=5;

}

else

{

if(num>7.5)

num=10;

else

num=0;

}

importe=importe/10+num/100;

printf("\nSubtotal: %.2lf", subtotal);

printf("\nImporte a abonar: %.2lf", importe);

return 0;

}

Ejercicio 1.15Realizar un programa que solicite una fecha. El usuario ingresará el día, el mes y el año porseparado. Luego el programa mostrará una leyenda que indique si la fecha ingresada es válida.Ejemplo:Ingrese el día: 29Ingrese el mes: 2Ingrese el año: 2000La fecha es correcta.Casos de prueba para (verificar si el ejercicio fue hecho correctamente)29/2/2000 es correcta31/4/2008 es incorrecta28/2/2000 es correcta32/7/2005 es incorrecta

19

Page 20: Informática I:  Ejercicios Resueltos

2012

29/2/2012 es correcta8/13/2007 es incorrecta5/12/1903 es correcta29/2/1900 es incorrectaAyuda: Para saber si un año es bisiesto: Si el año es divisible por 4, es bisiesto siempre y cuandono sea divisible por 100. Cuando el año es divisible por 100 también debe ser divisible por 400.Por ejemplo: el año 2000 es bisiesto pero el 1800 no lo es.

#include <stdio.h>

#include <stdlib.h>

int main()

{

int dia, mes, anio, sen=0;

printf("Ingrese el dia: ");

scanf("%d", &dia);

printf("Ingrese el mes: ");

scanf("%d", &mes);

printf("Ingrese el anio: ");

scanf("%d", &anio);

if(anio%4==0)

{

if(anio%100==0)

{

if(anio%400==0)

sen=1;

}

else

{

20

Page 21: Informática I:  Ejercicios Resueltos

2012

sen=1;

}

}

if(mes<=12)

{

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

{

if(dia<=31)

printf("%d/%d/%d es correcta", dia, mes, anio);

else

printf("%d/%d/%d es incorrecta", dia, mes, anio);

}

else

{

if(mes==2)

{

if(dia<=28)

printf("%d/%d/%d es correcta", dia, mes, anio);

else

{

if(sen==1&&dia<=29)

printf("%d/%d/%d es correcta", dia, mes, anio);

else

printf("%d/%d/%d es incorrecta", dia, mes, anio);

}

21

Page 22: Informática I:  Ejercicios Resueltos

2012

}

else

{

if(dia<=30)

printf("%d/%d/%d es correcta", dia, mes, anio);

else

printf("%d/%d/%d es incorrecta", dia, mes, anio);

}

}

}

return 0;

}

Ejercicio 1.16Elaborar un programa que solicite al usuario que ingrese un número real y luego muestre elRedondeo al entero más próximo de dicho número, el Piso y el Techo.DefinicionesRedondeo: Si la parte decimal es mayor o igual a 0,5, se redondea hacia arriba. Caso contrario,hacia abajo.Piso: El entero más próximo hacia abajo.Techo: El entero más próximo hacia arriba.Casos de prueba para (verificar si el ejercicio fue hecho correctamente):Ejemplo 1:Ingrese un numero real: 5.3Redondeo = 5Piso = 5Techo = 6Ejemplo 2:Ingrese un numero real: 8Piso = 8Techo = 8Redondeo = 8Ejemplo 3:Ingrese un numero real: 8.92Piso = 8Techo = 9

22

Page 23: Informática I:  Ejercicios Resueltos

2012

Redondeo = 9Ejemplo 4:Ingrese un numero real: 8.6Piso = 9Techo = 8Redondeo = 9

#include <stdio.h>

#include <stdlib.h>

int main()

{

double num;

int piso, techo, redondeo;

printf("Ingrese el numero: ");

scanf("%lf", &num);

if(num-(int)num>=0.5)

redondeo=num+1;

else

redondeo=num;

piso=num;

techo=num+1;

printf("\nRedondeo: %d", redondeo);

printf("\nTecho: %d", techo);

printf("\nPiso: %d", piso);

return 0;

}

Ejercicio 1.17Realizar un programa que solicite 3 notas de parciales obtenidas por un alumno. A continuación

23

Page 24: Informática I:  Ejercicios Resueltos

2012

se mostrará por pantalla un mensaje que indique la situación del alumno:• Si el alumno aprobó los 3 parciales (nota 4 o más) y su promedio es mayor a 7,promociona la materia con la nota promedio.• Si el alumno aprobó los 3 parciales pero su promedio no supera los 7 puntos, debe rendirexamen final.• Si el alumno no aprobó uno o más parciales, se solicitará que se ingrese la nota de unrecuperatorio. Si éste hubiera sido aprobado, se informará el promedio general (3 parciales+ el recuperatorio) y su condición de aprobado (aún cuando el promedio no supere los 4puntos). Si no hubiera aprobado el recuperatorio se informará que el alumno fue aplazado.

Ejemplo:Ingrese la nota del primer parcial: 2Ingrese la nota del segundo parcial: 6Ingrese la nota del tercer parcial: 2Ingrese la nota del recuperatorio: 4Promedio general = 3.5. El alumno deberá rendir final.

#include <stdio.h>

#include <stdlib.h>

int main()

{

int nota1, nota2, nota3, notar;

double prom;

printf("Ingrese la nota del primer parcial: ");

scanf("%d", &nota1);

printf("Ingrese la nota del segundo parcial: ");

scanf("%d", &nota2);

printf("Ingrese la nota del tercer parcial: ");

scanf("%d", &nota3);

24

Page 25: Informática I:  Ejercicios Resueltos

2012

if(nota1<4||nota2<4||nota3<4)

{

printf("Ingrese la nota del recuperatorio: ");

scanf("%d", &notar);

prom=(nota1+nota2+nota3+notar)/4.0;

}

else

prom=(nota1+nota2+nota3)/3.0;

printf("Promedio general: %.2lf.", prom);

if(prom<4)

printf(" El alumno debera presentarse a final:");

else

printf(" El alumno ha aprovado y no debe presentarse a final.");

return 0;

}

Ejercicio 1.18Una empresa necesita calcular un bono que dará a sus empleados a fin de este año. Para ello sesigue el siguiente criterio:• Si el sueldo supera los $2000, el bono será del 15%. De lo contrario, el bono será del 20%.• Si el empleado tiene hijos se suma un plus del 5% del sueldo.• Si el empleado pertenece a la categoría 1, 2 ó 3, recibe un 10% del sueldo. Si pertenece ala categoría 4, 5 ó 6, recibe un 12% del sueldo. Si es de la categoría 7, 8 ó 9, recibe un20% del sueldo pero no cobra el plus por tener hijos.Realizar el programa que solicite la información necesaria para calcular el sueldo final. Finalmenteel programa mostrará el total a pagarle al empleado (sueldo + bono).Ejemplo:Ingrese el sueldo: 1000Tiene hijos (s/n)?: sIngrese categoría (19):2

25

Page 26: Informática I:  Ejercicios Resueltos

2012

El sueldo total será de $1350.00

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

int main()

{

int sueldo, categoria;

char op;

double bono;

printf("Ingrese el sueldo: ");

scanf("%d", &sueldo);

printf("Tiene hijos (s/n)?: ");

op=getche();

printf("\nIngrese categoria (1-9): ");

scanf("%d", &categoria);

if(sueldo>2000)

bono=sueldo*0.15;

else

bono=sueldo*0.2;

if(op=='s'&&categoria!=7&&categoria!=8&&categoria!=9)

bono=bono+sueldo*0.05;

if(categoria==1||categoria==2||categoria==3)

bono=bono+sueldo*0.1;

else

{

26

Page 27: Informática I:  Ejercicios Resueltos

2012

if(categoria==4||categoria==5||categoria==6)

bono=bono+sueldo*0.12;

else

bono=bono+sueldo*0.2;

}

printf("El sueldo total sera de %.2lf", bono+sueldo);

return 0;

}

Ejercicio 1.19Según las normas de tránsito, un automóvil no puede superar la velocidad máxima ni circular amenos que la velocidad mínima (que es la mitad de la velocidad máxima). Por una cuestión deerrores de medición (tanto en el automóvil como en los dispositivos de control) hay un 15%de tolerancia. Sin embargo, se permite que los vehículos en emergencia (ambulancias, patrulleros,etc.) superen la velocidad máxima (no así, circular a menos que la velocidad mínima). Hacer unprograma en el que se ingrese la velocidad a la que circula un vehículo, la velocidad máximapermitida y si se trata o no de un vehículo en emergencia (contestando con “S” o “N” enmayúscula o minúscula). Luego determinar el tipo de multa e imprimir el correspondiente mensajesegún el siguiente criterio:• Si la velocidad está entre la máxima y la mínima (ambas inclusive), “No recibe multa”.• Si la velocidad está dentro de la tolerancia máxima (superando la máxima hasta el 15%,por ejemplo, para máxima de 60 km/h la tolerancia llega hasta 69 km/h), “Recibeadvertencia”. No se aplica si es un vehículo en emergencia que, en este caso, “No recibemulta”.• Si la velocidad dentro de la tolerancia mínima (hasta 15% por debajo de la velocidadmínima), “Recibe advertencia”. Este caso es independiente del tipo de vehículo.

27

Page 28: Informática I:  Ejercicios Resueltos

2012

• Si supera la velocidad máxima y el límite de tolerancia, “Recibe multa por exceso develocidad”. No se aplica si es un vehículo en emergencia que, en este caso, “No recibemulta”.• Si excede la tolerancia de velocidad mínima, “Recibe multa por entorpecer el tránsito”. Estecaso es independiente del tipo de vehículo.

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

int main()

{

char categoria;

double veiculo, velmax;

printf("Ingrese la velocidad del veiculo: ");

scanf("%lf", &veiculo);

printf("Es un veiculo de emergencia (s/n)?: ");

categoria=getche();

printf("\nIngrese la velocidad maxima: ");

scanf("%lf", &velmax);

if(categoria=='n'||categoria=='N')

{

if(veiculo<=velmax&&veiculo>=velmax/2)

printf("No recibe multa");

else

{

if(veiculo<=velmax+velmax*0.15&&veiculo>=velmax/2-((velmax/2)*0.15))

28

Page 29: Informática I:  Ejercicios Resueltos

2012

printf("Recive advertencia");

else

{

if(veiculo>velmax+velmax*0.15)

printf("Recibe multa por exceso de velocidad");

else

printf("Recibe multa por entorpecer el tránsito");

}

}

}

else

{

if(categoria=='s'||categoria=='S')

{

if(veiculo>=velmax/2)

printf("No recibe multa");

else

{

if(veiculo>=velmax/2-((velmax/2)*0.15))

printf("Recive advertencia");

else

printf("Recibe multa por entorpecer el tránsito");

}

}

29

Page 30: Informática I:  Ejercicios Resueltos

2012

else

printf("\nCaracter ingresado incompatible");

}

return 0;

}

Ejercicio 1.20Hacer un programa que ayude a decidir a un alumno si debe o no debe atender su teléfono celularcuando suena, en base a las condiciones que se enumeran a continuación. El programa debepreguntar al alumno lo siguiente:¿Es de mañana?¿El llamado es de tu casa?¿Estás en clase en este momento?El usuario debe contestar a esas preguntas con ‘s’ o ‘n’ (tener en cuenta que el usuario puedecontestar en minúsculas o mayúsculas.) El criterio para decidir si se atiende o no el teléfono es elsiguiente: El alumno normalmente atiende el teléfono, con excepción de los llamados recibidosdurante la mañana (que no los atiende.) Ahora bien, si lo están llamando de la casa, el alumnodebe atender igual sin importar el momento del día, a menos que en el momento que suena seencuentre en clase, en cuyo caso no atiende (NUNCA se debe atender el teléfono cuando se estáen clase.). Realizar el programa que haga esas preguntas al usuario y que muestre el mensaje“DEBE ATENDER” o “NO DEBE ATENDER” según corresponda.

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

int main()

{

char manana, casa, clase;

30

Page 31: Informática I:  Ejercicios Resueltos

2012

printf("Por favor, responda las siguientes preguntas con 's' o 'n' segun corresponda\n");

printf("\nEs de maniana?: ");

manana=getche();

printf("\nEl llamado es de tu casa?: ");

casa=getche();

printf("\nEstas en clase en este momento?: ");

clase=getche();

printf("\n");

if(clase=='s'||clase=='S')

{

printf("NO DEBE ATENDER");

}

else

{

if(casa=='s'||casa=='S')

{

printf("DEBE ATENDER");

}

else

{

if(manana=='s'||manana=='S')

{

printf("NO DEBE ATENDER");

}

else

{

31

Page 32: Informática I:  Ejercicios Resueltos

2012

printf("DEBE ATENDER");

}

}

}

return 0;

}

Practica 2

Estructuras de repetición

Ejercicio 2.1Elaborar un programa que solicite al usuario que ingrese un número entero y determine si el mismo es un número primo.#include <stdio.h>#include <stdlib.h>

int main(){ int num, cont=0, div; printf("Ingrese el numero:"); scanf("%d", &num); for(div=1; div<=num; div++) { if(num%div==0) cont++; } if(cont<=2) printf("Es primo"); else printf("No es primo"); return 0;}

Ejercicio 2.2Escribir un programa que encuentre los primeros 4 números perfectos. Un número perfecto es un

32

Page 33: Informática I:  Ejercicios Resueltos

2012

entero positivo, que es igual a la suma de todos los enteros positivos (excluido él mismo) que sondivisores del número. Por ejemplo, el primer número perfecto es 6, ya que los divisores de 6 son 1,2, 3 y 1 + 2 + 3 = 6.

#include <stdio.h>#include <stdlib.h>

int main(){ int num, cont=0, cont2=1, div; for(num=2; cont2<=4 ; num++) { for(div=1;div<num;div++) { if(num%div==0) cont=cont+div; } if(cont==num) { cont2++; printf("El %d es un numero perfecto\n", num); } cont=0; }

return 0;}

Ejercicio 2.3Hacer un programa que encuentre e imprima un listado con todos los números de 4 cifras quecumplan la condición de que la suma de las cifras de orden impar es igual a la suma de las cifras deorden par. Por ejemplo, el número 7821 cumple esta condición ya que 7 + 2 = 8 + 1.

#include <stdio.h>

#include <stdlib.h>

33

Page 34: Informática I:  Ejercicios Resueltos

2012

int main()

{

int num, s1,s2,s3,s4;

for(num=1000; num<10000; num++)

{

s1=num%10;

s2=(num%100-s1)/10;

s3=(num%1000-s2*10-s1)/100;

s4=(num-s1-s2*10-s3*100)/1000;

if(s1+s2==s3+s4)

printf("%d\n", num);

}

return 0;

}

Ejercicio 2.4Realizar un programa en el que se ingresa una letra a buscar y luego un texto de tamaño indefinido(hasta ingresar punto). Luego, el programa debe informar cuántas apariciones de la letra hay en esetexto.Ejemplo:Ingrese la letra a contar: aIngrese el texto: La bella y graciosa moza, marchose a lavar laropa.La letra “a” aparece 11 veces.

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

int main()

34

Page 35: Informática I:  Ejercicios Resueltos

2012

{

char letra, texto;

int cont=0;

printf("Ingrese la letra a buscar: ");

letra=getche();

printf("\nIngrese el texto: (punto para terminar) \n");

do

{

texto=getche();

if(texto==letra)

cont++;

}while(texto!='.');

printf("\nla letra '%c' aparece %d veces en el texto.", letra, cont);

return 0;

}

Ejercicio 2.5Realizar un programa en el que se ingresa un texto de longitud indefinida (hasta ingresar asterisco).Luego debe informarse por pantalla cuántas de sus letras fueron mayúsculas y cuántas fueronminúsculas. Por ejemplo, para el texto “Hola Mundo” debe obtenerse 2 mayúsculas y 7 minúsculas

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

int main()

35

Page 36: Informática I:  Ejercicios Resueltos

2012

{

char texto;

int contmin=0, contmay=0;

printf("\nIngrese el texto: ('*' para terminar) \n");

do

{

texto=getche();

if(texto>='a'&&texto<='z')

contmin++;

else

{

if(texto>='A'&&texto<='Z')

contmay++;

}

}while(texto!='*');

printf("\nEn el texto ingresado hay %d minusculas y %d mayusculas ", contmin, contmay);

return 0;

}

Ejercicio 2.6Realizar un programa en el que se ingresa un texto de longitud indefinida (hasta ingresar ENTER).Luego informar cuántas de las letras ingresadas fueron vocales (contar tanto mayúsculas comominúsculas) y cuántas fueron consonantes (contar tanto mayúsculas como minúsculas). Porejemplo, para el texto “Kate Austen fue una de las 6 sobrevivientes del Oceanic 815” debeinformarse que hay 22 vocales y 23 consonantes.

36

Page 37: Informática I:  Ejercicios Resueltos

2012

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

int main()

{

char texto;

int contvoc=0, contcons=0;

printf("\nIngrese el texto: (ENTER para terminar) \n");

do

{

texto=getche();

if(texto>='a'&&texto<='z'||texto>='A'&&texto<='Z')

{

if(texto=='a'||texto=='A'||texto=='e'||texto=='E'||texto=='i'||texto=='I'||texto=='o'||texto=='O'||texto=='u'||texto=='U')

contvoc++;

else

contcons++;

}

}while(texto!='\r');

printf("\nEn el texto ingresado hay %d vocales y %d consonantes ", contvoc, contcons);

return 0;

}

37

Page 38: Informática I:  Ejercicios Resueltos

2012

Ejercicio 2.7Construir un programa en el que se ingresen números enteros hasta que se hayan ingresado 5números pares e informar si alguno de ellos es también múltiplo de cuatro.

#include <stdio.h>

#include <stdlib.h>

int main()

{

int num, cont=0, sen=0, div;

do

{

printf("Ingrese numero: ");

scanf("%d", &num);

if (num%2==0&&num!=0)

cont++;

if(num>=0)

{

div=0;

do

{

div++;

if(div*4==num)

sen=1;

}while(div*4<=num);

}

else

38

Page 39: Informática I:  Ejercicios Resueltos

2012

{

div=0;

do

{

div--;

if(div*4==num)

sen=1;

}while(div*4>=num);

}

}while(cont<=4);

if(sen==1)

printf("Hay por lo menos un multiplo de 4\n");

else

printf("No hay multiplos de 4");

return 0;

}

Ejercicio 2.8Escribir un programa que reciba una cantidad indefinida de números enteros positivos hasta que seingresa el 0. A continuación el programa debe indicar cuál fue el mayor y cuál el menor.

#include <stdio.h>

#include <stdlib.h>

int main()

39

Page 40: Informática I:  Ejercicios Resueltos

2012

{

int num, may, men, sen=0;

printf("Ingrese numero: ");

scanf("%d", &num);

if(num!=0)

{

may=num;

men=num;

}

else

{

printf("No se ingresaron valores utiles.");

sen=1;

}

while(num!=0)

{

printf("Ingrese numero: ");

scanf("%d", &num);

if(num>may)

may=num;

if(num<men&&num!=0)

men=num;

}

if(sen==0)

printf("El mayor fue %d y el menor fue %d", may, men);

return 0;

40

Page 41: Informática I:  Ejercicios Resueltos

2012

}

Ejercicio 2.9Armar un programa en el que se ingrese un número entero decimal (base diez) y convertirlo abinario.

#include <stdio.h>

#include <stdlib.h>

int main()

{

int num, pot=1, bin=0, guard_num;

printf("Ingrese numero: ");

scanf("%d", &num);

guard_num=num;

while(num>0)

{

bin=bin+(num%2*pot);

pot=pot*10;

num=num/2;

}

printf("El numero %d(10) es igual al numero %d(2)", guard_num, bin);

return 0;

}

Ejercicio 2.10Para encontrar el máximo común divisor (MCD) de dos números se emplea el algoritmo deEuclides, que se puede describir así: Dados dos enteros a y b (siendo a > b), se divide a por b. Si el

41

Page 42: Informática I:  Ejercicios Resueltos

2012

resto de la división es cero, el número b es el máximo común divisor. Si la división no es exacta, elvalor de a pasa a ser b y el nuevo valor de b será el resto de la división anterior. Se repite elprocedimiento hasta obtener un resto cero. El último divisor (b) es el mcd buscado. Escribir unprograma que calcule el mcd de dos números enteros. Por ejemplo, si a = 2366 y b=273, se divide apor b y el resto es 182; como no es cero, se divide el nuevo a que será 273 por el nuevo b que será182 y da como resto 91; como no es cero se divide 182 por 91 y da como resto cero; se concluyeentonces que 91 es el MCD entre 2366 y 273.

#include <stdio.h>

#include <stdlib.h>

int main()

{

int a, b, aux, resto, guarda, guardb;

printf("Ingrese el primer numero: ");

scanf("%d", &a);

guarda=a;

printf("Ingrese el segundo numero: ");

scanf("%d", &b);

guardb=b;

if(b>a)

{

aux=b;

b=a;

a=aux;

}

42

Page 43: Informática I:  Ejercicios Resueltos

2012

while(a%b!=0)

{

resto=a%b;

a=b;

b=resto;

}

printf("El MCD entre %d y %d es: %d",guarda , guardb, b);

return 0;

}

Ejercicio 2.11Escribir un programa que permita ingresar las notas de una cantidad indefinida de alumnos. Acontinuación el programa deberá mostrar la cantidad de alumnos aplazados (nota menor a 4), lacantidad de alumnos aprobados (nota entre 4 y 7 inclusive) y la cantidad de alumnos quepromocionan la materia (nota superior a 7). En cada caso, se mostrará el porcentaje del total denotas cargadas que cada caso representa y el promedio general de todas las notas. Las notas puedenser valores reales y la carga finaliza cuando la nota ingresada es 0. Ignorar las notas no válidas(fuera del rango de 1 a 10).Ejemplo:Ingrese nota: 5Ingrese nota: 4Ingrese nota: 2Ingrese nota: 8...Ingrese nota: 0Cantidad de aplazos: 5 (10%)Cantidad de aprobados: 15 (30%)Cantidad de promocionados: 30 (60%)Promedio general: 6.72

#include <stdio.h>

43

Page 44: Informática I:  Ejercicios Resueltos

2012

#include <stdlib.h>

int main()

{

int nota, aplazados=0, aprovados=0, promocionantes=0, total, pcapl, pcapr,pcpro;

do

{

printf("Ingrese nota: ");

scanf("%d", &nota);

if(nota!=0)

{

if(nota<4&&nota>=1)

aplazados++;

else

{

if(nota>=4&&nota<=7)

aprovados++;

else

{

if(nota>7&&nota<=10)

promocionantes++;

else

printf("\nDato incorrecto! ingrese notas del 1 al 10 por favor.\n");

}

}

44

Page 45: Informática I:  Ejercicios Resueltos

2012

}

}while(nota!=0);

if(aplazados==0&&aprovados==0&&promocionantes==0)

printf("\nNo se han ingresado datos relevantes");

else

{

total=aplazados+aprovados+promocionantes;

pcpro=(promocionantes*100)/total;

pcapr=(aprovados*100)/total;

pcapl=(aplazados*100)/total;

printf("\nCantidad de aplazos: %d (%d%%)",aplazados, pcapl);

printf("\nCantidad de aprobados: %d (%d%%)",aprovados,pcapr);

printf("\nCantidad de promocionados: %d (%d%%)",promocionantes, pcpro);

}

return 0;

}

Ejercicio 2.12Realizar un programa que permita el ingreso de letras en minúscula y que brinde al usuario tresoperaciones posibles a través de un menú de opciones. La primera opción devolverá la mayúsculacorrespondiente. La segunda opción devolverá la letra siguiente en el alfabeto (si la letra ingresadafuera “z” se debe informar que es la última). La tercera opción devolverá la letra anterior en elalfabeto siempre que la letra ingresada no sea “a”. Validar que efectivamente el carácter ingresadosea una letra minúscula o * (este último determina el final de la serie de opciones).Ejemplo:Ingrese letra: f1 – Convertir a mayúscula2 – Obtener la siguiente

45

Page 46: Informática I:  Ejercicios Resueltos

2012

3 – Obtener la anteriorEscoja una operación (1 – 3): 1La mayúscula es F.

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

int main()

{

char letra;

int menu;

do

{

printf("Ingrese la letra: ");

letra=getche();

printf("\n");

}while(letra<'a'||letra>'z');

do

{

printf("1 - Convertir a mayuscula\n");

printf("2 - Obtener la siguiente\n");

printf("3 - Obtener la anterior\n");

printf("Escoja una operacion (1 - 3): ");

scanf("%d", &menu);

if(menu<1||menu>3)

printf("Error!\n");

46

Page 47: Informática I:  Ejercicios Resueltos

2012

}while(menu<1||menu>3);

switch(menu)

{

case 1:

letra=letra-32;

printf("La mayuscula es %c", letra);

break;

case 2:

letra=letra+1;

printf("La siguiente es: %c", letra);

break;

case 3:

letra=letra-1;

printf("La anterior es: %c", letra);

break;

}

return 0;

}

Ejercicio 2.13Realizar un programa para calcular utilidades de inversión en plazos fijos. Para esto, se ingresaránlas cantidades que serán los importes mensuales que el cliente desea invertir (cantidad = 0 paraterminar). Luego se debe obtener el resultado de la colocación total en plazos fijos.Primero se debe solicitar la Tasa Nominal Anual (TNA) al principio de la serie de importes, a partirde la cual se obtiene la Tasa Efectiva Mensual (TEM = TNA /12). En cada mes, se calculan los

47

Page 48: Informática I:  Ejercicios Resueltos

2012

intereses multiplicando la TEM por el total de montos acumulados hasta dicho mes.Al finalizar la carga, se imprimirá el monto final (suma de montos invertidos) más los interesesacumulados durante cada mes.Ejemplo: Se desea invertir tres sumas (durante tres meses seguidos) en plazos fijos.Ingrese porcentaje de TNA: 8Ingrese monto del mes 1: 2000Ingrese monto del mes 2: 3000Ingrese monto del mes 3: 1000Ingrese monto del mes 4: 0El monto final es: 6086.67Ayuda:Ej.: TNA = 8% = 0.08. TEM = TNA /12 = 0.08/12 = 0.0067Intereses = 2000 * 0.0067 + (2000+3000) * 0.0067 + (2000+3000+1000) * 0.0067Monto total = Inversión + Intereses = 2000 + 3000 + 1000 + 86.67 = 6086.67

#include <stdio.h>

#include <stdlib.h>

int main()

{

int monto, cont=1, inversion=0;

double tna,intereses=0;

printf("Ingrese porcentaje de TNA: ");

scanf("%lf", &tna);

tna=tna/100;

do

{

printf("Ingrese monto del mes %d: ", cont);

scanf("%d", &monto);

if(monto!=0)

48

Page 49: Informática I:  Ejercicios Resueltos

2012

{

cont++;

inversion=inversion+monto;

intereses=intereses+inversion*(tna/12);

}

}while(monto!=0);

printf("Monto total = Inversion + Intereses = %d + %.2lf = %.2lf", inversion, intereses, inversion+intereses);

return 0;

}

Ejercicio 2.14Efectuar un programa que solicite al usuario que ingrese un número entero impar (validar el valoringresado). El programa tendrá que dibujar en la ventana un triángulo de asteriscos cuya base sea elvalor ingresado.Ejemplo:Ingrese número: 8Número no válido. Ingrese número: 11 * *** ***** ******* ********* ***********#include <stdio.h>

#include <stdlib.h>

int main()

{

int num, f, c, ast=1, blancos;

49

Page 50: Informática I:  Ejercicios Resueltos

2012

do

{

printf("Ingrese el numero: ");

scanf("%d", &num);

if(num%2!=1)

printf("Error!");

}while(num%2!=1||num<3);

blancos=num/2;

for(f=1; f<=num/2+1; f++)

{

for(c=1; c<=blancos; c++)

{

printf(" ");

}

blancos--;

for(c=1;c<=ast;c++)

{

printf("*");

}

ast+=2;

printf("\n");

}

return 0;

}

50

Page 51: Informática I:  Ejercicios Resueltos

2012

Ejercicio 2.15Efectuar un programa que solicite al usuario que ingrese la base de un triángulo rectángulo. Luegodibujar en la ventana dicho triángulo como se muestra en el ejemplo.Ejemplo:Ingrese base: 5***************#include <stdio.h>

#include <stdlib.h>

int main()

{

int num, f, c;

do{

printf("Ingrese el numero: ");

scanf("%d", &num);

}while(num<2);

for(f=1; f<=num; f++)

{

for(c=1; c<=f; c++)

{

printf("*");

}

printf("\n");

}

51

Page 52: Informática I:  Ejercicios Resueltos

2012

return 0;

}

Ejercicio 2.16Efectuar un programa que solicite al usuario que ingrese la base de un triángulo rectángulo. Luegodibujar en la ventana dicho triángulo como se muestra en el ejemplo.Ejemplo:Ingrese base: 5 * ** *** *********

#include <stdio.h>

#include <stdlib.h>

int main()

{

int num, f, c, blancos, ast=1;

do{

printf("Ingrese el numero: ");

scanf("%d", &num);

}while(num<2);

blancos=num-1;

for(f=1; f<=num; f++)

{

for(c=1; c<=blancos; c++)

{

printf(" ");

52

Page 53: Informática I:  Ejercicios Resueltos

2012

}

blancos--;

for(c=1; c<=ast; c++)

{

printf("*");

}

ast++;

printf("\n");

}

return 0;

}

Ejercicio 2.17Efectuar un programa que solicite al usuario que ingrese la diagonal de un rombo (validar que elvalor ingresado sea impar). Luego deberá dibujar dicho rombo en la ventana.Ejemplo:Ingrese diagonal: 8Valor incorrecto. Ingrese diagonal: 7 * *** ************ ***** *** *

#include <stdio.h>

#include <stdlib.h>

int main()

{

int num, f, c, blancos, ast=1;

53

Page 54: Informática I:  Ejercicios Resueltos

2012

do{

printf("Ingrese el numero: ");

scanf("%d", &num);

blancos=num/2;

}while(num<3||num%2!=1);

for(f=1; f<=num/2+1; f++)

{

for(c=1; c<=blancos; c++)

{

printf(" ");

}

blancos--;

for(c=1; c<=ast; c++)

{

printf("*");

}

ast+=2;

printf("\n");

}

blancos+=2;

ast-=4;

for(f=1; f<=num/2; f++)

{

54

Page 55: Informática I:  Ejercicios Resueltos

2012

for(c=1; c<=blancos; c++)

{

printf(" ");

}

blancos++;

for(c=1; c<=ast; c++)

{

printf("*");

}

ast-=2;

printf("\n");

}

return 0;

}

Ejercicio 2.18Efectuar un programa que solicite al usuario que ingrese la base y la altura de un rectángulo. Luegodeberá dibujar en la ventana el rectángulo hueco.Ejemplo:Ingrese base: 7Ingrese altura: 4******** ** ********

#include <stdio.h>#include <stdlib.h>

int main(){ int num, f, c;

do{

55

Page 56: Informática I:  Ejercicios Resueltos

2012

printf("Ingrese el numero: "); scanf("%d", &num); }while(num<3);

for(f=1; f<=num; f++) { for(c=1; c<=num ; c++) { if(c==1||f==1||f==num||c==num) printf("*"); else printf(" "); } printf("\n"); } return 0;}

Ejercicio 2.19Efectuar un programa que solicite al usuario que ingrese la base y la altura de un rectángulo. Luegodeberá dibujar en la ventana dicho rectángulo.Ejemplo:Ingrese base: 8Ingrese altura: 3************************

#include <stdio.h>

#include <stdlib.h>

int main()

{

int alt, base, f, c;

do{

printf("Ingrese la base: ");

56

Page 57: Informática I:  Ejercicios Resueltos

2012

scanf("%d", &base);

}while(base<2);

do{

printf("Ingrese la altura: ");

scanf("%d", &alt);

}while(alt<2);

for(f=1; f<=alt; f++)

{

for(c=1; c<=base ; c++)

{

printf("*");

}

printf("\n");

}

return 0;

}

Ejercicio 2.20La operación factorial de un número entero positivo “n” (expresado como n!) es el producto queresulta de multiplicar “n” por todos los enteros inferiores a él hasta el uno. Por ejemplo:5! = 5 * 4 * 3 * 2 * 110! = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1n! = n * (n-1) * (n-2) * … * 3 * 2 * 1Como salvedad se define 0! = 1.Elaborar un programa que calcule el factorial de un número entero. El programa principal debesolicitar el ingreso de un número entero, verificar si se trata de un número mayor o igual a 0 y

57

Page 58: Informática I:  Ejercicios Resueltos

2012

calcular su factorial. En caso de que el usuario ingresara un número negativo, imprimir unaadvertencia.Ejemplos:Ingrese un número entero: 5El factorial de 5 es: 120Ingrese un número entero: -10No se puede calcular el factorial de un número negativo.

#include <stdio.h>

#include <stdlib.h>

int main()

{

int num, cont, res;

do{

printf("Ingrese el numero: ");

scanf("%d", &num);

if(num<0)

printf("No se puede calcular el factorial de un numero negativo.\n");

}while(num<0);

if(num==0)

res=1;

else

{

res=num;

for(cont=1; cont<num; cont++)

res=res*(num-cont);

}

58

Page 59: Informática I:  Ejercicios Resueltos

2012

printf("El factorial de %d es: %d", num, res);

return 0;

}

Ejercicio 2.21Elaborar un programa en el que se ingrese un número entero positivo (de cualquier cantidad decifras) y determine si es un número capicúa. Un número capicúa es aquel que leído de izquierda aderecha es igual que leído de derecha a izquierda. Por ejemplo: 82428. Considere invertir el númeroy luego compararlo con el número original. Si resultan iguales, será capicúa.

#include <stdio.h>

#include <stdlib.h>

int main()

{

int num, aux, res=0;

do{

printf("Ingrese el numero: ");

scanf("%d", &num);

if(num<=0)

printf("Error!\n");

}while(num<=0);

aux=num;

while(aux>0)

{

59

Page 60: Informática I:  Ejercicios Resueltos

2012

res=res*10+(aux%10);

aux/=10;

}

if(num==res)

printf("El numero %d es capicua", num);

else

printf("El numero %d NO es capicua", num);

return 0;

}

Practica 3

Arreglos

Ejercicio 3.1Realice un programa que permita cargar números enteros positivos en un arreglo (de hasta 1000elementos) hasta que el usuario ingrese 0 (este valor marca el final de los valores útiles).Luego, se deberá obtener otro arreglo que contenga los mismos valores pero en forma inversa y acontinuación imprimir este último.Ejemplo:Ingrese número: 20Ingrese número: 21Ingrese número: 14Ingrese número: 0El arreglo revertido contiene: 14, 21, 20.#include <stdio.h>

#include <stdlib.h>

#define N 1000

int main()

60

Page 61: Informática I:  Ejercicios Resueltos

2012

{

int v[N], i=0, b[N], j=0;

do{

printf("Ingrese numero: ");

scanf("%d", &v[i]);

i++;

}while(v[i-1]!=0);

i-=2;

while(i>=0)

{

b[j]=v[i];

j++;

i--;

}

j--;

printf("El arreglo revertido contiene: ");

for(i=0; i<=j; i++)

printf("%d-", b[i]);

return 0;

}

Ejercicio 3.2Realice un programa que permita cargar números enteros positivos en un arreglo (de hasta 1000elementos) hasta que el usuario ingrese 0 (este valor marca el final de los valores utiles). No se

61

Page 62: Informática I:  Ejercicios Resueltos

2012

permitirá al usuario cargar 2 veces el mismo valor, en dicho caso se mostrara un mensaje. Luego,imprima el arreglo resultante.

Ejercicio 3.3Elaborar un programa que presente un menú con las siguientes opciones: AND, OR, NOT,SALIR.Luego, para cada opción elegida el programa deberá permitir la carga de uno o dos (segúncorresponda) arreglos booleanos de 6 elementos cada uno. El 0 tendra un valor de verdad FALSO yel 1 VERDADERO. Se pide obtener el arreglo booleano resultante de la operacion logica sobreel/los arreglo/s correspondiente/s..Ejemplo:1 – AND2 – OR3 – NOT4 – SALIRSeleccione una opción: 1Ingrese los elementos del primer arreglo: 1 1 1 0 0 0Ingrese los elementos del segundo arreglo: 1 1 0 0 0 1El arreglo resultante es: 1 1 0 0 0 01 – AND2 – OR3 – NOT4 – SALIRSeleccione una opción: 3Ingrese los elementos del arreglo: 1 1 1 0 0 0El arreglo resultante es: 0 0 0 1 1 1

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#define N 7

int main()

{

int i, menu;

62

Page 63: Informática I:  Ejercicios Resueltos

2012

char v[N], b[N], r[N], l;

do{

printf("\nMenu\n");

printf("1 - AND\n");

printf("2 - OR\n");

printf("3 - NOT\n");

printf("4 - SALIR\n");

scanf("%d", &menu);

switch(menu)

{

case 1:

i=0;

printf("\nIngrese el primer arreglo:");

do

{

l=getche();

if(l=='0'||l=='1')

{

v[i]=l;

i++;

}

}while(i<6);

v[i]='\0';

63

Page 64: Informática I:  Ejercicios Resueltos

2012

printf("\nIngrese el segundo arreglo:");

i=0;

do

{

l=getche();

if(l=='0'||l=='1')

{

b[i]=l;

i++;

}

}while(i<6);

b[i]='\0';

for(i=0;i<6;i++)

{

if(v[i]=='1'&&b[i]=='1')

r[i]='1';

else

r[i]='0';

}

r[i]='\0';

printf("\nEl arreglo resultante es: %s", r);

break;

case 2:

i=0;

printf("\nIngrese el primer arreglo:");

64

Page 65: Informática I:  Ejercicios Resueltos

2012

do

{

l=getche();

if(l=='0'||l=='1')

{

v[i]=l;

i++;

}

}while(i<6);

v[i]='\0';

printf("\nIngrese el segundo arreglo:");

i=0;

do

{

l=getche();

if(l=='0'||l=='1')

{

b[i]=l;

i++;

}

}while(i<6);

b[i]='\0';

for(i=0;i<6;i++)

{

65

Page 66: Informática I:  Ejercicios Resueltos

2012

if(v[i]=='1'||b[i]=='1')

r[i]='1';

else

r[i]='0';

}

r[i]='\0';

printf("\nEl arreglo resultante es: %s", r);

break;

case 3:

i=0;

printf("\nIngrese el arreglo:");

do

{

l=getche();

if(l=='0'||l=='1')

{

v[i]=l;

i++;

}

}while(i<6);

v[i]='\0';

for(i=0;i<6;i++)

{

if(v[i]=='1')

66

Page 67: Informática I:  Ejercicios Resueltos

2012

r[i]='0';

else

r[i]='1';

}

r[i]='\0';

printf("\nEl arreglo resultante es: %s", r);

break;

case 4:

printf("\nTerminado. Tenga un buen dia!.");

break;

default:

printf("\nOpcion no valida. Por favor reintente: ");

break;

}

}while(menu!=4);

return 0;

}

Ejercicio 3.4Elaborar un programa que permita cargar dos arreglos numéricos de hasta 1000 elementos. Seefectuara la carga de cada uno (hasta que se ingrese 0 o se complete la capacidad del arreglo).Luego se presenta el siguiente menú con las siguientes opciones: UNION, INTERSECCION,DIFERENCIA, SALIR. A continuación se efectuara la operación entre ambos arreglos como sifueran conjuntos (considerar que los conjuntos no pueden tener elementos repetidos).

#include <stdio.h>

#include <stdlib.h>

67

Page 68: Informática I:  Ejercicios Resueltos

2012

#define N 1000

int main()

{

int i, j, k, m, sen=0, menu, l, v[N], b[N], r[N*2];

do{

printf("\nMenu\n");

printf("1 - UNION\n");

printf("2 - INTERSECCION\n");

printf("3 - DIFERENCIA\n");

printf("4 - SALIR\n");

scanf("%d", &menu);

switch(menu)

{

case 1:

i=0;

printf("\nIngrese el primer arreglo:");

do

{

sen=0;

scanf("%d", &l);

for(j=0;j<i;j++)

{

if(v[j]==l)

68

Page 69: Informática I:  Ejercicios Resueltos

2012

sen=1;

}

if(sen==0)

{

v[i]=l;

i++;

}

}while(i<N-1&&v[i-1]!=0);

i--;

printf("\nIngrese el segundo arreglo:");

k=0;

do

{

sen=0;

scanf("%d", &l);

for(j=0;j<k;j++)

{

if(b[j]==l)

sen=1;

}

if(sen==0)

69

Page 70: Informática I:  Ejercicios Resueltos

2012

{

b[k]=l;

k++;

}

}while(k<N-1&&b[k-1]!=0);

for(m=0;m<i;m++)

{

r[m]=v[m];

}

int n;

for(j=0;j<k;j++)

{

l=b[j];

sen=0;

for(i=0;i<m;i++)

{

if(l==r[i])

sen=1;

}

for(n=0;n<=i;n++)

{

if(v[n]==l)

sen=1;

}

70

Page 71: Informática I:  Ejercicios Resueltos

2012

if(sen==0)

{

r[m]=l;

m++;

}

}

printf("El arreglo resultante es: ");

for(i=0;i<m;i++)

{

printf("%d-", r[i]);

}

break;

case 2:

i=0;

printf("\nIngrese el primer arreglo:");

do

{

sen=0;

scanf("%d", &l);

for(j=0;j<i;j++)

{

if(v[j]==l)

sen=1;

}

if(sen==0)

71

Page 72: Informática I:  Ejercicios Resueltos

2012

{

v[i]=l;

i++;

}

}while(i<N-1&&v[i-1]!=0);

i--;

printf("\nIngrese el segundo arreglo:");

k=0;

do

{

sen=0;

scanf("%d", &l);

for(j=0;j<k;j++)

{

if(b[j]==l)

sen=1;

}

if(sen==0)

{

b[k]=l;

k++;

72

Page 73: Informática I:  Ejercicios Resueltos

2012

}

}while(k<N-1&&b[k-1]!=0);

k--;

int o, p=0;

for(n=0;n<i;n++)

{

sen=0;

for(o=0; o<k;o++)

{

if(v[n]==b[o])

sen=1;

}

if(sen==1)

{

r[p]=v[n];

p++;

}

}

printf("El arreglo resultante es: ");

for(i=0;i<p;i++)

{

printf("%d-", r[i]);

}

73

Page 74: Informática I:  Ejercicios Resueltos

2012

break;

case 3:

i=0;

printf("\nIngrese el primer arreglo:");

do

{

sen=0;

scanf("%d", &l);

for(j=0;j<i;j++)

{

if(v[j]==l)

sen=1;

}

if(sen==0)

{

v[i]=l;

i++;

}

}while(i<N-1&&v[i-1]!=0);

i--;

printf("\nIngrese el segundo arreglo:");

k=0;

74

Page 75: Informática I:  Ejercicios Resueltos

2012

do

{

sen=0;

scanf("%d", &l);

for(j=0;j<k;j++)

{

if(b[j]==l)

sen=1;

}

if(sen==0)

{

b[k]=l;

k++;

}

}while(k<N-1&&b[k-1]!=0);

k--;

p=0;

for(n=0;n<i;n++)

{

sen=0;

for(o=0; o<k;o++)

{

75

Page 76: Informática I:  Ejercicios Resueltos

2012

if(v[n]==b[o])

sen=1;

}

if(sen==0)

{

r[p]=v[n];

p++;

}

}

printf("El arreglo resultante es: ");

for(i=0;i<p;i++)

{

printf("%d-", r[i]);

}

break;

case 4:

printf("\nTerminado. Tenga un buen dia!.");

break;

default:

printf("\nOpcion no valida. Por favor reintente: ");

break;

}

}while(menu!=4);

return 0;

}

76

Page 77: Informática I:  Ejercicios Resueltos

2012

Ejercicio 3.5Realizar un programa en el que se ingrese un texto de hasta 100 caracteres finalizando con ENTER(utilizar ‘\r’ para detectar el ingreso de ENTER). Luego, el usuario deberá elegir un caracter al cualreemplazar y con que caracter reemplazarlo.

Ejemplo:Ingrese texto: La mar estaba serenaIngrese carácter a reemplazar: aIngrese carácter de reemplazo: eResultado: Le mer estebe serene#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#define N 101

int main()

{

char l, lo='0',lc='0',texto[N];

int i=0;

printf("\nIngrese la letra a reemplazar: ");

do

{

l=getche();

if(l>='a'&&l<='z'||l>='A'&&l<='Z')

lo=l;

else

printf("\nError!. Reintente: ");

}while(lo=='0');

printf("\nIngrese la letra a ser reemplazada: ");

77

Page 78: Informática I:  Ejercicios Resueltos

2012

do

{

l=getche();

if(l>='a'&&l<='z'||l>='A'&&l<='Z')

lc=l;

else

printf("\nError!. Reintente: ");

}while(lc=='0');

printf("\nIngrese el texto: \n");

do

{

l=getche();

if(l!='\r')

{

texto[i]=l;

i++;

}

}while(l!='\r'&&i<N-1);

texto[i]='\0';

int j;

for(j=0;j<i;j++)

{

if(texto[j]==lo)

texto[j]=lc;

}

78

Page 79: Informática I:  Ejercicios Resueltos

2012

printf("\ntexto modificado: %s\n", texto);

return 0;

}

Ejercicio 3.6Realizar un programa en el que se ingrese un texto de hasta 75 caracteres finalizando con ENTER(utilizar el caracter ‘\r’ para detectarlo). Luego imprimir dicho texto centrado y, en la siguientelinea, alineado hacia la derecha. Tener en cuenta que el ancho de la pantalla de texto es de 80columnas.El texto debe contener ‘\0’ como caracter final a fin de que pueda imprimirse con printf(“%s”,texto);Ejemplo:Ingrese texto: La bella y graciosa moza marchose a lavar la ropaLa bella y graciosa moza marchose a lavar la ropaLa bella y graciosa moza marchose a lavar la ropa#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#define N 76

int main()

{

char text[N], l;

int cont ,i=0;

printf("Ingrese texto: \n");

do

{

l=getche();

if(l!='\r')

79

Page 80: Informática I:  Ejercicios Resueltos

2012

{

text[i]=l;

i++;

}

}while (l!='\r'&&i<N);

text[i]='\0';

printf("\n");

for(cont=0;cont<40-i/2;cont++)

printf(" ");

printf("%s\n", text);

for(cont=0;cont<80-i;cont++)

printf(" ");

printf("%s\n", text);

return 0;

}

Ejercicio 3.7Programar una funcion que reciba como parametro un texto y que elimine todo lo que no sean letrasque encuentre al principio y al final del texto. Utilizarla en un programa en el que se ingrese untexto de hasta 1000 caracteres y luego se imprima la version “limpia” del texto. El texto debecontener ‘\0’ como caracter final a fin de que pueda imprimirse con printf(“%s”, texto);Ejemplo:Ingrese texto:... La bella y graciosa moza marchose a lavar la ropa, $@La bella y graciosa moza marchose a lavar la ropa

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

80

Page 81: Informática I:  Ejercicios Resueltos

2012

#define N 1000

void trans (char[], int);

int main()

{

char text[N], l;

int cont ,i=0;

printf("Ingrese texto: \n");

do

{

l=getche();

if(l!='\r')

{

text[i]=l;

i++;

}

}while (l!='\r'&&i<N);

trans (text, i);

printf("\n%s\n", text);

return 0;

}

void trans (char text[], int i)

{

int j=0, k=0, sen=0;

while(j<i)

{

if(text[j]>='A'&&text[j]<='Z'||text[j]>='a'&&text[j]<='z'||text[j]==' ')

81

Page 82: Informática I:  Ejercicios Resueltos

2012

{

sen=1;

text[k]=text[j];

k++;

}

else

{

if(sen==1)

text[k]='\0';

}

j++;

}

}

Practica 4

Funciones

Ejercicio 4.1Escribir una funcion que reciba como parametros la longitud de los lados de un triangulo y queretorne el area del mismo. Implementarla en un programa que reciba los parametros como datos einforme el area calculada.Ejemplo:Ingrese lado 1: 2Ingrese lado 1: 6Ingrese lado 1: 7El area del triangulo es = 5.56

Ayuda: El area de un triangulo se puede calcular como √ p( p - a)( p - b)( p - c)siendo p =(a +b +c) ÷2#include <stdio.h>

82

Page 83: Informática I:  Ejercicios Resueltos

2012

#include <stdlib.h>

#include <math.h>

double area (int, int, int);

int main()

{

int a,b,c;

double areatri;

printf("Ingrese lado 1: \n");

do

{

scanf("%d", &a);

}while (a<=0);

printf("Ingrese lado 2: \n");

do

{

scanf("%d", &b);

}while (b<=0);

printf("Ingrese lado 3: \n");

do

{

scanf("%d", &c);

}while (c<=0);

areatri=area(a,b,c);

printf("El area del triangulo es = %.2lf", areatri);

return 0;

83

Page 84: Informática I:  Ejercicios Resueltos

2012

}

double area (int a, int b, int c)

{

double areatri,p;

p=(a+b+c)/2.0;

areatri=sqrt((double)p*(p-a)*(p-b)*(p-c));

return areatri;

}

Ejercicio 4.2Programar una funcion que reciba como parametros un numero real ‘x’ y otro entero positivo ‘n’mayor que 0. Esta funcion debera retornar la raiz enesima de x. Utilizarla en un programa quesolicite el numero real, la raiz y luego imprima el valor calculado.Ejemplo:Ingrese un numero real: 14Ingrese la raiz a calcular: 3La raiz 3 de 14 es = 2.410142Ayuda: Utilizar la funcion pow de la libreria math.h cuyo prototipo esdouble pow(double base, double exponente);#include <stdio.h>

#include <stdlib.h>

#include <math.h>

double raiz (double, int);

int main()

{

double x, resultado;

int n;

printf("Ingrese el numero a radicar: \n");

do

84

Page 85: Informática I:  Ejercicios Resueltos

2012

{

scanf("%lf", &x);

if(x<0)

printf("Error! No existe la raiz de un numero negativo en reales. Reingrese: ");

}while (x<0);

printf("Ingrese la raiz a efectuar: \n");

do

{

scanf("%d", &n);

if(n<=0)

printf("Error! Reingrese un numero positivo: ");

}while (n<=0);

resultado=raiz(x, n);

printf("La raiz %d de %g es = %g", n, x, resultado);

return 0;

}

double raiz (double x, int n)

{

double resultado;

resultado=pow(x,1.0/n);

return resultado;

}

Ejercicio 4.3Realizar una funcion que reciba como parametros un numero entero positivo (en sistema decimal) y

85

Page 86: Informática I:  Ejercicios Resueltos

2012

otro entero positivo entre 2 y 9. Luego, la funcion debera retornar el numero decimal convertido ala base solicitada. Aplicar dicha funcion a un programa que solicite el numero decimal, la base aconvertir y luego imprima el valor calculado.Ejemplo:Ingrese el numero decimal: 527Ingrese la base: 8527 (10) = 1017 (8)#include <stdio.h>

#include <stdlib.h>

int cambio_base (int, int);

int main()

{

int decimal, base, cambiado;

printf("Ingrese el numero en sistema decimal: \n");

do

{

scanf("%d", &decimal);

if(decimal<0)

printf("Error! Reingrese un numero positivo: ");

}while (decimal<0);

printf("Ingrese la base en que lo quiere: \n");

do

{

scanf("%d", &base);

if(base<2||base>9)

printf("Error! Reingrese un numero positivo (entre 2 y 9): ");

86

Page 87: Informática I:  Ejercicios Resueltos

2012

}while (base<2||base>9);

cambiado=cambio_base(decimal, base);

printf("El numero %d(10) es igual a %d(%d)", decimal, cambiado, base);

return 0;

}

int cambio_base (int d, int b)

{

int c=0, pot=1;

do

{

c=c+(d%b)*pot;

d/=b;

pot*=10;

}while(d>0);

return c;

}

Ejercicio 4.4Programar una funcion que reciba como parametros 2 numeros enteros y que retorne un numeroaleatorio entre estos 2 numeros (inclusive).Por ejemplo, si se invocara la funcion con parametros 1 y 6, debera devolver un numero aleatorioentre 1 y 6 inclusive. Validar que el valor maximo no sea superior al valor maximo que es capaz degenerar la funcion rand.Implementarla en un programa que solicite al usuario que ingrese el rango de valores aleatorios y lacantidad deseada de valor. A continuacion imprimir la lista de numeros aleatorios segun el criteriosolicitado.Ejemplo:Ingrese minimo: 1Ingrese maximo: 20

87

Page 88: Informática I:  Ejercicios Resueltos

2012

Ingrese cantida de valores: 101, 8, 20, 14, 11, 17, 2, 1, 5, 6.#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define N 99999

int aleatorio (int, int);

int main()

{

int max, min,i,j ,v[N];

srand(time(NULL));

printf("Ingrese el maximo: \n");

scanf("%d", &max);

printf("Ingrese el minimo: \n");

do

{

scanf("%d", &min);

if(min>max)

printf("Error! Reingrese un numero menor al maximo: ");

}while (min>max);

printf("Ingrese la cantidad de valores: \n");

do

{

scanf("%d", &i);

if(i<0)

printf("no se puede mostrar una cantidad negativa de veces. reingrese: ");

88

Page 89: Informática I:  Ejercicios Resueltos

2012

}while (i<0);

printf("\n");

for(j=0;j<i;j++)

{

v[j]=aleatorio(max, min);

printf("%d, ", v[j]);

}

return 0;

}

int aleatorio (int max, int min)

{

int c;

c=rand()%(max-min+1)+min;

return c;

}

Ejercicio 4.5Dado el siguiente programa, construir las funciones cuyos prototipos se indican y de modo que elprograma genere la salida correspondiente. Todas las funciones cuyos prototipos figuran deben serprogramadas y utilizadas sin modificar los tipos de los parametros ni el tipo de dato de retorno.#include <stdio.h>void dibujar_fila(int);void dibujar_rectangulo(int, int);int main(){int alto, ancho;printf("Ingrese ancho:");scanf("%d", &ancho);

89

Page 90: Informática I:  Ejercicios Resueltos

2012

printf("Ingrese altura:");scanf("%d", &alto);dibujar_rectangulo(ancho, alto);return 0;}

Ejercicio 4.6Dado el siguiente programa, construir las funciones cuyos prototipos se indican y de modo que elprograma genere la salida correspondiente. Todas las funciones cuyos prototipos figuran deben serprogramadas y utilizadas sin modificar los tipos de los parametros ni el tipo de dato de retorno.#include <stdio.h>int ingresar_texto(void);int es_letra(unsigned char);int main(){int len;printf("Ingrese texto (punto para finalizar):");len = ingresar_texto();printf("\nEl texto tiene %d letras.", len);return 0;}

#include <stdio.h>

void dibujar_fila(int);

void dibujar_rectangulo(int, int);

int main()

{

int alto, ancho;

printf("Ingrese ancho:");

scanf("%d", &ancho);

printf("Ingrese altura:");

scanf("%d", &alto);

dibujar_rectangulo(ancho, alto);

90

Page 91: Informática I:  Ejercicios Resueltos

2012

return 0;

}

void dibujar_fila(int anch)

{

int c;

for(c=0;c<anch;c++)

{

printf("*");

}

}

void dibujar_rectangulo(int anch, int alt)

{

int f;

for(f=0;f<alt;f++)

{

dibujar_fila (anch);

printf("\n");

}

}

Ejercicio 4.7Programar una funcion que tome como parametro un texto y que convierta sus letras mayusculas enminusculas y todo lo que no sean ni letras ni numeros, se conviertan en espacios. Utilizarla en unprograma en el que se ingrese un texto de hasta 1000 caracteres y luego se imprima la versionmodificada del texto. El texto debe contener ‘\0’ como caracter final a fin de que pueda imprimirsecon printf(“%s”, texto);

91

Page 92: Informática I:  Ejercicios Resueltos

2012

#include <stdio.h>

#include <conio.h>

#define N 1000

int es_letra_o_numero(char);

int es_mayuscula(char);

void trans_texto(char[], int);

int main()

{

int i=0, l;

char texto[N];

printf("Ingrese el texto:\n");

do

{

l=getche();

if(l!='\r')

{

texto[i]=l;

i++;

}

}while(l!='\r');

texto[i]='\0';

trans_texto(texto, i);

printf("\ntexto modificado: %s", texto);

return 0;

}

92

Page 93: Informática I:  Ejercicios Resueltos

2012

int es_letra_o_numero(char a)

{

return((a>='a'&&a<='z')||(a>='A'&&a<='Z')||(a>='0'&&a<='9'));

}

int es_mayuscula (char l)

{

return(l>='A'&&l<='Z');

}

void trans_texto(char texto[], int i)

{

int j;

for(j=0;j<i;j++)

{

if(!es_letra_o_numero(texto[j]))

texto[j]=' ';

else

{

if(es_mayuscula(texto[j]))

texto[j]=texto[j]+32;

}

}

}

Ejercicio 4.8Realizar una funcion que permita ingresar en un arreglo de caracteres (string) solamente caracteresnumericos (ignorar y no mostrar en pantalla cuando se ingrese un caracter que no sea numero).

93

Page 94: Informática I:  Ejercicios Resueltos

2012

Luego, programar otra funcion que tome ese arreglo de caracteres y lo convierta a un valor numerico entero. Utilizar ambas funciones en un programa en que se ingrese un numero y luego seconvierta a entero para ser impreso mediante printf(“%d”, numero).#include <stdio.h>

#include <conio.h>

#define N 1000

int number(char[], int);

int main()

{

int i=0;

char numero[N]={0}, l;

printf("Ingrese los numeros:\n");

do

{

l=getch();

if(l>='0'&&l<='9')

{

printf("%c", l);

numero[i]=l;

i++;

}

}while(l!='\r'&&i<N-2);

numero[i]='\0';

int j=0;

j=number(numero,i);

94

Page 95: Informática I:  Ejercicios Resueltos

2012

printf("\nnumero: %s\n", numero);

printf("\nnumero: %d\n", j);

for(j=0;j<i;j++)

printf("%d", numero[j]);

return 0;

}

int number (char numero[], int i)

{

int num=0, j;

for(j=0;j<i;j++)

{

num=num*10+(numero[j]-48);

}

return num;

}

Ejercicio 4.9Elabore un programa que cargue un arreglo con 100 numeros al azar entre 1 y 100. Luego obtener elvalor maximo y el valor minimo presentes en el arreglo.#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define N 100

int main()

{

95

Page 96: Informática I:  Ejercicios Resueltos

2012

int numero[N]={0},i=0, j, max, min;

srand(time(NULL));

do

{

numero[i]=rand()%100+1;

i++;

}while(i<N);

max=numero[0];

min=numero[0];

for(j=0;j<i;j++)

{

if(numero[j]>max)

max=numero[j];

else

{

if(numero[j]<min)

min=numero[j];

}

}

printf("\nmaximo: %d\n", max);

printf("\nminimo: %d\n", min);

Ejercicio 4.10Realizar un programa que solicite al usuario una cantidad de numeros al azar que se generara entre el0 y el 36. Presentar luego un informe que indique que cantidad de veces salio cada valor y elporcentaje que representa. No mostrar aquellos numeros que no hayan salido.Ejemplo:

96

Page 97: Informática I:  Ejercicios Resueltos

2012

Ingrese cantidad de valores: 10Informe:El numero 8 salio 1 vez (10%).El numero 14 salio 2 veces (20%).El numero 20 salio 4 veces (40%).El numero 23 salio 1 veces (10%).El numero 30 salio 2 veces (20%).#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define N 99999

int main()

{

int numero[N]={0},i, j=0, cont=0;

srand(time(NULL));

printf("ingrese la cantidad de valores: ");

scanf("%d", &i);

do

{

j=rand()%37;

numero[j]++;

cont++;

}while(cont<=i);

int k;

for(j=0;j<37;j++)

{

if(numero[j]>0)

97

Page 98: Informática I:  Ejercicios Resueltos

2012

printf("\nEl numero %d salio %d veces (%%%d)\n", j, numero[j], (numero[j]*100)/i);

}

return 0;

}

Ejercicio 4.11Realice una funcion que reciba como parametro un arreglo de hasta 10 enteros y luego calculeel desvio estandar de esos valores. Programar otra funcion que calcule el promedio de un arreglo.Aplicar ambas funciones en un programa en el que se carguen los valores del arreglo y luegoimprima el desvio estandar de dicho arreglo.Ayuda:El desvio estandar (σ) es una medida estadistica de dispersion y la formula usual para su calculo es:N = Cantidad de valoresXi = Cada uno de los valoresm = Es el promedio(ver imagen de la formulita en el apunte de lirweb)#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#define N 10

double promedio (int[]);

double desvio_estandard (int[],double);

int main()

{

int numero[N],i=0;

double de, m;

printf("ingrese los valores: ");

98

Page 99: Informática I:  Ejercicios Resueltos

2012

do

{

scanf("%d", &numero[i]);

i++;

}while(i<N);

m=promedio(numero);

de=desvio_estandard(numero, m);

printf("La desviacion estandard de los valores ingresados es: %g", de);

return 0;

}

double promedio (int numero[])

{

int i;

double m=0;

for(i=0;i<N;i++)

{

m=m+numero[i];

}

m=m/N;

return m;

}

double desvio_estandard(int numero[],double m)

{

int s=0, i;

for(i=0;i<N;i++)

99

Page 100: Informática I:  Ejercicios Resueltos

2012

s=s+((numero[i]-m)*(numero[i]-m));

double solucion;

solucion=sqrt((double)s/N);

return solucion;

}

Ejercicio 4.12Rehacer los ejercicios 3.3 y 3.4 de la practica de arreglos, utilizando funciones. Preste especialatencion al codigo que se repite; identifiquelo, transcribalo a una funcion y reescriba el main parautilizarla.

3.3:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#define N 7

ingrese(char[]);

AND(char[],char[], char[]);

OR(char[],char[], char[]);

NOT(char[],char[], char[]);

int main()

{

int i, menu;

char v[N], b[N], r[N], l;

do{

printf("\nMenu\n");

printf("1 - AND\n");

100

Page 101: Informática I:  Ejercicios Resueltos

2012

printf("2 - OR\n");

printf("3 - NOT\n");

printf("4 - SALIR\n");

scanf("%d", &menu);

switch(menu)

{

case 1:

printf("\nIngrese el primer arreglo:");

ingrese (v);

printf("\nIngrese el segundo arreglo:");

ingrese(b);

AND(v,b,r);

printf("\nEl arreglo resultante es: %s", r);

break;

case 2:

printf("\nIngrese el primer arreglo:");

ingrese(v);

printf("\nIngrese el segundo arreglo:");

ingrese(b);

OR(v,b,r);

printf("\nEl arreglo resultante es: %s", r);

break;

101

Page 102: Informática I:  Ejercicios Resueltos

2012

case 3:

i=0;

printf("\nIngrese el arreglo:");

ingrese(v);

NOT(v,b,r);

printf("\nEl arreglo resultante es: %s", r);

break;

case 4:

printf("\nTerminado. Tenga un buen dia!.");

break;

default:

printf("\nOpcion no valida. Por favor reintente: ");

break;

}

}while(menu!=4);

return 0;

}

ingrese(char v[])

{

int i=0;

char l;

do

{

102

Page 103: Informática I:  Ejercicios Resueltos

2012

l=getche();

if(l=='0'||l=='1')

{

v[i]=l;

i++;

}

}while(i<6);

v[i]='\0';

}

AND(char v[],char b[], char r[])

{

int i;

for(i=0;i<6;i++)

{

if(v[i]=='1'&&b[i]=='1')

r[i]='1';

else

r[i]='0';

}

r[i]='\0';

}

OR(char[],char[], char[])

{

int i;

103

Page 104: Informática I:  Ejercicios Resueltos

2012

for(i=0;i<6;i++)

{

if(v[i]=='1'||b[i]=='1')

r[i]='1';

else

r[i]='0';

}

r[i]='\0';

}

NOT(char[],char[], char[])

{

int i;

for(i=0;i<6;i++)

{

if(v[i]=='1')

r[i]='0';

else

r[i]='1';

}

r[i]='\0';

}

3.4:

#include <stdio.h>

#include <stdlib.h>

#define N 1000

int repetido (int[], int, int);

104

Page 105: Informática I:  Ejercicios Resueltos

2012

int ingrese (int[]);

imprimir_resultado(int[], int);

int main()

{

int i, j, k, m, sen=0, menu, l, v[N], b[N], r[N*2];

do{

printf("\nMenu\n");

printf("1 - UNION\n");

printf("2 - INTERSECCION\n");

printf("3 - DIFERENCIA\n");

printf("4 - SALIR\n");

scanf("%d", &menu);

switch(menu)

{

case 1:

printf("\nIngrese el primer arreglo:");

i=ingrese(v);

printf("\nIngrese el segundo arreglo:");

k=ingrese(b);

//pedaso que checkea si guardar en el arreglo solucion o no.

for(m=0;m<i;m++)

{

r[m]=v[m];

}

105

Page 106: Informática I:  Ejercicios Resueltos

2012

for(j=0;j<k;j++)

{

sen=0;

sen=repetido(r,m,b[j]);

sen=repetido(v,m,b[j]);

if(sen==0)

{

r[m]=b[j];

m++;

}

}

imprimir_resultado(r,m);

break;

case 2:

printf("\nIngrese el primer arreglo:");

i=ingrese(v);

printf("\nIngrese el segundo arreglo:");

k=ingrese(b);

m=0;

for(j=0;j<i;j++)

{

sen=0;

sen=repetido(b,k,v[j]);

if(sen==1)

{

r[m]=v[j];

106

Page 107: Informática I:  Ejercicios Resueltos

2012

m++;

}

}

imprimir_resultado(r,m);

break;

case 3:

printf("\nIngrese el primer arreglo:");

i=ingrese(v);

printf("\nIngrese el segundo arreglo:");

k=ingrese(b);

for(j=0;j<i;j++)

{

sen=repetido(b,k,v[j]);

if(sen==0)

{

r[m]=v[j];

m++;

}

}

imprimir_resultado(r,m);

break;

case 4:

printf("\nTerminado. Tenga un buen dia!.");

break;

default:

107

Page 108: Informática I:  Ejercicios Resueltos

2012

printf("\nOpcion no valida. Por favor reintente: ");

break;

}

}while(menu!=4);

return 0;

}

int ingrese(int v[])

{

int i=0, sen, l;

do

{

scanf("%d", &l);

sen=repetido(v,i,l);

if(sen==0)

{

v[i]=l;

i++;

}

}while(i<N-1&&l!=0);

i--;

return i;

}

int repetido (int v[], int i, int l)

{

int j, sen=0;

for(j=0;j<i;j++)

108

Page 109: Informática I:  Ejercicios Resueltos

2012

{

if(v[j]==l)

sen=1;

}

return sen;

}

imprimir_resultado(int r[], int m)

{

printf("El arreglo resultante es: ");

int i;

for(i=0;i<m;i++)

{

printf("%d-", r[i]);

}

}

Ejercicio 4.13Realizar un programa que contenga las siguientes funciones:a. Una funcion que permita cargar un texto de hasta 1000 caracteres finalizando dicha carga conENTER. El arreglo debe contener el caracter ‘\0’ como marca de finalizacion de acuerdo con laconvencion utilizada en el lenguaje C.b. Una funcion que reciba como parametro una frase y que retorne cuantas palabras tiene esafrase.c. Una funcion que reciba como parametro una frase y que retorne la longitud promedio de laspalabras de esa frase.d. Una funcion que reciba como parametro una frase y que modifique el contenido de dichafrase de modo que la primera letra de cada palabra quede en mayuscula.

109

Page 110: Informática I:  Ejercicios Resueltos

2012

En base a estas funciones, Realizar un programa en el que se ingrese una frase y a continuacion semuestren por pantalla los resultados obtenidos mediante las funciones creadas en los puntos b, c y d.Considere programar funciones adicionales.#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#define N 1001

a (char[]);

int b(char[]);

double c (char[]);

d (char[]);

int es_separador(char);

int es_minuscula(char);

int main()

{

char texto[N];

int cantidad_palabras;

double promedio;

a(texto);

printf("\nTexto original:%s", texto);

cantidad_palabras=b(texto);

printf("\nCantidad de palabras: %d", cantidad_palabras);

promedio=c(texto);

printf("\nPromedio de longitud de las palabras: %.2lf", promedio);

d(texto);

printf("\nTexto modificado: %s", texto);

110

Page 111: Informática I:  Ejercicios Resueltos

2012

return 0;

}

a(char texto[])

{

int i=0;

char l;

printf("Ingrese el texto: ");

do

{

l=getche();

if(l!='\r')

{

texto[i]=l;

i++;

}

}while(i<N-1&&l!='\r');

texto[i]='\0';

}

int es_separador(char l)

{

return(l==' '||l==','||l==';'||l=='?'||l=='!');

}

int b (char texto[])

{

int cont=0, sen=0, i;

for(i=0;i<N-1&&texto[i]!='\0';)

111

Page 112: Informática I:  Ejercicios Resueltos

2012

{

sen=0;

while(es_separador(texto[i])&&texto[i]!='\0')

i++;

while(!es_separador(texto[i])&&texto[i]!='\0')

{

sen=1;

i++;

}

if(sen==1)

cont++;

}

return cont;

}

double c (char texto[])

{

/*c. Una funcion que reciba como parametro una frase y que retorne la longitud promedio de las

palabras de esa frase.*/

int cant_pal[N/2]={0}, i, suma=0, j=0, sen;

for(i=0;(i<N-1)&&(texto[i]!='\0');)

{

sen=0;

while(es_separador(texto[i])&&texto[i]!='\0')

i++;

112

Page 113: Informática I:  Ejercicios Resueltos

2012

while(!es_separador(texto[i])&&texto[i]!='\0')

{

cant_pal[j]++;

sen=1;

i++;

}

if(sen==1)

{

suma=suma+cant_pal[j];

j++;

}

}

double resultado;

resultado=suma/(double)j;

return resultado;

}

d (char texto[])

{

int sen=0, i;

for(i=0;i<N-1&&texto[i]!='\0';)

{

sen=0;

while(es_separador(texto[i])&&texto[i]!='\0')

i++;

113

Page 114: Informática I:  Ejercicios Resueltos

2012

while(!es_separador(texto[i])&&texto[i]!='\0')

{

if(sen==0)

{

if(es_minuscula(texto[i]))

texto[i]-=32;

}

sen=1;

i++;

}

}

}

int es_minuscula(char l)

{

return(l>='a'||l<='z');

}

Ejercicio 4. 14Realizar un programa que contenga las siguientes funciones:a. Una funcion que permita cargar un texto de hasta 1000 caracteres finalizando dicha carga conENTER. El arreglo debe contener el caracter ‘\0’ como marca de finalizacion de acuerdo conla convencion utilizada en el lenguaje C.b. Una funcion booleana que reciba como parametros dos palabras (en dos arreglosindependientes) y que indique si ambas palabras son iguales (considerar mayusculas yminusculas como iguales).c. Una funcion que reciba como parametros una frase y una palabra (considerar mayusculas y

114

Page 115: Informática I:  Ejercicios Resueltos

2012

minusculas como iguales) y que retorne cuantas veces aparece dicha palabra en la frase.d. Una funcion booleana que reciba como parametros dos frases (en dos arreglosindependientes) y que determine si ambas frases son iguales. Es decir, cuando contengan lasmismas palabras en el mismo orden. Por ejemplo: “Hola, como te va?” debe ser consideradaigual a “hola… Como te va!”En base a estas funciones, Realizar un programa en el que se ingresen por teclado dos frases y unapalabra. A continuacion, el programa debera mostrar por pantalla cuantas veces aparece la palabraingresada en cada una de las frases ingresadas y si ambas frases son iguales. Considere programarfunciones adicionales y utilizar la funcion del punto b en los puntos c y d.

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#define N 1001

void a (char[]);

int b(char[], char[]);

int c (char[], char[]);

int d (char[], char[]);

int es_separador(char);

int es_minuscula(char);

int es_letra(char);

int main()

{

char texto1[N], texto2[N], palabra[N], sen;

int cant_pal_rep1,cant_pal_rep2;

a(texto1);

115

Page 116: Informática I:  Ejercicios Resueltos

2012

printf("\n");

a(texto2);

printf("\n");

a(palabra);

cant_pal_rep1=c(texto1, palabra);

printf("\ncantidad de veces que se repite la palabra en el texto 1: %d", cant_pal_rep1);

cant_pal_rep2=c(texto2, palabra);

printf("\ncantidad de veces que se repite la palabra en el texto 2: %d", cant_pal_rep2);

sen=d(texto1,texto2);

if(sen==1)

printf("\nlos textos son iguales");

else

printf("\nlos textos son distintos");

return 0;

}

void a(char texto[])

{

int i=0;

char l;

printf("Ingrese el texto: ");

do

{

l=getche();

if(l!='\r')

{

116

Page 117: Informática I:  Ejercicios Resueltos

2012

texto[i]=l;

i++;

}

}while(i<N-1&&l!='\r');

texto[i]='\0';

}

int es_separador(char l)

{

return(l==' '||l==','||l==';'||l=='?'||l=='!');

}

int b (char palabra1[],char palabra2[])

{

/*b. Una funcion booleana que reciba como parametros dos palabras (en dos arreglos

independientes) y que indique si ambas palabras son iguales (considerar mayusculas y

minusculas como iguales).*/

int sen=1, i;

for(i=0;palabra1[i]!='\0'&&palabra2[i]!='\0'&&sen==1;i++)

{

if(palabra1[i]==palabra2[i])

sen=1;

else

sen=0;

}

return sen;

}

int c (char texto[], char palabra[])

117

Page 118: Informática I:  Ejercicios Resueltos

2012

{

/*c. Una funcion que reciba como parametros una frase y una palabra (considerar mayusculas y

minusculas como iguales) y que retorne cuantas veces aparece dicha palabra en la frase.*/

int sen=1, i, cont=0, j;

for(i=0;texto[i]!='\0';i++)

{

sen=1;

j=0;

if(es_minuscula(palabra[j]))

palabra[j]-=32;

if(texto[i]==palabra[j]||texto[i]==palabra[j]+32)

{

i++;

j++;

while(palabra[j]!='\0'&&sen==1)

{

if(es_minuscula(palabra[j]))

palabra[j]-=32;

if(texto[i]==palabra[j]||texto[i]==palabra[j]+32)

sen=1;

else

sen=0;

j++;

i++;

}

if(es_separador(texto[i])||texto[i]=='\0')

118

Page 119: Informática I:  Ejercicios Resueltos

2012

sen=1;

else

sen=0;

if(sen==1)

cont++;

}

}

return cont;

}

int d (char texto1[],char texto2[])

{

/*d. Una funcion booleana que reciba como parametros dos frases (en dos arreglos

independientes) y que determine si ambas frases son iguales. Es decir, cuando contengan las

mismas palabras en el mismo orden. Por ejemplo: “Hola, como te va?” debe ser considerada

igual a “hola… Como te va!”*/

int i=0, j=0, sen=1;

while(texto1[i]!='\0'&&texto2[i]!='\0'&&sen==1)

{

if(es_letra(texto1[i]))

{

if(es_minuscula(texto1[i]))

texto1[i]-=32;

if(es_letra(texto2[j]))

{

if(es_minuscula(texto2[j]))

119

Page 120: Informática I:  Ejercicios Resueltos

2012

texto2[j]-=32;

if(texto1[i]!=texto2[j])

sen=0;

else

{

j++;

i++;

}

}

else

j++;

}

else

i++;

}

return sen;

}

int es_minuscula(char l)

{

return (l>='a'&&l<='z');

}

int es_letra(char l)

{

return ((l>='A'&&l<='Z')||(l>='a'&&l<='z'));

}

120

Page 121: Informática I:  Ejercicios Resueltos

2012

En este programita tengo q avisar q ni use una función asique probablemente no sea asi como tendría que estar hecho, pero no se me ocurrio de otra manera..

121