Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  27 3769
Hei folkens!
Eg trenger litt hjelp med å programmere noke eg trur heiter "multi-digit kalkulator". Det eg er ute etter er ein kalkulator som kan operere slik :
4+7*2 .. Istede for å bare kunne ta to ledd, som dette : 4*7

Har allerede laga kalkulator som kan operere med to ledd, men trenger hjelp til å "komme igang", eller eksempel, på korleis eg kan programmere ein som handterer 3 ledd.

Setter pris på alle svar
m0b
m0b's Avatar
DonorAdministrator
Siden du ikke sier så mye om verken språk eller hvor mye du kan, eller hvordan du ønsker at programmet skal fungere, så kan du alltids skrive en lexer.

http://en.wikipedia.org/wiki/Lexical_analysis
Sist endret av m0b; 8. april 2013 kl. 08:49.
Hoffen's Avatar
Trådstarter
Ojsann! Kan skylde på at eg gikk glipp av morgen-kaffen. Hehe
Det er java-programmering, og det er i forhold til skule. Så eg vil sei eg er middels-ærfaren. Og har hatt programmering kver Mandag sida nyåret starta.
Det burde jo gå rett ut av boksen det.

denne java-koden printer ut "8"....

Kode

public static void main(String[] args){
   System.out.println(2+3*2);
}
Hoffen's Avatar
Trådstarter
Læreren min sa at det skulle være masse vanskeligare en som så, no har eg tross alt med kvadrat-rot òg. Og detta er en kalkulator i jFrame.
Sitat av Hoffen Vis innlegg
Læreren min sa at det skulle være masse vanskeligare en som så, no har eg tross alt med kvadrat-rot òg. Og detta er en kalkulator i jFrame.
Vis hele sitatet...
Jaha. Ser ikke helt problemet her...
kvadratrot er ikke noe stress. Det er en metode Math.sqrt() som gjør dette.
Ellers så er det jo bare å benytte seg av wp:order of operations Java kjører dette rett ut av boksen.

Det spiller jo ingen rolle om du kjører dette i jFrame eller console heller.
Om du har et gitt problem og vil ha hjelp til dette så kom med det.
Hoffen's Avatar
Trådstarter
Eg meiner at vist eg gjer det du foreslo, ville dette blitt litt problematisk, men du er sikkert mykje meir ærfaren en meg i programmering. Men eg sender deg kodane, så kan du sjå om du vil, etter kva eg kan gjere









Tenke at eg kunne lage en variabel som tar svaret til det tidligare reknestykke : (2*7), og begynner på eit nytt (14/2).
Hvis du er kjempeflink så copy/past'er du koden din og limer den inn her i en code-tag... eventuelt php-tag
Sist endret av moret; 8. april 2013 kl. 09:36.
Hoffen's Avatar
Trådstarter
Får beskjed om at det er for langt, så eg splitter det opp eg!

Kode

public class Kalkulator extends javax.swing.JFrame {

    //lager variablane
    double tal1;
    double tal2;
    double sum;
    
    //lagar tellar for antall klikk på dei ulike knappane
    int plussklikk;
    int minusklikk;
    int gangeklikk;
    int deleklikk;
    
   
        
    /**
     * Creates new form Kalkulator
     */
    public Kalkulator() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        monitor = new javax.swing.JTextField();
        Knapp1 = new javax.swing.JButton();
        Knapp2 = new javax.swing.JButton();
        Knapp3 = new javax.swing.JButton();
        Knapp4 = new javax.swing.JButton();
        Knapp5 = new javax.swing.JButton();
        Knapp6 = new javax.swing.JButton();
        Knapp7 = new javax.swing.JButton();
        Knapp8 = new javax.swing.JButton();
        Knapp9 = new javax.swing.JButton();
        clear = new javax.swing.JButton();
        Knapp0 = new javax.swing.JButton();
        komma = new javax.swing.JButton();
        pluss = new javax.swing.JButton();
        minus = new javax.swing.JButton();
        gange = new javax.swing.JButton();
        dele = new javax.swing.JButton();
        erlik = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBackground(new java.awt.Color(0, 102, 204));
        setIconImages(null);

