Documente Academic
Documente Profesional
Documente Cultură
1. Dado el peso en libras de cada uno de los estudiantes del grupo 02 de PRN115, no pueden ser ms de 100, disee un programa que calcule lo siguiente: La media aritmtica de los n pesos: sta se calcula sumando todos los pesos y dividiendo dicha suma entre el nmero de personas. La varianza: Se calcula como la suma de los cuadrados de las desviaciones de la media, entre el nmero de personas. La desviacin estndar: Es la raz cuadrada de la varianza. La mediana: Es el valor central de los n pesos, si el nmero de elementos es impar; si al contrario es par, la mediana es la semisuma de los 2 elementos centrales. La moda: Es el peso que ms se repite
PLANTEAMIENTO GENERAL
Entrada
Salida
TOP DOWN
principal
leer
media
varianza
mediana
moda
Variables de Salida: No hay, devuelve el peso valido de una persona. Variables de Entrada: Nombre tipo Descripcin x int Peso en libras de una persona Restricciones: x >= 0
Parmetros: no hay.
*
leer ( )
Mientras x<=0
x x
*
Retornar x
Entrada
Variables de Salida: Nombre tipo m_ari float var float de_es float med_ana float md float . Variables de Entrada: Nombre tipo n int
Y se recibe el peso de cada persona Restricciones: (n >=1) && (n<=100) Parmetros: No hay. Proceso: Lee y valida el numero de estudiantes. Asigna el peso de cada persona al vector peso[ ]. Invoca los otros mdulos. Calcula la desviacin estndar e imprime resultados.
//nmero de estudiantes
m_ari = med (n, peso) var = varianza (n, m_ari, peso) de_es = sqrt(var) med_ana = mediana(n, peso) md = moda (n, peso) Imprimir: m_ari, var, de_es, med_ana, md
Subflujograma: principal
a Inicio
peso [ ] =leer()
nmero de
pesronas
n
var = varianza (n, m_ari, peso) Mientras n<=0
de_es = sqrt(var)
Error,debe ser <=100 y >1
media Aritmetica: m_ari, Varianza:, var, desviacin estandar:, de_es, mediana:, med_ana
Fin
Entrada
Variables de Salida: No hay, devuelve el valor de la media aritmtica. Variables de Entrada: No hay, recibe el nmero de personas y peso de cada persona (vector) Restricciones: No hay Parmetros:
p[ n1 ] n1
Descripcin
Vector con los pesos de las personas Nmero de personas
Subflujograma: media
media ( n1,p )
s=0
i = 0, n1-1, 1
s = s + p[ i ]
m = s/n1
Retornar m .
Entrada
Recibe: Nmero de personas El vector con el peso de las personas. Media aritmtica
Devuelve: Varianza
Variables de Salida: No hay, devuelve el valor de la varianza. Variables de Entrada: No hay, recibe el nmero de personas, peso de cada persona (vector) y la media aritmtica. Restricciones: No hay Parmetros:
p[ n2 ] n2 me
Descripcin
Vector con los pesos de las personas Nmero de personas Media aritmrtica
Subflujograma: Varianza
s1 = s1 + pow (( p[ i ]-me), 2)
va = s1/n2
Retornar va
Entrada
Devuelve: mediana
Variables de Salida: No hay, devuelve el valor de la mediana. Variables de Entrada: No hay, recibe el nmero de personas, peso de cada persona (vector). Restricciones: No hay Parmetros:
n3 p[ n3 ]
Descripcin
Nmero de personas Vector con los pesos de las personas
Proceso: Calcula y devuelve la varianza: n3 % 2 == 0 ? Si: medi = ( p[ n3/2 ] + p[ n3/2 +1 ] ) / 2 No: medi = p[ n3/2] Devuelve medi Variables de proceso: Nombre tipo Descripcin medi Int mediana
Subflujograma: mediana
mediana ( n3, p )
Retornar medi
Entrada
Variables de Salida:
v[ ]
Descripcin
Vector que contiene los pesos de las personas que son diferentes
Variables de Entrada: No hay, recibe el nmero de personas, peso de cada persona (vector). Restricciones: No hay Parmetros:
n4 p[ n4 ]
Descripcin
Nmero de estudiantes Vector con los pesos de los estudiantes
Proceso: Se trabaja con 3 vectores: el vector p[ ] en el que se guardan los pesos de cada persona; el vector v[ ] de 100 elementos, en donde se copian solo los pesos sin repeticiones y, el vector f[ ] en donde se almacenaran las veces que cada peso se repite (frecuencia). Iniciamos v[ 0 ] con la posicin inicial de p[ 0], puesto que el primer elemento debe de aparecer como elemento sin repeticin por lo tanto, su frecuencia es uno f[0]=1, las restantes posiciones del vector de frecuencia se inicia con cero (0) . Las dems posiciones (de 1 en adelante) de v[ ] se llenarn cuando se encuentre un valor que no haya aparecido antes y f[ ] se ir incrementando en 1 cada vez que aparezca un dato por primera vez o que se repita. Al final se busca en el vector f[ ] el dato mayor, que desde luego indica el de mayor frecuencia; permite tambin imprimir todos los elementos que tienen la misma frecuencia si este fuera el caso. v[0] = p[0] ; nd = 0 ; f[0] = 1
desde i=1, n4-1 { f[i] =0; // inicia el vector frecuencia con ceros, menos f[0] otro = 1 // busca datos repetidos y los almacena en v[] p[i] == v[j]? Si: f[j]++ // incrementa fepeticiones otro=0 j = nd
mayor = f[0]
//primera frecuencia ms alta. f[i] >mayor? //asigna la mayor frecuencia a mayor si: mayor = f[i]
Descripcin Nmero de pesos sin repetir Vector con los pesos sin repetir Nmero de veces que aparece que v[ i ] en el vector p[ ] de los pesos originales Contador del peso de cada persona Contador de los pesos distintos sin repetir Bandera que determina si un peso est repetido (0) o es un peso distinto a los encontrados (1) Contiene el mayor nmero de veces que se repite un peso.
Subflujograma: moda *
f[0] = 1
v[ nd-1] = p[ i ]
nd = 1
f[ nd-1]=f[ nd-1] + 1
i = 1, n4 - 1, 1 &
f[i]=0
% & i = 1, n4-1, 1
mayor = f[ 0 ]
otro = 1
%
i = 1 , i < = nd - 1, 1
j=0
f[i] >mayor
SI mayor = f[ i ]
p[i] == v[j]
otro = 0
f[i] == mayor
SI
j=j+1
v[i]
Fin - moda
IV. CODIFICACION DE LA SOLUCION #include <stdio.h> #include <conio.h> #include <math.h> int leer(void); float media(int n1, int p[]); float varianza(int n2, float me, int p[]); float mediana(int n3, int p[]); void moda(int n4, int p[]); main() { float m_ari, var, de_es, med_ana; int peso[100], n, i; printf("\nDigite el numero de personas:\n"); scanf("%i",&n); while (n<=0 || n>100) { printf("\nERROR, el numero debe ser menor o igual que 100 y mayor que 1."); printf("\nDigite el numero de personas :\n"); scanf("%i",&n); } for (i=0;i<=n-1;i++) peso[i]=leer(); m_ari=media(n,peso); var=varianza(n,m_ari,peso); de_es=sqrt(var); med_ana=mediana(n,peso); printf("\n\n La media Aritmetica es: \t %f",m_ari); printf("\n\n La varianza : \t %f",var); printf("\n\n La desviacion estandar : \t %f",de_es); printf("\n\n La mediana : \t %f",med_ana); moda(n,peso); getch(); return 0;
int leer(void) { int p; printf("\nDigite el peso en libras :\n"); scanf("%i",&p); while (p<0) { printf("\nERROR, el peso debe ser positivo."); printf("\nDigite el peso en libras :\n"); scanf("%i",&p); }
10
return p;
float media(int n1, int p[]) { int i, s=0; float m; for (i=0;i<=n1-1;i++) { s+=p[i]; } m=(float) s/n1; return m; } float varianza(int n2, float me, int p[]) { int i, s1=0; float va; for (i=0;i<=n2-1;i++) s1+=pow(p[i]-me,2); va=(float) s1/n2; return va;
float mediana(int n3, int p[]) { int i; float medi; if (n3%2==0) medi=(p[n3/2]+p[n3/2+1])/2; else medi=p[n3/2]; return medi; } void moda(int n4, int p[]) { int v[100],f[100],nd,otro,i,j,mayor; v[0]=p[0]; f[0]=1; nd=1; for (i=1;i<=n4-1;i++) f[i]=0; for (i=1;i<=n4-1;i++) { otro=1; j=0; while (otro==1 && j<=nd-1) {
11
} mayor=f[0]; for (i=1;i<=nd-1;i++) { if (f[i]>mayor) mayor=f[i]; } printf("\n\n La moda aparece %d veces y es :\n",mayor); for (i=0;i<=nd-1;i++) { if (mayor==f[i]) printf("\t %d ",v[i]); }
} j++;
12