You are on page 1of 6

Anlisis Crear la estructura y funciones En la opcin de mostrar la pila aparece un men que permitir ver el mayor, menor y la media.

a. A la hora de calcular el mayor, menor y media pasar todos los datos de la pila a un vector y contar cuantos elementos tiene Se escoge la opcin y a la hora de llamar la funcin se llevara el vector y el contados ya con datos para poder hacer los clculos. Algoritmo #define localizar (struct pila *)malloc(sizeof(struct pila)) Definir funciones Struct pila { Int num; Struct pila *; } *ini=NULL, *fin=NULL; Void mayorpila(int cab[], int jk); Void menorpila(int cab[], int jk); Void media(int cab[], int jk); Void agregar(void); Void extraer(void); Void mostrar(void); Definir variables Int op; INICIO Se crea un ciclo hacer que terminara cuando op sea igual a 4. Leer op que entrara a un menu, si op es 1 llamar agregar(); Void agregar(void) Ini es igual a localizar. Se lee los valores con ini->num. Si fin es igual a NULL entonces fin es igual a ini e ini->pt es igual a NULL. Si fin no es igual a NULL entonces ini->pt es igual a fin y fin es igual a ini. Fin de la funcin.

si op es 2 llamar extraer(); void extraer(void) ini es igual a fin y fin es igual a fin->pt. Se libera ini. Si fin es igual a NULL entonces imprimir no hay datos. Regresa al main. Si fin no es igual a NULL entonces imprimir aun hay datos. Regresa al main. Fin de la funcin Si op es 3 llamar a mostrar(); Void mostrar(void) { se declara cont igual a 0, jk igual a 0, cab[100] y datos como enteros. Ini es igual a fin. Se hace un ciclo, mientras ini sea distinto de NULL, cab[jk] es igual a Ini->num, ini es igual a ini->pt y jk aumenta en 1. Se lee datos para entrar al case si datos es 1 Ini es igual a fin. Se hace un ciclo, mientras ini sea distinto de NULL, imprime ini->num, ini es igual a ini->pt y cont aumenta en 1. Si datos es 2 llamar mayorpila(cab,jk); Void mayorpila(int cab, int jk) Se declara np, aux igual a 0 y ih como enteros. Se hace un ciclo for(ih=0; ih<jk; ih++) {Cuando aumenta ih se reinicia aux (aux=0) Se hace otro ciclo adentro del for For(np=0; np<jk; np++) {Si cab[ih] es mayor o igual a cab[np] entonces aux aumenta en 1. } fin. Cuando se completa el proceso si aux es igual a jk entonces imprimir el mayor es cab[ih] y rompe el ciclo } fin. Fin de la funcin.

Si datos es 3 llamar menorpila(cab,jk); Void menorpila(int cab[], int jk) Se declara rt, aux igual a 0 y gf como enteros. Se hace un ciclo for(rt=0; rt<jk; rt++) {Cuando aumenta rt se reinicia aux (aux=0) Se hace otro ciclo adentro del for For(gf=0; gf<jk; gf++) {Si cab[rt] es menor o igual a cab[gf] entonces aux aumenta en 1. } fin for Cuando se completa el proceso si aux es igual a jk entonces imprimir el mayor es cab[rt] y rompe el ciclo } fin for Fin de la funcin. Si datos es 4 llamar media(cab,jk); Void media(int cab[], int jk) Se declara suma igual a 0 y b como enteros, divi como flotante. Se hace un ciclo for(b=0; b<jk; b++) Suma es igual a suma mas cab[b] (suma=suma+cab[b]). Fin del for Divi es igual a suma entre jk. Imprime divi. Fin de la funcin. Si datos es 5 regresa al main.

#include<iostream.h> #include<conio.h> #include<stdio.h> #include<malloc.h> #define localizar (struct pila *) malloc(sizeof(struct pila)) struct pila { int num; struct pila *pt; } *ini=NULL, *fin=NULL; void mayorpila(int cab[], int jk); void menorpila(int cab[], int jk); void media(int cab[],int jk); void agregar(void); void mostrar(void); void extraer(void); void main() { int op; do{ clrscr(); printf("1.agregar\n2.extraer\n3.mostrar\n4.salir\nopcion: "); cin>>op; switch(op) { case 1: agregar(); break; case 2: extraer(); break; case 3: mostrar(); break; } }while(op!=4); getch(); } void agregar(void) { clrscr(); ini=localizar; printf("agrege el numero: "); cin>>ini->num; if(fin==NULL) { fin=ini; ini->pt=NULL; } else { ini->pt=fin;

fin=ini; } } void extraer(void) { clrscr(); if(fin==NULL) {return; } ini=fin; fin=fin->pt; free(ini); if(fin==NULL) {printf("no hay datos");} else { printf("aun hay datos"); } getch(); } void mostrar(void) { int cont=0, datos, jk=0, cab[100]; ini=fin; while(ini!=NULL) { cab[jk]=ini->num; ini=ini->pt; jk++; } clrscr(); printf("1.ver datos\n2.ver mayor\n3.ver media\n5.volver\nopcion: "); cin>>datos; switch(datos) { case 1: ini=fin; clrscr(); cout<<"DATOS"; while(ini!=NULL) { cout<<"\n"<<ini->num; ini=ini->pt; cont++;} break; return; case 2: mayorpila(cab,jk); break; return; case 3: menorpila(cab,jk); break; return; case 4: media(cab,jk); break; return; } if(datos==5) {return; } getch(); }

menor\n4.ver

void mayorpila(int cab[], int jk) { int np, aux=0, ih; for(ih=0; ih<jk; ih++) { aux=0; for(np=0; np<jk; np++) { if(cab[ih]>=cab[np]) { aux++; } } if(aux==jk) {cout<<"\nel mayor es: "<<cab[ih]; break;} } } void menorpila(int cab[],int jk) { int rt, aux=0, gf; for(rt=0; rt<jk; rt++) { aux=0; for(gf=0; gf<jk; gf++) { if(cab[rt]<=cab[gf]) { aux++; } } if(aux==jk) {cout<<"\nel menor es: "<<cab[rt]; break;} } } void media(int cab[], int jk) { int suma=0, b; float divi; for(b=0; b<jk; b++) { suma=suma+cab[b]; } divi=suma/jk; cout<<"\nla media es: "<<divi; }

You might also like