Vous êtes sur la page 1sur 25

FUNDAMENTOS DE PROGRAMACIÓN

Profesor Alejandro Cortés Pérez


Turno matutino

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

m=1, n=1 k = ( 2 * pow( m, 3)) + ( 3 * pow( n, 2))


x=0, y=0

return k

y< 540

“ADIOS”

x<540

x=0, m=1 FIN

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>

float funcion (float, float);


void main(void){
float y=0, x=0;
float m=1, n=1;
clrscr( );
printf (“PROGRAMA QUE IMPRIME TODOS LOS NÚMEROS IMPARES M Y N \n”);
printf (“\t QUE CUMPLEN LA SIGUIENTE CONDICIÓN: \n\n”);
printf (“\t \t 2 * M ^ 3 + N ^ 2 < 540 \n\n”);
while ( y < 540 ){
while ( x < 540 ) {
x = funcion ( m, n );
printf ( “ \t 2 * % .0f ^ 3 + 3 * % .0f ^ 2 = %.0f \n”, m, n, x );
m = m + 2;
x = funcion ( m, n );
}
printf ( “\n” );
x = 0;
m = 1;
y = funcion ( m, n );
n = n + 2;
y = funcion ( m, n );
getch ( );
}
printf ( “ FIN “);
getch ( );
}

float funcion ( float m, float n ){


float k;
k = ( 2 * pow( m, 3)) + (3 * pow( n, 2 ));
return k;
}

4. Resultados

1
1
1
3
3

2. Realizar un programa que tabule e imprima la función f(x) = sen(x) + cos(x) .

a. El usuario debe proporcionar el límite inferior y superior de la tabulación, así como el


tamaño del incremento de la misma (en grados).
b. El programa debe determinar el valor máximo y el valor mínimo de la función en el
intervalo proporcionado.
c. Utilizar al menos una función de usuario de paso por valor.
d. El programa debe verificar que los intervalos sean válidos.
e. El programa debe ser repetitivo.

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, rad = m * 3.14 / 180


INC

NO res = sin ( rad ) + cos ( rad )

(AI>AF ) ||
(INC<=0)

mayor = funcion (AI) regresa res


SI menor = funcion (AI)

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

Valor mínimo = 1.017


Valor máximo = 1.158

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

Realice un programa que:

a. Lea el valor de x y del número de términos que se desean aplicar.


b. Realice el cálculo del valor de la aproximación de la función para el valor de x leído
con el número de términos requerido.
c. Realice la impresión del resultado.
d. Sea repetitivo.

SOLUCIÓN

1. Algoritmo.

a. Leer x y el número de términos t.


b. Preguntar si t ≤ 0 :
o Sí la respuesta es SI, imprimir que el valor no es válido y regresar al punto a.
c. Utilizar una estructura iterativa indexada, con un contador que inicie en uno y
termine hasta alcanzar el número de términos deseados, en incrementos de
uno.
o Mediante una función de usuario obtener el valor de cada uno de los
términos. Dicha función recibirá el valor de x y del término calculado para
esa iteración.
i+1
ƒ Para invertir el valor del signo de cada término se multiplica por (-1)
d. Imprimir el resultado.
e. Preguntar si se desea realizar otro cálculo.
o Si la respuesta es SI regresar al punto a.
f. Finalizar.

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)

res = res + y “REPETIR?”

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

ETS (problemas 5, 6 y 7) de Fundamentos de Programación y Computación I aplicado el día 2 de julio de


2004

4. 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

Para un valor x y un número de términos n proporcionados por el usuario. Utilizar funciones


de usuario de paso por valor.
Valor 3 puntos

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 suma(float [ ], float [ ], float [ ]);


void resta(float [ ], float [ ], float [ ]);

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];
}

6. Un grupo de 30 alumnos obtiene su calificación final en base a seis calificaciones


distribuidas de la siguiente forma:

ƒ 3 calificaciones parciales de exámenes que corresponden al 70% de la misma.


ƒ 3 calificaciones parciales de laboratorio que corresponden al 30% de la misma.

Cada calificación parcial de laboratorio se determina en base al número de prácticas


realizadas, que en cada parcial deberá ser de 7.

