Resultados 1 al 16 de 16

Pregunta sobre C...

  1. #1 Pregunta sobre C... 
    Iniciado
    Fecha de ingreso
    Feb 2002
    Ubicación
    Mallorca
    Mensajes
    19
    Descargas
    0
    Uploads
    0
    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
    Flopis SID powered!
    Citar  
     

  2. #2 Hola 
    Administrador Foros HH
    Fecha de ingreso
    Mar 2002
    Mensajes
    3.067
    Descargas
    5
    Uploads
    0
    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
    Citar  
     

  3. #3 jeje si.. 
    Iniciado
    Fecha de ingreso
    Feb 2002
    Ubicación
    Mallorca
    Mensajes
    19
    Descargas
    0
    Uploads
    0
    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
    Flopis SID powered!
    Citar  
     

  4. #4  
    Moderador HH
    Fecha de ingreso
    Feb 2002
    Ubicación
    México
    Mensajes
    1.156
    Descargas
    4
    Uploads
    0
    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:ushoper(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:opoper(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:ushtemp(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:optemp(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:ushsufija(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:opsufija(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:ushval(double v){
    if (topval<tamano)
    {
    topval++;
    valores[topval]=v;
    }
    else cout<<"\nPila de Valores llena";
    return;
    }

    void datos:opval(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:otencia(){ // 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--------------------------------------
    Mientras el mundo permanezca no acabarán la fama y la gloria de México-Tenochtitlan
    Citar  
     

  5. #5 Calculadora en C 
    Avanzado
    Fecha de ingreso
    Nov 2001
    Ubicación
    Internet
    Mensajes
    288
    Descargas
    0
    Uploads
    0
    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!
    S1 M1RaS f1j4m3nT3 L4 r3aLiDaD v3r4s l0s P1X3Ls
    Citar  
     

  6. #6 Muchas gracias a todos 
    Iniciado
    Fecha de ingreso
    Feb 2002
    Ubicación
    Mallorca
    Mensajes
    19
    Descargas
    0
    Uploads
    0
    Gracias a los 3 por todo

    Luego os cuento como ha ido..

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


    Un saludo
    Flopis SID powered!
    Citar  
     

  7. #7  
    Administrador Foros HH
    Fecha de ingreso
    Mar 2002
    Mensajes
    3.067
    Descargas
    5
    Uploads
    0
    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)
    {
    }
    Citar  
     

  8. #8 ups un poko tarde pero bueno! 
    Medio
    Fecha de ingreso
    Jan 2002
    Ubicación
    xxxxxxx
    Mensajes
    93
    Descargas
    0
    Uploads
    0
    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
    La Informacion es libre!!!
    Citar  
     

  9. #9  
    Iniciado
    Fecha de ingreso
    Dec 2005
    Mensajes
    1
    Descargas
    0
    Uploads
    0
    Cita Iniciado por Giskard
    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?

    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
    Citar  
     

  10. #10  
    Moderador HH
    Fecha de ingreso
    Dec 2001
    Ubicación
    Galiza
    Mensajes
    3.129
    Descargas
    0
    Uploads
    0
    giskard, usa las etiquetas CODE cuando pongas algo como eso para evitar posibles errores.
    Citar  
     

  11. #11  
    Iniciado
    Fecha de ingreso
    Dec 2005
    Mensajes
    4
    Descargas
    0
    Uploads
    0
    Cita Iniciado por Clase
    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....
    Citar  
     

  12. #12  
    Iniciado
    Fecha de ingreso
    Feb 2006
    Mensajes
    3
    Descargas
    0
    Uploads
    0
    hooolas soy nuevo y me gustaria saber todo sobre como ser un hacker ya que los encuentro GENIALES
    Citar  
     

  13. #13  
    Moderador HH
    Fecha de ingreso
    Dec 2001
    Ubicación
    Galiza
    Mensajes
    3.129
    Descargas
    0
    Uploads
    0
    Aprendiz, eso te parece una pregunta coherente?
    Citar  
     

  14. #14  
    Iniciado
    Fecha de ingreso
    Feb 2006
    Mensajes
    3
    Descargas
    0
    Uploads
    0
    eres bastante mala onda
    Citar  
     

  15. #15  
    Iniciado
    Fecha de ingreso
    Feb 2006
    Mensajes
    3
    Descargas
    0
    Uploads
    0
    la verdad es que quiero saber como crear un troyano
    Citar  
     

  16. #16  
    Moderador HH
    Fecha de ingreso
    Sep 2003
    Mensajes
    1.384
    Descargas
    21
    Uploads
    5
    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.
    Última edición por Marchi; 01-02-2006 a las 16:59
    - Me desagrada
    - ¿Por qué?
    - No estoy a su altura.
    ¿Ha respondido así alguna vez un hombre?

    Friedrich Nietzsche



    Citar  
     

Temas similares

  1. pregunta sobre Ms-2
    Por Collins en el foro INGENIERIA INVERSA
    Respuestas: 3
    Último mensaje: 24-12-2008, 17:07
  2. Pregunta sobre Linux... J8
    Por Dukersindo en el foro LINUX - MAC - OTROS
    Respuestas: 17
    Último mensaje: 04-10-2008, 19:30
  3. Pregunta sobre Wardialer
    Por alvaro4356 en el foro TELEFONIA
    Respuestas: 0
    Último mensaje: 19-01-2008, 10:22
  4. pregunta sobre digi plus
    Por pepelu_bcn46 en el foro DIGITAL+
    Respuestas: 20
    Último mensaje: 13-07-2007, 16:38
  5. Una pregunta sobre el MAC
    Por crackk en el foro LINUX - MAC - OTROS
    Respuestas: 4
    Último mensaje: 27-12-2006, 00:01

Marcadores

Marcadores