![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
hey gracias, por tratar de ayudar, tengo un pseudocodigo hecho en C de esto pero no se pasarlo a delphi
, si alguien me confirma saber los dos tipos de programacion, por favor, necesito su ayuda, inmediatamente le pasare el codigo. |
|
#2
|
||||
|
||||
|
Postea aquí tu código en C y lo que hayas traducido a Delphi.
Comenta luego la parte donde tengas dudas y te ayudaremos. |
|
#3
|
|||
|
|||
|
aqui esta el codigo en C:
esta un poquito largo no!!! ![]() //-----Dependencias #include <stdio.h> #include <conio.h> //-----Declaración de funciones void limpiar(char[],int), pasar(char[],char[]), conv_pre(char[],char[]), conv_pos(char[],char[]), rec_exp(char[]), inver(char[],char[]); int verif(char[]), tama(char[]), sim(char), prio(char,char); //-----Variables globales char Simb[4][2]={{'(',')'},{'-','+'},{'/','*'},{'$','\0'}}, expr[50], pila[50], expr_c[50], epre[50], epos[50], elem, simb; int i, j, n, tope, val, cont1, cont2, v; //-----Inicio del programa main(){ clrscr(); limpiar(expr,50); limpiar(pila,50); limpiar(expr_c,50); limpiar(epre,50); limpiar(epos,50); do{ printf("Introduzca la expresión infija: "); for(i=0;(expr[i]=getchar())!='\n';++i); if(expr[i]=='\n'){ expr[i]='\0'; } if(verif(expr)!=3){ printf("\nLa expresión %s no es valida, ",expr); switch(verif(expr)){ case 0: printf("esta mal la función."); case 1: printf("le faltan paréntesis derechos."); case 2: printf("le faltan paréntesis izquierdos."); } getche(); clrscr(); } }while(verif(expr)!=3); inver(expr_c,expr); conv_pre(expr_c,epre); printf("\nLa conversión a Prefija es: %s",epre); pasar(expr_c,expr); conv_pos(expr_c,epos); printf("\nLa conversión a Posfija es: %s",epos); getche(); } //-----Limpia la variable void limpiar(char a[], int n){ for(i=0;i<n;i++){ a[i]='\0'; } } //-----Pasa de una variable a otra void pasar(char a[], char b[]){ int n1, n2; n1=tama(a); n2=tama(b); if(n1>n2){ for(i=0;i<n1;i++){ a[i]=b[i]; } } if(n1<n2){ for(i=0;i<n2;i++){ a[i]=b[i]; } } } //-----Cuenta cuantos caracteres hay en la variable int tama(char var[]){ for(n=0;var[n]!='\0';++n); return(n); } //-----Verifica si no le faltan paréntesis a la función int verif(char ex[]){ val=0; n=tama(ex); if(n>0){ tope=0; cont1=cont2=0; for(i=0;i<n;i++){ elem=ex[i]; if(elem=='('){ pila[tope]=elem; tope+=1; pila[tope]='\0'; } else{ if(elem==')'){ if(tope>0){ if(pila[tope-1]=='('){ tope-=1; pila[tope]='\0'; } } else{ pila[tope]=elem; tope+=1; pila[tope]='\0'; } } } } if(tope>0){ for(i=0;i<tope;i++){ if(pila[i]=='('){ cont1+=1; } if(pila[i]==')'){ cont2+=1; } } if(cont1<cont2){ val=2; } if(cont1>cont2){ val=1; } } else{ val=3; } } else{ val=0; } return(val); } //-----Conversión de la función a prefija void conv_pre(char ex[], char epre[]){ char expre[50]; limpiar(expre,50); conv_pos(ex,expre); inver(epre,expre); } //-----Conversión de la función a postfija void conv_pos(char ex[], char epos[]){ tope=-1; n=tama(ex); while(ex[0]!='\0'){ simb=ex[0]; rec_exp(ex); n-=1; if(simb=='('){ tope+=1; pila[tope]=simb; } else{ if(simb==')'){ while(pila[tope]!='('){ int x=tama(epos); epos[x]=pila[tope]; pila[tope]='\0'; tope-=1; } pila[tope]='\0'; tope-=1; } else{ if(sim(simb)==0){ int x=tama(epos); epos[x]=simb; } else{ if(tama(pila)>0){ while(prio(simb,pila[tope])<=0){ int x=tama(epos); epos[x]=pila[tope]; pila[tope]='\0'; tope-=1; if(tope<0){ break; } } } tope+=1; pila[tope]=simb; } } } } while(tope>=0){ int x=tama(epos); epos[x]=pila[tope]; pila[tope]='\0'; tope-=1; } } //-----Recorre los caracteres un lugar void rec_exp(char a[]){ int x=tama(a); for(i=0;i<(x-1);i++){ a[i]=a[i+1]; } a[i]='\0'; } //-----Verifica si es un operador int sim(char s){ v=0; for(i=0;i<4;i++){ for(j=0;j<2;j++){ if(s==Simb[i][j]){ v=1; } } } return(v); } //-----Verifica la prioridad para colocar en la pila int prio(char s1, char s2){ int p1, p2; p1=p2=0; for(i=0;i<4;i++){ for(j=0;j<2;j++){ if(s1==Simb[i][j]){ p1=i; } if(s2==Simb[i][j]){ p2=i; } } } if(p1<p2){ i=-1; } else{ if(p1==p2){ i=0; } else{ i=1; } } return(i); } //-----Invierte la función completa void inver(char a[], char b[]){ int x=tama(b); n=0; for(i=(x-1);i>=0;i--){ simb=b[i]; if(simb==')'){ a[n]='('; } else{ if(simb=='('){ a[n]=')'; } else{ a[n]=simb; } } n++; } } |
|
#4
|
||||
|
||||
|
Pues sí es largo, sí. La próxima vez utiliza las etiquetas [code]...[/code], que quedará mejor. Mira (pulsa el botón "Citar", abajo a la derecha, para que veas cómo se utiliza):
Código:
//-----Dependencias
#include <stdio.h>
#include <conio.h>
//-----Declaración de funciones
void limpiar(char[],int), pasar(char[],char[]),
conv_pre(char[],char[]), conv_pos(char[],char[]),
rec_exp(char[]), inver(char[],char[]);
int verif(char[]), tama(char[]), sim(char),
prio(char,char);
//-----Variables globales
char Simb[4][2]={{'(',')'},{'-','+'},{'/','*'},{'$','\0'}},
expr[50], pila[50], expr_c[50], epre[50], epos[50],
elem, simb;
int i, j, n, tope, val, cont1, cont2, v;
//-----Inicio del programa
main(){
clrscr();
limpiar(expr,50);
limpiar(pila,50);
limpiar(expr_c,50);
limpiar(epre,50);
limpiar(epos,50);
do{
printf("Introduzca la expresión infija: ");
for(i=0;(expr[i]=getchar())!='\n';++i);
if(expr[i]=='\n'){
expr[i]='\0';
}
if(verif(expr)!=3){
printf("\nLa expresión %s no es valida, ",expr);
switch(verif(expr)){
case 0: printf("esta mal la función.");
case 1: printf("le faltan paréntesis derechos.");
case 2: printf("le faltan paréntesis izquierdos.");
}
getche();
clrscr();
}
}while(verif(expr)!=3);
inver(expr_c,expr);
conv_pre(expr_c,epre);
printf("\nLa conversión a Prefija es: %s",epre);
pasar(expr_c,expr);
conv_pos(expr_c,epos);
printf("\nLa conversión a Posfija es: %s",epos);
getche();
}
//-----Limpia la variable
void limpiar(char a[], int n){
for(i=0;i<n;i++){
a[i]='\0';
}
}
//-----Pasa de una variable a otra
void pasar(char a[], char b[]){
int n1, n2;
n1=tama(a);
n2=tama(b);
if(n1>n2){
for(i=0;i<n1;i++){
a[i]=b[i];
}
}
if(n1<n2){
for(i=0;i<n2;i++){
a[i]=b[i];
}
}
}
//-----Cuenta cuantos caracteres hay en la variable
int tama(char var[]){
for(n=0;var[n]!='\0';++n);
return(n);
}
//-----Verifica si no le faltan paréntesis a la función
int verif(char ex[]){
val=0;
n=tama(ex);
if(n>0){
tope=0;
cont1=cont2=0;
for(i=0;i<n;i++){
elem=ex[i];
if(elem=='('){
pila[tope]=elem;
tope+=1;
pila[tope]='\0';
}
else{
if(elem==')'){
if(tope>0){
if(pila[tope-1]=='('){
tope-=1;
pila[tope]='\0';
}
}
else{
pila[tope]=elem;
tope+=1;
pila[tope]='\0';
}
}
}
}
if(tope>0){
for(i=0;i<tope;i++){
if(pila[i]=='('){
cont1+=1;
}
if(pila[i]==')'){
cont2+=1;
}
}
if(cont1<cont2){
val=2;
}
if(cont1>cont2){
val=1;
}
}
else{
val=3;
}
}
else{
val=0;
}
return(val);
}
//-----Conversión de la función a prefija
void conv_pre(char ex[], char epre[]){
char expre[50];
limpiar(expre,50);
conv_pos(ex,expre);
inver(epre,expre);
}
//-----Conversión de la función a postfija
void conv_pos(char ex[], char epos[]){
tope=-1;
n=tama(ex);
while(ex[0]!='\0'){
simb=ex[0];
rec_exp(ex);
n-=1;
if(simb=='('){
tope+=1;
pila[tope]=simb;
}
else{
if(simb==')'){
while(pila[tope]!='('){
int x=tama(epos);
epos[x]=pila[tope];
pila[tope]='\0';
tope-=1;
}
pila[tope]='\0';
tope-=1;
}
else{
if(sim(simb)==0){
int x=tama(epos);
epos[x]=simb;
}
else{
if(tama(pila)>0){
while(prio(simb,pila[tope])<=0){
int x=tama(epos);
epos[x]=pila[tope];
pila[tope]='\0';
tope-=1;
if(tope<0){
break;
}
}
}
tope+=1;
pila[tope]=simb;
}
}
}
}
while(tope>=0){
int x=tama(epos);
epos[x]=pila[tope];
pila[tope]='\0';
tope-=1;
}
}
//-----Recorre los caracteres un lugar
void rec_exp(char a[]){
int x=tama(a);
for(i=0;i<(x-1);i++){
a[i]=a[i+1];
}
a[i]='\0';
}
//-----Verifica si es un operador
int sim(char s){
v=0;
for(i=0;i<4;i++){
for(j=0;j<2;j++){
if(s==Simb[i][j]){
v=1;
}
}
}
return(v);
}
//-----Verifica la prioridad para colocar en la pila
int prio(char s1, char s2){
int p1, p2;
p1=p2=0;
for(i=0;i<4;i++){
for(j=0;j<2;j++){
if(s1==Simb[i][j]){
p1=i;
}
if(s2==Simb[i][j]){
p2=i;
}
}
}
if(p1<p2){
i=-1;
}
else{
if(p1==p2){
i=0;
}
else{
i=1;
}
}
return(i);
}
//-----Invierte la función completa
void inver(char a[], char b[]){
int x=tama(b);
n=0;
for(i=(x-1);i>=0;i--){
simb=b[i];
if(simb==')'){
a[n]='(';
}
else{
if(simb=='('){
a[n]=')';
}
else{
a[n]=simb;
}
}
n++;
}
}
).
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi! - BAScript - Multi Language Scriptable Development Environment |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Crear aviso "Espere unos minutos" durante operacion con mucha carga de CPU . AYUDA | Cheerpipe | Varios | 7 | 18-01-2007 19:32:38 |
| Ayuda con programa de chat en delphi | zanyodark | Internet | 6 | 17-09-2006 20:25:24 |
| Ayuda En Login Y Pass Para Ingresar En un programa creado en Delphi | Solojuegospc.tk | Conexión con bases de datos | 8 | 07-07-2005 03:18:28 |
| Ejecutar un programa externo desde un programa de Delphi | Roger_Fernandez | Varios | 3 | 02-09-2004 18:05:36 |
| Ayuda con programa de C | megadanzig | C++ Builder | 7 | 19-03-2004 19:26:48 |
|