PDA

Ver la versiˇn completa : Pregunta sobre C...



Flopis
15-05-2002, 18:08
Soy muy nuevo en esto dl C y estaba mirando las funciones para evaluar lo q hay en pantalla tipo scanf() y os cuento mi duda..

Cˇmo hacer para q cuando pongas el sÝmbolo + u otro cualquiera se almacene en una variable?

Por ejemplo para un n║ lo haces con:

scanf ("%i",&variable);

Pues lo mismo pero para un operador...

Gracias de antemano..

UN saludo

eXcalibur
15-05-2002, 18:14
Aunque hace un a˝o que no toco el C, te puedo decir que lo que pones despues de "%" es el tipo de dato que vas a recoger, es decir, %i integer
Para characters era %s o %c (uno de estos dos), porque el simbolo "+" lo tienes que tratar como caracter.
Que, haciendo la calculadora no???? jajaja

Flopis
15-05-2002, 19:02
Bueno muchas graicas... y ahora viene la siguiente duda :P

Cuando recoges el + con el scanf(%c,&a) oki?

Pues a ver.. como hago la condiciˇn de q si es + sume?

if ( a == +)
esto no va.. y si lo pongo "+" tmp va... en fin..
q mi calculadora es un poco cutre :P

Si alguien me ilumina.. pq llevo 2 dias y no doy con la soluciˇn.. :(

Un saludo

Giskard
15-05-2002, 19:36
Aqui te dejo un codigo fuente de una calculadora, aunque estß un poco compleja, para entenderle necesitas saber de classes, objetos, herencias, etc.
// Martínez Carranza Benigno
// ITA 33
// 7ž Semestre


#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
#include <iomanip.h>

#define tamano 100

class datos {

private:

struct pila_cola {
char token[25]; // espacios para número u operador
char priority[15];
char type[15];
} oper [tamano],temp [tamano],sufija [tamano];

struct varia {
char nombre[25];
double valor;
} variable [tamano];

double valores[tamano], x, y, resultado, ans, pi;
int topoper,toptemp,topsufija,puntsufija,topcopia,topv ariable,topval;
char formula[255], elemento[25], prioridad[15], tipo[15], finderecha,
angulo, asigna[25], tokens [100][15];

void cg(char etiqueta[]);

void pushoper(char item[], char rango[], char etiqueta[]);//pila
void popoper(char item[], char rango[], char etiqueta[]);

//pila||cola : pila por arriba..., cola por abajo...
void pushtemp(char como[], char item[], char rango[], char etiqueta[]);
void poptemp(char como[], char item[], char rango[], char etiqueta[]);

void pushsufija(char item[], char rango[], char etiqueta[]); //cola
void popsufija(char item[], char rango[], char etiqueta[]);

void pushval(double v); //pila
void popval(double *v);

void acomodar(); //En forma polaca inversa
void explora();

void signo();
void potencia();
void xrooty();
void logneperiano();
void logbriggs();
void antlogneperiano();
void antlogbriggs();
void seno();
void coseno();
void tangente();
void arcoseno();
void arcocoseno();
void arcotangente();
void raiz();
void cuadrado();
void inv();
void factorial();
void multiplicacion();
void division();
void suma();
void resta();
void asignacion();

public:
void inicia();
void funciones(int pos);//despliegue de funciones implementadas...

void clear(); //pilas y colas
void clvar(); //variables

void captura(); //captura la fórmula
void captvar(); //para hacer captura de variables

void evalua(); //evalua la fórmula
void result(); //muestra el resultado...
void desglosa(); //muestra la forma polaca...
};

void datos::cg(char etiqueta[]){
static int n=-1;
strcpy(tokens[++n],etiqueta);
return;
}

void datos::inicia(){
x=0.0;
y=0.0;
resultado=0.0;
ans=0.0;
pi=3.141592653589793238462643;
topoper=-1;
toptemp=-1;
topsufija=-1;
puntsufija=-1;
topcopia=-1;
topvariable=0;
topval=-1;
finderecha='\0';
angulo='g';
cg("■"); cg("0"); cg("utilería");
cg("("); cg("1"); cg("izquierdo");
cg("["); cg("1"); cg("izquierdo");
cg("{"); cg("1"); cg("izquierdo");
cg(")"); cg("1"); cg("derecho");
cg("]"); cg("1"); cg("derecho");
cg("}"); cg("1"); cg("derecho");

cg("˝"); cg("2"); cg("unitario");// signo menos [Alt-241]

cg("^"); cg("3"); cg("binario");// potencia [Alt-94]
cg("ę"); cg("3"); cg("binario");// raiz universal [Alt-169]
cg("LN"); cg("3"); cg("unitario");
cg("LOG"); cg("3"); cg("unitario");// logaritmo base 10
cg("EXP"); cg("3"); cg("unitario");// antilogaritmo natural
cg("ALOG"); cg("3"); cg("unitario");// antilogaritmo base 10
cg("SEN"); cg("3"); cg("unitario");
cg("COS"); cg("3"); cg("unitario");
cg("TAN"); cg("3"); cg("unitario");
cg("ASEN"); cg("3"); cg("unitario");
cg("ACOS"); cg("3"); cg("unitario");
cg("ATAN"); cg("3"); cg("unitario");
cg("RAIZ"); cg("3"); cg("unitario");
cg("CUAD"); cg("3"); cg("unitario");
cg("INV"); cg("3"); cg("unitario");
cg("!"); cg("3"); cg("unitario");

cg("*"); cg("4"); cg("binario");
cg("/"); cg("4"); cg("binario");

cg("+"); cg("5"); cg("binario");
cg("-"); cg("5"); cg("binario");

cg("="); cg("6"); cg("binario");
return;
}

void datos::funciones(int pos){
clrscr();
gotoxy(35,pos); cout<<"FUNCIONES";
gotoxy(6,pos+2); cout<<"paréntesis () {} []";
gotoxy(6,pos+3); cout<<"signo menos ˝ [Alt-241]";
gotoxy(6,pos+4); cout<<"potencia ^ [Alt-94 ]";
gotoxy(6,pos+5); cout<<"raiz universal ę [Alt-169]";
gotoxy(6,pos+6); cout<<"log natural LN";
gotoxy(6,pos+7); cout<<"log base 10 LOG";
gotoxy(6,pos+8); cout<<"antilogaritmo natural EXP";
gotoxy(6,pos+9); cout<<"antilogaritmo base 10 ALOG";
gotoxy(6,pos+10); cout<<"raiz cuadrada RAIZ";
gotoxy(6,pos+11); cout<<"cuadrado CUAD";
gotoxy(6,pos+12); cout<<"factorial !";
gotoxy(6,pos+13); cout<<"resultado anterior ANS";
gotoxy(6,pos+14); cout<<"borrar pilas y colas CLEAR";
gotoxy(6,pos+15); cout<<"Grados / Radianes ANG";
gotoxy(6,pos+16); cout<<" ";


gotoxy(53,pos+2); cout<<"seno SEN";
gotoxy(53,pos+3); cout<<"coseno COS";
gotoxy(53,pos+4); cout<<"tangente TANG";
gotoxy(53,pos+5); cout<<"arco seno ASEN";
gotoxy(53,pos+6); cout<<"arco coseno ACOS";
gotoxy(53,pos+7); cout<<"arco tangente ATAN";
gotoxy(53,pos+8); cout<<"inverso INV";
gotoxy(53,pos+9); cout<<"multiplicación *";
gotoxy(53,pos+10);cout<<"división /";
gotoxy(53,pos+11);cout<<"suma +";
gotoxy(53,pos+12);cout<<"resta -";
gotoxy(53,pos+13);cout<<"asignación =";
gotoxy(53,pos+14);cout<<"borrar variables CLVAR";
gotoxy(53,pos+15);cout<<"mostrar variables VAR";
gotoxy(53,pos+16);cout<<"salir EXIT";
return;
}

void datos::pushoper(char item[], char rango[], char etiqueta[]){
if (topoper<tamano)
{
topoper++;
strcpy(oper[topoper].token,item);
strcpy(oper[topoper].priority,rango);
strcpy(oper[topoper].type,etiqueta);
}
else cout<<"\nPila Oper llena.";
return;
}

void datos::popoper(char item[], char rango[], char etiqueta[]){
if (topoper>-1)
{
strcpy(item,oper[topoper].token);
strcpy(rango,oper[topoper].priority);
strcpy(etiqueta,oper[topoper].type);
topoper--;
}
else cout<<"\nNo hay elementos en la pila Oper.";
return;
}

void datos::pushtemp(char como[], char item[], char rango[], char etiqueta[]){
int i;
if (strcmp (como,"pila")==0)
{
if (toptemp<tamano)
{
toptemp++;
strcpy(temp[toptemp].token,item);
strcpy(temp[toptemp].priority,rango);
strcpy(temp[toptemp].type,etiqueta);
}
else cout<<"\nCola|Pila Temp llena.";
}
else if (strcmp (como,"cola")==0)
{
if (toptemp<tamano)
{
i=++toptemp;
while(i>0)
{
strcpy(temp[i].token,temp[i-1].token);
strcpy(temp[i].priority,temp[i-1].priority);
strcpy(temp[i].type,temp[i-1].type);
i--;
}
strcpy(temp[0].token,item);
strcpy(temp[0].priority,rango);
strcpy(temp[0].type,etiqueta);
}
else cout<<"\nCola|Pila Temp llena.";
}
return;
}

void datos::poptemp(char como[], char item[], char rango[], char etiqueta[]){
int i;
if (strcmp (como,"cola")==0)
{
if (toptemp>-1)
{
strcpy(item,temp[0].token);
strcpy(rango,temp[0].priority);
strcpy(etiqueta,temp[0].type);
for (i=1; i<toptemp+1; i++)
{
strcpy(temp[i-1].token,temp[i].token);
strcpy(temp[i-1].priority,temp[i].priority);
strcpy(temp[i-1].type,temp[i].type);
}
toptemp--;
}
else cout<<"\nNo hay elementos en la Cola Temp.";
}
else if (strcmp (como,"pila")==0)
{
if (toptemp>-1)
{
strcpy(item,temp[toptemp].token);
strcpy(rango,temp[toptemp].priority);
strcpy(etiqueta,temp[toptemp].type);
toptemp--;
}
else cout<<"\nNo hay elementos en la pila Temp.";
}
return;
}

void datos::pushsufija(char item[], char rango[], char etiqueta[]){
if (topsufija<tamano)
{
topsufija++;
strcpy(sufija[topsufija].token,item);
strcpy(sufija[topsufija].priority,rango);
strcpy(sufija[topsufija].type,etiqueta);
}
else cout<<"\nCola Sufija llena.";
return;
}

//esta cola ser permanente pues aquí estar guardada la cola polaca...
void datos::popsufija(char item[], char rango[], char etiqueta[]){
if (topsufija>-1&&puntsufija<=topsufija)
{
puntsufija++;
strcpy(item,sufija[puntsufija].token);
strcpy(rango,sufija[puntsufija].priority);
strcpy(etiqueta,sufija[puntsufija].type);
}
else cout<<"\nNo hay elementos en la Cola Sufija.";
return;
}

void datos::pushval(double v){
if (topval<tamano)
{
topval++;
valores[topval]=v;
}
else cout<<"\nPila de Valores llena";
return;
}

void datos::popval(double *v){
if (topval>-1)
{
*v=valores[topval];
valores[topval]=0.0;
topval--;
}
else cout<<"\n Error de SUMAS DINÁMICAS : no hay ELEMENTO en la pila de valores...";
return;
}

void datos::acomodar(){
char op, existe;

while (toptemp>-1)
{
poptemp("cola",elemento,prioridad,tipo);existe='\1';
if (strcmp (tipo, "argumento")==0) op=0;
else if (strcmp (tipo, "unitario")==0) op=1;
else if (strcmp (tipo, "binario")==0) op=1;
else if (strcmp (tipo, "izquierdo")==0) op=2;
else if (strcmp (tipo, "derecho")==0) op=3;
else op=5; //para default
switch(op)
{
case 0: pushsufija(elemento,prioridad,tipo); //argumento
break;
case 1:do //no se necesita distinción entre operadores unitarios-binarios
{
if (topoper<0) finderecha='1';
else if (strcmp(oper[topoper].type,"izquierdo")==0) finderecha='1';
// SI SON DE PRIORIDAD 3 [UNITARIOS], SE EVALÚAN DE DERECHA A IZQUIERDA
// DE LO CONTRARIO DE EVALÚAN DE IZQUIERDA A DERECHA.
else if ( (strcmp(oper[topoper].priority,prioridad)==0)&&(strcmp(prioridad,"3")==0) )
{ if (strcmp(oper[topoper].priority,prioridad)>=0) finderecha='1';} // se puede poner solo finderecha='1', omitiendo el if... se pierde de vista que >=0 evalua de der a izq
else if (strcmp(oper[topoper].priority,prioridad)>0) finderecha='1'; // izq a der
else
{
if (existe)
{
pushtemp("cola",elemento,prioridad,tipo); // resguarda el operador en temp metiendolo como si no fuera aun extraido
existe='\0';
}
finderecha='\0';
popoper(elemento,prioridad,tipo);
pushsufija(elemento,prioridad,tipo);
if (topoper>-1) popoper(elemento,prioridad,tipo);
else
{
poptemp("cola",elemento,prioridad,tipo);
existe='\1';
}
}
}
while (finderecha!='1');
// el break de case 2 trabaja pushoper(),común a case 1 y case 2
case 2: pushoper(elemento,prioridad,tipo); // izquierdo
break;
case 3: popoper(elemento,prioridad,tipo); // derecho
while ((strcmp(tipo,"izquierdo"))!=0)
{
pushsufija(elemento,prioridad,tipo);
popoper(elemento,prioridad,tipo); // para descartar izquierdo
}
break;
default: cout<<"\nTIPO NO PROCESADO. "<<elemento<<" "<<prioridad<<" "<<tipo;
getch();
} //˙˙˙˙˙˙˙˙˙˙˙˙switch(op)˙˙˙˙˙˙˙˙˙˙˙˙
} //˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙while (toptemp>-1)˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙

if (finderecha=='f')
while (topoper>-1)
{
popoper(elemento,prioridad,tipo);
pushsufija(elemento,prioridad,tipo);
}
return;
}//˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙void acomodar()˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙

void datos::signo(){
popval(&x);
resultado=-x;
pushval(resultado);
return;
}

void datos::potencia(){ // tener en cuenta que valores se trabaja como pila
popval(&y); // base-exponente
popval(&x);
resultado=pow(x,y);
pushval(resultado);
return;
}

void datos::xrooty(){
//double residuo,entero,fraccion;
//int i,ban=0;
popval(&y); // raiz-argumento
popval(&x);
//fraccion=modf(y,&entero);
//fraccion=modf((valor/base),&cociente);
//residuo =y-cociente*2;
//if((y<0)and())
resultado=1/x;
resultado=pow(y,resultado);
pushval(resultado);
return;
}

void datos::logneperiano(){
popval(&x);
resultado=log(x);
pushval(resultado);
return;
}

void datos::logbriggs(){
popval(&x);
resultado=log10(x);
pushval(resultado);
return;
}

void datos::antlogneperiano(){
popval(&x);
resultado=exp(x);
pushval(resultado);
return;
}

void datos::antlogbriggs(){
popval(&x);
resultado=pow(10,x);
pushval(resultado);
return;
}

void datos::seno(){
double radianes;

popval(&x);
if (angulo!='r') radianes=pi*x/180;
else radianes=x;
resultado=sin(radianes);
pushval(resultado);
return;
}

void datos::coseno(){
double radianes;

popval(&x);
if (angulo!='r') radianes=pi*x/180;
else radianes=x;
resultado=cos(radianes);
pushval(resultado);
return;
}

void datos::tangente(){
double radianes;

popval(&x);
if (angulo!='r') radianes=pi*x/180;
else radianes=x;
resultado=tan(radianes);
pushval(resultado);
return;
}

void datos::arcoseno(){
popval(&x);
resultado=asin(x);
if (angulo!='r') resultado=180*resultado/pi;
pushval(resultado);
return;
}

void datos::arcocoseno(){
popval(&x);
resultado=acos(x);
if (angulo!='r') resultado=180*resultado/pi;
pushval(resultado);
return;
}

void datos::arcotangente(){
popval(&x);
resultado=atan(x);
if (angulo!='r') resultado=180*resultado/pi;
pushval(resultado);
return;
}

void datos::raiz(){
popval(&x);
resultado=sqrt(x);
pushval(resultado);
return;
}

void datos::cuadrado(){
popval(&x);
resultado=pow(x,2);
pushval(resultado);
return;
}

void datos::inv(){
popval(&x);
resultado=1/x;
pushval(resultado);
return;
}

void datos::factorial(){
double entero;
int i;

popval(&x);
y=modf(x,&entero);

resultado=1;
for (i=2; i<entero+1; i++) resultado*=i;

pushval(resultado);
return;
}

void datos::multiplicacion(){
popval(&y);
popval(&x);
resultado=x*y;
pushval(resultado);
return;
}

void datos::division(){
popval(&y);
popval(&x);
resultado=x/y;
pushval(resultado);
return;
}

void datos::suma(){
popval(&y);
popval(&x);
resultado=x+y;
pushval(resultado);
return;
}

void datos::resta(){
popval(&y);
popval(&x);
resultado=x-y;
pushval(resultado);
return;
}

void datos::asignacion(){
int i;
char encontrada='\0';

popval(&x);

for (i=0; i<=topvariable; i++)
if (strcmp(asigna,variable[i].nombre)==0) {
variable[i].valor=x;
encontrada='\1';
break;
};

if (encontrada=='\0')
{
topvariable++;
strcpy(variable[topvariable].nombre,asigna);
variable[topvariable].valor=x;
}

resultado=x;
pushval(resultado);
return;
} // asignacion

void datos::clear(){
int i;
for (i=0; i<tamano+1; i++)
{
oper[i].token[0]='\0';
oper[i].priority[0]='\0';
oper[i].type[0]='\0';
temp[i].token[0]='\0';
temp[i].priority[0]='\0';
temp[i].type[0]='\0';
sufija[i].token[0]='\0';
sufija[i].priority[0]='\0';
sufija[i].type[0]='\0';
valores[i]=0.0;
}
// clvar(); poner si se quieren borrar ala vez las variables también
topoper=-1;
toptemp=-1;
topsufija=-1;
puntsufija=-1;
topval=-1;
return;
}

void datos::clvar(){
int i;
for (i=0; i<tamano+1; i++)
{
variable[i].nombre[0]='\0';
variable[i].valor=0.0;
}
topvariable=0;
return;
}

void datos::captura(){
int L,i,cont,parentesis=0;
char cadena[255]="", bandera='\0';

do
{
parentesis=0;
bandera='\0';
clreol();
cout<<"\n\n Digite la fórmula : ";
cin>>cadena;
L=strlen(cadena);

for( i=0 ; i<L; i++ )
if ((cadena[i]=='(')||(cadena[i]=='{')||(cadena[i]=='[')) parentesis++;
else if ((cadena[i]==')')||(cadena[i]=='}')||(cadena[i]==']')) parentesis--;

if (parentesis!=0)
{
cout<<"\n Error : Los paréntesis no est n balanceados, verificar fórmula...\n";
bandera='\1';
}
}
while (bandera=='\1');

cont=-1;
for( i=0 ; i<L; i++ )
{
if ( (cadena[i]!='\0')&&( (isalnum(cadena[i])!=0)
||(cadena[i]=='(')||(cadena[i]==')')
||(cadena[i]=='{')||(cadena[i]=='}')
||(cadena[i]=='[')||(cadena[i]==']')
||(cadena[i]=='˝')||(cadena[i]=='^')
||(cadena[i]=='ę')||(cadena[i]=='=')
||(cadena[i]=='!')||(cadena[i]=='.')
||(cadena[i]=='*')||(cadena[i]=='/')
||(cadena[i]=='+')||(cadena[i]=='-') ) )
{
cont++;
formula[cont]=cadena[i];
formula[cont+1]='\0';
} //if
else bandera='\1';
} //for

strupr(formula);
if (bandera=='\1') cout<<"\n SE SUPRIMIERON CARACTERES NO RECONOCIBLES : \n"<<formula;
explora();
return;
}//˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙captura˙˙˙˙˙˙˙˙˙˙ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙

void datos::captvar(){
int cont=0;
char ban='\0';

cout<<" Variables n/s : ";
ban=tolower(getch());
gotoxy(1,wherey());clreol();
if (ban=='s')
do
{
cout<<"\nNombre de la variable : ";cin>>variable[cont].nombre;
cout<<"Valor de la variable : ";cin>>variable[cont].valor;
strupr(variable[cont].nombre);
cont++;
topvariable++;
cout<<" otra variable n/s : ";ban=tolower(getch());
gotoxy(1,wherey());clreol();
}
while (ban=='s');
return;
}

void datos::explora(){
int L,i,cont,p;
char cadena[255]="",cad[255]="",extrae[1]="";

L=strlen(formula);

finderecha='\0';

cont=-1;
for( i=0 ; i<L; i++ )
{
cont++;
cadena[cont]=formula[i]; cadena[cont+1]='\0';
if (cont>0) cad[cont-1]=cadena[cont-1]; cad[cont]='\0';//guarda cadena antes de un token
extrae[0]=formula[i]; extrae[1]='\0';

p=0;
do
{
if (!strcmp (tokens[p], extrae))
{
if (cont>0)
{
if ( (strcmp(tokens[p],"˝")==0) && (cad[cont-1]=='E') ) { cadena[cont]='-';break; }
else pushtemp("pila" ,cad, "|", "argumento"); // ARGUMENTOS
}
pushtemp("pila", extrae, tokens[p+1], tokens[p+2]); // OPERADORES
cont=-1; // PARA REINICIAR CADENA A NULO ...
break;
}
else
if (!strcmp (tokens[p], cadena))
{
pushtemp("pila", cadena, tokens[p+1], tokens[p+2]); // OPERADORES
cont=-1; // PARA REINICIAR CADENA A NULO ...
break;
}
p = p+3;
}
while (p<=87) ;
acomodar();
}//˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙for( i=0 ; i<L; i++ )˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙

if (p>87) pushtemp("pila", cadena, "|", "argumento"); // ARGUMENTOS
finderecha='f';
acomodar();
return;
}//˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙explora˙˙˙˙˙˙˙˙˙˙ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙

int ban_rep=1; // variable para poder salir del ciclo, visible de aquí en adelante...

void datos::evalua(){
int i;
char bandera='\0';

puntsufija=-1; // restablece el puntero de la cola sufija

while (topsufija>-1&&puntsufija<=topsufija)
{
bandera='\0';
popsufija(elemento,prioridad,tipo);

if ( strcmp(tipo,"argumento")==0)
{
if (strcmp(elemento,"EXIT")==0) { ban_rep=0;return; }
else if (strcmp(elemento,"CLEAR")==0) { clear(); return; }
else if (strcmp(elemento,"CLVAR")==0) { clvar(); return; }
else if (strcmp(elemento,"VAR")==0) {
cout<<"\n";
for (i=1; i<=topvariable; i++)
cout<<"| "<<variable[i].nombre<<" "<<variable[i].valor<<" |";
return;
}
else if (strcmp(elemento,"PI")==0) pushval(pi);
else if (strcmp(elemento,"ANS")==0) pushval(ans);
else if (strcmp(elemento,"ANG")==0){
if (angulo=='g') angulo='r';
else angulo='g';
return;
}
else if (strcmp(elemento,"EXIT")==0) exit(1);
else if (strcmp(sufija[topsufija].token,"=")==0 && puntsufija==0) strcpy(asigna,elemento);
else {
for (i=0; i<=topvariable; i++)
if (strcmp(elemento,variable[i].nombre)==0) {
pushval(variable[i].valor);
bandera='\1';
break;
}
if (bandera=='\0') pushval(atof(elemento));
}
} // "argumento"
else if ( strcmp(elemento,"˝")==0) signo();
else if ( strcmp(elemento,"^")==0) potencia();
else if ( strcmp(elemento,"ę")==0) xrooty();
else if ( strcmp(elemento,"LN")==0) logneperiano();
else if ( strcmp(elemento,"LOG")==0) logbriggs();
else if ( strcmp(elemento,"EXP")==0) antlogneperiano();
else if ( strcmp(elemento,"ALOG")==0) antlogbriggs();
else if ( strcmp(elemento,"SEN")==0) seno();
else if ( strcmp(elemento,"COS")==0) coseno();
else if ( strcmp(elemento,"TAN")==0) tangente();
else if ( strcmp(elemento,"ASEN")==0) arcoseno();
else if ( strcmp(elemento,"ACOS")==0) arcocoseno();
else if ( strcmp(elemento,"ATAN")==0) arcotangente();
else if ( strcmp(elemento,"RAIZ")==0) raiz();
else if ( strcmp(elemento,"CUAD")==0) cuadrado();
else if ( strcmp(elemento,"INV")==0) inv();
else if ( strcmp(elemento,"!")==0) factorial();
else if ( strcmp(elemento,"*")==0) multiplicacion();
else if ( strcmp(elemento,"/")==0) division();
else if ( strcmp(elemento,"+")==0) suma();
else if ( strcmp(elemento,"-")==0) resta();
else if ( strcmp(elemento,"=")==0) asignacion();
//˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙fUNCIONES˙˙˙˙˙˙˙˙˙ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙
} /*while (topsufija>-1)*/
if (topval>0) cout<<"\n Error de SUMAS DINÁMICAS : quedaron ELEMENTOS en la pila de valores...";
else if (topval==0) { popval(&resultado); ans=resultado;}
else cout<<"\n Error de SUMAS DINÁMICAS : no hay ELEMENTO en la pila de valores...";
return;
}//˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ evalua()˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙

void datos::result(){
cout<<" = "<<setprecision(15)<<resultado;
return;
}

void datos::desglosa(){
puntsufija=-1; // restablece el puntero de la cola sufija
while (topsufija>-1&&puntsufija<=topsufija){
popsufija(elemento,prioridad,tipo);
cout<<" "<<elemento;
};
return;
}

main(){ //˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙main˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ ˙˙˙˙˙˙˙˙˙˙
datos mitote; // crea objeto...
mitote.inicia(); // inicia los valores default del objeto
mitote.funciones(1); // muestra las funciones disponibles
do{
mitote.clear(); // borra las pilas y colas del objeto...
cout<<" ";
mitote.captura(); // captura la fórmula...
mitote.evalua(); // evalua la fórmula...
mitote.desglosa(); // muestra la forma polaca inversa...
mitote.result(); // muestra el resultado...
} while (ban_rep);
return 0;
}
//----------------------------------FIN--------------------------------------

Clase
15-05-2002, 22:10
Hola!

+ es un caracter por lo que tienes que tratarle como tal, es decir

if (a=='+') (con comillas simples porque es un caracter, si llega a ser una cadena, serÝan comillas dobles).

Bye!

Flopis
16-05-2002, 00:31
Gracias a los 3 por todo ;)

Luego os cuento como ha ido..

Thx por el codigo.. lo irÚ estudiando poco a poco


Un saludo

eXcalibur
16-05-2002, 09:36
TambiÚn te valdrÝa el codigo ascii, es decir, si el + es 34 (que seguro no lo es) podrias preguntar por
if (var==34)
{
}

Jakofff
16-05-2002, 20:05
para el ke tu kondicion funcione pones entre las komillas ' ' el karakter y es tratado asi!

un TIP: para saber ke korresponde al kodigo ASCII kada tekla pulsar CTRL+k y en seguida la tekla ke kiere saber! imprimira el karakter korrespondiente al ke se kiera saber!

ejemplo: CTRL+K Flecha arriba = P

salu2

aguscaba
16-12-2005, 09:35
Aqui te dejo un codigo fuente de una calculadora, aunque estß un poco compleja, para entenderle necesitas saber de classes, objetos, herencias, etc.
// Martínez Carranza Benigno
// ITA 33
// 7ž Semestre


#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
#include <iomanip.h>
.
.
.


Oye amigo giskard tu programa quiza lo estoy usando mal pero me marca error dice cola sufija llena con solo ponerle 5+6 :(

tiene error o lo estoy usando mal? :p

nota: ya corregi lo de las caritas y la variable topv ariable que no llevaba espacio para que corra pero aun asi no logro hacer que haga operaciones :confused:

SxR
16-12-2005, 11:15
giskard, usa las etiquetas CODE cuando pongas algo como eso para evitar posibles errores.

talien
19-12-2005, 05:05
Hola!

+ es un caracter por lo que tienes que tratarle como tal, es decir

if (a=='+') (con comillas simples porque es un caracter, si llega a ser una cadena, serÝan comillas dobles).

Bye!


Una aclaracion en esta parte: Cuando se trata de cadenas de caracteres no se usa if(a=="cadena") si no if(strcmp(a,"cadena")==0). Claro si previamente cadena estß definido como tipo char*. Solo queria hacer esa peque˝a acotacion.... :confused:

Aprendiz18
01-02-2006, 15:57
hooolas soy nuevo y me gustaria saber todo sobre como ser un hacker ya que los encuentro GENIALES

SxR
01-02-2006, 16:05
Aprendiz, eso te parece una pregunta coherente?

Aprendiz18
01-02-2006, 16:14
eres bastante mala onda

Aprendiz18
01-02-2006, 16:16
la verdad es que quiero saber como crear un troyano

Marchi
01-02-2006, 16:47
SxR tiene razon, leete esto:
http://www.sindominio.net/ayuda/preguntas-inteligentes.html

Sabes algun lenguaje de programacion?
Tenes idea de como funciona un troyano?

Chau saludos

PD: te fijaste la fecha del ultimo post en este hilo y que ademas no tiene nada que ver con el tema que se venia tratando? Para eso tenes la posibilidad de empezar nuevos threads.