Gyakorlati alapok II.

Számolgatógép fejszámolós teljesítménymérővel

 

Ebben a fejezetben a 4 alapművelet című fejezetben ismertetett implementációs megoldásokat gondoljuk tovább. A már meglévő, alapszintű, korrekten működő számolgatógéphez egy apró teljesítménymérő algoritmust illesztünk, amely fejszámolásunk eredményességét értékeli ki. Megpróbáljuk ezt külön metódusban implementálni, amely persze még látatlanban is megvalósítható, bár hogy milyen konkrét technikákkal, az még kérdéses. Természetesen erre is sokféle megoldás lehetséges.

 

Először megismételjük a számolgatógép futtatható Java-kódját, hiszen ez lesz a kiindulópontunk:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

import java.util.Scanner;

public class Main {
static double osszeadas(double elsoSzam, double masodikSzam){
    return elsoSzam + masodikSzam;
}

static double kivonas(double elsoSzam, double masodikSzam){
    return elsoSzam - masodikSzam;
}

static double szorzas(double elsoSzam, double masodikSzam){
    return elsoSzam * masodikSzam;
}

static double osztas(double elsoSzam, double masodikSzam){
    return elsoSzam / masodikSzam;
}

static String[] adatBekeres(){
    Scanner in = new Scanner (System.in);
    String[] bemenetiAdatTomb = new String[3];
    boolean rosszAdat = false;
    System.out.println ("Kérem adja meg az 1. számot!");
    do{
        bemenetiAdatTomb[0] = in.nextLine();
        rosszAdat = ellenorzesSzam(bemenetiAdatTomb[0]);
    }while (rosszAdat == true);
    rosszAdat = false;

    System.out.println ("Kérem adja meg a műveleti jelet!");
    do{
        bemenetiAdatTomb[1] = in.nextLine();
        rosszAdat = ellenorzesMuveletiJel(bemenetiAdatTomb[1]);
        }while (rosszAdat == true);
    rosszAdat = false;

    System.out.println ("Kérem adja meg a 2. számot!");
    do{
        bemenetiAdatTomb[2] = in.nextLine();
        rosszAdat = ellenorzesSzam(bemenetiAdatTomb[2]);
    }while (rosszAdat == true);

    return bemenetiAdatTomb;
}

static boolean ellenorzesSzam(String bemenetiAdat){
    boolean rosszAdat = false;
    char karakter = bemenetiAdat.charAt(0);
    if(karakter == '0'){
        rosszAdat = true;
    }
    for(int i = 0; i < bemenetiAdat.length(); i++){
        karakter = bemenetiAdat.charAt(i);
        if(karakter != '0'
            && karakter != '1'
            && karakter != '2'
            && karakter != '3'
            && karakter != '4'
            && karakter != '5'
            && karakter != '6'
            && karakter != '7'
            && karakter != '8'
            && karakter != '9'){
            rosszAdat = true;
            break;
            }
        }
    if(rosszAdat == true){
        System.out.println("Kérem, hogy csak pozitív egész számot adjon meg!");
    }
    return rosszAdat;
}

static boolean ellenorzesMuveletiJel(String bemenetiAdat){
    boolean rosszAdat = false;
    char karakter = bemenetiAdat.charAt(0);
    if((karakter != '+' && karakter != '-' && karakter != '*' && karakter != '/')){
        rosszAdat = true;
    }
    if(rosszAdat == true){
        System.out.println("Kérem, hogy csak + - * / jeleket adjon meg!");
    }
    return rosszAdat;
}

static double kiertekeles(double elsoSzam, double masodikSzam, String muveletiJel){
    double eredmeny = 0;
    switch(muveletiJel){
        case("+"): eredmeny = osszeadas(elsoSzam, masodikSzam); break;
        case("-"): eredmeny = kivonas(elsoSzam, masodikSzam); break;
        case("*"): eredmeny = szorzas(elsoSzam, masodikSzam); break;
        case("/"): eredmeny = osztas(elsoSzam, masodikSzam); break;
    }
    return eredmeny;
}

public static void main(String[] args) {
    String[] bemenetiAdatTomb = new String[3];
    bemenetiAdatTomb = adatBekeres();
    double elsoSzam = Double.parseDouble(bemenetiAdatTomb[0]);
    double masodikSzam = Double.parseDouble(bemenetiAdatTomb[2]);
    String muveletiJel = bemenetiAdatTomb[1];
    System.out.println(elsoSzam + " " + muveletiJel + " " + masodikSzam + " = " +

                                kiertekeles(elsoSzam,     masodikSzam, muveletiJel));
    }
}

 

Végeredmény:

Kérem adja meg az 1. számot!
w
Kérem, hogy csak pozitív egész számot adjon meg!
qwert
Kérem, hogy csak pozitív egész számot adjon meg!
0
Kérem, hogy csak pozitív egész számot adjon meg!
120
Kérem adja meg a műveleti jelet!
sde
Kérem, hogy csak + - * / jeleket adjon meg!
b
Kérem, hogy csak + - * / jeleket adjon meg!
/
Kérem adja meg a 2. számot!
0
Kérem, hogy csak pozitív egész számot adjon meg!
hj
Kérem, hogy csak pozitív egész számot adjon meg!
23
120.0 / 23.0 = 5.217391304347826

 

A kód nagyobbik része és tartalmi jellemzői szinte változtatás nélkül felhasználhatók. A legfontosabb különbségek a következők (a kisebbek nem lesznek megemlítve):

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

import java.util.Scanner;

public class Main {
static double osszeadas(double elsoSzam, double masodikSzam){
    return elsoSzam + masodikSzam;
}

static double kivonas(double elsoSzam, double masodikSzam){
    return elsoSzam - masodikSzam;
}

static double szorzas(double elsoSzam, double masodikSzam){
    return elsoSzam * masodikSzam;
}

static double osztas(double elsoSzam, double masodikSzam){
    return elsoSzam / masodikSzam;
}

static double szamBekeres(){
    Scanner in = new Scanner (System.in);
    String bemenetiAdatFelhasznalo = new String();
    boolean rosszAdat = false;
    do{
        bemenetiAdatFelhasznalo = in.nextLine();
        rosszAdat = ellenorzesSzam(bemenetiAdatFelhasznalo);
    }while (rosszAdat == true);
    double szam = Double.parseDouble(bemenetiAdatFelhasznalo);
    return szam;
}

static double szamBekeresEredmeny(){
    Scanner in = new Scanner (System.in);
    String bemenetiAdatFelhasznalo = new String();
    bemenetiAdatFelhasznalo = in.nextLine();
    double szam = Double.parseDouble(bemenetiAdatFelhasznalo);
    return szam;
}

static boolean ellenorzesSzam(String bemenetiAdat){
    boolean rosszAdat = false;
    char karakter = bemenetiAdat.charAt(0);
    if(karakter == '0'){
        rosszAdat = true;
    }
    for(int i = 0; i < bemenetiAdat.length(); i++){
        karakter = bemenetiAdat.charAt(i);
        if(karakter != '0'
            && karakter != '1'
            && karakter != '2'
            && karakter != '3'
            && karakter != '4'
            && karakter != '5'
            && karakter != '6'
            && karakter != '7'
            && karakter != '8'
            && karakter != '9'){
            rosszAdat = true;
            break;
        }
    }
    if(rosszAdat == true){
        System.out.println("Kérem, hogy csak pozitív egész számot adjon meg!");
    }
    return rosszAdat;
}

static double kiertekeles(double elsoSzam, double masodikSzam, String muveletiJel){
    double eredmeny = 0;
    switch(muveletiJel){
        case("+"): eredmeny = osszeadas(elsoSzam, masodikSzam); break;
        case("-"): eredmeny = kivonas(elsoSzam, masodikSzam); break;
        case("*"): eredmeny = szorzas(elsoSzam, masodikSzam); break;
        case("/"): eredmeny = osztas(elsoSzam, masodikSzam); break;
    }
    return eredmeny;
}

static boolean kiertekelesFelhasznalo(double szamFelhasznalo, double eredmeny){
    boolean OK = false;
    if (szamFelhasznalo != eredmeny){
        System.out.println("Az összeg: (" + eredmeny + ") és az Ön száma nem egyezik." + "\n");
    }
    else{
        System.out.println("Az összeg valóban: " + eredmeny + "\n");
        OK = true;
    }
    return OK;
}

public static void main(String[] args) {
    Scanner in = new Scanner (System.in);
    double elsoSzam = 0;
    double masodikSzam = 0;
    double eredmeny = 0;
    double szamFelhasznalo = 0;
    String muveletiJel = null;
    boolean joBecsles = false;
    int szamlalo = 0;
    int OK = 0;
String[] menu = new String[] {"1 - Összeadás", "2 - Kivonás", "3 - Szorzás",

                                            "4 - Osztás", "0 - Kiértékelés és kilépés"};

    while(true) {
        System.out.println("Kérem válasszon az alábbi lehetőségekből: ");
        for(int i=0; i<menu.length; i++) {
            System.out.println(menu[i]);
        }

    String valasztas = in.nextLine();
    if ("1".equals(valasztas)) {
        muveletiJel = "+";
        szamlalo++;
        System.out.println ("\nKérem, hogy adja meg az 1. számot!");
        elsoSzam = szamBekeres();
        System.out.println ("\nKérem, hogy adja meg a 2. számot!");
        masodikSzam = szamBekeres();
        eredmeny = kiertekeles(elsoSzam, masodikSzam, muveletiJel);
        System.out.println("\nÖn szerint mennyi a végeredmény?");
        szamFelhasznalo = szamBekeresEredmeny();
        joBecsles = kiertekelesFelhasznalo(szamFelhasznalo, eredmeny);
        if(joBecsles == true){
            OK++;
        }
    }

    if ("2".equals(valasztas)) {
        muveletiJel = "-";
        szamlalo++;
        System.out.println ("\nKérem, hogy adja meg az 1. számot!");
        elsoSzam = szamBekeres();
        System.out.println ("\nKérem, hogy adja meg a 2. számot!");
        masodikSzam = szamBekeres();
        eredmeny = kiertekeles(elsoSzam, masodikSzam, muveletiJel);
        System.out.println("\nÖn szerint mennyi a végeredmény?");
        szamFelhasznalo = szamBekeresEredmeny();
        joBecsles = kiertekelesFelhasznalo(szamFelhasznalo, eredmeny);
        if(joBecsles == true){
            OK++;
        }
    }

    if ("3".equals(valasztas)) {
        muveletiJel = "*";
        szamlalo++;
        System.out.println ("\nKérem, hogy adja meg az 1. számot!");
        elsoSzam = szamBekeres();
        System.out.println ("\nKérem, hogy adja meg a 2. számot!");
        masodikSzam = szamBekeres();
        eredmeny = kiertekeles(elsoSzam, masodikSzam, muveletiJel);
        System.out.println("\nÖn szerint mennyi a végeredmény?");
        szamFelhasznalo = szamBekeresEredmeny();
        joBecsles = kiertekelesFelhasznalo(szamFelhasznalo, eredmeny);
        if(joBecsles == true){
            OK++;
        }
    }

    if ("4".equals(valasztas)) {
        muveletiJel = "/";
        szamlalo++;
        System.out.println ("\nKérem, hogy adja meg az 1. számot!");
        elsoSzam = szamBekeres();
        System.out.println ("\nKérem, hogy adja meg a 2. számot!");
        masodikSzam = szamBekeres();
        eredmeny = kiertekeles(elsoSzam, masodikSzam, muveletiJel);
        System.out.println("\nÖn szerint mennyi a végeredmény?");
        szamFelhasznalo = szamBekeresEredmeny();
        joBecsles = kiertekelesFelhasznalo(szamFelhasznalo, eredmeny);
        if(joBecsles == true){
            OK++;
        }
    }

    if ("0".equals(valasztas)) {
        if(szamlalo == 0){
            System.out.println("\nNincsenek kiértékelhető eredmények. Viszlát!");
            break;
        }
    else{
        double seged = 100 / szamlalo;
        System.out.println("\nAz Ön teljesítménye " + szamlalo + " feladatban "

                                    + (seged * OK) + " százalékos volt.");
        System.out.println("Viszlát!");
        break;
        }
        }
    }
}
}

 

