Advertisement
Guest User

Untitled

a guest
Dec 19th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.77 KB | None | 0 0
  1. //---------------------------------------------------------------------------
  2. //Programm 2D_Feld
  3. //2D Felder als 1D Feld von Zeigern definieren
  4. //Übergabe an Funktionen
  5. //Speicherplatz dynamisch reservieren
  6. //---------------------------------------------------------------------------
  7. #define _CRT_SECURE_NO_WARNINGS
  8. #include<math.h>
  9. #include<stdlib.h>
  10. #include<string.h>
  11. #include<stdio.h>
  12. #include<time.h>
  13. #include<ctype.h>
  14. #include "fhswf_service.h"
  15.  
  16. // Aufgabenstellung
  17. // Bild als 2D Feld an Funktion übergeben und einzelnen Grauwert ändern
  18. // 2D Feld als 1D Feld von Zeigern aufbauen
  19. // hier: Bilddimension während der Laufzeit festlegen
  20. // --> Speicherplatz dynamisch reservieren
  21.  
  22.  
  23.  
  24.  
  25. // Funktionsprototypen
  26. void reservierung(int***, int , int);
  27. void set_array(int**, int, int);
  28. void print_array(int**, int, int);
  29. void rechnung(int**, int**, int**, int,int,int,int, int);
  30. int check_Input_int(char*, int);
  31.  
  32. // Hauptprogramm
  33. int main(void)
  34. {
  35.  
  36. int x_wert, y_wert, wert_neu, index;
  37. int anzahl_spalten_raum , wdh, anzahl_zeilen_raum,fehler, laenge, anzahl_spalten,menu, anzahl_zeilen, zahl, dim, anz, laufx, laufy, run, index_x, index_y;
  38. char menuu[100];
  39. char anzahl_zeilenc[100];
  40. char anzahl_spaltenc[100];
  41. char anzahl_zeilenc_raum[100];
  42. char anzahl_spaltenc_raum[100];
  43. char skalarc[100];
  44. do
  45. {
  46. x_wert = 0, y_wert = 0, wert_neu = 0, index = 0;
  47. anzahl_spalten_raum = 0, wdh = 0, anzahl_zeilen_raum = 0, anzahl_spalten = 0, anzahl_zeilen = 0, zahl = 0, dim = 0, anz = 0, laufx = 0, laufy = 0, run = 0, index_x = 0, index_y = 0, menu = 0;
  48.  
  49.  
  50. menuu[99] = { 0 };
  51. anzahl_zeilenc[99] = { 0 };
  52. anzahl_spaltenc[99] = { 0 };
  53. anzahl_zeilenc_raum[99] = { 0 };
  54. anzahl_spaltenc_raum[99] = { 0 };
  55.  
  56. //initialisieren
  57.  
  58. // Zeigerfeld dynamisch anlegen
  59. int **bild = 0;
  60. int **raum = 0;
  61. int **ergebnis = 0;
  62.  
  63.  
  64. //menu abfrage
  65. do
  66. {
  67.  
  68.  
  69. printf("\n [1]: Addition\n [2]: Subtraktion\n [3]: multiplikation mit skalar\n [4]: Multiplikation\n [5]: Transponieren\n ");
  70. gets_s(menuu);
  71. laenge = strlen(menuu);
  72. fehler = check_Input_int(menuu, laenge);
  73. menu = atoi(menuu);
  74. } while (fehler != 0 || menu >5 || menu <1);
  75.  
  76. //vorraussetzungen
  77. if (menu == 1) { printf("bei der Addition von matrizen muessen beide matrizen die gleiche dimension aufweisen\n"); }
  78. if (menu == 2) { printf("bei der Subtraktion von matrizen muessen beide matrizen die gleiche dimension aufweisen\n"); }
  79. if (menu == 4) { printf("Bei der Multiplikation zweier matrizen muessen bei die gleiche dimension aufweisen und quadratisch sein\n"); }
  80.  
  81. //matrix groesse
  82. do{
  83. printf("Bitte die Anzahl der zeilen fuer 1 eingeben\n");
  84. gets_s(anzahl_zeilenc);
  85. laenge = strlen(anzahl_zeilenc);
  86. fehler = check_Input_int(anzahl_zeilenc, laenge);
  87. anzahl_zeilen = atoi(anzahl_zeilenc);
  88. } while (fehler != 0 || anzahl_zeilen < 0);
  89.  
  90.  
  91. do
  92. {
  93. printf("Bitte die Anzahl der Spalten fuer 1 eingeben\n");
  94. gets_s(anzahl_spaltenc);
  95. laenge = strlen(anzahl_spaltenc);
  96. fehler = check_Input_int(anzahl_spaltenc, laenge);
  97. anzahl_spalten = atoi(anzahl_spaltenc);
  98.  
  99. /*if (anzahl_spalten != anzahl_zeilen && menu == 4)
  100. {
  101. fehler++;
  102. }*/
  103. } while(fehler != 0 || anzahl_spalten < 0);
  104.  
  105.  
  106.  
  107.  
  108. //matrix groesse 2
  109. if (menu == 1 || menu == 2 || menu == 4)
  110. {
  111. do
  112. {
  113. printf("Bitte die Anzahl der zeilen fuer 2 eingeben\n");
  114. gets_s(anzahl_zeilenc_raum);
  115. laenge = strlen(anzahl_zeilenc_raum);
  116. fehler = check_Input_int(anzahl_zeilenc_raum, laenge);
  117. anzahl_zeilen_raum = atoi(anzahl_zeilenc_raum);
  118.  
  119. //if (anzahl_zeilen_raum != anzahl_zeilen && menu == 4) { fehler++; }
  120. } while (fehler != 0 || anzahl_zeilen_raum < 0);
  121.  
  122. do{
  123. printf("Bitte die Anzahl der Spalten fuer 2 eingeben\n");
  124. gets_s(anzahl_spaltenc_raum);
  125. laenge = strlen(anzahl_spaltenc_raum);
  126. fehler = check_Input_int(anzahl_spaltenc_raum, laenge);
  127. anzahl_spalten_raum = atoi(anzahl_spaltenc_raum);
  128. //if (anzahl_spalten_raum != anzahl_spalten && menu == 4) { fehler++; }
  129. //if (anzahl_spalten_raum != anzahl_zeilen_raum && menu == 4)
  130. //{
  131. // fehler++;
  132. //}
  133. } while (fehler != 0 || anzahl_spalten_raum < 0);
  134. }
  135. else
  136. {
  137. anzahl_zeilen_raum = 0;
  138. anzahl_spalten_raum = 0;
  139. }
  140.  
  141.  
  142.  
  143. //reservierung(bild, raum, ergebnis, anzahl_zeilen, anzahl_spalten, anzahl_zeilen_raum, anzahl_spalten_raum);
  144. //skalar
  145. if (menu == 3)
  146. {
  147. do{
  148.  
  149. printf("skalar 1: \n");
  150. gets_s(skalarc);
  151. laenge = strlen(skalarc);
  152. fehler = check_Input_int(skalarc, laenge);
  153. zahl = atoi(skalarc);
  154. } while (fehler != 0);
  155. }
  156.  
  157. //dynamische zuewisung
  158. reservierung(&bild, anzahl_zeilen, anzahl_spalten);
  159. reservierung(&raum, anzahl_zeilen_raum, anzahl_spalten_raum);
  160. reservierung(&ergebnis, anzahl_zeilen, anzahl_spalten_raum);
  161. //dynamische zuweisung
  162. /*raum = (int**)malloc(anzahl_zeilen_raum * sizeof(int*));
  163.  
  164. for (index = 0; index < anzahl_spalten_raum; index++)
  165. {
  166. raum[index] = (int*)malloc(anzahl_spalten_raum * sizeof(int));
  167. }
  168.  
  169.  
  170.  
  171. //dynamische zuweisung je nach
  172. if (menu == 4)
  173. {
  174. ergebnis = (int**)malloc(anzahl_spalten_raum * sizeof(int*));
  175.  
  176. for (index = 0; index < anzahl_zeilen; index++)
  177. {
  178. ergebnis[index] = (int*)malloc(anzahl_zeilen * sizeof(int));
  179. }
  180. }
  181.  
  182. if(menu == 5)
  183. {
  184. ergebnis = (int**)malloc(anzahl_spalten * sizeof(int*));
  185.  
  186. for (index = 0; index < anzahl_zeilen; index++)
  187. {
  188. ergebnis[index] = (int*)malloc(anzahl_zeilen * sizeof(int));
  189. }
  190. }
  191.  
  192. else
  193. {
  194.  
  195.  
  196. ergebnis = (int**)malloc(anzahl_zeilen * sizeof(int*));
  197.  
  198. for (index = 0; index < anzahl_spalten; index++)
  199. {
  200. ergebnis[index] = (int*)malloc(anzahl_spalten * sizeof(int));
  201. }
  202. }
  203. */
  204.  
  205.  
  206. // Aufruf der Funktionen
  207. // Reihenfolge legt die Ablaufsteuerung fest
  208. printf("matrix 1: \n");
  209. set_array(bild, anzahl_zeilen, anzahl_spalten);
  210.  
  211.  
  212. printf("matrix 2: \n");
  213. set_array(raum, anzahl_zeilen_raum, anzahl_spalten_raum);
  214.  
  215.  
  216. printf("matrix 1: \n");
  217. print_array(bild, anzahl_zeilen, anzahl_spalten);
  218.  
  219.  
  220. printf("\nmatrix 2 : \n");
  221. print_array(raum, anzahl_zeilen_raum, anzahl_spalten_raum);
  222.  
  223.  
  224. rechnung(bild,raum, ergebnis, anzahl_zeilen,anzahl_spalten, anzahl_spalten_raum, menu, zahl);
  225.  
  226. if (menu == 5)
  227. {
  228. printf("\nmatrix ergebnis : \n");
  229. print_array(ergebnis, anzahl_spalten, anzahl_zeilen);
  230. }
  231. else
  232. {
  233. printf("\nmatrix ergebnis : \n");
  234. print_array(ergebnis, anzahl_zeilen, anzahl_spalten);
  235. }
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243. getchar();
  244. free(bild); // Speicherplatz wieder freigeben
  245. free(raum);
  246. free(ergebnis);
  247.  
  248. //wdh
  249.  
  250. printf("\nmoechten sie das prgramm wieder holen ? [1]\n");
  251. scanf("%i", &wdh);
  252. tastaturpuffer_leeren();
  253.  
  254.  
  255. } while (wdh == 1);
  256. }
  257. // Ende main
  258.  
  259.  
  260. // Funktion set_array()
  261. // Funktion zum Besetzen des Feldes
  262.  
  263.  
  264.  
  265. void reservierung(int*** bild,int anzahl_zeilen, int anzahl_spalten)
  266. {
  267. int index;
  268.  
  269. *bild = (int**)malloc(anzahl_zeilen * sizeof(int*));
  270.  
  271. for (index = 0; index < anzahl_zeilen; index++)
  272. {
  273. (*bild)[index] = (int*)malloc(anzahl_spalten * sizeof(int));
  274.  
  275. }
  276.  
  277. }
  278.  
  279.  
  280.  
  281. void set_array(int**feld, int zeilen, int spalten)
  282. {
  283. int index_x = 0; // Laufindizes
  284. int index_y = 0;
  285. int index = 0;
  286. int zahl = 0;
  287.  
  288. // Feld in geschachtelter for Schleife durchlaufen
  289. // Feldelemente könnten individuell besetzt werden
  290. // hier alle selben Wert
  291.  
  292. for (index_y = 0; index_y < zeilen; index_y++)
  293. {
  294. for (index_x = 0; index_x < spalten; index_x++)
  295. {
  296. printf("Geben sie die Zahl fuer die stell y = %i & x = %i an \n", index_y, index_x);
  297. scanf("%i", &zahl);
  298. feld[index_y][index_x] = zahl;
  299. }
  300. }
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307. }
  308. // Ende Funktion Feld besetzen
  309.  
  310.  
  311. // Funktion change_array()
  312. // Grauwerte ändern
  313. void rechnung(int** feld, int** raum,int** loesung, int zeilen, int spalten, int spaltenraum, int menu, int zahl)
  314. {
  315. int index_x, index_y, ergebnis = 0;
  316. int index_xv=0, index_yv = 0;
  317.  
  318.  
  319.  
  320. // Koordinaten und neuen GW eingeben
  321.  
  322. if (menu == 1)
  323. {
  324.  
  325. for (int row_c = 0; row_c < zeilen; row_c++) // Setzt Ergebnismatrix auf 0
  326. {
  327. for (int col_c = 0; col_c < spaltenraum; col_c++)
  328. {
  329. loesung[row_c][col_c] = 0;
  330. }
  331. }
  332.  
  333. for (index_x = 0; index_x < zeilen; index_x++)
  334. {
  335. for (index_y = 0; index_y < zeilen; index_y++)
  336. {
  337. loesung[index_x][index_y] = feld[index_x][index_y] + raum[index_x][index_y];
  338. }
  339. }
  340. }
  341.  
  342.  
  343.  
  344.  
  345. if (menu == 2)
  346. {
  347. for (index_x = 0; index_x < zeilen; index_x++)
  348. {
  349. for (index_y = 0; index_y < zeilen; index_y++)
  350. {
  351. loesung[index_x][index_y] = feld[index_x][index_y] - raum[index_x][index_y];
  352. }
  353. }
  354. }
  355.  
  356.  
  357.  
  358. if (menu == 3)
  359. {
  360. for (index_x = 0; index_x < spalten; index_x++)
  361. {
  362. for (index_y = 0; index_y < spalten; index_y++)
  363. {
  364. loesung[index_y][index_x] = feld[index_x][index_y] * zahl;
  365. }
  366. }
  367. }
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374. if(menu == 4)
  375. {
  376.  
  377.  
  378. for (int row_c = 0; row_c < zeilen; row_c++) // Setzt Ergebnismatrix auf 0
  379. {
  380. for (int col_c = 0; col_c < spaltenraum; col_c++)
  381. {
  382. loesung[row_c][col_c] = 0;
  383. }
  384. }
  385.  
  386.  
  387. for (int row_c = 0; row_c < zeilen; row_c++)
  388. {
  389. for (int col_c = 0; col_c < spaltenraum; col_c++)
  390. {
  391. for (int add_c = 0; add_c < spalten; add_c++)
  392. {
  393. loesung[row_c][col_c] += feld[row_c][add_c] * raum[add_c][col_c];
  394. }
  395. }
  396. }
  397. }
  398.  
  399.  
  400.  
  401. if (menu == 5)
  402. {
  403. for (index_x = 0; index_x < zeilen; index_x++)
  404. {
  405. for (index_y = 0; index_y < spalten; index_y++)
  406. {
  407. loesung[index_x][index_y] = feld[index_y][index_x];
  408. }
  409. }
  410. }
  411.  
  412.  
  413.  
  414. }
  415.  
  416.  
  417.  
  418.  
  419. // Funktion print_array()
  420. // Werte ausgeben
  421. void print_array(int** feld, int zeilen, int spalten)
  422. {
  423.  
  424.  
  425.  
  426. int index_x = 0; // Laufindizes
  427. int index_y = 0;
  428.  
  429. // in geschachtelter Schleife einzelne GW ausgeben
  430. for (index_y = 0; index_y < zeilen; index_y++)
  431. {
  432. printf("\n");
  433. for (index_x = 0; index_x < spalten; index_x++)
  434. {
  435. printf(" %i", feld[index_y][index_x]);
  436. }
  437. }
  438.  
  439. }
  440. // Ende Funktion GW ausgeben
  441.  
  442.  
  443. /* Ende Beispielprogramm */
  444.  
  445.  
  446. int check_Input_int(char* eingabe, int laenge)
  447. {
  448. int punkt = 0;
  449. int fehler = 0;
  450. int rc = 0; // return_code
  451. int index; // Schleifenindex
  452.  
  453.  
  454. // führendes + Zeichen eliminieren
  455. if (eingabe[0] == '+')
  456. {
  457.  
  458. laenge = laenge - 1;
  459. index = 0;
  460. while (eingabe[index] != 0)
  461. {
  462. eingabe[index] = eingabe[index + 1];
  463. index++;
  464. }
  465. eingabe[index] = 0; //Stringendezeichen setzen
  466. }
  467.  
  468. // übergebenen String zeichenweise auswerten
  469. for (index = 0; index < laenge; index++)
  470. {
  471. rc = isdigit(eingabe[index]); // Prüfung auf Ziffer 0 bis 9
  472.  
  473. // Rückgabewert auswerten
  474. if (rc == 0)
  475. {
  476. fehler++; // Fehlervariable erhöhen
  477. }
  478.  
  479. /*if (eingabe[index] == '.' && punkt == 0)
  480. {
  481. fehler--;
  482. punkt++;//fuer float
  483. }*/
  484. }
  485.  
  486. // Prüfung auf Vorzeichen
  487. if (eingabe[0] == '-')
  488. {
  489. fehler--;
  490. }
  491.  
  492.  
  493.  
  494.  
  495. //Rückgabe an aufrufende Funktion
  496. return (fehler);
  497. }
  498.  
  499. // Ende Funktion check_Input_int()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement