domingo, 5 de junho de 2011

Programa: Avaliação de Expressões Algébricas Simples.

Avaliação de Expressões Algébricas Simples

Linguagem: Java

Criador do código: Tiago Pereira dos Santos Silva .

Pais: Portugal

Cidade: Porto

Código:



import java.util.*;



class ppp{


public static void main(String[] args){

Scanner scan = new Scanner(System.in);

int flag=scan.nextInt();

int ne = scan.nextInt();

Expr e[]= new Expr[ne];

scan.nextLine();

for(int i =0;i

String linha =scan.nextLine();

e[i]=new Expr(linha);

}

for(int y =0;y

e[y].actualiza();

}

if(flag==-1){

System.out.println("programa do tiago pereira dos Santos Silva c0816030");

}else if(flag==1){

for(int t =0;t

System.out.println("Operacoes "+e[t].n_oper+" / Numeros "+e[t].n_n);

}

}else if(flag==2){

for(int i =0;i

e[i].ExprTree.print();

}

}else{

for(int i=0;i

System.out.println(e[i].computado_val);

}

}

}




}








class Expr{


int n_oper=0;

int n_n=0;

BTree ExprTree;

int computado_val;

String linha;

Expr(String line){

linha=line;

ExprTree = new BTree();

Scanner proc = new Scanner(linha);

while(proc.hasNext()){

String ricardo = proc.next();

if(ricardo.equals("+") || ricardo.equals("-") || ricardo.equals("*") || ricardo.equals("/")){

n_oper++;

}else{

n_n++;

}

}

}




public void actualiza(){

Scanner in = new Scanner(linha);

ExprTree.insert(in);

computado_val=ExprTree.computar();

}


}










class BTNode{

Object val;

char charr='\0';

int vall=0;

BTNode esq;

BTNode dir;

BTNode(Object k){

val=k;

esq=null;

dir=null;

}

public void setChar(char k){

charr=k;

}

public void setVall(int k){

vall=k;

}

}






class BTree{


BTNode root;

int size=0;

BTree(){

root=null;

}

public void print(){

if(root!=null){

inorder(root);

System.out.println();

}

}


private void inorder(BTNode node){

if(node!=null){

inorder(node.esq);

System.out.print(node.val);

inorder(node.dir);

}

}



public void insert(Scanner in){

root=insertBTNode(in);

}

private BTNode insertBTNode(Scanner in){

if(!in.hasNext()){

return null;

}

String val=in.next();

switch(val.charAt(0)){

case '+' : case '-': case '*': case '/': case '%': case '^': case '@':{

BTNode n = new BTNode(val);

n.setChar(val.charAt(0));

n.esq=insertBTNode(in);

n.dir=insertBTNode(in);

size++;

return n;

}case '!': {

BTNode n =new BTNode(val);

n.esq=insertBTNode(in);

n.setChar(val.charAt(0));

size++;

return n;

}default:{

BTNode n=new BTNode(val);

n.setVall(new Integer(val));

size++;

return n;

}

}

}


public int computar(){

return calcular(root);

}

private int calcular(BTNode n){

//calcular os valores

if(n.charr=='+'){

return calcular(n.esq)+calcular(n.dir);

}

if(n.charr=='-'){

return calcular(n.esq)-calcular(n.dir);

}

if(n.charr=='*'){

return calcular(n.esq)*calcular(n.dir);

}

if(n.charr=='/'){

return calcular(n.esq)/calcular(n.dir);

}

if(n.charr=='%'){

return calcular(n.esq)%calcular(n.dir);

}

if(n.charr=='^'){

int rr=calcular(n.esq);

int gg = calcular(n.dir);

int yy=1;

BTNode ricardo = new BTNode(new Scanner(System.in));

for(int u=0;u

yy=yy*rr;

}

ricardo.setVall(yy);

return ricardo.vall;

}

if(n.charr=='@'){

int rr = calcular(n.esq);

int yy=0;

BTNode ricardo = new BTNode(new BTree());

for(int h =0;h

yy=yy+rr;

}

ricardo.setVall(yy);

return ricardo.vall;

}

if(n.charr=='!' && n.dir==null && n.esq != null){

int ups =calcular(n.esq);

int gaita =1;

for(int d =0;d

gaita*=ups;

ups--;

}

n.vall=gaita;

return n.vall;

}

return n.vall;

}

}