Realizar la codificación de un programa en C/C++ que en una matriz de 30 filas y 8


columnas realice lo siguiente:

a) En la primera columna lea el número de boleta del alumno.


b) De la segunda a la cuarta columna lea cada calificación parcial de examen.
c) De la quinta a la séptima columna lea en número de practicas realizadas por cada
alumno.
d) En la octava columna calcule y guarde la calificación final de acuerdo a la suma del
porcentaje de las 6 calificaciones parciales dividida entre 3.
e) Imprima el número de boleta y la calificación final de cada uno de los 30 alumnos.
Utilizar funciones de paso por referencia. Valor 4 puntos
Ejemplo:

Boleta
200330210
200330230

SOLUCIÓN

#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#define NF 30

void calcular(float calificacion[NF][8]);


void main(void)
{
float calificacion[NF][8];
int i,j; clrscr();
for(i=0;i<NF;i++){
printf("Introduzca el numero de boleta del alumno %d ", i+1);
scanf("%f", &calificacion[i][0]);
}
for(i=0;i<NF;i++)
for(j=1;j<4;j++){
printf("Introduzca la calificacion parcial %d del alumno %d", j, i+1);
scanf("%f",&calificacion[i][j]);
}

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();
}

void calcular(float calificacion[NF][8]){


int i,j;
for(i=0;i<NF;i++) {
calificacion[i][7]=0;
for(j=1;j<4;j++)
calificacion[i][7]+=calificacion[i][j]*0.7;
for(j=4;j<7;j++)
calificacion[i][7]+= (calificacion[i][j]*(10.0/7.0))*0.3;
calificacion[i][7]/=3.0;
}
}
ETS (problemas 7, 8, 9 y 10) de Fundamentos de Programación y Computación I aplicado el día 18 de
agosto de 2004.

7. Elabore la codificación de un programa en lenguaje C/C++ que tabule la siguiente función


para un intervalo inicial y final, así como incrementos proporcionados por el usuario
sen(x)
f(x) =
x
NOTA: sen (0)/0 = 1, por definición

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);
}

8. Elabore la codificación de un programa que en un arreglo unidimensional (vector) de


tamaño máximo 20, almacene la lectura experimental de n voltajes de salida (máximo 20)
de un dispositivo electrónico. El usuario proporciona cuantos (n) y cuales valores fueron
leídos. Posteriormente calcular el promedio de todas las mediciones y determinar entre
todas ellas cuales son superiores o iguales a este promedio. Imprimir el promedio y las
mediciones superiores o iguales al promedio.

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 mayorigual(float *, float,int);

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();
}

void mayorigual(float *voltajes, float promedio, int )


{
cout<<"Los voltajes mayores o iguales al promedio son:";
for(int i=0;i<n;i++)
{
if(voltajes[i]>=promedio)
cout<<voltajes[i]<<endl;
}
}

9. Diseñar la codificación de un programa que nos permita calcular la desviación estándar de


n números (máximo 50) proporcionados por el usuario y almacenados en un arreglo
unidimensional. Imprimir el resultado.
n

∑ (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>

float calculadesv(float *, float ,int );

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();
}

float calculadesv(float *datos, float promedio ,int n)


{
float desv=0;
for(int i=0; i<n; i++)
desv += fabs(datos[i]-promedio);
desv = pow((desv/(n-1)), (1.0/2.0));
return desv;
}

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.

Determine e imprima el numero de boleta, las calificaciones de cada asignatura y el


promedio de aprovechamiento general del mejor alumno y del peor 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();
}

void calcularprom(float grupo[NF][7])


{

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;
}
}

void busca(float grupo[NF][7])


{
int mejor, peor;
float mejorprom=grupo[0][6], peorprom=grupo[0][6];
for (int i=0;i<NF;i++)
{
if(grupo[i][6]>=mejorprom)
{
mejorprom=grupo[i][6];
mejor=i;
}
if(grupo[i][6]<=peorprom)
{
peorprom=grupo[i][6];
peor=i;
}
}
clrscr();
cout<<"\n EL MEJOR ALUMNO ES:"<<endl;
cout<<"BOLETA \tCAL1 \tCAL2 \tCAL3 \tCAL4 \tCAL5 \tPROM\n";
for(int k=0;k<7;k++)
cout<<grupo[mejor][k]<<"\t";
cout<<"\n\n EL PEOR ALUMNO ES:"<<endl;
cout<<"BOLETA \tCAL1 \tCAL2 \tCAL3 \tCAL4 \tCAL5 \tPROM\n";
for( k=0;k<7;k++)
cout<<grupo[peor][k]<<"\t";
}

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

