Sunteți pe pagina 1din 12

UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERA Y ARQUITECTURA ESCUELA DE INGENIERA DE SISTEMAS INFORMTICOS PROGRAMACIN I Ejemplo resuelto con estructuras de datos

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

Peso en libras de cada persona Nmero de personas

TOP DOWN

Media aritmtica Varianza Desviacin estndar Mediana Moda

principal

leer

media

varianza

mediana

moda

Modulo leer Entrada Salida

Peso en libras de un estudiante

Devuelve el peso de una persona

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.

Proceso: solo de validacin de p; el valor de p se devuelve Variables de proceso: No hay


Subflujograma: leer

*
leer ( )
Mientras x<=0

Digite el peso en libras

Debe ser positivo

x x

*
Retornar x

Entrada

Mdulo principal Salida

Nmero de personas Recibe: El peso de las personas, media, varianza y mediana.

Media aritmtica Varianza Desviacin estndar Mediana Moda

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

Descripcin Media aritmtica


Varianza Desviacin estndar Mediana moda

Descripcin Nmero de personas

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.

Leer y valida n Desde i=0, n-1, 1 peso[ i ] = leer( )

//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

Variables de proceso: Nombre tipo i int peso[100] int

Descripcin Contador de personas


Contiene cada uno de los pesos

Subflujograma: principal
a Inicio

i=0, n-1, 1 Reservar peso[100]

peso [ ] =leer()

nmero de
pesronas

m_ari = media (n, peso)

n
var = varianza (n, m_ari, peso) Mientras n<=0

de_es = sqrt(var)
Error,debe ser <=100 y >1

med_ana = mediana (n, peso)


a

media Aritmetica: m_ari, Varianza:, var, desviacin estandar:, de_es, mediana:, med_ana

moda (n, peso)

Fin

Entrada

Mdulo media Salida

Recibe: Nmero de personas El vector con el estudiantes.

Devuelve: Media aritmtica peso de los

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

Nombre tipo int int

Descripcin
Vector con los pesos de las personas Nmero de personas

Proceso: Calcula y devuelve la media aritmtica: s=0


Desde i=0, n1-1, 1 s += p[ i ] m = s/n1

Variables de proceso: Nombre tipo i Int s int m float

Descripcin Contador de personas Suma de los n1 pesos Media aritmtica

Subflujograma: media

media ( n1,p )
s=0
i = 0, n1-1, 1

s = s + p[ i ]

m = s/n1

Retornar m .

Entrada

Mdulo varianza Salida

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

Nombre tipo int int float

Descripcin
Vector con los pesos de las personas Nmero de personas Media aritmrtica

Proceso: Calcula y devuelve la varianza: s1 = 0


Desde i=0, n2-1, 1 s1 = s1 + pow ((p[ i ] me), 2) va = s1/n2

Variables de proceso: Nombre tipo i Int s1 float va float

Descripcin Contador de personas Suma de la desviacin de pesos n2 al cuadrado. Varianza de pesos

Subflujograma: Varianza

varianza ( n2, me, p )


s1 = 0
i = 0, n2-1, 1

s1 = s1 + pow (( p[ i ]-me), 2)

va = s1/n2

Retornar va

Entrada

Modulo mediana Salida

Recibe: Nmero de personas El vector con el peso de las personas.

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 ]

Nombre tipo int int

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 )

n3%2 == 0 medi = p[ n3/2 ] medi = p[ n3/2] + p[ n3/2+1 ] / 2

Retornar medi

Entrada

Mdulo moda Salida

Recibe: Nmero de personas El vector con el peso de las personas.

El valor (o los valores) que ms se repite (Moda).

Variables de Salida:
v[ ]

Nombre tipo int

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 ]

Nombre tipo int int

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

Mientras otro==1 && j<=nd-1 desde i=1, n4-1

otro ==1 ? Si: nd++ v[nd-1] = p[i] f[nd 1]++

mayor = f[0]

//primera frecuencia ms alta. f[i] >mayor? //asigna la mayor frecuencia a mayor si: mayor = f[i]

Desde i=0, nd-1 Imprimir Moda: Desde i=0, nd-1

f[i] >mayor? //asigna la mayor frecuencia a mayor si: imprimir v[i]

Variables de proceso: Nombre tipo nd int v [ nd ] int f [ nd ] int


i j otro mayor

int int int int

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 *

moda ( n4, p ) p[i] == v[j]


v[0] = p[0] SI nd = nd + 1

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 ]

Mientras ( otro==1 && j<= nd -1 )

p[i] == v[j]

SI f[j] = f[j] + 1 Moda se repite , mayor, veces, y es:


i = 0 , i < = nd - 1, 1

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

if (p[i]==v[j]) { f[j]++; otro=0;

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

} if (otro==1) { nd++; v[nd-1]=p[i]; f[nd-1]++; }

} j++;

12

S-ar putea să vă placă și