Académique Documents
Professionnel Documents
Culture Documents
PROBLEMAS RESUELTOS
1. Realice un programa en lenguaje C que imprima todos los números impares M y N que
cumplan la siguiente condición:
3 2
2M + 3N < 540
SOLUCIÓN
1. Algoritmo.
a) M y N empiezan en 1
b) N se queda en 1 y M empieza a incrementarse de 2 en 2 y se va
sustituyendo en la ecuación.
o Imprimir todos los números que cumplan la condición.
c) Si existe un número que ya no cumpla con la condición:
o Que incremente N en 2 y M regrese a 1.
o Nuevamente M vuelve a empezar a incrementarse.
d. El paso anterior se repite hasta que ya no exista ningún número que cumpla
con la condición.
2. Diagrama de flujo.
funcion ( m, n )
INICIO
return k
y< 540
“ADIOS”
x<540
x=funcion (m,
y=funcion ( m,
x
n=n+2
m=m+2
y=funcion ( m,
3. Codificación
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
4. Resultados
1
1
1
3
3
SOLUCIÓN
1. Algoritmo
1.1. Preguntar en que valor inicia, en que valor termina y cual es el valor del
incremento de la tabulación.
1.2. Verificar los intervalos preguntando: sí el valor inicial es mayor que el valor
final y sí el incremento es menor o igual que cero.
1.2.1.Sí la respuesta a la pregunta anterior es SI (VERDADERO) los intervalos
están incorrectos por lo que:
1.2.1.1. Enviar un aviso de que los intervalos son incorrectos.
1.2.1.2. Regresar al punto A para volver a preguntar los intervalos.
1.2.2.Sí la respuesta a la pregunta anterior es NO (FALSO), continuar el punto C.
1.3. Inicializar dos variables mayor y menor en el resultado de la evaluación de la
función en el valor inicial de la tabulación. En estas dos variables se
guardara el valor máximo y mínimo de la función en el intervalo.
1.4. Utilizar una estructura indexada, con un contador que inicia en el valor inicial
de la tabulación, que termina en el valor final de la misma y con incrementos
del tamaño proporcionado anteriormente.
1.4.1.Utilizar una función de usuario para calcular el valor de la función en cada
punto del contador, la función de usuario deberá convertir los valores del
contador en grados a radianes.
1.4.2.Preguntar sí el valor de la función es mayor que el valor de la variable
mayor:
1.4.2.1. Sí la respuesta es SI, introducir a la variable mayor el valor de la
función.
1.4.3.Preguntar sí el valor de la función es menor que el valor de la variable
menor:
1.4.3.1. Sí la respuesta es SI, introducir a la variable menor el valor de la
función
1.4.4.Imprimir el valor del contador y de la función valuada en ese punto.
1.5. Imprimir el valor mayor y menor de la función.
1.6. Preguntar si se desea volver a tabular otros intervalos:
1.6.1.Sí la respuesta es afirmativa regresar al punto 1.1.
1.7. Finaliza el programa.
2. Diagrama de flujo.
INICIO funcion (m)
(AI>AF ) ||
(INC<=0)
i =AI; i<=AF ;
i = I + INC
mayor
fx = funcion ( i ) menor
SI N
fx>mayor O
mayor = fx
“REPETIR?”
fx<menor SI opcion
NO menor = fx opcion==’s’ NO
i , fx
SI
“ADIOS”
FIN
3. Codificación
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<ctype.h> float
funcion( float m){ float rad, res;
rad=m*M_PI/180.0; res=sin(
rad ) +cos( rad ); return res;}
void main (void){
float AI, AF, INC, fx, mayor, menor, i;
char opcion;
do{
do{ clrscr();
printf("PROGRAMA PARA TABULAR F(X) = SEN(X) + COS (X)\n");
printf("INTRODUZCA EL VALOR DEL ANGULO INICIAL (GRADOS) ");
scanf("%f",&AI);
printf("INTRODUZCA EL VALOR DEL ANGULO INICIAL (GRADOS) ");
scanf("%f",&AF);
printf(" INTRODUZCA EL VALOR DEL INCREMENTO DEL ANGULO (GRADOS) ");
scanf("%f",&INC);
if((AI>AF)||(INC<=0)){
printf("INTERVALOS NO VALIDOS");
getch();
}
}while((AI>AF)||(INC<=0));
mayor=funcion(AI);
menor=funcion(AI);
clrscr();
printf("x\t\tf(x)");
for(i=AI;i<=AF;i=i+INC)
{ fx=funcion(i);
if(fx>mayor)mayor=fx;
if(fx<menor)menor=fx;
printf("\n%.2f\t\t%.2f",i,fx);
}
printf("\n VALOR MAXIMO F(X)=%f",mayor); printf("\n
VALOR MINIMO F(X)=%f",menor); printf("\nDESEA
REALIZAR OTRA TABULACION (S/N)?"); opcion=getche();
opcion=tolower(opcion);
}while(opcion=='s');
printf("\nADIOS");
getch();
}
4. Resultados
AI = 1, AF = 10, INC = 1
10
3. La serie de Taylor para determinar el valor de la función f(x) = ln (x + 1) esta dada por:
2 3 4
x x x x − ......
5
ln (x + 1) = x − + − +
2 3 4 5
SOLUCIÓN
1. Algoritmo.
2. Diagrama de flujo.
INICIO funcion( x, i )
x, t E=(pow(x,i) / i) * (pow(-1,
(i+1)))
regresa E
t<=0
res = 0
i=1;
i<=1;i++
res
y = funcion ( x, i)
opcion
opcion
==’ ’
FIN
3. Codificación
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <ctype.h>
float funcion (float, int);
void main (void){
float x, y, res;
int t, i;
char opcion;
do{
do{ clrscr( );
printf(“PROGRAMA QUE ESTIMA EL VALOR DE ln(x+1)”);
printf(“\n SEGÚN LA SERIE DE TAYLOR\n”)
printf(“INTRODUZCA EL VALOR PARA x”);
scanf(“%f”,&x);
printf(“INTRODUZCA EL NUMERO DE TERMINOS”);
scanf(“%d”,&t);
}while(t<=0);
res=0 ;
for(i=1 ;i<=t ;i++){
y=funcion(x,i) ;
res=res+y ;
}
printf(“\n EL RESULTADO ES= %f”,res);
printf(“\n DESEA VOLVER A INTRODUCIR DATOS?”);
opcion=getche( );
opcion=toupper(opcion);
}while(opcion==’S’);
printf(“ADIOS”);
getch( );
}
4. Resultados
x = 1, t=3
2 3
1 1
ln (x + 1) = 1 − + = 0.83333
2 3
SOLUCIÓN
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
float funcion(int, float);
void main(void)
{
int n;
float resultado, x;
clrscr();
printf(" Cuantos terminos de la serie (n)");
scanf("%d",&n);
printf("Para que valor de x=?");
scanf("%f",&x);
resultado=funcion(n,x);
printf("El resultado es= %f", resultado);
getch();
}
float funcion(int n , float x)
{
float res=0;
int i,j;
for(i=1, j=1; i<=n; i++, j+=2)
res + = ( I / ( pow ( x , j ) ) ) * pow( -1 ,( i + 1));
return res;
}
5. La suma o resta de dos vectores (x, y, z) se define como la respectiva suma o resta de sus
componentes en x, y & z. Elabore la codificación de un programa en lenguaje C/C++ que
lea dos vectores (x, y, z) y los almacene, cada uno de ellos, en un arreglo unidimensional
de tamaño 3. Posteriormente, mediante un menú, ofrecer al usuario realizar la suma o resta
de estos vectores, el usuario elegirá cuál opción tomar. El programa deberá calcular la
opción deseada y guardará el resultado en otro arreglo unidimensional de tamaño 3.
Imprimir el resultado.
Utilizar funciones de usuario de paso por valor y/o referencia. Valor 3 puntos
SOLUCIÓN
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
void main(void)
{
float vector1[3], vector2[3], resultado[3];
int i, opcion;
clrscr();
printf("Introduzca x, y & z del primer vector");
for(i=0;i<3;i++)
scanf("%f",&vector1[i]);
printf("Introduzca x, y & z del segundo vector");
for(i=0;i<3;i++)
scanf("%f",&vector2[i]);
printf("Que operacion desea realizar:\n");
printf("1.- suma \n 2.- resta \n");
scanf("%d",&opcion);
switch(opcion){
case 1:
suma(vector1, vector2, resultado);
break;
case 2:
resta(vector1, vector2, resultado);
break;
default:
printf("opcion no valida");
getch();
exit(0);
}
printf("Resultado= (%f,%f,%f)", resultado[0],resultado[1],resultado[2]);
getch();
}
void suma(float vector1[3], float vector2[3], float resultado[3]){
int i;
for(i=0;i<3;i++)
resultado[i]= vector1[i] + vector2[i];
}
void resta(float vector1[3], float vector2[3], float resultado[3]){
int i;
for(i=0;i<3;i++)
resultado[i]= vector1[i] - vector2[i];
}
Boleta
200330210
200330230
SOLUCIÓN
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#define NF 30
for(i=0;i<NF;i++)
or(j=4;j<7;j++){
printf("Introduzca el numero de practicas %d del alumno %d", j-3, i+1);
scanf("%f",&calificacion[i][j]);
}
calcular(calificacion);
clrscr();
printf("RESULTADOS:\n");
printf("Numero de boleta:\t Calificacion\n");
for(i=0;i<NF;i++)
printf("\n%9.0f\t\t %2.2f", calificacion[i][0], calificacion[i][7]);
getch();
}
El programa deberá utilizar funciones de usuario de paso por valor y/o referencia.
SOLUCIÓN
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
float funcion(float);
void main(void)
{
float sup, inf, inc, y;
do{
clrscr();
cout<<"Cual es el limite inferior de la tabulacion? ";
cin>>inf;
cout<<"Cual es el limite superior de la tabulacion? ";
cin>>sup;
cout<<"Cual es el tama¤o del incremento de x=?";
cin>>inc;
}while(inf>=sup||inc<=0);
cout<<"\n x \t f(x) \n";
for (float i=inf;i<=sup;i+=inc)
{
if(i==0)
y=1;
else
y=funcion(i);
cout<<i<<"\t "<<y<<"\n";
}
getch();
}
float funcion(float x)
{
return (sin(x)/x);
}
El programa deberá utilizar funciones de usuario de paso por valor y/o referencia.
SOLUCIÓN
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
void main(void)
{
float voltajes[20], prom=0;
int n;
clrscr();
cout<<"Cuantos voltajes son (maximo 20)? ";
cin>>n;
for(int i=0;i<n;i++)
{
cout<<"Leyendo voltaje "<<i+1<<" = ";
cin>>voltajes[i];
prom += voltajes[i];
}
prom /= n;
cout<<"El promedio de los voltajes es:"<<prom<<endl;
mayorigual(voltajes,prom,n);
getch();
}
∑ (x i
−
NOTA:
Desviación = m) , donde : m = media aritmética
i =1
n−1
El programa deberá utilizar funciones de usuario de paso por valor y/o referencia.
SOLUCIÓN
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
void main(void)
{
float datos[50], prom=0, desviacion;
int n;
clrscr();
cout<<"Cuantos datos son (maximo 50)? ";
cin>>n;
for(int i=0;i<n;i++)
{
cout<<"Leyendo dato "<<i+1<<" = ";
cin>>datos[i];
prom += datos[i];
}
prom /= n;
desviación = calculadesv(datos, prom, n);
cout<<"La desviacion estandar es= "<<desviacion;
getch();
}
10. En un grupo de 20 alumnos, cada uno de ellos lleva 5 asignaturas y se identifican por un
numero de boleta. Elabore la codificación de un programa que un arreglo bidimensional
(matriz) lea y guarde en la primera columna el numero de boleta de cada alumno,
posteriormente en las demás columnas las calificaciones de las asignaturas y en una ultima
columna calcule el promedio de aprovechamiento general de cada alumno.
El programa deberá utilizar funciones de usuario de paso por valor y/o referencia.
SOLUCIÓN
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
#define NF 20
void calcularprom(float grupo[NF][7]);
void busca(float grupo[NF][7]);
void main(void)
{
float grupo[NF][7];
int i,j; clrscr();
for(i=0;i<NF;i++)
{
cout<<"Introduzca el numero de boleta del alumno "<<(i+1)<<"= ";
cin>>grupo[i][0];
}
for(i=0;i<NF;i++)
for(j=1;j<6;j++)
{
cout<<"Introduzca la calificacion "<<j<<" del alumno "<<i+1<<"= ";
cin>>grupo[i][j];
}
calcularprom(grupo);
busca(grupo);
getch();
}
for(int i=0;i<NF;i++)
{
grupo[i][6]=0;
for(int j=1;j<6;j++)
grupo[i][6]+= grupo[i][j];
grupo[i][6]/=5.0;
}
}
ETS (problemas 11, 12 y 13) de Fundamentos de Programación aplicado el día 31 de agosto de 2005.
11. Elabore la codificación de un programa en lenguaje C/C++ que calcule e imprima el valor de
la siguiente serie:
1 2 3 4 5
f(x) = − 3 + 5 − 7 + 9− L
x x x x x
SOLUCIÓN
#include<iostream.h>
#include<conio.h>
#include<math.h>
float calculatermino(int ,float); // esta funcion calculara cada termino de la serie
void main()
{
float x, resultado,resultadopar=0,resultadoimpar=0;
int n;
clrscr();
cout<<"introduce el valor de x= ";
cin>>x;
cout<<"introduce el numero de terminos n= ";
cin>>n;
// se calcula cada termino impar en el siguiente ciclo (desde 1 hasta n de 2 en 2)
// y se hace una suma acumulada en resultadoimpar el cual inicia en cero
// como se observa en la declaracion de la variable
for(int i=1;i<=n;i+=2)
resultadoimpar+=calculatermino(i,x);
// se calcula cada termino par en el siguiente ciclo (desde 1 hasta n de 2 en 2)
// y se hace una suma acumulada en resultado par el cual inicia en cero
// como se observa en la declaracion de la variable
for(i=2;i<=n;i+=2)
resultadopar+=calculatermino(i,x);
//el resultado total es la resta del resultado par al impar dado que
// cada termino par de la serie es negativo
resultado=resultadoimpar-resultadopar;
cout<<"el resultado de la serie para "<<n<<" terminos ";
cout<<"cuando x tiene un valor de "<<x<<" es= "<<resultado;
getch();
}
x = promedio
Desviación estándar:
n 2
1 − x)
σ= ∑ (x i
n − 1 i=n
SOLUCIÓN
#include<iostream.h>
#include<conio.h>
#include<math.h>
#define N 25 // macro que determina numero de mediciones el cual es 25
float promedio(float *); //para realizar cada calculo se necesitan las mediciones
float desviacion(float *, float); //las cuales estaran almacenadas en un arreglo unidimensional
float maxima(float *); //el cual a su vez es un puntero, para la desviacion estandar
float minima(float *); //adicionalmente es necesario el promedio
void main()
{
float mediciones[N], prom,desv,max,min;
clrscr();
cout<<"proporciona las 25 mediciones"<<endl;
for(int i=0;i<N;i++) // ciclo que lee las 25 mediciones
{
cout<<"proporciona la medicion "<<(i+1)<<endl;
cin>>mediciones[i];
}
prom=promedio(mediciones); // es necesario calcular primerio el promedio para
desv=desviacion(mediciones,prom); //calcular la desviacion estandar
max=maxima(mediciones);
min=minima(mediciones);
clrscr();
cout<<"promedio= "<<prom<<endl;
cout<<"desviacion estandar= "<<desv<<endl;
cout<<"medicion maxima= "<<max<<endl;
cout<<"medicion minima= "<<min;
getch();
}
float promedio(float mediciones[])
{
float resultado=0;
for(int i=0;i<N;i++)
resultado+=mediciones[i]; // suma acumulada para calcular el promedio
return (resultado/N);
}
float desviacion(float *mediciones, float prom)
{
float resultado, diferencia=0;
for(int i=0;i<N;i++)
diferencia+=pow((mediciones[i]-prom),2.0); // calculamos el cuadrado de la diferencia de cada
termino
resultado=pow((diferencia/(N-1)),(1.0/2.0)); // calculamos la formula de la desviacion estandar
return resultado;
}
13. Un proveedor de servicios de internet cobra a sus suscriptores $300.00 al mes por tiempo
ilimitado. También tiene la opción de cobro por minuto, el cual es de $1.00 los primeros 60
minutos, $0.50 del minuto 61 al minuto 180 y de $0.30 del minuto 181 en adelante. Elabore
la codificación de un programa en lenguaje C/C++ que lea el número de suscriptores de la
compañía (máximo 100) y en una matriz de 100 filas y 4 columnas:
#include<conio.h>
#include<iostream.h>
#define NF 10 // numero de filas
#define NC 4 // numero de columnas
void main()
{
int n;
float internet[NF][NC];
clrscr();
cout<<"cuantos suscriptores son? ";
cin>>n;
lee(internet,n);
calcula(internet,n);
imprime(internet,n);
}
PROBLEMAS PROPUESTOS
TERCER EXAMEN PARCIAL
1. Realizar un programa que lea una serie de números enteros (máximo 50) y los almacene en
un arreglo unidimensional, el programa deberá ordenar e imprimir los números de manera
ascendente. Posteriormente el usuario proporcione un número entero y el programa busque
e imprima cuántas veces se encuentra almacenado éste número.
2. La suma o resta de dos vectores (x, y, z) se define como la respectiva suma o resta de sus
componentes en x, y & z. Elabore la codificación de un programa en lenguaje C/C++ que
lea dos vectores (x, y, z) y los almacene, cada uno de ellos, en un arreglo unidimensional
de tamaño 3. Posteriormente, mediante un menú, ofrecer al usuario realizar la suma o resta
de estos vectores, el usuario elegirá cual opción tomar. El programa deberá calcular la
opción deseada y guardará el resultado en otro arreglo unidimensional de tamaño 3.
Imprimir el resultado.
‘M’ ‘C’
1000 100
Para todos los caracteres en romano válidos y realizar las operaciones necesarias para que
dicho número romano sea expresado por su equivalente en arábigo, se asume que el
número romano introducido es correcto.
El programa deberá utilizar funciones de usuario de paso por valor y/o referencia.
x = promedio
Desviación estándar:
1 n 2
σ= (x i − x)
∑
n − 1 i=1
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] …….
0
8. Escribir un programa que lea el orden para un arreglo bidimensional y contenga funciones
de usuario que realicen:
9. Elaborar un programa que lea el número de filas y el número de columnas de una matriz A,
posteriormente generar el contenido de dicha matriz tal que:
/
(i)( j) si i ≠ j
|
ai , j = <
i+ j sí i= j
|
\
Imprimir la matriz generada.
Utilizar funciones de paso por valor y/o referencia.
10. Realizar la codificación de un programa en lenguaje C++ que lea el orden de una matriz
mxm (mismo número de filas y columnas) y realice:
La lectura de la matriz A
T
La generación de la matriz transpuesta de A (A )
T
El cálculo de la matriz S, tal que S = A + A
T
La impresión de A, A y S
Defina una matriz de tipo entero llamada CELULAR de 20 filas y 7 columnas. Cada fila
representa a un usuario de servicio celular y cada columna un día de la semana.
Lea el número de filas (n) a utilizar.
Introduzca los valores enteros positivos de matriz CELULAR (n x 20) cada valor
representa la cantidad en minutos utilizados por día por cada usuario.
Ejemplo
LUNES MARTES MIÉRCOLES JUEVES VIERNES SÁBADO DOMINGO
USUARIO 10
1
USUARIO 1
2
USUARIO 3
3
…………….
USUARIO 3
N
Defina una matriz llamada KILOWATT de 20 filas y 4 columnas, cada fila representa
un usuario de la compañía de luz y cada columna una semana de cada mes.
Lea el número de filas a utilizar.
Introduzca los valores de la matriz KILOWATT (n x 7), cada valor representa el
consumo en kilowatts utilizados por cada usuario por semana del mes.
Calcule el total de consumo por cada usuario y guárdelo en un vector llamado
TOTALKW.
Calcule el promedio de consumo por usuario y guárdelo en un vector llamado
PROMKW.
Calcule el importe a pagar si los primeros 100 Kilowatts cuestan $2.00 c/u y los
siguientes cuestan $3.00 c/u. Guardar en un vector llamado PAGO.
Imprimir todos los arreglos
Utilizar funciones de usuario de paso por valor y/o referencia
14. En un grupo de 20 alumnos, cada uno de ellos cursa 5 asignaturas y se identifican por un
número de boleta. Elabore la codificación de un programa que en un arreglo bidimensional
(matriz de 20 x 7) lea y almacene en la primera columna el número de boleta de cada
alumno, posteriormente lea y almacene en las siguientes columnas las calificaciones de las
5 asignaturas. Calcule y almacene en la última columna el promedio de aprovechamiento
de cada alumno.
Boleta Examen1
200330210
200330230
16. Una institución bancaria ofrece créditos a 12 meses en pagos mensuales fijos que se
calculan en base al monto del crédito más una tasa de interés anualizada. Realice la
codificación de un programa en lenguaje C/C++ que realice la lectura del número de tarjeta
habientes para los que se ejecutará el cálculo (n), lea el número de cuenta de cada cliente
(de los n clientes) y lo almacene en un arreglo unidimensional (también llamado vector) de
tamaño 20 de tipo entero largo.
También realizará la lectura de la tasa de interés que se aplicará a todos los clientes (solo
se leerá una sola vez y se almacenará en una variable de tipo flotante), por otra parte, en
un arreglo bidimensional (también llamado matriz) de números con punto flotante de 20
filas y 3 columnas realice:
La lectura del monto del crédito de cada cliente y lo almacene en la primera columna.
Almacene en la segunda columna el valor de la tasa de interés leída anteriormente.
Realice el cálculo del pago mensual y lo almacene en la tercera columna. Este se
obtiene multiplicando el monto del crédito por la tasa de interés y dividiendo entre 12.
Imprimir todos los números de cuenta y su pago mensual correspondiente.
Utilizar funciones de usuario de paso por valor y/o referencia.
17. Un proveedor de servicios de Internet cobra a sus suscriptores $300.00 al mes por tiempo
ilimitado. También tiene la opción de cobro por minuto, el cual es de $1.00 los primeros 60
minutos, $0.50 del minuto 61 al minuto 180 y de $0.30 del minuto 181 en adelante. Elabore
la codificación de un programa en lenguaje C/C++ que lea el número de suscriptores de la
compañía (máximo 100) y en una matriz de 100 filas y 4 columnas:
18. Realice la codificación de un programa en C/C++ que en una matriz, realice una tabla de
multiplicar, en donde la fila 0 representa el primer operando de la multiplicación y la
columna 0 representa el segundo operando de dicha multiplicación. Toda la demás matriz
se llena en base a la multiplicación de la fila con la columna correspondiente.
EJEMPLO:
20. Realice la codificación de un programa en C/C++ que lea una matriz cuadrada n x n
(proporcionada por el usuario), verifique e imprima si la matriz que fue introducida tiene
diagonal principal dominante.
Una matriz con diagonal principal dominante es aquella en la cual el valor absoluto del
elemento de la diagonal principal es mayor que la suma del valor absoluto de los demás
términos de la misma fila, para todos los elementos de la diagonal principal:
n −1
aii > ∑ aij
j =0
21. Una compañía de televisión por cable cobra a sus suscriptores una renta mensual de
$150.00 si su suscripción es de canales básicos y $250 si es suscripción plus. Así también
cobra $50 por cada evento especial que el suscriptor solicita. Elabore la codificación de un
programa en lenguaje C/C++ que lea el número de suscriptores de una población (máximo
50) y en una matriz de:
22. Una compañía de gas natural cobra por litro de gas utilizado mensualmente en una Unidad
Habitacional, los primeros 50 litros los cobra a $4.50 c/u, después de 50 litros los
excedentes los cobra a $4.00 c/u. Elabore un programa en C/C++ que en una matriz de 50
filas y 3 columnas que: