fundamentos de programaciÓn profesor...

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: 540 3N 2M 2 3 < + 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. INICIO m=1, n=1 x=0, y=0 y< 540 x<540 x=funcion (m, x m=m+2 x=funcion ( m, x=0, m=1 y=funcion ( m, n = n+2 y=funcion ( m, “ADIOS” FIN funcion ( m, n ) k k = ( 2 * pow( m, 3)) + ( 3 * pow( n, 2)) return k

Upload: hanhu

Post on 26-Sep-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

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:

5403N2M 23 <+

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.

INICIO

m=1, n=1 x=0, y=0

y< 540

x<540

x=funcion (m,

x

m=m+2

x=funcion ( m,

x=0, m=1

y=funcion ( m,

n = n + 2

y=funcion ( m,

“ADIOS”

FIN

funcion ( m, n )

k

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

return k

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

M N

RESULTADO

1 1 SI 5 1 3 SI 29 1 5 SI 77 3 1 SI 57 3 3 SI 81

2. Realizar un programa que tabule e imprima la función cos(x)sen(x)f(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.

NO SI SI NO SI NO NO SI

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

INICIO

mayor menor

“REPETIR?”

“ADIOS”

opcion

FIN

AI, AF,

INC

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

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

mayor = funcion (AI) menor = funcion (AI)

fx = funcion ( i )

fx>mayor

fx<menor

i , fx

opcion==’s’

mayor = fx

menor = fx

funcion (m)

rad = m * 3.14 / 180

res = sin ( rad ) + cos ( rad )

regresa res

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 1.01 2 1.03 3 1.05 4 1.06 5 1.08 6 1.1 7 1.11 8 1.12 9 1.14 10 1.15

Valor mínimo = 1.017 Valor máximo = 1.158

3. La serie de Taylor para determinar el valor de la función 1)(xlnf(x) += esta dada por:

......5

x

4

x

3

x

2

xx1)(xln

5432

−+−+−=+

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 0t ≤ :

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. Para invertir el valor del signo de cada término se multiplica por (-1)i+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

x, t

t<=0

i=1; i<=1;i++

y = funcion ( x, i)

res = 0

res = res + y

res

“REPETIR?”

opcion

opcion ==’S’

FIN

funcion( x, i )

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

regresa E

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

0.833331)(xln =+−=+

==

3

1

2

11

3t1,x32

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.

L−+−+−= 9753 x

5

x

4

x

3

x

2

x

1f(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:

Examen No. de PrácticasBoleta 1 2 3 1 2 3 Final

200330210 6 5 8 7 3 1 6.00 200330230 9 7 4 3 5 6 6.66

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

x

sen(x)f(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.

NOTA: aritméticamediamdonden

mxDesviación

n

ii

=−

−=∑= :,

1

)(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:

L−+−+−= 9x

5

x

4

x

3

x

2

x

1753f(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.

promedio=x Desviación estándar:

∑=

−−

=n

ni

2i )x(x

1n

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’ ‘M’ ‘X’ ‘X’ ‘I’ ‘V’ ‘\0’

1000 100 1000 10 10 1 5

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.

promedio=x

Desviación estándar:

∑=

−−

=n

1i

2i )x(x

1n1σ

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 1 1 2 3 5 8 13 21 …….

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: / | jisiji ≠))((

=jia , <

| jisíji =+ \

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 La generación de la matriz transpuesta de A (AT) El cálculo de la matriz S, tal que S = A + AT La impresión 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. 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 DOMINGOUSUARIO 1

10 5 6 9 1 0 5

USUARIO 2

1 12 3 4 5 6 34

USUARIO 3

3 8 9 0 11 3 0

……………. USUARIO N

3 7 4 0 0 3 5

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 Examen2 Examen3

Número de

prácticas 1

Número de

prácticas 2

Número de

prácticas 3

Final

200330210 6 5 8 7 3 1 6.00 200330230 9 7 4 3 5 6 6.66

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 2.2 2.4 2.6 2.2 4.84 5.28 5.72 2.4 5.28 5.76 6.24 2.6 5.72 6.24 6.76

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:

∑−

=

>1

0

n

jijii aa

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.