Ble$$ed^
Legacy Member
Zelf ben ik nog niet zo heel lang bezig met programmeren, mijn excuses als er loeiers van fouten zouden in staan.
De bedoeling is dus dat ik door middel van een Stack(Stapel) een infix (bvb 2*3/5) naar een postfix(bvb 2 3*5/) notatie ga omzetten.
Ik heb via pseudocode het algoritme in java proberen te zetten. Hij compiled zonder problemen , maar als uitvoer geeft hij enkel mijn cijfers en niet zoals in het voorbeeldje eerder vermeld.
Hier is alvast de voorlopige code van men opdracht. Khoop dat jullie me kunnen helpen.
mvg
Dit is de infix -> postfix
De bedoeling is dus dat ik door middel van een Stack(Stapel) een infix (bvb 2*3/5) naar een postfix(bvb 2 3*5/) notatie ga omzetten.
Ik heb via pseudocode het algoritme in java proberen te zetten. Hij compiled zonder problemen , maar als uitvoer geeft hij enkel mijn cijfers en niet zoals in het voorbeeldje eerder vermeld.
Hier is alvast de voorlopige code van men opdracht. Khoop dat jullie me kunnen helpen.
mvg
Code:
import javax.swing.*;
//STACK VOOR KARAKTERS\\
public class StackKar
{
private char stackArray[];
private char top;
private int length;
private static final int DEFAULT_LENGTH = 10;
public StackKar()
{
length = DEFAULT_LENGTH;
stackArray = new char[length];
top=0;
}
public boolean isEmpty()
{
if(top==0)
{
return true;
}
else
{
return false;
}
}
public void push(char c)
{
if(top == length)
{
allocateMore();
}
stackArray[++top] = c;
}
public char pop()
{
if(isEmpty())
{
JOptionPane.showMessageDialog(null,"Stack leeg: er kan geen element van de Stack afgehaald worden");
}
top--;
return stackArray[top];
}
public char peek()
{
if(isEmpty())
{
JOptionPane.showMessageDialog(null,"Stack leeg: er kan geen topelement van de Stack getoond worden");
}
return stackArray[top-1];
}
public int size()
{
return top;
}
public void allocateMore()
{
char original[] = stackArray;
length = length * 2;
stackArray = new char[length];
for(int i = 0;i<length/2;i++)
{
stackArray[i] = original[i];
}
}
}
Dit is de infix -> postfix
Code:
import javax.swing.*;
import java.awt.*;
public class PostfixTest extends StackKar
{
public static void main(String args[])
{
StackKar s = new StackKar();
String infix = JOptionPane.showInputDialog("Geef infix notatie");
char array[] = infix.toCharArray(); //String naar array van characters
int lengte = array.length; // arraylengte meegeven
char symbool,haakje;
String tpostfix=""; //tijdelijke opslag
String postfix; // uiteindelijke output
///< TEST >\\\
System.out.println(lengte); // het aantal karakters controleren\\
for (int teller=0; teller<array.length; teller++)
{
symbool = array[teller];
if((symbool != '+')&&
(symbool != '-')&&
(symbool != '/')&&
(symbool != '*')&&
(symbool != '(')&&
(symbool != ')'))
{
tpostfix = tpostfix +symbool;
}
else
{
if (s.isEmpty() || symbool == '(' || prioriteit(symbool) > prioriteit(s.peek()))
{
s.push(symbool);
}
if(symbool==')' )
{
while(s.peek() != '(')
{tpostfix=tpostfix +s.pop();}
haakje= s.pop();
}//einde 2de
if(prioriteit(symbool)<=prioriteit(s.peek()))
{
while ((prioriteit(symbool) <= prioriteit(s.peek()) ) ) // + OF NIET (s.isEmpty()) moet er nog bijkomen \\
{tpostfix=tpostfix + s.pop();}
s.push(symbool);
}//einde 3de
}
teller=teller+1;
}
while(!s.isEmpty())
{
tpostfix=tpostfix +s.pop(); //floep et eruit en steek et erin
}
postfix=tpostfix;
System.out.println(infix);
System.out.println(postfix);
}
//methode prioriteit
public static int prioriteit(char symbool)
{
if(symbool == '*' || symbool == '/'){
return 2;
}
if(symbool == '+' || symbool == '-'){
return 1;
}
else
return 0;
}
}