Vaje 24

Nina Kerčmar 11.5.1998

Kalkulator

Napisali bomo program za kalkulator z več natančnim računanjem. Vsak kalkulator za svoje delovanje potrebuje operacije.

Naše operacije so:

• S-seštevanje

• O-odštevanje

• V-vpis

• I-izpis

• M-množenje

• D-ostanek

• K-količnik Za lažje razumevanje si oglej sklade in njihove lastnosti.

Oglejmo si primer:

(((10 + 3) ∗ 14) ((7 − 13)%5))

• V 10

• V 3

• S

• V 14

• M • V 7

• V 13

• O

• V 5

• D

• K

• I

Za izdelavo kalkulatorja potrebujemo:

• računalniške operacije v C++

• sklad predmetov iz razreda celih števil

• testni modul

Naš program:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "../../code/Sklad/Skladi.h"
/* ------------------------------------------------------------- */
/* -------------------------------------[ glavni program ]------ */
/* ------------------------------------------------------------- */
int main( void ) {
Sklad<int> mojSklad;
int zacStev1, zacStev2;
char vrstica [250];              /* vrstica z morebitnimi parm. */
while ( !feof(stdin) ) {         /* vsako vrstico obdelamo */
 scanf("%s", vrstica);
 switch (vrstica[0]) {          /* prvi znak vrstice je ukaz */
 case 'S':                      /* sestevanje stevil */
   zacStev1 = mojSklad.Zlozi();
   zacStev2 = mojSklad.Zlozi();
   mojSklad.Nalozi(zacStev2+zacStev1);

break;
case 'O':                      /* odstevanje stevil */
  zacStev1 = mojSklad.Zlozi();
  zacStev2 = mojSklad.Zlozi();
  mojSklad.Nalozi(zacStev2-zacStev1);
break;
case 'M':                      /* mnozenje stevil */
  zacStev1 = mojSklad.Zlozi();
  zacStev2 = mojSklad.Zlozi();
  mojSklad.Nalozi(zacStev2*zacStev1);
break;
case 'D':                      /* deljenje stevil - ostanek */
  zacStev1 = mojSklad.Zlozi();
  zacStev2 = mojSklad.Zlozi();
  mojSklad.Nalozi(zacStev2 % zacStev1);
break;
case 'K':                      /* deljenje stevil - kolicnik */
  zacStev1 = mojSklad.Zlozi();
  zacStev2 = mojSklad.Zlozi();
  mojSklad.Nalozi(zacStev2 / zacStev1);
break;
case 'V':                      /* vpis novega stevila */
  mojSklad.Nalozi(atoi (&(vrstica[1])));
break;
case 'I':                      /* izpisemo zadnje stevilo */
  printf("%d\n", mojSklad.Zlozi());
break;
}; /* switch */
} /* while */
return 0;
} /* main */