Guest User

Untitled

a guest
Jul 14th, 2016
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.45 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. struct lista {
  7. int info;
  8. struct lista *prox;
  9. };
  10.  
  11. typedef struct lista Lista;
  12.  
  13. struct pilha {
  14. Lista *topo;
  15. };
  16.  
  17. typedef struct pilha Pilha;
  18.  
  19. struct calculadora {
  20. char formato[21];
  21. Pilha *p;
  22. };
  23.  
  24. typedef struct calculadora Calculadora;
  25.  
  26.  
  27. Pilha *cria_pilha(void) { /* criando uma pilha */
  28. Pilha *novo = (Pilha*) malloc(sizeof(Pilha));
  29. novo -> topo = NULL;
  30. return novo;
  31. }
  32.  
  33.  
  34.  
  35. void push (Pilha *p, int i) { /* inserimos um valor na lista*/
  36. Lista *novo = (Lista*) malloc(sizeof(Lista));
  37. novo -> info = i;
  38. novo -> prox = p -> topo;
  39. p -> topo = novo;
  40. }
  41.  
  42. int pilha_vazia(Pilha *p) {
  43. if (p == NULL) return 1;
  44. else return 0;
  45. }
  46.  
  47.  
  48. int pop (Pilha *p) { /*retiramos um valor da lista*/
  49. int i;
  50. Lista *temp;
  51. if (pilha_vazia(p)) {
  52. printf("pilha vazia\n");
  53. exit(1);
  54. }
  55. temp = p-> topo;
  56. i = temp-> info;
  57. p -> topo = temp-> prox;
  58. free(temp);
  59. return i;
  60. }
  61.  
  62.  
  63. void pilha_libera (Pilha *p) {
  64. Lista *q = p-> topo;
  65. while (q != NULL) {
  66. Lista *temp = q-> prox;
  67. free (q);
  68. q = temp;
  69. }
  70. free (q);
  71. }
  72.  
  73.  
  74. Calculadora *cria_calculadora(char *formato) { /*criamos a calculadora*/
  75. Calculadora *novo = (Calculadora*) malloc(sizeof(Calculadora));
  76. strcpy(novo->formato, formato);
  77. novo -> p = cria_pilha();
  78. return novo;
  79. }
  80.  
  81.  
  82. void operando (Calculadora *c, float v) { /* funcao operando */
  83.  
  84. push(c->p, v);
  85. }
  86.  
  87.  
  88. void operador (Calculadora *c, char op) { /* funcao operador */
  89. float v1, v2, v;
  90.  
  91. if (pilha_vazia (c-> p)) v2 = 0.0;
  92. else v2 = pop(c->p);
  93.  
  94. if (pilha_vazia (c-> p)) v1 = 0.0;
  95. else v1 = pop(c->p);
  96. float x,y,z;
  97. switch (op) {
  98. case '@': v = v1 + v2; printf ("\n O resultado da soma e:"); break;
  99. case '-': v = v1 - v2; printf ("\n O resultado da subtracao e:"); break;
  100. case '*': v = v1 * v2; printf ("\n O resultado da multiplicacao e:");break;
  101. case '/': v = v1 / v2; printf ("\n O resultado da divisao e:");break;
  102. case '#': v = sqrt (v1+v2); x = sqrt(v1); y = sqrt (v2); z = v1+v2;printf("\nA raiz quadrada de v1 e %.2f\nA raiz quadrada de v2 e %.2f\nO resultado mostra a raiz quadrada de v1 + v2 = %2.f e", x,y,z); break;
  103. case '^': v = pow(v1,v2); printf("\nv1 elevado a v2 e: ") ;break;
  104. case 'L': v = log10(v1+v2); x = log10(v1); y = log10(v2); z = v1 + v2; printf("\nLog 10 de v1 e %.2f\nLog 10 de v2 e %.2f\nO resultado de Log 10 de v1 + v2 = %2.f e", x,y,z); break;
  105. case 'l': v = log (v1+v2); x = log(v1); y = log(v2); z = v1 + v2; printf("\nLog 2 de v1 e %.2f\nLog 2 de v2 e %.2f\nO resultado de Log 2 de v1 + v2 = %2.f e", x,y,z); break;
  106. case '%': v = (v2*100)/v1; printf(" \n A porcentagem que v2 representa de v1 e: ", v); break;
  107. case 's': v = sin (v1+v2); x = sin (v1); y = sin(v2); z = v1+v2; printf("\nO sen de v1 e %.2f.\nO seno de v2 e %.2f\n E o seno de v1 + v2 = %.2f e ",x,y,z); break;
  108. case 'c': v = cos (v1+v2); x = cos (v1); y = cos(v2); z = v1+v2; printf("\nO cosseno de v1 e %.2f.\nO cosseno de v2 e %.2f\n E o cosseno de v1 + v2 = %.2f e ",x,y,z); break;
  109. case 't': v = tan (v1+v2); x = tan (v1); y = tan(v2); z = v1+v2; printf("\nA tangente de v1 e %.2f.\nA tangente de v2 e %.2f\n E a tangente de v1 + v2 = %.2f e ",x,y,z); break;
  110.  
  111.  
  112. }
  113.  
  114. push(c-> p, v);
  115. printf(" %.2f\n", v);
  116. }
  117.  
  118. void calc_libera (Calculadora *c) {
  119. pilha_libera (c-> p);
  120. free (c);
  121. }
  122.  
  123.  
  124.  
  125.  
  126. int main(void) {
  127. char c;
  128. float v;
  129. Calculadora *calc;
  130.  
  131. printf ("Bem vindo a Calculadora, esta faz as seguintes operacoes: \nsoma (@) subtracao (-) multiplicacao (*) divisao (/)\nraiz quadrada(#) Exponenciacao(^) Log10(L) Log2(l)\nseno(s) cosseno(c) tangente(t)\n As operacoes #, L, l, s, c, s, apresentarao os resultados para v1, v2 e v1+v2.\n(O resultado que sera usado pela calculadora para fazer a proxima conta sera o \nresultado de v1+v2).\n Para sair: q > [enter].\nDigite v1: ");
  132.  
  133. calc = cria_calculadora("%.2f\n");
  134. do {
  135. scanf("%c", &c);
  136. if (c == '@' || c == '-' || c == '*' || c == '/' || c == '#' || c == '^' || c == 'L' || c == '%' || c == 'l' || c == 's' || c == 'c' || c == 't') {
  137. printf("voce digitou operador %c\n", c);
  138. operador(calc, c);
  139. }
  140. else ungetc (c, stdin);
  141. if (scanf("%f", &v) == 1) {
  142. operando(calc, v);
  143. printf("voce digitou valor %.2f\n", v);
  144. }
  145. } while (c!= 'q');
  146.  
  147. printf("libera calculadora\n");
  148. calc_libera(calc);
  149.  
  150.  
  151. return 0;
  152. }
Add Comment
Please, Sign In to add comment