Advertisement
Guest User

P11

a guest
Dec 13th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.54 KB | None | 0 0
  1. // ******************************************************************************************
  2. // * Service-Funktionen für C
  3. // *
  4. // * Autor: Marcel Klein [klein.marcel@fh-swf.de]
  5. // * Datei: fhswf_service.h
  6. // * Datum: 11.10.2017
  7. // *
  8. // * Beschreibung:
  9. // * Headerdatei mit diversen Service-Funktionen (z.B. zum Leeren des Tastaturpuffers) unter
  10. // * Verwendung der Programmiersprache C für das Fach "Programmierung 1" an der FH-SWF.
  11. // * Die Datei wird ggf. im Laufe des Semesters ergänzt (Änderungsdatum beachten!).
  12. // *
  13. // * Installation/Verwendung:
  14. // * C-Projekt erstellen und Headerdatei (*.h) in das Projektverzeichnis
  15. // * kopieren (dort liegen auch die Quellcodedateien). Einbinden der Header-
  16. // * datei dann mit [#include "fhswf_service.h"].
  17. // * Bei dieser Variante muss die Headerdatei in jedes neue Projektverzeichnis
  18. // * erneut kopiert werden.
  19. // *
  20. // ******************************************************************************************
  21.  
  22. // Schutz vor mehrfachem Einbinden der Headerdatei
  23. #pragma once
  24. #ifndef _fhswf_service_h_
  25. #define _fhswf_service_h_
  26.  
  27. // Funktion zum Leeren des Tastaturpuffers
  28. void tastaturpuffer_leeren()
  29. {
  30. //ungetch("56");
  31. int tmp;
  32.  
  33. do
  34. {
  35. tmp = getchar();
  36. }
  37. while (tmp != EOF && tmp != '\n');
  38. }
  39.  
  40.  
  41.  
  42. // Funktion zur Prüfung der Eingabe
  43. int check_Input_int(char* eingabe, int laenge)
  44. {
  45. int fehler = 0;
  46. int rc = 0; // return_code
  47. int index; // Schleifenindex
  48.  
  49.  
  50. // führendes + Zeichen eliminieren
  51. if (eingabe[0] == '+')
  52. {
  53. laenge = laenge - 1;
  54. index = 0;
  55. while (eingabe[index] != 0)
  56. {
  57. eingabe[index] = eingabe[index + 1];
  58. index++;
  59. }
  60. eingabe[index - 1] = 0; //Stringendezeichen setzen
  61. }
  62.  
  63. // übergebenen String zeichenweise auswerten
  64. for (index = 0; index < laenge; index++)
  65. {
  66. rc = isdigit(eingabe[index]); // Prüfung auf Ziffer 0 bis 9
  67.  
  68. // Rückgabewert auswerten
  69. if (rc == 0)
  70. {
  71. fehler++; // Fehlervariable erhöhen
  72. }
  73. }
  74.  
  75. // Prüfung auf Vorzeichen
  76. if (eingabe[0] == '-')
  77. {
  78. fehler--;
  79. }
  80.  
  81. //Rückgabe an aufrufende Funktion
  82. return (fehler);
  83. }
  84.  
  85. // Ende Funktion check_Input_int()
  86.  
  87. #endif
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128. /************************************************/
  129. /* Programm: P11.cpp */
  130. /* */
  131. /* */
  132. /* */
  133. /* Autor: Tristan Zündorff*/
  134. /* */
  135. /* erstellt: 03.12.2018*/
  136. /* */
  137. /* Version: 1.0 */
  138. /* */
  139. /* Bemerkung: */
  140. /* */
  141. /************************************************/
  142.  
  143.  
  144.  
  145. #define _CRT_SECURE_NO_WARNINGS
  146. #define _USE_MATH_DEFINES
  147. #include <stdio.h>
  148. #include <math.h>
  149. #include <cmath>
  150. #include <string.h>
  151. #include <time.h>
  152. #include <ctype.h>
  153. #include "fhswf_service.h"
  154. using namespace std;
  155.  
  156. //Funktionsprototypen
  157. int input(char *, int *);
  158. int memory(int **, int);
  159.  
  160. int main(void) {
  161. int loop = 1, check, index;
  162. int * numberarray;
  163. char howmanychar[1000], numberchar[1000];
  164. int howmanyint, numberint;
  165.  
  166. while (loop == 1) {
  167. check = 0;
  168.  
  169. //Anzahl Zahlen eingeben
  170. do {
  171. if (check == 1) {
  172. printf("\nUngueltiege Eingabe");
  173. }
  174. printf("\nAnzahl Zahlen: ");
  175. check = input(&howmanychar[0], &howmanyint);
  176. if (howmanyint < 2) {
  177. check = 1;
  178. }
  179. } while (check == 1);
  180.  
  181. //Speicher zuweisen
  182. check = memory(&numberarray, howmanyint);
  183. if (check == 1) {
  184. printf("\nError allocating memory");
  185. getchar();
  186. return 1;
  187. }
  188.  
  189. //Zahlen eingeben
  190. for (index = 0; index <= howmanyint-1; index++) {
  191. check = 0;
  192. do {
  193. if (check == 1) {
  194. printf("\nUngueltiege Eingabe");
  195. }
  196. printf("\nZahl %d: ", index + 1);
  197. check = input(&numberchar[0], &numberint);
  198. if (numberint <= 0) {
  199. check = 1;
  200. }
  201. } while (check == 1);
  202. numberarray[index] = numberint;
  203. }
  204.  
  205. //Eingabe ausgeben
  206. printf("\nEingabe: \n");
  207. for (index = 0; index <= howmanyint-1; index++) {
  208. printf("%d ", numberarray[index]);
  209. }
  210.  
  211. //ggT, kgv o. beides
  212. printf("\n\nggT\t\t(1)\nkgV\t\t(2)\nbeide\t\t(0)\n");
  213. check = 0;
  214. do {
  215. if (check == 1) {
  216. printf("\nUngueltiege Eingabe\n");
  217. }
  218. check = input(&numberchar[0], &numberint);
  219.  
  220. if ((numberint != 1) && (numberint != 2) && (numberint != 0)) {
  221. check = 1;
  222. }
  223. } while (check == 1);
  224.  
  225. //switch case für entsprechenden Fall
  226. switch (numberint) {
  227. case 1: printf("\nggT: %d", ggt(&numberarray[0], howmanyint)); break;
  228. case 2: printf("\nkgV: %d", kgv(&numberarray[0], howmanyint)); break;
  229. case 0: printf("\nggT: %d\nkgV: %d\n", ggt(&numberarray[0], howmanyint), kgv(&numberarray[0], howmanyint)); break;
  230. default: printf("\n\nUnknown switch/case Error\n\n");
  231. }
  232.  
  233. free(&numberarray[0]);
  234.  
  235. //Wiederholung?
  236. printf("\n\n====================\n\nContinue? (ja = 1|nein = 0)\n");
  237. scanf("%d", &loop);
  238. tastaturpuffer_leeren();
  239. while ((loop != 0) && (loop != 1)) {
  240. printf("\nUngueltiege Eingabe\nContinue? (ja = 1|nein = 0)\n");
  241. scanf("%d", &loop);
  242. tastaturpuffer_leeren();
  243. }
  244.  
  245. }
  246.  
  247. return (1);
  248. }
  249.  
  250. //Eingabe von belibigen werten
  251. int input(char * charinput, int * intinput) {
  252. int check = 0;
  253. gets_s(charinput, 1000);
  254. //Auf int eingabe überprüfen
  255. if (check_Input_int(&charinput[0], strlen(charinput)) != 0) {
  256. check = 1;
  257. }
  258. //In int Übergabewert einfügen
  259. else {
  260. *intinput = atoi(charinput);
  261. check = 0;
  262. }
  263.  
  264. return check;
  265. }
  266.  
  267. //Speicher zuweisen
  268. int memory(int ** numberarray, int howmanyint) {
  269. int check = 0;
  270. (*numberarray) = (int*)malloc(howmanyint * sizeof(int));
  271.  
  272. if ((*numberarray) == NULL) {
  273. check = 1;
  274. }
  275.  
  276. return check;
  277. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement