Está en la página 1de 25

FUNDAMENTOS DE PROGRAMACIN

Profesor Alejandro Corts Prez


Turno matutino

PROBLEMAS RESUELTOS
1.

Realice un programa en lenguaje C que imprima todos los nmeros impares M y N que
cumplan la siguiente condicin:
3

2M + 3N < 540

SOLUCIN
1.

Algoritmo.
a)
b)
c)
d.

2.

M y N empiezan en 1
N se queda en 1 y M empieza a incrementarse de 2 en 2 y se va
sustituyendo en la ecuacin.
o
Imprimir todos los nmeros que cumplan la condicin.
Si existe un nmero que ya no cumpla con la condicin:
o
Que incremente N en 2 y M regrese a 1.
o
Nuevamente M vuelve a empezar a incrementarse.
El paso anterior se repite hasta que ya no exista ningn nmero que cumpla
con la condicin.

Diagrama de flujo.
funcion ( m, n )
INICIO

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

m=1, n=1
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,
x=funcion ( m,

3.

Codificacin
#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 NMEROS IMPARES M Y N \n);
printf (\t QUE CUMPLEN LA SIGUIENTE CONDICIN: \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.

2.

Resultados

1
1
1
3
3

1
3
5
1
3

RESULTADO

SI
SI
SI
SI
SI

5
29
77
57
81

Realizar un programa que tabule e imprima la funcin f(x) = sen(x) + cos(x) .


a.
b.

El usuario debe proporcionar el lmite inferior y superior de la tabulacin, as como el


tamao del incremento de la misma (en grados).
El programa debe determinar el valor mximo y el valor mnimo de la funcin en el
intervalo proporcionado.

c.
d.
e.

Utilizar al menos una funcin de usuario de paso por valor.


El programa debe verificar que los intervalos sean vlidos.
El programa debe ser repetitivo.
SOLUCIN

1.

Algoritmo
1.1.
1.2.

Preguntar en que valor inicia, en que valor termina y cual es el valor del
incremento de la tabulacin.
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
estn incorrectos por lo que:
1.2.1.1.
1.2.1.2.

Enviar un aviso de que los intervalos son incorrectos.


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 evaluacin de la


funcin en el valor inicial de la tabulacin. En estas dos variables se
guardara el valor mximo y mnimo de la funcin en el intervalo.
1.4. Utilizar una estructura indexada, con un contador que inicia en el valor inicial
de la tabulacin, que termina en el valor final de la misma y con incrementos
del tamao proporcionado anteriormente.
1.4.1.Utilizar una funcin de usuario para calcular el valor de la funcin en cada
punto del contador, la funcin de usuario deber convertir los valores del
contador en grados a radianes.
1.4.2.Preguntar s el valor de la funcin 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


funcin.

1.4.3.Preguntar s el valor de la funcin 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


funcin

1.4.4.Imprimir el valor del contador y de la funcin valuada en ese punto.

1.5. Imprimir el valor mayor y menor de la funcin.


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)

rad = m * 3.14 / 180

AI, AF,
INC

res = sin ( rad ) + cos ( rad )


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

NO

SI

regresa res
mayor = funcion (AI)
menor = funcion (AI)

i =AI; i<=AF ;
i = I + INC

mayor
menor

fx = funcion ( i )

SI
fx>mayor

REPETIR?
mayor = fx

NO
fx<menor

SI

NO

menor = fx

opcion

opcion==s

NO

i , fx

SI
ADIOS

FIN

3.

Codificacin
#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
x

f(x)

1
2
3
4
5
6
7
8
9
10

1.01
1.03
1.05
1.06
1.08
1.1
1.11
1.12
1.14
1.15

Valor mnimo = 1.017


Valor mximo = 1.158

3.

La serie de Taylor para determinar el valor de la funcin f(x) = ln (x + 1) esta dada por:
ln (x + 1) = x

......

Realice un programa que:


a.

Lea el valor de x y del nmero de trminos que se desean aplicar.

b.
c.
d.

Realice el clculo del valor de la aproximacin de la funcin para el valor de x ledo


con el nmero de trminos requerido.
Realice la impresin del resultado.
Sea repetitivo.
SOLUCIN

1.

Algoritmo.
a.
b.
c.

Leer x y el nmero de trminos t.


Preguntar si t 0 :
o
S la respuesta es SI, imprimir que el valor no es vlido y regresar al punto a.
Utilizar una estructura iterativa indexada, con un contador que inicie en uno y
termine hasta alcanzar el nmero de trminos deseados, en incrementos de
uno.
o
Mediante una funcin de usuario obtener el valor de cada uno de los
trminos. Dicha funcin recibir el valor de x y del trmino calculado para
esa iteracin.

d.
e.
f.
2.

i+1

Para invertir el valor del signo de cada trmino se multiplica por (-1)
Imprimir el resultado.
Preguntar si se desea realizar otro clculo.
o
Si la respuesta es SI regresar al punto a.
Finalizar.

Diagrama de flujo.

INICIO

funcion( x, i )

E=(pow(x,i) / i) * (pow(-1,
(i+1)))

x, t

regresa E

t<=0

res = 0
i=1;
i<=1;i++
y = funcion ( x, i)

res = res + y

res

REPETIR?

opcion

opcion
==S

FIN

3. Codificacin
#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 SEGN 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

ln (x + 1) = 1

= 0.83333

ETS (problemas 5, 6 y 7) de Fundamentos de Programacin y Computacin I aplicado el da 2 de julio de


2004

4.

Elabore la codificacin de un programa en lenguaje C/C++ que calcule e imprima el valor de


la siguiente serie.
f(x) =

1
x

2
x

3
x

4
x

5
x

Para un valor x y un nmero de trminos n proporcionados por el usuario. Utilizar funciones


de usuario de paso por valor.
Valor 3 puntos
SOLUCIN
#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 codificacin 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 tamao 3. Posteriormente, mediante un men, ofrecer al usuario realizar la suma o resta
de estos vectores, el usuario elegir cul opcin tomar. El programa deber calcular la
opcin deseada y guardar el resultado en otro arreglo unidimensional de tamao 3.
Imprimir el resultado.
Utilizar funciones de usuario de paso por valor y/o referencia.
Valor 3 puntos
SOLUCIN
#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 calificacin final en base a seis calificaciones


distribuidas de la siguiente forma:

3 calificaciones parciales de exmenes que corresponden al 70% de la misma.


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

Cada calificacin parcial de laboratorio se determina en base al nmero de prcticas


realizadas, que en cada parcial deber ser de 7.
Realizar la codificacin de un programa en C/C++ que en una matriz de 30 filas y 8
columnas realice lo siguiente:
a)
b)
c)
d)
e)