Végeredmény:

Kérem válasszon az alábbi lehetőségekből:
1 - Összeadás
2 - Kivonás
3 - Szorzás
4 - Osztás
0 - Kiértékelés és kilépés
1

Kérem, hogy adja meg az 1. számot!
120

Kérem, hogy adja meg a 2. számot!
sdsd
Kérem, hogy csak pozitív egész számot adjon meg!
w
Kérem, hogy csak pozitív egész számot adjon meg!
0
Kérem, hogy csak pozitív egész számot adjon meg!
120

Ön szerint mennyi a végeredmény?
240
Az összeg valóban: 240.0

Kérem válasszon az alábbi lehetőségekből:
1 - Összeadás
2 - Kivonás
3 - Szorzás
4 - Osztás
0 - Kiértékelés és kilépés
2

Kérem, hogy adja meg az 1. számot!
50

Kérem, hogy adja meg a 2. számot!
-1
Kérem, hogy csak pozitív egész számot adjon meg!
100

Ön szerint mennyi a végeredmény?
-50
Az összeg valóban: -50.0

Kérem válasszon az alábbi lehetőségekből:
1 - Összeadás
2 - Kivonás
3 - Szorzás
4 - Osztás
0 - Kiértékelés és kilépés
3

Kérem, hogy adja meg az 1. számot!
30

Kérem, hogy adja meg a 2. számot!
20

Ön szerint mennyi a végeredmény?
600
Az összeg valóban: 600.0

Kérem válasszon az alábbi lehetőségekből:
1 - Összeadás
2 - Kivonás
3 - Szorzás
4 - Osztás
0 - Kiértékelés és kilépés
4

Kérem, hogy adja meg az 1. számot!
45

Kérem, hogy adja meg a 2. számot!
63

Ön szerint mennyi a végeredmény?
0.8
Az összeg: (0.7142857142857143) és az Ön száma nem egyezik.

Kérem válasszon az alábbi lehetőségekből:
1 - Összeadás
2 - Kivonás
3 - Szorzás
4 - Osztás
0 - Kiértékelés és kilépés
0

Az Ön teljesítménye 4 feladatban 75.0 százalékos volt.
Viszlát!