Computación (75.01) Guía de Ejercicios y Resoluciones
1º Cuatrimestre 2011 - Cátedra Cabrera
Secuencia
1) Dado el radio R de una esfera, calcular e imprimir su superficie y su volumen. 2) Realizar un programa que produzca la siguiente salida: *********** * "HOLA" * *********** 3) Leer la base y la altura de un rectángulo, calcular el perímetro y la superficie. 4) Leer dos números A y B e intercambiar el valor de sus variables. 5) Dadas las horas de partida y llegada de un móvil, expresadas en horas, minutos y segundos, calcular su velocidad promedio sabiendo que la distancia recorrida es D. 6) Escribir un programa que lea un número real cualquiera y lo imprima redondeando con dos decimales. 7) Una gran compañía de productos químicos paga por comisión a sus agentes de ventas. Estos reciben $200 a la semana más 9% de sus ventas brutas en la semana. Por ejem plo, un agente que qu e venda $5000 $500 0 en químicos en una semana recibirá $200 $ 200 más 9% de $5000, es decir, un total de $650. Desarrolle un programa que acepte como entrada las ventas netas de un vendedor durante la última semana y calcule y despliegue sus ingresos. 8) Realice un programa que muestre el siguiente dibujo:
* ** *** **** ***** ****** * * *
9) Pasar un período expresado en segundos a un período expresado en días, horas, minutos y segundos.
Selección
1) Leer un número entero y decir si es mayor, menor o igual a cero. 2) Leer dos números reales e imprimir el mayor de ellos. 3) Ingrese tres valores reales que correspondan a los lados de un triángulo e imprima de qué clase es. 4) Ingrese un carácter e informe si es una letra. 5) Escriba un programa que ingrese 2 números y un carácter (+, -, *, /) e informe el resultado de la operación. 6) Construya un programa que ingrese una letra (mayúscula o minúscula) e informe si es vocal o consonante. 7) Realice un programa que solicite el valor de X y devuelva si el valor de Y = 6x2/(5+4x) es par o impar. 8) Ingrese dos números enteros e indique si la suma es un número positivo o negativo. 9) Escribir un algoritmo que determine si un número N es divisible por M. 10) Leer datos de lados de un triángulo A, B, C, haciendo consistencia de datos (debe ser A < B + C si A es el lado mayor). Informar según sea A 2 con respecto a B2 + C2, si el triángulo es rectángulo, acutángulo u obtusángulo. 11) Un palíndromo es un número o frase de texto que se lee igual al derecho que al revés. Por ejemplo, los siguientes enteros de 5 cifras son palíndromos: 12321, 55555, 45554 o 11611. Escriba un programa que lea un entero de 5 dígitos y determine si es un palíndromo o no. 12) Realice un programa que permita el ingreso de una fecha y verifique si es una fecha válida. Utilice tres variables enteras DD, MM y AA para cargar el valor de la fecha. Un año es bisiesto si su valor es múltiplo de 4 y no de 100 o cuando es múltiplo de 400.
13) Realice un programa que, dado el ingreso de dos fechas, muestre la cantidad de días que hay entre ellas.
Iteración
1) Dada una lista de N valores enteros, informar cuántos son negativos y el promedio de los positivos. 2) Leer un número N y calcular su factorial. 3) Leer una serie de números reales, terminando la serie con un cero. Imprimir los datos a medida que se los ingresa junto con las suma parcial de los mismos. 4) Dada una serie de números enteros, determinar el valor máximo, el mínimo y las posiciones que éstos ocupan en la serie. 5) Leer un valor N y luego N números enteros de cuatro cifras. Se pide imprimir el mayor y el menor y las veces que aparece cada uno. Pueden venir datos erróneos. 6) Escribir un algoritmo que determine si un número es primo. 7) Leer A y B, enteros de 4 cifras. Calcular C = A*B mediante sumas sucesivas, e im primir el resultado. 8) Leer A y B, enteros. Calcular C = AB mediante multiplicaciones sucesivas, e imprimir el resultado. 9) Escribir un algoritmo que descomponga un número en sus factores primos. 10) Desarrollar un algoritmo para hallar el MCD entre dos enteros dados. 11) Dada una serie de números enteros terminada en cero, imprimir los 4 mayores. 12) Realizar un algoritmo que lea una serie de números enteros y verifique si están ordenados ascendentemente o no, informando por pantalla. 13) Dada una serie de datos de la forma mes (1 a 12, no vienen ordenados), cantidad recaudada (en pesos) y costo total (en pesos), hacer un algoritmo que calcule e im prima cuál fue el mes que arrojó mayor ganancia. La serie termina con mes igual a cero, y pueden venir datos erróneos. 14) Calcular todos los números de tres cifras tales que la suma de los cubos de las cifras sea igual al valor del número.
15) La ecuación para estimar la población en un período de N años, si el crecimiento porcentual R%, es: P = P0*(1 + R/100) N Escribir un algoritmo que tabule las poblaciones previstas para la ciudad de Buenos Aires entre 1980 y 2050, con intervalos de 10 años, sabiendo que: R = 1,7% y P 0 = 9.927.000 (en 1980). 16) De cada uno de los N empleados de una empresa se tiene: Nº de legajo, sueldo básico, antigüedad. Sabiendo que se recibe un plus por antigüedad según el siguiente cuadro: 2 a 4 años 20% del básico 5 a 8 años 40% del básico 9 a 12 años 60% del básico 13 o más años 80% del básico Imprima para cada empleado, su legajo y sueldo a cobrar, y al fin del proceso, el total de los sueldos. 17) Ingresar números enteros positivos, el ingreso de un número negativo indicará el fin de los datos. Para cada número ingresado, calcular e imprimir la sumatoria desde 1 hasta dicho número. 18) Se leen 300 datos que representan el peso de la misma cantidad de niños que hay internados en un hospital. Se desea confeccionar la siguiente tabla: Entre 0,000 y 10,000 kg hay ...... niños. Entre 10,001 y 20,000 kg hay ...... niños. Entre 20,001 y30,000 kg hay ...... niños. De más de 30,000 kg hay ...... niños. 19) La relación entre temperaturas Celsius y Fahrenheit está dada por: C = (5/9)*(F - 32). Escribir un algoritmo que haga una tabla de valores Celsius-Fahrenheit, para valores entre 0 ºF y 200 ºF con intervalos de 10 ºF. 20) Una empresa de ventas por correo vende 5 productos distintos, cuyos precios unitarios se muestran en la siguiente tabla: 1 2,98 2 4,50 3 9,98 4 4,49 5 6,87 Escriba un programa que lea una serie de pares de números como sigue: a. Número del producto. b. Cantidad vendida en el día. Su programa deberá calcular y desplegar el valor total de todos los productos vendidos la semana pasada.
21) Escriba un programa que encuentre los tres primeros números perfectos. Un número perfecto es un entero positivo, que es igual a la suma de todos sus divisores (excepto él mismo). El primer número perfecto es 6, ya que los divisores de 6 son 1, 2, 3 y 1+2+3=6. 22) Leer N y luego N lotes de números reales que terminan con valor 0, y calcular la media individual de cada lote, junto con la media total de todos los números ingresados. 23) Se dispone del registro diario de lluvias de un mes para una localidad. Si llovió algún día del mes, indicar cuál fue el día más lluvioso y utilizar un indicador lógico para discriminar si llovieron dos días seguidos en el mes. Si no llovió en todo el mes, emitir un mensaje.
Función RAND
1) Simular 100 tiradas de dos dados y contar las veces que entre los dos suman 10. 2) Simular el juego de dados entre 3 participantes y parar cuando uno de ellos haga "generala", es decir, todos los dados con el mismo número. 3) Escribir un programa que juegue "adivina el número" como sigue: el programa selecciona un número a adivinar entre 1 y 1000. El jugador ingresa algún número y el programa responde con mensajes "Muy alto", "Muy bajo" o "Acertó". Una vez que se adivina, el programa deberá indicar la cantidad de intentos que fueron necesarios.
Funciones de Usuario
1) Escriba dos funciones que reciban un número real y devuelvan el doble y la mitad del mismo, respectivamente; llámelas en un programa que ingrese números y los imprima acompañados del valor del doble y la mitad. Elija usted la forma de indicar el fin de los datos. 2) Resuelva el siguiente problema usando funciones: Ingresar N números enteros e im primirlos acompañados de su factorial. 3) Ingrese ternas de caracteres que finalizan con (x, x, x). Imprima cada terna ordenada de menor a mayor (use una función para ordenarlas).
4) Construya una función que reciba dos valores reales y devuelva el más grande. Haga un programa que utilice la función. 5) Construya una función que reciba un valor entero y lo imprima en un renglón y que cada 5 números impresos, imprima un renglón de asteriscos. Pruebe la función con un programa que genere 15 números al azar y los imprima, haciendo una separación con asteriscos cada 5 números. 6) Escriba una función múltiplo que tome dos enteros y determine si el segundo es múltiplo del primero. Utilice esta función en un programa que acepte como entrada una serie de pares enteros. 7) Escriba una función que presente en el margen izquierdo de la pantalla un cuadrado con el carácter especificado en el primer parámetro y la longitud del lado indicada en el segundo parámetro. 8) Un estacionamiento público cobra una tarifa mínima de $2,00 por estacionarse hasta tres horas; luego cobra $0,50 por cada hora o fracción a partir de las tres horas. La tarifa máxima por período de 24 horas es de $10,00. Suponga que ningún automóvil se estaciona por más de 24 horas seguidas. Escriba un programa que calcule e imprima las cuentas por estacionamiento de tres clientes que dejaron allí sus autos. Usted introduce las horas de estacionamiento de cada cliente. Su programa imprimirá los resultados en forma tabular y con orden, y calculará e imprimirá el total de los recibos de ayer. También determinará el cargo por cliente utilizando una función. Sus salidas deberán aparecer en el siguiente formato: Auto Horas Cargo 1 1,5 2,00 2 4,0 2,50 3 24,0 10,00 Total 29,50 14,50 9) Defina una función hipotenusa que calcule la longitud de la hipotenusa de un triángulo rectángulo cuando se dan los otros dos lados. Emplee esta función en un programa. 10) Escriba una función que tome un valor entero y devuelva el número con sus dígitos en reversa. Por ejemplo, dado el número 7631, la función deberá devolver 1367. 11) Escriba una función que acepte el promedio de un estudiante y devuelva 4 si su promedio está entre 90 y 100, 3 si está entre 80 y 89, 2 si está entre 70 y 79, 1 si está entre 60 y 69, y 0 si es menor que 60.
12) Escriba un programa que simule el lanzamiento de una moneda. Por cada lanzamiento, el programa deberá imprimir cara o ceca. Haga que el programa lance la moneda 100 veces y cuente la cantidad de veces que aparece cada lado de la moneda. Imprima el resultado. El programa deberá llamar a una función independiente que no reci be argumentos y devuelve 0 si es ceca y 1 si es cara.
Funciones Recursivas
1) Obtener una función recursiva que calcule la suma de los cuadrados de los n primeros números enteros positivos. 2) Obtener una función recursiva que calcule a b (con a y b enteros positivos). 3) Escriba una función recursiva que calcule la división entera entre dos números enteros en función de la resta obteniendo cociente y resto. 4) Escriba una función recursiva que imprima el inverso de un número entero dado; muestre su funcionamiento en un programa. 5) Se desea calcular el capital total acumulado durante n años por una inversión de un capital de 100000 pesos que produce un interés del 12% anual. La cantidad de años deberá ser ingresada por el usuario desde el teclado. 6) Hallar el máximo común divisor (MCD) de dos números mediante una función recursiva.
Vectores
1) Desarrollar una función que devuelva en un vector los números primos entre 2 y 200. 2) Dados dos vectores A y B de N y M elementos enteros respectivamente, implemente funciones para calcular la unión, intersección y diferencia entre los dos conjuntos A y B (en este ejercicio llamamos conjuntos a los vectores). 3) Escribir un programa que cargue en un vector llamado bisiestos todos los años bisiestos correspondientes al intervalo de tiempo que va entre los años 1800 y 2004. Ej.: Son bisiestos los años 1988, 1992, 2000; No lo son 1800, 1853, 1900. 4) Dados dos vectores A y B de N elementos cada uno, se desean calcular: a) El vector suma: C(i) = a(i) + b(i) b) El producto escalar: p = Ʃ a(i)*b(i)
5) Construya un programa que inicialice un vector con la cantidad de días de cada mes del año, luego ingrese un número de mes e imprima cuántos días tiene. 6) Diseñar una función que ordene el vector V de N elementos eliminando, de paso, todos aquellos que se repitan. 7) Construir un algoritmo que para cada auto participante en una carrera de TC2000 lea un código de auto y dos tiempos de vuelta (en segundos y centésimas). Previamente se debe leer la longitud del circuito. Dada una serie de códigos de autos leídos a continuación, se deben informar las velocidades promedio correspondientes a cada tiem po de vuelta de dichos autos. Ambos conjuntos de datos se terminan con un código de auto negativo. 8) Por cada alumno que rindió un examen de inglés se lee el número de padrón, el código de carrera (entre 1 y 9) y la nota obtenida. Se desea saber la cantidad de alumnos por carrera que rindieron el examen y el porcentaje de alumnos que obtuvieron cada nota. Hallar el porcentaje de alumnos de cada carrera que resultaron aprobados. 9) Se lee un vector X de N elementos (enteros). Escribir una función que devuelva un vector que tenga todos los elementos de X, pero sin incluir los repetidos. 10) En un comercio trabajan 5 vendedores que se identifican con un número del 1 al 5. Por cada venta que realizan se tiene: nº de vendedor y total de la venta. El fin de la información se indica con un número de vendedor cero. Se pide: a) Informar cuánto vendió cada vendedor. b) Determinar qué vendedor vendió más. 11) Escribir un programa que lea una serie de fechas (día, mes y año), la cantidad de pasajeros transportados por una línea aérea en esa fecha y el monto recaudado en dólares, determinando en qué días del período se transportaron más de 2000 pasajeros (puede no haber ninguno), indicando el monto recaudado en ese/os día/s. Tam bién deberá emitirse un listado de los días en que el monto recaudado superó los 500.000 dólares (puede no haber ninguno). Ambos listados deben ser emitidos por separado. El lote de datos termina en una fecha inválida. El período no será mayor a 366 días.
Matrices
1) Escribir una función que, invocada como Múltiplo(A,B,N) verifique que la matriz B sea múltiplo de la matriz A (ambas cuadradas y de orden N).
2) Por cada alumno que aprueba una materia en la facultad de Ingeniería se ingresa el número de padrón del alumno y el código de la materia aprobada. El lote de datos termina con un número de padrón negativo. Se pide: a) Un listado en el que, para cada alumno, conste la cantidad de materias aprobadas. b) Un listado de materias que fueron aprobadas por lo menos por un alumno. c) El o los números de padrón de los alumnos que aprobaron la mayor cantidad de materias. 3) Diseñar un algoritmo que halle una matriz C como suma de dos matrices A y B. La dimensión de las matrices de MxN se lee como dato. 4) Diseñar un algoritmo que halle un vector cuyos elementos son la suma de los elementos de cada fila de una matriz previamente ingresada. 5) Escribir un programa que calcule la traza de una matriz cuadrada. Recordar que la traza de una matriz es la suma de los elementos de su diagonal principal. 6) Diseñar un algoritmo que determine si una matriz cuadrada ingresada es la matriz identidad. 7) Escribir una función que, al ser invocada, determine si la matriz M, cuadrada y de orden N, es tridiagonal. Una matriz es tridiagonal cuando los únicos elementos distintos de cero son los que se encuentran sobre la diagonal principal y sus dos diagonales paralelas adyacentes. 8) Se dice que una matriz tiene un punto de silla si alguna posición de la matriz es el menor valor de su fila y el mayor de su columna. Escribir un programa que tenga como entrada una matriz de números enteros, y calcule la posición de un punto de silla (si es que existe). 9) Escribir una función que, al ser invocada, determine si la matriz M, cuadrada y de orden N, es simétrica respecto de su diagonal secundaria. Se denomina diagonal secundaria a los elementos de la matriz que están sobre la línea que va desde el ángulo superior derecho hasta el ángulo inferior izquierdo de la misma. 10) Dada una matriz de MxN y un vector de S elementos, determinar si los elementos del vector pertenecen a la matriz. 11) Escribir una función que, al ser invocada, verifique que la matriz A (cuadrada y de orden N) sea una matriz diagonal dominante. Una matriz diagonal dominante es aquella en la que cada valor absoluto, de un elemento de la diagonal principal, es mayor a la suma de los valores absolutos del resto de los elementos de su fila, más la suma de los valores absolutos del resto de los elementos de su columna.
Resoluciones Secuencia
1) #include
#include using namespace std; int main() { float a,b,c,d; cout<<"Ingrese radio de la esfera: "; cin>>a; c=3.1415926535897932; b=(4*c*a*a*a)/3; d=4*c*a*a; cout<<"La superficie de la esfera es: "<
2) #include #include using namespace std; int main() { cout<<"************"<
3) #include #include using namespace std; int main() { float base,altura; cout<<"Introduzca la base del rectangulo: "; cin>>base; cout<<"Introduzca la altura del rectangulo: "; cin>>altura; cout<<"El perimetro es: "<<2*base+2*altura<
Función RAND
1) #include #include using namespace std; int main() { cout<<"Oprima una tecla para tirar 2 dados 100 veces consecutivas."<
3) #include #include using namespace std; int main() { srand(time(0)); int C1,C2,C3,a,num; C1=0;C2=0;C3=0; a=rand()%1000 + 1; cout<<"Este programa selecciona un numero entero aleatorio entre 1 y 1000"<>num; while(num!=a) { if(num>num; } else { cout<<"El digito propuesto es mayor al correcto"<>num; } } C3++; cout<<"Correcto!, Felicitaciones!, ha ganado en "<
}
system("PAUSE");
Vectores
2) #include #include using namespace std; void UNION(float A[],int N,float B[],int M,float union_vectores[],int H) { int i,j; for(i=0;i>N>>M; float A[N]; float B[M]; int i; float vector_union[N+M]; cout<<"Ingrese los valores del vector A: "; for(i=0;i>A[i]; } cout<<"Ingrese los valores del vector B: "; for(i=0;i>B[i]; } UNION(A,N,B,M,vector_union,N+M); cout<<"La union de los conjuntos A y B esta compuesta por los siguientes valores:"<
{
cout<
3) #include #include using namespace std; int main() { int i,n=0; int BISIESTOS[100]={0}; for(i=1800;i<=2004;i++) {
if(((i%4)==0)&&(i!=1800)&&(i!=1900)) { BISIESTOS[n]=i; n++; }
} n=0; cout<<"Los años bisiestos entre 1800 y 2004 son: "; while(BISIESTOS[n]!=0) { cout<
4) (Se tomó N = 10, pero es sencillo establecer un N ingresado por el ususario) #include #include using namespace std; int main() { int i; float A[10]; float B[10]; float SUMA[10]; float producto=0; cout<<"Ingrese los valores del vector A: "; for(i=0;i<10;i++) {cin>>A[i];} cout<<"Ingrese los valores del vector B: "; for(i=0;i<10;i++) {cin>>B[i];} for(i=0;i<10;i++) {SUMA[i]=(A[i]+B[i]);} cout<<"El vector suma es: "; for(i=0;i<10;i++)
}
{cout<
7) #include #include using namespace std; int main() { int CODIGO[100]={0}; float TIEMPO1[100]; float TIEMPO2[100]; int i=0,codigo; float longitud; cout<<"Ingrese distancia del circuito en metros: "; cin>>longitud; cout<<"Ingrese un codigo de auto y tiempo de primera y segunda vuelta (segundos y centesimas separados por un punto). Luego de ingresar cada valor presionar ENTER."<>CODIGO[0]; while((CODIGO[i]>0)&&(i<100)) { cout<<"Primer vuelta: "; cin>>TIEMPO1[i]; cout<<"Segunda vuelta: "; cin>>TIEMPO2[i]; i++; cout<<"Codigo: "; cin>>CODIGO[i]; } cout<<"Ingrese los codigos de auto para los cuales desee conocer velocidad promedio de primer y segunda vuelta."<>codigo; while(codigo>0) { for(i=0;i<100;i++){ if(CODIGO[i]==codigo){ cout<<"Primer vuelta: "<<(longitud/TIEMPO1[i])<< "m/s"<>codigo; } system("PAUSE");
}
10) #include #include using namespace std; int main() { int i,n,venta; float ventmax=0; int VENDEDORES[5]; float VENTAS[5]={0}; for(i=0;i<5;i++){ VENDEDORES[i]=(i+1); } cout<<"Ingrese numero de vendedor (1 a 5) y monto de venta (presionar ENTER luego de cada uno). Cuando haya terminado de ingresar los datos tipee un numero de vendedor nulo."<>n; while(n!=0){ if((n>=1)&&(n<=5)){ cout<<"Monto: "; cin>>venta; VENTAS[(n-1)]+=venta; } else{ cout<<"Vendedor incorrecto."<>n; } cout<<"Las ventas totales de cada vendedor son: "<
Matrices
2) #include #include using namespace std; int main() { cout<<"Recordatorio para el programador: este programa opera con una matriz de 3 filas en lugar de utilizar 3 vectores por separado."<
almacena los padrones, la fila 1 los codigos de materia"<>PADCOD[0][0]; while (PADCOD[0][i]>=0){ cout<<"Codigo de materia: "; cin>>PADCOD[1][i]; PADCOD[2][i]++; i++; cout<<"Padron: "; cin>>PADCOD[0][i]; } cout<<"Se mostrara un listado con la cantidad de materias aprobadas por cada alumno: "<
3) #include #include using namespace std; int main() { int i,j,N,M; cout<<"Escriba dimension de las matrices A y B (filas, columnas), sera la misma para ambas: "<>N>>M; float matrizA[N][M]; float matrizB[N][M]; float matrizC[N][M]; cout<<"Escriba los datos de la matriz A, comenzando por la primer fila: "<>matrizA[i][j]; }} cout<<"Escriba los datos de la matriz B, comenzando por la primer fila: "<>matrizB[i][j]; }} for(i=0;i
}
system("PAUSE");
}}
cout<
4) #include #include using namespace std; int main() { int N,M,i,j; cout<<"Ingrese dimension de la matriz (filas, luego columnas): "; cin>>N>>M; float VECTOR[N]; float MATRIZ[N][M]; cout<<"Ingrese los datos de la matriz comenzando por la fila 1:"<>MATRIZ[i][j]; VECTOR[i]+=MATRIZ[i][j]; }} cout<<"El siguiente vector muestra, en cada componente, la suma de los elementos de cada fila de la matriz ingresada, comenzando por la primer fila:"<
system("PAUSE");
5) #include #include using namespace std; int main() { int n,i,j; float traza=0; cout<<"Ingrese dimension de la matriz cuadrada: "; cin>>n; float matriz[n][n]; cout<<"Ingrese los valores de la matriz, comenzando por la primer fila y separando los datos con espacios."<>matriz[i][j]; if(i==j){ traza+=matriz[i][j]; } } } cout<<"La traza de la matriz es: "<
6) #include #include using namespace std; int main() { int n,i,j,aux=0,aux2=0; cout<<"Ingrese dimension de la matriz cuadrada: "; cin>>n; float matriz[n][n]; cout<<"Ingrese los valores de la matriz comenzando por la fila 1, separando los datos con espacio o presionando ENTER luego de cada uno."<>matriz[i][j]; if((i==j)&&(matriz[i][j]==1)){ aux++; } if((i!=j)&&(matriz[i][j]==0)){ aux2++; } }} if(aux==n && aux2==((n*n)-n)){ cout<<"La matriz ingresada es la matriz identidad."<