En la primera columna lea el nmero de boleta del alumno.


De la segunda a la cuarta columna lea cada calificacin parcial de examen.
De la quinta a la sptima columna lea en nmero de practicas realizadas por cada
alumno.
En la octava columna calcule y guarde la calificacin final de acuerdo a la suma del
porcentaje de las 6 calificaciones parciales dividida entre 3.
Imprima el nmero de boleta y la calificacin final de cada uno de los 30 alumnos.

Utilizar funciones de paso por referencia.


Valor 4 puntos

Ejemplo:
Boleta

200330210
200330230

Examen
1 2 3
6 5 8
9 7 4

No. de Prcticas
1
2
3
7
3
1
3
5
6

Final

6.00
6.66

SOLUCIN
#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 Programacin y Computacin I aplicado el da 18 de


agosto de 2004.

7.

Elabore la codificacin de un programa en lenguaje C/C++ que tabule la siguiente funcin


para un intervalo inicial y final, as como incrementos proporcionados por el usuario

f(x) =

sen(x)
x

NOTA: sen (0)/0 = 1, por definicin

El programa deber utilizar funciones de usuario de paso por valor y/o referencia.
SOLUCIN
#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 tamao 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 codificacin de un programa que en un arreglo unidimensional (vector) de


tamao mximo 20, almacene la lectura experimental de n voltajes de salida (mximo 20)

de un dispositivo electrnico. El usuario proporciona cuantos (n) y cuales valores fueron


ledos. 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.
SOLUCIN
#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.

Disear la codificacin de un programa que nos permita calcular la desviacin estndar de


n nmeros (mximo 50) proporcionados por el usuario y almacenados en un arreglo
unidimensional. Imprimir el resultado.
n

NOTA: Desviacin =

(x
i =1

m)

n 1

, donde : m = media aritmtica

