Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.25 KB | None | 0 0
  1. #include <stdio.h>
  2. #include "escapesequenzen.h"
  3.  
  4. void printFrame();
  5. short getNumber(int);
  6. void printInputNumber(int, short);
  7. char getOperator(int);
  8. void printInputOperator(int, char);
  9. short calcResult(short, short, char);
  10. void printResultNumber(int, short);
  11. void printBinary(int, short);
  12. void printResultOperator(char);
  13. int askAgain();
  14. void clearBuffer();
  15.  
  16. int main ()
  17. {
  18. short Op1, Op2, Erg; // erste und zweite Operanden fuer Rechner und Ergebnis
  19. char Operator; // Bitweise Operator fuer Rechner
  20. int JaNein; // Ergebnis der Ja/Nein Frage
  21. do
  22. {
  23. CLEAR; // loescht den bildshirm
  24. HOME; // setzt den Cursor nach oben
  25. printFrame();
  26. Op1 = getNumber(4);
  27. printInputNumber(4, Op1);
  28. printResultNumber(11, Op1);
  29. printBinary(11, Op1);
  30. Operator = getOperator(5);
  31. printInputOperator(5, Operator);
  32. printResultOperator(Operator);
  33. Op2 = getNumber(6);
  34. printInputNumber(6, Op2);
  35. printResultNumber(13, Op2);
  36. printBinary(13, Op2);
  37. Erg = calcResult(Op1, Op2, Operator);
  38. printResultNumber(15, Erg);
  39. printBinary(15, Erg);
  40. JaNein = askAgain();
  41. } while (JaNein != 0);
  42. POSITION (21, 1);
  43. return 0;
  44. }
  45.  
  46. /*******************************************************************
  47. * Funktion: printFrame
  48. * Beschreibung: stellt die Maske mit feststehenden Texten dar
  49. * Parameter: keine
  50. * Ergebnis: keine
  51. *******************************************************************/
  52. void printFrame()
  53. {
  54. printf("|-----------------------------------------------------------|\n");
  55. printf("| Bitoperatoren-Rechner |\n");
  56. printf("| |\n");
  57. printf("| Eingabe Zahl 1 : |\n");
  58. printf("| Operator : |\n");
  59. printf("| Eingabe Zahl 2 : |\n");
  60. printf("| |\n");
  61. printf("|-----------------------------------------------------------|\n");
  62. printf("| |\n");
  63. printf("| | dez. | okt. | hex. | Binaerdarstellung |\n");
  64. printf("| Zahl 1 | | | | |\n");
  65. printf("| Operator | | | | |\n");
  66. printf("| Zahl 2 | | | | |\n");
  67. printf("|-----------------------------------------------------------|\n");
  68. printf("| Ergebnis | | | | |\n");
  69. printf("| |\n");
  70. printf("|-----------------------------------------------------------|\n");
  71. }
  72.  
  73. /*******************************************************************
  74. * Funktion: getNumber
  75. * Beschreibung: liest Operanden in der angegebenen Zeile ein
  76. * Parameter: Integer, line wo Zahl eingegeben ist
  77. * Ergebnis: erste Operanden
  78. *******************************************************************/
  79. short getNumber(int Line)
  80. {
  81. short Zahl;
  82. int Check;
  83.  
  84. POSITION (18, 1);
  85. printf("Bitte geben Sie eine ganze Zahl ein \n"
  86. " \n"
  87. " \n");
  88. POSITION (Line, 26);
  89. Check = scanf("%hd", &Zahl);
  90. clearBuffer();
  91. while (!Check)
  92. {
  93. POSITION (Line, 26);
  94. printf(" ");
  95. POSITION (18, 1);
  96. printf("Sie haben keine ganze Zahl eingegeben. \n"
  97. "Bitte geben Sie eine ganze Zahl ein. \n"
  98. " ");
  99. POSITION (Line, 26);
  100. Check = scanf("%hd", &Zahl);
  101. clearBuffer();
  102. POSITION (Line, 26);
  103. printf(" ");
  104. }
  105. return Zahl;
  106. }
  107.  
  108. /*******************************************************************
  109. * Funktion: printInputNumber
  110. * Beschreibung: gibt eingegebenen Operanden in der angegebener
  111. * Zeile aus
  112. * Parameter: Integer, line wo Operanden ausgegeben ist, Short
  113. * Operanden die ausgegeben sein sollte
  114. * Ergebnis: keine
  115. *******************************************************************/
  116. void printInputNumber(int Line, short Zahl)
  117. {
  118. POSITION (Line, 26);
  119. printf("%hd ", Zahl);
  120. }
  121.  
  122.  
  123. /*******************************************************************
  124. * Funktion: getOperator
  125. * Beschreibung: liest das erste Zeichen des Operators ein
  126. * Parameter: int, line eingelesen
  127. * Ergebnis: char, Bitweise Operator
  128. *******************************************************************/
  129. char getOperator(int Line)
  130. {
  131. char Operator;
  132.  
  133. POSITION (18, 1);
  134. printf("Bitte geben Sie eine gueltige Operater ein. \n");
  135. printf("Gueltige Operator sind: |, &, >, <, ^, +, -, * und /. \n");
  136. POSITION (Line, 26);
  137. scanf("%c", &Operator);
  138. clearBuffer();
  139. while (Operator!='|' && Operator!='&' && Operator!='>' && Operator!='<' && Operator !='^'
  140. && Operator!='+' && Operator!='-' && Operator!='*' && Operator!='/')
  141. {
  142. POSITION (Line, 26);
  143. printf(" ");
  144. POSITION (18, 1);
  145. printf("Sie haben keine gueltige Operator eingegeben. \n");
  146. printf("Bitte geben Sie eine gueltige Operater ein. \n");
  147. printf("Gueltige Operator sind: |, &, >, <, ^, +, -, * und / \n");
  148. POSITION (Line, 26);
  149. scanf("%c", &Operator);
  150. clearBuffer();
  151. }
  152.  
  153. return Operator;
  154. }
  155. /*******************************************************************
  156. * Funktion: printInputOperator
  157. * Beschreibung: gibt Operator aus
  158. * Parameter: Bitweise Operator
  159. * Ergebnis: keine
  160. *******************************************************************/
  161. void printInputOperator(int Line, char Operator)
  162. {
  163. POSITION (Line, 26);
  164. printf("%c ", Operator);
  165. }
  166. /*******************************************************************
  167. * Funktion: calcResult
  168. * Beschreibung: berechnet Ergebnis
  169. * Parameter: Zwei Operanden(short) und ein Operator(char)
  170. * Ergebnis: Ergebnis von die Rechnung
  171. *******************************************************************/
  172. short calcResult(short Op1, short Op2, char Operator)
  173. {
  174. short Erg;
  175.  
  176. switch (Operator)
  177. {
  178. case '|': Erg = Op1 | Op2; break;
  179. case '&': Erg = Op1 & Op2; break;
  180. case '>': Erg = Op1 >> Op2; break;
  181. case '<': Erg = Op1 << Op2; break;
  182. case '^': Erg = Op1 ^ Op2; break;
  183. case '+': Erg = Op1 + Op2; break;
  184. case '-': Erg = Op1 - Op2; break;
  185. case '*': Erg = Op1 * Op2; break;
  186. case '/': Erg = Op1 / Op2; break;
  187. }
  188.  
  189. return Erg;
  190. }
  191. /*******************************************************************
  192. * Funktion: printResultNumber
  193. * Beschreibung: gibt die Ergebnisse (dez., okt. und hex.) aus
  194. * Parameter: Line Nummer wo die Ergebnis ausgegeben sollten
  195. * und Ergebnis von funktion calcResult
  196. * Ergebnis: keine
  197. *******************************************************************/
  198. void printResultNumber(int Line, short Zahl)
  199. {
  200. POSITION (Line, 13);
  201. printf("%7hd", Zahl);
  202. POSITION (Line, 23);
  203. printf("%8ho", Zahl);
  204. POSITION (Line, 36);
  205. printf("%4hx", Zahl);
  206. }
  207. /*******************************************************************
  208. * Funktion: printBinary
  209. * Beschreibung: Gibt ein Zahl als Binar aus
  210. * Parameter: Line wo die Zahl ausgegeben sollte und Zahl
  211. * Ergebnis: keine
  212. *******************************************************************/
  213. void printBinary(int Line, short Zahl)
  214. {
  215. int i;
  216. POSITION (Line, 42);
  217. for (i = 15; i >= 0; i--)
  218. {
  219. if ((Zahl &(1<<i)) != 0)
  220. printf("1");
  221. else
  222. printf("0");
  223. }
  224. }
  225.  
  226. /*******************************************************************
  227. * Funktion: printResultOperator
  228. * Beschreibung: gibt Operator im Ergebnisbereich aus
  229. * Parameter: char, Operator
  230. * Ergebnis: keine
  231. *******************************************************************/
  232. void printResultOperator (char Operator)
  233. {
  234. POSITION (12, 19);
  235. printf("%c", Operator);
  236. POSITION (12, 30);
  237. printf("%c", Operator);
  238. POSITION (12, 39);
  239. printf("%c", Operator);
  240. POSITION (12, 57);
  241. printf("%c", Operator);
  242. }
  243. /*******************************************************************
  244. * Funktion: askAgain
  245. * Beschreibung: Ja/Nein Abfrage
  246. * Parameter: keine
  247. * Ergebnis: int, Ja=1, Nein=0
  248. *******************************************************************/
  249. int askAgain()
  250. {
  251. char jn;
  252. int JaNein;
  253. POSITION (18, 1);
  254. printf("Moechten Sie diesen Rechner nochmal benutzen \n "
  255. " \n "
  256. "(J)a/(N)ein: ");
  257. do
  258. {
  259. scanf("%c", &jn);
  260. clearBuffer();
  261. if (jn != ('j'||'J'||'n'||'N'))
  262. {
  263. POSITION (18, 1);
  264. printf(" \n "
  265. " \n "
  266. " ");
  267. POSITION (18, 1);
  268. printf("Sie haben keine (J)a oder (N)ein eingegeben. \n"
  269. "Moechten Sie diesen Rechner nochmal benutzen \n"
  270. "(J)a/(N)ein: ");
  271. }
  272. } while (jn!='j' && jn!='J' && jn!='n' && jn!='N');
  273. if (jn == 'j' || jn == 'J')
  274. JaNein = 1;
  275. else
  276. JaNein = 0;
  277. return JaNein;
  278. }
  279.  
  280. /*******************************************************************
  281. * Funktion: clearBuffer
  282. * Beschreibung: Tastaturpuffer leeren
  283. * Parameter: keine
  284. * Ergebnis: keine
  285. *******************************************************************/
  286. void clearBuffer()
  287. {
  288. char Dummy;
  289. do
  290. {
  291. scanf("%c", &Dummy);
  292. } while (Dummy != '\n');
  293. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement