Avaliação de Expressões Algébricas Simples
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;
}
}