El programa deber utilizar funciones de usuario de paso por valor y/o referencia.

SOLUCIN
#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;
desviacin = 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 codificacin 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 dems 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.
SOLUCIN

#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 Programacin aplicado el da 31 de agosto de 2005.

11.

Elabore la codificacin de un programa en lenguaje C/C++ que calcule e imprima el valor de


la siguiente serie:
f(x) =

1
x

2
x

3
x

4
x

5
x

Para un valor x y un nmero de trminos n proporcionados por el usuario. Utilizar funciones


de usuario de paso por valor.
SOLUCIN
#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 electrnico es medido 25 veces en un laboratorio. Elabore


la codificacin 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, desviacin estndar, la medicin mxima y la medicin mnima.
x = promedio

Desviacin estndar:

(x
n 1
1

x)

i =n

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


SOLUCIN
#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 *);


float desviacion(float *, float);
float maxima(float *);
float minima(float *);

//para realizar cada calculo se necesitan las mediciones


//las cuales estaran almacenadas en un arreglo unidimensional
//el cual a su vez es un puntero, para la desviacion estandar
//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. Tambin tiene la opcin 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 codificacin de un programa en lenguaje C/C++ que lea el nmero de suscriptores de la
compaa (mximo 100) y en una matriz de 100 filas y 4 columnas:
a)
b)
c)
d)
e)

Lea el nmero de suscriptor y lo almacene en la primera columna.


Lea que tipo de suscriptor es y en la segunda columna almacene el nmero 0 si se
trata de un suscriptor ilimitado, o bien el nmero 1 si se trata de un suscriptor por
minuto.
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 nmero de minutos
utilizados en el mes.
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.
Imprimir la matriz resultante.

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

SOLUCIN
#include<conio.h>
#include<iostream.h>
#define NF 10
#define NC 4

// numero de filas
// 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)
internet[i][3]=300;
else
{
if(internet[i][2]>180)
internet[i][3]=0.30*(internet[i][2]-180)+90;
if((internet[i][2]<=180)&&(internet[i][2]>60))
internet[i][3]=0.50*(internet[i][2]-60)+60;
if(internet[i][2]<=60)
internet[i][3]=internet[i][2];
}
}
}

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";
}
cout<<endl;

// si es de tipo 0,
// el adeudo es 300 (cuarta columna)
//si es tipo 1:
// si es consumo es mayor a 180
//calcula adeudo
// si es menor a 180 y mayor a 60
// calcula adeudo
//si es menor a 60
//calcula adeudo

//imprime cada elemento separado por tabulador


// 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 nmeros enteros (mximo 50) y los almacene en
un arreglo unidimensional, el programa deber ordenar e imprimir los nmeros de manera
ascendente. Posteriormente el usuario proporcione un nmero entero y el programa busque
e imprima cuntas veces se encuentra almacenado ste nmero.

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 codificacin 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 tamao 3. Posteriormente, mediante un men, ofrecer al usuario realizar la suma o resta
de estos vectores, el usuario elegir cual opcin tomar. El programa deber calcular la
opcin deseada y guardar el resultado en otro arreglo unidimensional de tamao 3.
Imprimir el resultado.
Utilizar funciones de usuario de paso por valor y/o referencia.

3.

Elaborar la codificacin de un programa en lenguaje C/C++ que lea un nmero en romano,


lo almacene en un arreglo de caracteres, convierta cada carcter del nmero romano a su
equivalente arbigo, por ejemplo:
M

1000

100

1000

10

10

\0

Para todos los caracteres en romano vlidos y realizar las operaciones necesarias para que
dicho nmero romano sea expresado por su equivalente en arbigo, se asume que el
nmero 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 electrnico es medido 25 veces en un laboratorio. Elabore


la codificacin 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, desviacin estndar, la medicin mxima y la medicin mnima.
x = promedio

Desviacin estndar:

(x
n 1

x)2

i =1

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

5.

Un concurso consiste en adivinar el nmero de objetos que contiene un recipiente. El


ganador ser el participante que ms se acerque SIN PASARSE al nmero 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 nmero de participante es el ganador (el nmero de participante es el nmero
de elemento del vector). Si existe ms de una persona ganadora imprima el participante
que ingreso primero su aproximacin. Utilizar funciones de usuario de paso por valor y/o
referencia.

6.

Realice la codificacin de un programa en lenguaje C/C++ que calcule y almacene en un


arreglo unidimensional (vector) los primeros 20 nmeros 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 mximo.


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

8.

A[2]
1

A[3]
2

A[4]
3

A[5]
5

A[6]
8

A[7]
13

A[8]
21

.
.

Imprimir los 30 elementos.


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

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

9.

A[1]
1

La lectura de datos para el arreglo considerado.


La divisin de los elementos de cada fila entre el correspondiente elemento de la
diagonal principal.
La impresin del arreglo resultante.

Elaborar un programa que lea el nmero de filas y el nmero de columnas de una matriz A,
posteriormente generar el contenido de dicha matriz tal que:
/
|

(i )( j )

i+ j

si

i j

ai , j = <
\

i= j

10.

Imprimir la matriz generada.


Utilizar funciones de paso por valor y/o referencia.
Realizar la codificacin de un programa en lenguaje C++ que lea el orden de una matriz
mxm (mismo nmero de filas y columnas) y realice:

La lectura de la matriz A
La generacin de la matriz transpuesta de A (AT)
El clculo de la matriz S, tal que S = A + AT
La impresin de A, AT y S

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

11.

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


a.
b.
c.
d.
e.

12.

La declaracin de una matriz de nmeros enteros.


Lea el valor del nmero de filas y columnas.
Introduzca por teclado los valores de la matriz.
En un vector almacene la suma de las columnas y en otro almacene la suma de las
filas.
Imprimir: la matriz introducida, el vector de la suma de las columnas horizontalmente
as como el vector de la suma de filas verticalmente.

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 da de la semana.
Lea el nmero 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 da por cada usuario.

Ejemplo
USUARIO
1
USUARIO
2
USUARIO
3
.
USUARIO
N

LUNES
10

MARTES
5

MIRCOLES
6

JUEVES
9

VIERNES
1

SBADO
0

DOMINGO
5

12

34

11

Calcule el total de minutos utilizado por cada usuario y almacnelos en un arreglo de


una dimensin.
Calcule el total de minutos utilizado por todos los usuarios para cada da de la semana
y almacnelos 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
da de la semana, as como los importes a pagar calculados.
Utilizar funciones de usuario de paso por valor y/o referencia.

13.

Elabore la codificacin en lenguaje C++ de un programa que realice:

14.

Defina una matriz llamada KILOWATT de 20 filas y 4 columnas, cada fila representa
un usuario de la compaa de luz y cada columna una semana de cada mes.
Lea el nmero 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 gurdelo en un vector llamado
TOTALKW.
Calcule el promedio de consumo por usuario y gurdelo 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

En un grupo de 20 alumnos, cada uno de ellos cursa 5 asignaturas y se identifican por un


nmero de boleta. Elabore la codificacin de un programa que en un arreglo bidimensional
(matriz de 20 x 7) lea y almacene en la primera columna el nmero 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 nmero 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 calificacin final en base a seis calificaciones


distribuidas de la siguiente forma:

3 calificaciones parciales de exmenes que corresponden al 70% de la misma.


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

Cada calificacin parcial de laboratorio se determina en base al nmero de prcticas


realizadas, que en cada parcial deber ser de 7.
Realizar la codificacin de un programa en C/C++ que en un matriz de 30 filas y 8 columnas
realice lo siguiente:
a)
b)
c)
d)
e)

En la primera columna lea el nmero de boleta del alumno.


De la segunda a la cuarta columna lea cada calificacin parcial de examen.
De la quinta a la sptima columna lea en nmero de practicas realizadas por cada
alumno.
En la octava columna calcule y guarde la calificacin final de acuerdo a la suma del
porcentaje de las 6 calificaciones parciales dividida entre 3.
Imprima el nmero de boleta y la calificacin final de cada uno de los 30 alumnos.

Utilizar funciones de paso por valor y/o referencia.

Ejemplo:

Boleta

Examen1 Examen2 Examen3

200330210
200330230

16.

6
9

5
7

8
4

Nmero
de
prcticas
1
7
3

Nmero
de
prcticas
2
3
5

Nmero
de
prcticas
3
1
6

Final
6.00
6.66