        monitor.setBackground(new java.awt.Color(51, 255, 0));
        monitor.setCaretColor(new java.awt.Color(51, 204, 0));
        monitor.setDisabledTextColor(new java.awt.Color(51, 255, 0));

        Knapp1.setText("1");
        Knapp1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                Knapp1MouseClicked(evt);
            }
        });

        Knapp2.setText("2");
        Knapp2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                Knapp2MouseClicked(evt);
            }
        });

        Knapp3.setText("3");
        Knapp3.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                Knapp3MouseClicked(evt);
            }
        });

        Knapp4.setText("4");
        Knapp4.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                Knapp4MouseClicked(evt);
            }
        });
        Knapp4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                Knapp4ActionPerformed(evt);
            }
        });

        Knapp5.setText("5");
        Knapp5.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                Knapp5MouseClicked(evt);
            }
        });

        Knapp6.setText("6");
        Knapp6.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                Knapp6MouseClicked(evt);
            }
        });

        Knapp7.setText("7");
        Knapp7.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                Knapp7MouseClicked(evt);
            }
        });

        Knapp8.setText("8");
        Knapp8.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                Knapp8MouseClicked(evt);
            }
        });

        Knapp9.setText("9");
        Knapp9.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                Knapp9MouseClicked(evt);
            }
        });

        clear.setBackground(new java.awt.Color(0, 0, 0));
        clear.setForeground(new java.awt.Color(0, 255, 0));
        clear.setText("C");
        clear.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                clearMouseClicked(evt);
            }
        });

        Knapp0.setText("0");
        Knapp0.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                Knapp0MouseClicked(evt);
            }
        });

        komma.setText(",");
        komma.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                kommaMouseClicked(evt);
            }
        });

        pluss.setText("+");
        pluss.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                plussMouseClicked(evt);
            }
        });

        minus.setText("-");
        minus.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                minusMouseClicked(evt);
            }
        });

        gange.setText("*");
        gange.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                gangeMouseClicked(evt);
            }
        });

        dele.setText("/");
        dele.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                deleMouseClicked(evt);
            }
        });

        erlik.setText("=");
        erlik.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                erlikMouseClicked(evt);
            }
        });

        jButton1.setText("Sqrt");
        jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jButton1MouseClicked(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(41, 41, 41)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(Knapp4)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(Knapp5)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(Knapp6))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(Knapp1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(Knapp2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(Knapp3))
                    .addComponent(monitor)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(Knapp7)
                            .addComponent(Knapp0))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(Knapp8)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(Knapp9))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(komma)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(erlik)))))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(pluss)
                    .addComponent(minus)
                    .addComponent(gange)
                    .addComponent(clear)
                    .addComponent(dele)
                    .addComponent(jButton1))
                .addContainerGap(43, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(54, 54, 54)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(monitor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(clear))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(Knapp1)
                    .addComponent(Knapp2)
                    .addComponent(Knapp3)
                    .addComponent(pluss))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(Knapp4)
                    .addComponent(Knapp5)
                    .addComponent(Knapp6)
                    .addComponent(minus))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(Knapp7)
                    .addComponent(Knapp8)
                    .addComponent(Knapp9)
                    .addComponent(gange))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(Knapp0)
                    .addComponent(komma)
                    .addComponent(dele)
                    .addComponent(erlik))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jButton1)
                .addContainerGap(25, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void Knapp4ActionPerformed(java.awt.event.ActionEvent evt) {                                       
        // TODO add your handling code here:
    }                                      

    private void clearMouseClicked(java.awt.event.MouseEvent evt) {                                   
monitor.setText ("");        // TODO add your handling code here:
    }                                  

    private void Knapp1MouseClicked(java.awt.event.MouseEvent evt) {                                    
monitor.setText(monitor.getText()+Knapp1.getText());        // TODO add your handling code here:
    }                                   

    private void Knapp2MouseClicked(java.awt.event.MouseEvent evt) {                                    
monitor.setText(monitor.getText()+Knapp2.getText());        // TODO add your handling code here:
    }                                   

    private void Knapp3MouseClicked(java.awt.event.MouseEvent evt) {                                    
monitor.setText(monitor.getText()+Knapp3.getText());        // TODO add your handling code here:
    }                                   

    private void Knapp4MouseClicked(java.awt.event.MouseEvent evt) {                                    
monitor.setText(monitor.getText()+Knapp4.getText());        // TODO add your handling code here:
    }                                   

    private void Knapp5MouseClicked(java.awt.event.MouseEvent evt) {                                    
monitor.setText(monitor.getText()+Knapp5.getText());        // TODO add your handling code here:
    }                                   

    private void Knapp6MouseClicked(java.awt.event.MouseEvent evt) {                                    
monitor.setText(monitor.getText()+Knapp6.getText());        // TODO add your handling code here:
    }                                   

    private void Knapp7MouseClicked(java.awt.event.MouseEvent evt) {                                    
monitor.setText(monitor.getText()+Knapp7.getText());        // TODO add your handling code here:
    }                                   

    private void Knapp8MouseClicked(java.awt.event.MouseEvent evt) {                                    
monitor.setText(monitor.getText()+Knapp8.getText());        // TODO add your handling code here:
    }                                   

    private void Knapp9MouseClicked(java.awt.event.MouseEvent evt) {                                    
monitor.setText(monitor.getText()+Knapp9.getText());        // TODO add your handling code here:
    }                                   

    private void Knapp0MouseClicked(java.awt.event.MouseEvent evt) {                                    
monitor.setText(monitor.getText()+Knapp0.getText());        // TODO add your handling code here:
    }                                   

    private void kommaMouseClicked(java.awt.event.MouseEvent evt) {                                   
monitor.setText(monitor.getText()+komma.getText());        // TODO add your handling code here:
    }
Hoffen's Avatar
Trådstarter

Kode

    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
tal1 = Double.parseDouble(monitor.getText());
sum = Math.sqrt(tal1);
monitor.setText(Double.toString(sum));// TODO add your handling code here:
    }                                     

    private void plussMouseClicked(java.awt.event.MouseEvent evt) {                                   
tal1 = Double.parseDouble(monitor.getText());
monitor.setText("");
plussklikk = 1;
System.out.println(tal1);

// TODO add your handling code here:
    }                                  

    private void minusMouseClicked(java.awt.event.MouseEvent evt) {                                   
tal1 = Double.parseDouble(monitor.getText());
monitor.setText("");
minusklikk = 1;        // TODO add your handling code here:
    }                                  

    private void gangeMouseClicked(java.awt.event.MouseEvent evt) {                                   
tal1 = Double.parseDouble(monitor.getText());
monitor.setText("");
gangeklikk = 1;        // TODO add your handling code here:
    }                                  

    private void deleMouseClicked(java.awt.event.MouseEvent evt) {                                  
tal1 = Double.parseDouble(monitor.getText());
monitor.setText("");
deleklikk = 1;        // TODO add your handling code here:
    }                                 

    private void erlikMouseClicked(java.awt.event.MouseEvent evt) {                                   
tal2=Double.parseDouble(monitor.getText());
    
if(plussklikk==1) {
    sum=tal1+tal2;
    System.out.println(sum);
}
else if (minusklikk ==1) {
    sum=tal1-tal2;
}
else if (gangeklikk ==1) {
    sum=tal1*tal2;
}
else if (deleklikk ==1) {
    sum=tal1/tal2;

monitor.setText(Double.toString(sum));
plussklikk = 0;
minusklikk = 0;
gangeklikk = 0;
deleklikk = 0;
    }                                  
    }