Para un valor x y un número de términos n proporcionados por el usuario. Utilizar funciones


de usuario de paso por valor.

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();
}

// esta funcion calcula cada termino


//el numerador es el numero de termino y el denominador es una potencia de base x
//y exponente 2termino_i-1 como se observa en la serie, donde termino_i es el
//numero de termino calculado
float calculatermino(int termino_i, float x)
{
int potencia;
potencia=2*termino_i-1;
return(termino_i/pow(x,potencia));
}

12. El voltaje de salida de un sistema electrónico es medido 25 veces en un laboratorio. Elabore


la codificación de un programa en C/C++ que lea las 25 mediciones y las almacene en un
arreglo unidimensional de tipo real. Posteriormente el programa determinará e imprimirá el
promedio, desviación estándar, la medición máxima y la medición mínima.

x = promedio

Desviación estándar:
n 2
1 − x)
σ= ∑ (x i
n − 1 i=n

Utilizar funciones de usuario de paso por valor y/o referencia.

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;
}

float maxima(float mediciones[N])


{
float max=mediciones[0]; // suponemos que la primera medicion es la maxima
for(int i=1;i<N;i++) // comparamos todas las demas mediciones
if(mediciones[i]>max) // si alguna de ellas es mayor
max=mediciones[i]; // sustituimos la medicion maxima
return max;
}

float minima(float mediciones[N])


{
float min=mediciones[0]; //suponemos que la primera medicion es la minima
for(int i=1;i<N;i++) // comparamos todas las demas mediciones
if(mediciones[i]<min) //si alguna de ellas es menor
min=mediciones[i]; //sustituimos la medicion minima
return min;
}

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:

a) Lea el número de suscriptor y lo almacene en la primera columna.


b) Lea que tipo de suscriptor es y en la segunda columna almacene el número 0 si se
trata de un suscriptor ilimitado, o bien el número 1 si se trata de un suscriptor por
minuto.
c) En la tercera columna almacene 0 en caso de que sea un suscriptor ilimitado, si es un
suscriptor por minutos lea y almacene en dicha columna el número de minutos
utilizados en el mes.
d) Calcule y almacene en la cuarta columna el adeudo mensual de cada suscriptor.
Recuerde que para un suscriptor tipo ilimitado el adeudo es de $300.00.
e) Imprimir la matriz resultante.

Utilizar funciones de usuario de paso por valor y/o referencia.


SOLUCIÓN

#include<conio.h>
#include<iostream.h>
#define NF 10 // numero de filas
#define NC 4 // numero de columnas

void lee(float internet[NF][NC],int n)


{
for(int i=0;i<n;i++)
{
cout<<"introduzca numero de suscriptor ";
cin>>internet[i][0]; //primera columna (columna 0)
cout<<"tipo de suscriptor: (0) ilimitado (1) por minuto ";
cin>>internet[i][1]; //segunda columna (columna 1)
if(internet[i][1]==0) //si es tipo 0,
internet[i][2]=0; // almacena 0 en la tercera columna
else //de otra manera
{ // solicita el consumo y lo almacena
cout<<"introduzca consumo en minutos "; //en la tercera columna
cin>>internet[i][2];
}
}
}

void calcula(float internet[NF][NC],int n)


{
for(int i=0;i<n;i++)
{
if(internet[i][1]==0) // si es de tipo 0,
internet[i][3]=300; // el adeudo es 300 (cuarta columna)
else //si es tipo 1:
{
if(internet[i][2]>180) // si es consumo es mayor a 180
internet[i][3]=0.30*(internet[i][2]-180)+90; //calcula adeudo
if((internet[i][2]<=180)&&(internet[i][2]>60)) // si es menor a 180 y mayor a 60
internet[i][3]=0.50*(internet[i][2]-60)+60; // calcula adeudo
if(internet[i][2]<=60) //si es menor a 60
internet[i][3]=internet[i][2]; //calcula adeudo
}
}
}