Una institucin bancaria ofrece crditos a 12 meses en pagos mensuales fijos que se
calculan en base al monto del crdito ms una tasa de inters anualizada. Realice la
codificacin de un programa en lenguaje C/C++ que realice la lectura del nmero de tarjeta
habientes para los que se ejecutar el clculo (n), lea el nmero de cuenta de cada cliente
(de los n clientes) y lo almacene en un arreglo unidimensional (tambin llamado vector) de
tamao 20 de tipo entero largo.
Tambin realizar la lectura de la tasa de inters 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 (tambin llamado matriz) de nmeros con punto flotante de 20
filas y 3 columnas realice:

17.

La lectura del monto del crdito de cada cliente y lo almacene en la primera columna.
Almacene en la segunda columna el valor de la tasa de inters leda anteriormente.
Realice el clculo del pago mensual y lo almacene en la tercera columna. Este se
obtiene multiplicando el monto del crdito por la tasa de inters y dividiendo entre 12.
Imprimir todos los nmeros de cuenta y su pago mensual correspondiente.
Utilizar funciones de usuario de paso por valor y/o referencia.

Un proveedor de servicios de Internet cobra a sus suscriptores $300.00 al mes por tiempo
ilimitado. Tambin tiene la opcin 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 codificacin de un programa en lenguaje C/C++ que lea el nmero de suscriptores de la
compaa (mximo 100) y en una matriz de 100 filas y 4 columnas:
a)
b)
c)
d)
e)

Lea el nmero de suscriptor y lo almacene en la primera columna.


Lea que tipo de suscriptor es y en la segunda columna almacene el nmero 0 si se
trata de un suscriptor ilimitado, o bien el nmero 1 si se trata de un suscriptor por
minuto.
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 nmero de minutos
utilizados en el mes.
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.
Imprimir la matriz resultante.

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

18.

Realice la codificacin 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 multiplicacin y la
columna 0 representa el segundo operando de dicha multiplicacin. Toda la dems matriz
se llena en base a la multiplicacin de la fila con la columna correspondiente.
EJEMPLO:
Lmite inferior: 2.2
Incremento: 0.2

Columna 0
Fila 0
2.2
2.4
2.6

19.

2.4
5.28
5.76
6.24

2.6
5.72
6.24
6.76

El usuario proporciona el lmite inferior y el incremento, la matriz deber ser de tamao 9 x


9 y deber llenarse toda.

20.

2.2
4.84
5.28
5.72

Imprimir la matriz completa.


Utilizar funciones de paso por valor y/o referencia.

Realice la codificacin 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 dems
trminos 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 compaa de televisin por cable cobra a sus suscriptores una renta mensual de
$150.00 si su suscripcin es de canales bsicos y $250 si es suscripcin plus. As tambin
cobra $50 por cada evento especial que el suscriptor solicita. Elabore la codificacin de un
programa en lenguaje C/C++ que lea el nmero de suscriptores de una poblacin (mximo
50) y en una matriz de:
a)

b)
c)
d)

Lea el nmero de suscriptor y lo almacene en la primera columna. Lea si es un


suscriptor bsico y almacene el nmero 1 en la segunda columna, en caso de que sea
un suscriptor plus almacene el nmero 2 en la segunda columna. Lea y almacene en
la tercera columna el nmero de eventos especiales que solicito en el mes.
El programa tambin leer el adeudo del mes anterior de cada suscriptor, ste se
almacenar en la cuarta columna y se sumar al adeudo del mes actual.
Calcule y almacene en la quinta columna el adeudo mensual de cada suscriptor.
Imprimir la matriz resultante

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

22.

Una compaa 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, despus 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)

b)
c)

Lea el nmero 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 nmero determinado de departamentos
(mximo 50)
Determine e imprima que departamento consumi ms.
Determine e imprima que departamento consumi menos.

d)
e)
f)

23.

Determine e imprima cual fue el promedio de consumo mensual.


Ordene ascendentemente de acuerdo al nmero de departamento cada una de las
filas de la matriz e imprima la totalidad de sta.
Lea un nmero de departamento, lo busque e imprima su consumo y su adeudo
mensual. Si no existe ste nmero de departamento, imprimir NO EXISTE.

Realizar un programa para ordenar en forma alfabtica ascendente, un conjunto de


nombres de personas proporcionadas por el usuario.