Utan å ha sett på koda di har eg nokre få spørsmål og forslag:
Problemet er openbert å ta inn uendeleg mange tal (døme: 5*3+8-4/2), samt korleis ein skal lagre alle tala, korleis ein skal splitte opp input-strengen til variablar og operatorar, og korleis ein skal følge rett reknerekkefølge (order of operations).

Eg har ikkje tenkt å løyse oppgåva, men her er slik er ser for meg at ho kan løysast:

Splitt opp strengen ved strengVariabelNavn.split("RegexHer") og lagre tala i array eller ArrayList. Du må kunne basic regex for dette, og du skal altså splitte ved operatorane. Du må også gjere om kvart tal til int eller double avhengig av kva du vil støtte.

På same måten splittar du opp strengen og lagar eit array eller ArrayList med operatorar. Merk no at tala på plass 0 og 1 i talArray samsvarer med operator på plass 0 i operatorArray.

Så itererer du på valgfri måte gjennom operatorane og utfører rekneoperasjonar i tråd med korrekt reknerekkefølge.

Edit: Om du også skal støtte negative forteikn og parantes må dette kodast utanom (døme: -5*(3+5)).

Sannsynlegvis ikkje optimalt men det var enkelt å tenke seg til uten å prøve sjølv. Eg har sjølv laga ein liknande kalkulator men den nytta postfix-notasjon (RPN) og såleis kunne eg bruke ein stack til å lagre tala.
Sist endret av bronze; 8. april 2013 kl. 09:50.
Hoffen's Avatar
Trådstarter
Vil at den skal fungere som windows-kalkulatoren.. At den tar et reknestykke om gangen, sånn at når du har 4*2 så blir det 8 når du trykker på nytt tall eller funksjon

Tusen takk for svar! Skal sjekke nærmare inn på detta
Sitat av Hoffen Vis innlegg
Vil at den skal fungere som windows-kalkulatoren.. At den tar et reknestykke om gangen, sånn at når du har 4*2 så blir det 8 når du trykker på nytt tall eller funksjon

Tusen takk for svar! Skal sjekke nærmare inn på detta
Vis hele sitatet...
I såfall blir oppgåva enda enklare. Skal ein sjølv trykke på ein "pluss"-knapp eller skriv ein pluss med tastaturet om ein vil addere to tal?

Edit: Antek at ein trykker ut i frå koda.
Då kan du berre sjekke om inputfeltet har to tal som kan adderast, også utfører du addisjonen og erstattar teksten i inputt-feltet med dette talet.
Sist endret av bronze; 8. april 2013 kl. 09:57.
Hoffen's Avatar
Trådstarter
Det er berre laga slik at eg trykker på knappane, skriv det ikkje inn
Vil at den skal fungere som windows-kalkulatoren.. At den tar et reknestykke om gangen, sånn at når du har 4*2 så blir det 8 når du trykker på nytt tall eller funksjon
Vis hele sitatet...
Da har du en variabel du bare setter til å være verdien i visningsvinduet ditt.
feks:

Kode

double tallSomVisesIVinduetDitt = double.parseDouble(monitor.getText());
Sist endret av moret; 8. april 2013 kl. 10:00.
Hoffen's Avatar
Trådstarter
Då vil det sei at eg får ein verdi, på svaret liksom? F.eks 8.. Og korleis kan eg då gjere at eg kan gjere meir med den verdien?
Sjekk ut reverse polish notation aka RPN. Det virker som det er akkurat det du er ute etter. Det er blant annet en oppgave å lage en RPN kalkulator i java på NTNU, så det er nok mange tutorials om kring
Hoffen's Avatar
Trådstarter
Det er ikkje noke sånt. 3 av 3 RPN kalkulatora eg har sett på no, opererer ikkje slik eg vil ha denna. Eg vil ha den til å operere på presist lik måte som Windows kalkulatoren.

Edit:
Som bronze sa, vil dette fungere som om:
- Eg lagrar svaret fra "8+8" i ein array.
- Så lagrar svaret "16" seg i arrayen, og eg kan bruke det vidare, til neste reknestykke. Eks : 16/4
Sitat av Hoffen Vis innlegg
Det er ikkje noke sånt. 3 av 3 RPN kalkulatora eg har sett på no, opererer ikkje slik eg vil ha denna. Eg vil ha den til å operere på presist lik måte som Windows kalkulatoren.

Edit:
Som bronze sa, vil dette fungere som om:
- Eg lagrar svaret fra "8+8" i ein array.
- Så lagrar svaret "16" seg i arrayen, og eg kan bruke det vidare, til neste reknestykke. Eks : 16/4
Vis hele sitatet...
RPN var et ganske dårlig forslag ettersom du ganske så tydelig peker ut at du er ute etter infix-notasjon (altså "vanlig" matematisk notasjon).

Hvis du skal tolke vilkårlig lengde infix, så bør du ha med en formening om operatørenes rekkefølge (som andre har pekt ut).

2 + 4 * 2, notert uten parentes skal strengt tatt gi samme svar som 2 * 4 + 2. Hvis du regner slavisk fra en side av bufferet ditt til den andre, altså først tar 2+4 og så multipliserer resultatet med 2 så får du et annet svar enn 2 * 4 som du så adderer 2 til.

Det beste tipset her er vel kanskje en lexer som tipset lengre oppe, alternativt så kan du tolke det manuelt (altså skrive en lexer i Java) og så dytte alt i en stack i en forutsigbar rekkefølge (altså multiplikasjon/divisjon før addisjon/subtraksjon, osv). Hvis du i tillegg skal støtte f.eks. parenteser osv, så blir dette fort mye mer komplisert enn de kodesnuttene du har vist hittil... men fortvil ikke, mye god læring her og det finnes også ganske gode eksempler på dette på internettet - så det er ingen grunn til at du skal finne opp alt kruttet på egenhånd.

Det er forøvrig ikke veldig vanskelig å skrive en grammatisk tolker (man kan f.eks. lage en enkel rekursiv nedstigningstolker) som gjør en helt okei jobb av enkel matematikk. Det blir ikke perfekt, men man lærer masse i prosessen.

En god programmerer er en som evner å gjenbruke og innhente inspirasjon fra eksisterende fungerende kode, i stedet for å skrive sin egen kode med feil i ;-).
Sist endret av MrBlaine; 8. april 2013 kl. 11:00.
Hoffen's Avatar
Trådstarter
Takk skal du ha! Bra svar KP til deg!

Edit:
Forresten, har du lyst å vere så snill å gi meg ein link til eit eksempel på dette? Alt eg finner på nettet er programmert på ein heilt anna måte en eg er vandt/kjendt med. Det er sjølvsagt java, men oppgava mi er å oppgradere denna kalkulatoren, ikkje å lage ein ny ein Så om du kunne gitt meg eit eksempel på ein kode, eller ein link, så hadde det vert strålande!
Sist endret av Hoffen; 8. april 2013 kl. 11:09.
Det å parse en vilkårlig antall operatorer i infix notasjon (oversatt: vanlige regnestykker av ukjent lengde) er som regel ikke noe man gjør etter å ha hatt programmering en gang i uka i 3 måneder for å si det mildt. Det man gjør er å parse uttrykket til et tre, hvor hver operator-node har et barn for høyre og et for venstre side. Java gjør ikke dette for deg, så du må skrive en parser. Det finnes en del tredjeparts-biblioteker som riktignok kan hjelpe deg. Se på dette Google-søket for en start: https://www.google.no/search?q=java+parse+expression
▼ ... noen uker senere ... ▼
Er ganske ny på dette selv, så valgte prøve meg på dette i vb - Tips til endringer mottas gjerne

Public Class myfirstproject
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim num1, num2, num3, product As Integer


num1 = TextBox1.Text

num2 = TextBox2.Text

num3 = TextBox3.Text

product = num1 + num2 + num3

