thor11
Usuario (México)
programas para aprender a programar en c/c++ si nesesitas algun programa solo pidelo bueno aquí un programa interesante q calcula los números perfectos es interesante debido a q los números perfectos es un problema no polinomial /*ISC IPN ESCOM México*/ #include<stdio.h> #include<stdlib.h> int perfecto(int x); main() { int x,num=0,i=1,j=1; puts("ingresa el numero de numeros perfectos q quieres q se desplegue" ) ; scanf("%d",&x); while(num<=x){ num=num+perfecto(i); if(perfecto(i)) { printf("el %d perfecto es %dn",j,i ) ; j++; } i++; } system("pause" ) ; } int perfecto(int x) { int acum=0,y=1; while(y<x) { if(!(x%y)) { acum=acum+y; } y++; } if(acum==x) return 1; else return 0; } http://www.bloodshed.net/dev/devcpp.html
Este es el código de un algoritmo muy usado en los cursos de estructuras de datos pasa una operación en notación interfija a notación postfija de bajo esta el código con las funciones básicas de la "pila" espero les sirva para los que van empezando en esto de la programación... Saludos a la comunidad de la ESCOM #include "pila1.cpp" #define MAX 20 int Proced(TipoDato cima,TipoDato simb); int main () { TipoDato simb,Cad={' '}; Pila Pil; int a=0,i,flag=0; CrearPila(&Pil); puts("introduce una operacion en notacion interfija"); while((simb=getchar())!='n'){ if(simb!=('/') && simb!=('*') && simb!=('-') && simb!=('+') && simb!=('^') && simb!=('(') &&simb!=(')')){ Cad=simb; a=a+1; } else{ if(simb=='('){ Cad=simb; a=a+1; flag=1;} else if(simb==')'){ while(!PilaVacia(Pil)){ Cad=Quitar(&Pil); a=a+1; } Cad=simb; a=a+1; flag=0; } else if(!PilaVacia(Pil) && Proced(Cima(Pil),simb)){ while(!PilaVacia(Pil) && Proced(Cima(Pil),simb)){ Cad=Quitar(&Pil); a=a+1; }} if(simb!=')' && simb!='(') Ingresar(&Pil,simb); } } while(!PilaVacia(Pil)){ Cad=Quitar(&Pil); a=a+1; } puts(Cad); system("pause"); } int Proced(TipoDato cima,TipoDato simb) { if(cima=='^') { return 1; } else if((cima=='*' || cima=='/') && (simb=='-' || simb=='+')) { return 1; } else{ return 0;} } aquí el archivo con las operaciones de la pila no olvides ponerlos en la misma carpeta typedef char TipoDato; #include "PilaE.h" int PilaLlena(Pila P) { return(P.cima == TAM -1)?1:0; } int PilaVacia(Pila P) { return (P.cima == -1)?1:0; } void Ingresar(Pila *P, TipoDato x) { if(PilaLlena(*P)) { puts("Error, Pila llena"); return; //exit(-1); } P->lista[++P->cima] = x; } TipoDato Quitar(Pila *P) { if(PilaVacia(*P)) { puts("Error, pila vacia"); TipoDato xx; return xx; //exit(-1); } TipoDato aux = P->lista[P->cima]; P->cima--; return aux; } TipoDato Cima(Pila P) { if(PilaVacia(P)) { puts("Error"); TipoDato xx; return xx; //exit(-1); } return (P.lista[P.cima]); } void CrearPila(Pila *P) { P->cima = -1; } ambos archivos se guardan con extencion .Cpp
Pues este programa consta de tres archivos un header y dos archivos .cppTienen q separar los archivos vean bien el codigo ISC... ESCOM IPN el header define la el TDA //ListaEnlasada.h #include <stdio.h> #include <stdlib.h> #include "square.h" typedef struct Nodo { item *dato; struct Nodo *siguiente; }NODO; void InsertarLista(NODO **cab, item *x); void ImprimirLista(NODO *primero); void InsertarOrden(NODO **cab,item *valor) ; Despues vamos a definir las funciones //ListaEnlasada.cpp typedef struct termino { float lit; float exp; }Termino; typedef Termino item; #include "ListaEnlasada.h" void InsertarLista(NODO **cab, item *x) { NODO *aux = (NODO *)malloc(sizeof(NODO)); aux->dato = x; aux->siguiente = *cab; *cab = aux; } //------------------------MOSTRAR LISTA------------------ void ImprimirLista(NODO *cab) { system("cls"); if(cab==NULL) { printf("La lista esta vacian"); } else{ printf("nel polinomio es:n"); printf("n"); while (cab != NULL) { printf( "%2.2f",cab->dato->lit); printf( "x^"); printf( "%2.2f +",cab->dato->exp); cab = cab->siguiente; }} } void InsertarOrden(NODO **cab,item *valor) { NODO *nuevo,*back,*next; nuevo=(NODO *) malloc (sizeof(NODO)); if(nuevo != NULL) { nuevo->dato=valor; nuevo->siguiente=NULL; back=NULL; next=(*cab); while(next != NULL && (valor->exp) < next->dato->exp) { back=next; next=next->siguiente; } if(back==NULL) { nuevo->siguiente=(*cab); (*cab)=nuevo; } else { back->siguiente=nuevo; nuevo->siguiente=next; } } else{printf("no hay espacio disponible en memoria");} } Y por ultimo el programa principal "main" #include "ListaEnlasada.cpp" #include <windows.h> void Sumarp(NODO *polmay,NODO *polmen); void Multp(NODO *cab,NODO *cab2); void derip(NODO **cab); void Intp(NODO **cab); char menu(void); int polin(NODO **cab); main() { char opc; int a,b; NODO *cab,*cab2; char opc2; cab=NULL; cab2=NULL; puts("ingresa el polinomio numero 1"); a=polin(&cab); puts("ingresa el polinomio numero 2"); b=polin(&cab2); do{ opc=menu(); switch (opc) { case 'i':ImprimirLista(cab); case 'a':{ if(a>b) Sumarp(cab,cab2); else Sumarp(cab2,cab); break;} case 'b':{ Multp(cab,cab2); break;} // Derivar case 'c': { fflush(stdin); do { system("cls"); puts("deseas obtener la derivada de: "); puts(" a) La derivada del primer polinomio"); puts(" b) La derivada del segundo polinomio"); puts(" c) Regresar menu principal"); opc2=getchar();fflush(stdin); switch (opc2) { case 'a':{derip(&cab);break;} case 'b':{derip(&cab2);break;} case 'c':{printf(".");printf("..");Sleep(250);printf("...");Sleep(250);printf("....");} default: {printf(".");printf("..");Sleep(250);printf("...");Sleep(250);printf("....");} } }while(opc2!='c'); break; } // integral case 'd':fflush(stdin); do { system("cls"); puts("deseas obtener la integral de: "); puts(" a) La integral del primer polinomio"); puts(" b) La integral del segundo polinomio"); puts(" c) Regresar menu principal"); opc2=getchar();fflush(stdin); switch (opc2) { case 'a':{Intp(&cab);break;} case 'b':{Intp(&cab2);break;} case 'c':{printf(".");printf("..");Sleep(250);printf("...");Sleep(250);printf("....");} default: {printf(".");printf("..");Sleep(250);printf("...");Sleep(250);printf("....");} } }while(opc2!='c'); break; } }while(opc!='e'); } char menu(void) { char opc; system("cls"); marco(1,77,1,24); gotoxy(5,6);puts("Este programa realiza operaciones con polinomios n"); gotoxy(5,7);puts("Introduce el primer polinomio"); gotoxy(5,9);puts(" Elige una opcion a realizar n"); gotoxy(5,11);puts(" a) Sumar polinomios n"); gotoxy(5,12);puts(" b) Multiplicar polinomios n"); gotoxy(5,13);puts(" c) Derivar polinomios n"); gotoxy(5,14);puts(" d) Integrar polinomiosn"); gotoxy(5,16);puts(" e) Salirn"); return opc=getchar(); } //---------Sumar polinomio-------------------------- void Sumarp(NODO *pol1,NODO *pol2) { int flag=0; NODO *suma=NULL,aux,*aux1; aux1=pol2; while(pol1 != NULL) { pol2=aux1; aux.dato=(item *) malloc (sizeof(item)); while(pol2 != NULL) { if(pol1->dato->exp == pol2->dato->exp ) { aux.dato->lit=pol1->dato->lit + pol2->dato->lit; aux.dato->exp=pol1->dato->exp; InsertarOrden(&suma,aux.dato); flag=1; } pol2=pol2->siguiente; } if(flag==0) { aux.dato->lit=pol1->dato->lit; aux.dato->exp=pol1->dato->exp; InsertarOrden(&suma,aux.dato); } pol1=pol1->siguiente; flag=0; }ImprimirLista(suma);printf("n");system("pause"); } void Multp(NODO *pol1,NODO *pol2) { int flag=0; NODO *mult=NULL,aux,*aux1; aux1=pol2; while(pol1 != NULL) { pol2=aux1; aux.dato=(item *) malloc (sizeof(item)); while(pol2 != NULL) { aux.dato->lit=pol1->dato->lit * pol2->dato->lit; aux.dato->exp=pol1->dato->exp + pol2->dato->exp; InsertarOrden(&mult,aux.dato); flag=1; pol2=pol2->siguiente; } pol1=pol1->siguiente; }ImprimirLista(mult);printf("n");system("pause"); } //------esta funcion calcula la derivada del polinomio---------// void derip(NODO **cab) { ImprimirLista(&(**cab)); NODO *auxiliar; /* lo usamos para recorrer la lista */ auxiliar = (*cab); printf("nla derivada es :n"); printf("n"); while (auxiliar!=NULL) { printf( "%2.2f",(auxiliar->dato->lit)*(auxiliar->dato->exp)); printf( "x^"); printf( "%2.2f +",(auxiliar->dato->exp)-1); auxiliar = auxiliar->siguiente; }printf("n");system("pause"); } //------esta funcion calcula la integral del polinimo----------// void Intp(NODO **cab) { ImprimirLista(&(**cab)); NODO *auxiliar; /* lo usamos para recorrer la lista */ auxiliar = (*cab); printf("nLa integral es :n"); printf("n"); while (auxiliar!=NULL) { printf( "%2.2f",(auxiliar->dato->lit)); printf( "x^"); printf( "%2.2f +",(auxiliar->dato->exp)+1); printf( " / ");printf( "%2.2f +",(auxiliar->dato->exp)+1); auxiliar = auxiliar->siguiente; }printf("n");system("pause"); } //-------funcion lee un polinomio-------------------------------// int polin(NODO **cab) { int cont=1; char salir; NODO nuevo,*aux; aux=(*cab); do{ printf("n introduce el coheficiente del %d termino : ",cont); nuevo.dato=(item *) malloc (sizeof(item)); scanf("%f",&(nuevo.dato->lit)); fflush(stdin); printf(" introduce el exponente del %d termino : ",cont); scanf("%f",&(nuevo.dato->exp)); fflush(stdin); InsertarOrden(&(*cab),nuevo.dato); ImprimirLista((*cab)); puts("n desea introducir otro termino presiona "s" para salir presiona "n""); salir=getchar(); cont++; }while(salir!='n'); } Por ultimo una pequeña libreria creada por mi para dar formato a los programas //square.h #include<windows.h> #include<stdio.h> #include<stdlib.h> #include<conio.h> #define f1 'xba' #define f2 'xbb' #define f3 'xbc' #define f4 'xcd' #define f5 'xc8' #define f6 'xc9' void marco(int,int,int,int); void marcob(int,int,int,int);//marco negro void marcoc(int hor,int hmax,int ver,int vmax); void cuadro(int hor,int xmax,int ver,int ymax); void cuadro2(int hor,int hmax,int ver,int vmax); void cuadro3(int hor,int hmax,int ver,int vmax); void cuadro4(int hor,int hmax,int ver,int vmax); void movimiento(int x,int y); void gotoxy(int,int); //marco completo void marco(int hor,int hmax,int ver,int vmax) { int vmin=ver,hmin=hor,cont=7; gotoxy(hor,ver);printf("%c",f6); for(ver=ver+1;ver<=vmax;ver++){ gotoxy(hor,ver);printf("%c",f1); } gotoxy(hor,ver);printf("%c",f5); for(hor=hor+1;hor<=hmax;hor++){ gotoxy(hor,ver);printf("%c",f4); } gotoxy(hor,ver);printf("%c",f3); for(ver=vmax;ver>vmin;ver--){ gotoxy(hor,ver);printf("%c",f1); } cont=32; gotoxy(hor,ver);printf("%c",f2); for(hor=hmax;hor>hmin;hor--){ gotoxy(hor,ver);printf("%c",f4); } } //marco negro void marcob(int hor,int hmax,int ver,int vmax) { int vmin=ver,hmin=hor,x1=hor; for(vmin=ver;vmin<=vmax;vmin++) { for(hmin=hor;hmin<=hmax;hmin++) { gotoxy(hor,ver); printf(" "); hor=hor+1; } hor=x1; ver++; } } //marco abierto en un extremo void marcod(int hor,int hmax,int ver,int vmax) { int vmin=ver,hmin=hor; gotoxy(hor,ver);printf("%c",f6); for(ver=ver+1;ver<=vmax;ver++){ gotoxy(hor,ver);printf("%c",f1); } gotoxy(hor,ver);printf("%c",f5); for(hor=hor+1;hor<=hmax;hor++){ gotoxy(hor,ver);printf("%c",f4); } gotoxy(hor,ver);printf("%c",f2); for(ver=vmax;ver>vmin;ver--){ gotoxy(hor,ver);printf(" "); } gotoxy(hor,ver);printf("%c",f3); for(hor=hmax;hor>hmin;hor--){ gotoxy(hor,ver);printf("%c",f4); } } //abierto por la derecha void marcoc(int hor,int hmax,int ver,int vmax) { int vmin=ver,hmin=hor; gotoxy(hor,ver);printf("%c",f5); for(ver=ver+1;ver<=vmax;ver++){ gotoxy(hor,ver);printf(" "); } gotoxy(hor,ver);printf("%c",f6); for(hor=hor+1;hor<=hmax;hor++){ gotoxy(hor,ver);printf("%c",f4); } gotoxy(hor,ver);printf("%c",f3); for(ver=vmax;ver>vmin;ver--){ gotoxy(hor,ver);printf("%c",f1); } gotoxy(hor,ver);printf("%c",f2); for(hor=hmax;hor>hmin;hor--){ gotoxy(hor,ver);printf("%c",f4); } } //abierto por arriba void marcoe(int hor,int hmax,int ver,int vmax) { int vmin=ver,hmin=hor; gotoxy(hor,ver);printf("%c",f2); for(ver=ver+1;ver<=vmax;ver++){ gotoxy(hor,ver);printf("%c",f1); } gotoxy(hor,ver);printf("%c",f5); for(hor=hor+1;hor<=hmax;hor++){ gotoxy(hor,ver);printf("%c",f4); } gotoxy(hor,ver);printf("%c",f3); for(ver=vmax;ver>vmin;ver--){ gotoxy(hor,ver);printf("%c",f1); } gotoxy(hor,ver);printf("%c",f6); for(hor=hmax;hor>hmin;hor--){ gotoxy(hor,ver);printf(" "); } } void cuadro(int hor,int hmax,int ver,int vmax) { marco(hor,hmax,ver,vmax); marcob(hor+1,hmax-1,ver+1,vmax); } void cuadro2(int hor,int hmax,int ver,int vmax) { marcoc(hor,hmax,ver,vmax); marcob(hor+1,hmax-1,ver+1,vmax); } void cuadro3(int hor,int hmax,int ver,int vmax) { marcod(hor,hmax,ver,vmax); marcob(hor+1,hmax-1,ver+1,vmax); } void cuadro4(int hor,int hmax,int ver,int vmax) { marcoe(hor,hmax,ver,vmax); marcob(hor+1,hmax-1,ver+1,vmax); } void gotoxy(int x,int y) { HANDLE hConsoleOutput; COORD cursor_Pos={x,y}; hConsoleOutput=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hConsoleOutput,cursor_Pos); }