void imprime(float internet[NF][NC],int n)


{
int i,j;
clrscr();
cout<<"suscr. tipo consumo adeudo"<<endl;
for(i=0;i<n;i++) // ciclo de las filas
{
for(j=0;j<NC;j++) //ciclo de las columnas
{
cout<<internet[i][j]<<"\t"; //imprime cada elemento separado por tabulador
}
cout<<endl; // salto de linea cada que termina una fila
}
getch();
}

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.

Utilizar funciones de usuario de paso por valor y/o referencia.

3. Elaborar la codificación de un programa en lenguaje C/C++ que lea un número en romano,


lo almacene en un arreglo de caracteres, convierta cada carácter del número romano a su
equivalente arábigo, por ejemplo:

‘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.

4. El voltaje de salida de un sistema electrónico es medido 25 veces en un laboratorio. Elabore


la codificación de un programa en C/C++ que lea las 25 mediciones y las almacene en un
arreglo unidimensional de tipo real. Posteriormente el programa determinará e imprimirá el
promedio, desviación estándar, la medición máxima y la medición mínima.

x = promedio
Desviación estándar:
1 n 2
σ= (x i − x)

n − 1 i=1

Utilizar funciones de usuario de paso por valor y/o referencia.

5. Un concurso consiste en adivinar el número de objetos que contiene un recipiente. El


ganador será el participante que más se acerque SIN PASARSE al número exacto de
objetos (el cual es 225).

Escriba un programa que lea en un arreglo unidimensional (vector) la cantidad de objetos


que supone cada participante existe en el recipiente (para 50 participantes), determine e
imprima que número de participante es el ganador (el número de participante es el número
de elemento del vector). Si existe más de una persona ganadora imprima el participante
que ingreso primero su aproximación. Utilizar funciones de usuario de paso por valor y/o
referencia.

6. Realice la codificación de un programa en lenguaje C/C++ que calcule y almacene en un


arreglo unidimensional (vector) los primeros 20 números primos que existen.
Posteriormente que imprima dicho vector.

Utilizar funciones de usuario de paso por valor y/o referencia.

7. Escribir un programa que realice lo siguiente:

ƒ Defina un vector A con 30 elementos enteros positivos como máximo.


ƒ El elementos cero contendrá A[0]=0 y el elemento uno contendrá A[1]=1 por
definición. El elemento A[i]= A[i-1]+A[i-2].
ƒ Llenar el resto de los elementos de forma iterativa como se muestra:

A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] …….
0

ƒ Imprimir los 30 elementos.


ƒ Utilizar funciones de usuario de paso por valor y/o referencia.

8. Escribir un programa que lea el orden para un arreglo bidimensional y contenga funciones
de usuario que realicen:

a. La lectura de datos para el arreglo considerado.


b. La división de los elementos de cada fila entre el correspondiente elemento de la
diagonal principal.
c. La impresión del arreglo resultante.

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

Utilizar funciones de usuario de paso por valor y/o referencia.

11. Elabore un programa en C/C++ que realice:

a. La declaración de una matriz de números enteros.


b. Lea el valor del número de filas y columnas.
c. Introduzca por teclado los valores de la matriz.
d. En un vector almacene la suma de las columnas y en otro almacene la suma de las
filas.
e. Imprimir: la matriz introducida, el vector de la suma de las columnas horizontalmente
así como el vector de la suma de filas verticalmente.

12. Realice un programa que:

ƒ 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

ƒ Calcule el total de minutos utilizado por cada usuario y almacénelos en un arreglo de


una dimensión.
ƒ Calcule el total de minutos utilizado por todos los usuarios para cada día de la semana
y almacénelos en un arreglo unidimensional.
ƒ Calcule y almacene en un vector, el importe a pagar por usuario si cada minuto tiene
un costo de $2.50.
ƒ Imprima la matriz CELULAR, los valores del total de minutos por usuario y por cada
día de la semana, así como los importes a pagar calculados.
ƒ Utilizar funciones de usuario de paso por valor y/o referencia.
13. Elabore la codificación en lenguaje C++ de un programa que realice:

ƒ 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.

Imprima el arreglo resultante.

Determina e imprima el número de boleta y el promedio de aprovechamiento del mejor y del


peor alumno.

Utilice funciones de usuario de paso por valor y/o referencia.

15. Un grupo de 30 alumnos obtiene su calificación final en base a seis calificaciones


distribuidas de la siguiente forma:

ƒ 3 calificaciones parciales de exámenes que corresponden al 70% de la misma.


ƒ 3 calificaciones parciales de laboratorio que corresponden al 30% de la misma.

Cada calificación parcial de laboratorio se determina en base al número de prácticas


realizadas, que en cada parcial deberá ser de 7.

Realizar la codificación de un programa en C/C++ que en un matriz de 30 filas y 8 columnas


realice lo siguiente:

a) En la primera columna lea el número de boleta del alumno.


b) De la segunda a la cuarta columna lea cada calificación parcial de examen.
c) De la quinta a la séptima columna lea en número de practicas realizadas por cada
alumno.
d) En la octava columna calcule y guarde la calificación final de acuerdo a la suma del
porcentaje de las 6 calificaciones parciales dividida entre 3.
e) Imprima el número de boleta y la calificación final de cada uno de los 30 alumnos.

Utilizar funciones de paso por valor y/o referencia.


Ejemplo:

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:

a) Lea el número de suscriptor y lo almacene en la primera columna.


b) Lea que tipo de suscriptor es y en la segunda columna almacene el número 0 si se
trata de un suscriptor ilimitado, o bien el número 1 si se trata de un suscriptor por
minuto.
c) En la tercera columna almacene 0 en caso de que sea un suscriptor ilimitado, si es un
suscriptor por minutos lea y almacene en dicha columna el número de minutos
utilizados en el mes.
d) Calcule y almacene en la cuarta columna el adeudo mensual de cada suscriptor.
Recuerde que para un suscriptor tipo ilimitado el adeudo es de $300.00.
e) Imprimir la matriz resultante.

Utilizar funciones de usuario de paso por valor y/o referencia.

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:

Límite inferior: 2.2


Incremento: 0.2
Columna 0
Fila 0
19. El usuario proporciona el límite inferior y el incremento, la matriz deberá ser de tamaño 9 x
9 y deberá llenarse toda.

ƒ Imprimir la matriz completa.


ƒ Utilizar funciones de paso por valor y/o referencia.

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

El programa deberá imprimir si la matriz es o no de diagonal principal dominante.

Utilizar funciones de paso por valor y/o referencia.

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:

a) Lea el número de suscriptor y lo almacene en la primera columna. Lea si es un


suscriptor básico y almacene el número 1 en la segunda columna, en caso de que sea
un suscriptor plus almacene el número 2 en la segunda columna. Lea y almacene en
la tercera columna el número de eventos especiales que solicito en el mes.
b) El programa también leerá el adeudo del mes anterior de cada suscriptor, éste se
almacenará en la cuarta columna y se sumará al adeudo del mes actual.
c) Calcule y almacene en la quinta columna el adeudo mensual de cada suscriptor.
d) Imprimir la matriz resultante

Utilizar funciones de usuario de paso por valor y/o referencia.

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:

a) Lea el número de departamento y lo almacene en la primera columna, lea el consumo


mensual y lo almacene en la segunda columna. En la tercera columna calcule el
adeudo mensual. Todo esto hasta un número determinado de departamentos
(máximo 50)
b) Determine e imprima que departamento consumió más.
c) Determine e imprima que departamento consumió menos.
d) Determine e imprima cual fue el promedio de consumo mensual.
e) Ordene ascendentemente de acuerdo al número de departamento cada una de las
filas de la matriz e imprima la totalidad de ésta.
f) Lea un número de departamento, lo busque e imprima su consumo y su adeudo
mensual. Si no existe éste número de departamento, imprimir “NO EXISTE”.

23. Realizar un programa para ordenar en forma alfabética ascendente, un conjunto de


nombres de personas proporcionadas por el usuario.

Vous aimerez peut-être aussi