Label1.Text = product


End Sub

Private Sub myfirstproject_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Private Sub Label2_Click(sender As Object, e As EventArgs) Handles Label2.Click

End Sub

Private Function [Enum]() As Single
Throw New NotImplementedException
End Function

End Class
Vis hele sitatet...
Er ganske ny på dette selv, så valgte prøve meg på dette i vb - Tips til endringer mottas gjerne

Public Class myfirstproject
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim num1, num2, num3, product As Integer


num1 = TextBox1.Text

num2 = TextBox2.Text

num3 = TextBox3.Text

product = num1 + num2 + num3

Label1.Text = product

End Function

End Class
Vis hele sitatet...
Sitat av Kannibalensmakt Vis innlegg
Er ganske ny på dette selv, så valgte prøve meg på dette i vb - Tips til endringer mottas gjerne



Er ganske ny på dette selv, så valgte prøve meg på dette i vb - Tips til endringer mottas gjerne
Vis hele sitatet...
Where's the code?
Det 'calc' gjør er jo;

1. Ta i mot et tall1
2. Ta i mot en regne operasjon
3. Ta i mot et tall2
4. Utføre regne operasjonen (tall1 op tall2)
5. Lagre svaret i tall1 -> steg 3



Må jo være mye kulere å ta i mot en string som;

8 + 5 * 2 + (sqrt(5) * cos(2))

For så å vise svaret av det. I calc må du jo selv passe på rekkefølge?

Sitat av Kannibalensmakt Vis innlegg
Er ganske ny på dette selv, så valgte prøve meg på dette i vb - Tips til endringer mottas gjerne



Er ganske ny på dette selv, så valgte prøve meg på dette i vb - Tips til endringer mottas gjerne
Vis hele sitatet...
Antar du må ha Int.Parse(TextBox1.Text) hvertfall. Men det er VB, så orker ikke laste ned for å forsikre meg om det - driter meg heller litt ut.
Sist endret av hayer; 30. april 2013 kl. 10:50.
Sitat av Zirto Vis innlegg
Where's the code?
Vis hele sitatet...
Public Class myfirstproject
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim num1, num2, num3, product As Integer


num1 = TextBox1.Text

num2 = TextBox2.Text

num3 = TextBox3.Text

product = num1 + num2 + num3

Label1.Text = product

End Function

End Class
m0b
m0b's Avatar
DonorAdministrator
Gratulerer. Du har lagt sammen tre integere.
Et tips hvis du ikke helt skjønner hva folk mener må rekkefølgen på regnestykker er å se forskjellen på windows kalkulator i vanlig modus og scientific modus.
Vanlig: 2 + 2 * 4 = 16
Scientific: 2 + 2 * 4 = 10

Den siste er den riktige matematisk, men da kan du ikke regne ut noe på regnestykket for hele regnestykket er skrevet inn. Det er en "vanskelig" oppgave som krever litt logikk... og ikke bare "gjøre noe når man trykker på knappen".

Den første klarer du fint ved å bare forandre litt på programmet sånn som det er nå.. men det er altså ikke det matematisk riktige svaret.

.. forøvrig, et tips er at nesten gang noen spør hvilket programmeringsnivå du er på svarer du "Helt nybegynner". Ikke noe vondt ment altså, vi har alle vært det en gang, men det er det du er .


[edit]Litt teit å komme med svar til trådstarter når tråden er såpass gammel og blitt tatt opp igjen.. la heller ikke merke til andresiden.. ja, ja. Det er fryktelig tidlig om morgenen[/edit].
Sist endret av DumDiDum; 1. mai 2013 kl. 06:12.
Sitat av |d13m0b Vis innlegg
Gratulerer. Du har lagt sammen tre integere.
Vis hele sitatet...
Takk.
Fra å kunne absolutt ingenting er det uansett en et bra resultat for min del.

Kanskje du kan sjekke ut min applikasjon jeg snart skal poste "Noob applikasjon" vel og merke.