Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.32 KB | None | 0 0
  1. //Jonasz Makulak
  2.  
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5.  
  6. void DodajWiersz(int **Tab, int *Rozm, int Miejsce) {
  7. int i, DlugoscWiersza;
  8.  
  9. for (i = *Rozm - 1; i >= Miejsce; i--) {
  10. int Ile = **(Tab + i);
  11. *(Tab + i + 1) = (int*)realloc(*(Tab + i), (**(Tab + i) + 1) * sizeof(int));
  12. }
  13.  
  14. scanf("%i", &DlugoscWiersza);
  15.  
  16. *(Tab + Miejsce) = (int*)malloc((DlugoscWiersza+1) * sizeof(int));
  17.  
  18. **(Tab + Miejsce) = DlugoscWiersza;
  19.  
  20. for (i = 1; i <= DlugoscWiersza; i++) {
  21. scanf("%i", (*(Tab + Miejsce) + i));
  22. }
  23. *Rozm += 1;
  24. }
  25. void DodajWierszZJednymElementem(int **Tab, int *Rozm, int Miejsce) {
  26. int i, j;
  27. for (i = *Rozm - 1; i >= Miejsce; i--) {
  28. int Ile = **(Tab + i);
  29. for (j = 0; j <= Ile; j++) {
  30. *(*(Tab + i + 1) + j) = *(*(Tab + i) + j);
  31. }
  32. }
  33.  
  34. **(Tab + Miejsce) = 1;
  35.  
  36. scanf("%i", (*(Tab + Miejsce)+1));
  37.  
  38. *Rozm += 1;
  39. }
  40.  
  41. void UsunWiersz(int **Tab,int *Rozm, int Miejsce) {
  42. int i;
  43.  
  44. for (i = Miejsce; i < *Rozm-1; i++){
  45. int Ile = **(Tab + i + 1);
  46. *(Tab + i) = (int*)realloc(*(Tab + i + 1), (**(Tab + i + 1) + 1) * sizeof(int));
  47. }
  48. *Rozm -= 1;
  49. }
  50.  
  51. void DodajElementDoWiersza(int **Tab, int Miejsce, int Start, int Granica, int *IleWierszy) {
  52. int i = 0,j = 0, Element = 0, IleWWierszu = 0;
  53.  
  54. for (i = Start; i < Granica && i < *IleWierszy; i++) {
  55. IleWWierszu = **(Tab + i);
  56.  
  57. *(Tab + i) = (int*)realloc(*(Tab+i), (IleWWierszu + 2) * sizeof(int));
  58.  
  59. if (Miejsce > IleWWierszu+1)
  60. Miejsce = IleWWierszu+1;
  61. else if (Miejsce <= 0)
  62. Miejsce = 1;
  63.  
  64. **(Tab + i) += 1;
  65.  
  66. for (j = IleWWierszu; j > Miejsce-1; j--)
  67. *(*(Tab + i) + j + 1) = *(*(Tab + i) + j);
  68.  
  69. scanf("%i", &Element);
  70. *(*(Tab + i) + Miejsce) = Element;
  71. }
  72. while (i < Granica) {
  73. DodajWierszZJednymElementem(Tab, IleWierszy, *IleWierszy);
  74. i += 1;
  75. }
  76. }
  77.  
  78. void WyswietlTablice(int **Tab, int Rozm) {
  79. int i=0,j=0;
  80.  
  81. for (i = 0; i < Rozm; i++) {
  82. for (j = 1; j <= **(Tab + i); j++)
  83. printf("%i ", *(*(Tab + i) + j));
  84. printf("\n");
  85. }
  86. }
  87.  
  88. void ZamienWiersze(int **Tab, int n1, int n2) {
  89. int rozmiar = (**(Tab + n1))+1;
  90. int rozmiar2 = (**(Tab + n2)) + 1;
  91. int i;
  92.  
  93. int *Temp = (int*)malloc(rozmiar * sizeof(int));
  94.  
  95. for (i = 0; i < rozmiar; i++)
  96. *(Temp + i) = *(*(Tab + n1) + i);
  97.  
  98. *(Tab + n1) = (int*)malloc(rozmiar2 * sizeof(int));
  99. for (i = 0; i < rozmiar2; i++)
  100. *(*(Tab + n1) + i) = *(*(Tab + n2) + i);
  101.  
  102. *(Tab + n2) = (int*)malloc(rozmiar * sizeof(int));
  103. for (i = 0; i < rozmiar; i++)
  104. *(*(Tab + n2) + i) = *(Temp + i);
  105.  
  106. free(Temp);
  107. }
  108.  
  109. void ZamienKolumny(int **Tab, int m1, int m2, int IleWierszy) {
  110. int i, Temp;
  111.  
  112. for (i = 0; i < IleWierszy; i++) {
  113. if (**(Tab + i) > m1 && **(Tab + i) > m2) {
  114. Temp = *(*(Tab + i) + m1+1);
  115. *(*(Tab + i) + m1+1) = *(*(Tab + i) + m2+1);
  116. *(*(Tab + i) + m2+1) = Temp;
  117. }
  118. }
  119. }
  120.  
  121. void UsunPierwszaKolumne(int **Tab, int *IleWierszy) {
  122. int i,j;
  123.  
  124. for (i = 0; i < *IleWierszy; i++) {
  125. if (**(Tab + i) > 1) {
  126. **(Tab + i) -= 1;
  127. for (j = 1; j <= **(Tab + i); j++)
  128. *(*(Tab + i) + j) = *(*(Tab + i) + j + 1);
  129. }
  130. else {
  131. UsunWiersz(Tab, IleWierszy, i);
  132. i--;
  133. }
  134. }
  135. }
  136.  
  137. void UsunOstatniaKolumne(int **Tab, int *IleWierszy) {
  138. int i, j;
  139.  
  140. for (i = 0; i < *IleWierszy; i++) {
  141. if (**(Tab + i) >= 2) {
  142. **(Tab + i) -= 1;
  143. *(Tab + i) = (int*)realloc(*(Tab + i), (**(Tab + i) + 1)*sizeof(int));
  144. }
  145. else {
  146. UsunWiersz(Tab, IleWierszy, i);
  147. i--;
  148. }
  149. }
  150. }
  151.  
  152. void UsunDowolnaKolumne(int **Tab, int miejsce, int *IleWierszy) {
  153. int i, j;
  154.  
  155. for (i = 0; i < *IleWierszy; i++) {
  156. if (**(Tab + i) > miejsce + 1) {
  157. **(Tab + i) -= 1;
  158. for (j = miejsce + 1; j <= **(Tab + i); j++)
  159. *(*(Tab + i) + j) = *(*(Tab + i) + j + 1);
  160. }
  161. else {
  162. UsunWiersz(Tab, IleWierszy, i);
  163. i--;
  164. }
  165. }
  166. }
  167. int main() {
  168. int MaxIloscWierszy = 100;
  169. int MaxIloscKolumn = 2;
  170. int IloscWierszy = 0;
  171. int i = 0, j = 0;
  172. int Numer = 0;
  173. int Numer2 = 0;
  174. int Temp;
  175.  
  176. char *input = (char*)malloc(3 * sizeof(char));
  177.  
  178. int **Tab = (int**)malloc(MaxIloscWierszy * sizeof(int*));
  179.  
  180. for (i = 0; i < MaxIloscWierszy; i++)
  181. *(Tab + i) = (int*)malloc(MaxIloscKolumn * sizeof(int));
  182.  
  183. do {
  184. scanf(" %c%c%c", &*(input + 0), &*(input + 1), &*(input + 2));
  185.  
  186. if (*(input + 0) == 'A' && *(input + 1) == 'F' && *(input + 2) == 'R') //OK
  187. DodajWiersz(Tab, &IloscWierszy, 0);
  188. else if (*(input + 0) == 'A' && *(input + 1) == 'L' && *(input + 2) == 'R') //OK
  189. DodajWiersz(Tab, &IloscWierszy, IloscWierszy);
  190. else if (*(input + 0) == 'I' && *(input + 1) == 'B' && *(input + 2) == 'R') { //OK
  191. scanf("%i", &Numer);
  192. if (Numer >= 0 && Numer < IloscWierszy)
  193. if(Numer == 0)
  194. DodajWiersz(Tab, &IloscWierszy, 0);
  195. else
  196. DodajWiersz(Tab, &IloscWierszy, Numer);
  197. else {
  198. scanf("%i", &Numer);
  199. for (i = 0; i < Numer; i++)
  200. scanf(" %i", &Temp);
  201. }
  202. }
  203. else if (*(input + 0) == 'I' && *(input + 1) == 'A' && *(input + 2) == 'R') { //OK
  204. scanf("%i", &Numer);
  205. if (Numer >= 0 && Numer < IloscWierszy)
  206. if (Numer == IloscWierszy-1)
  207. DodajWiersz(Tab, &IloscWierszy, IloscWierszy);
  208. else
  209. DodajWiersz(Tab, &IloscWierszy, Numer+1);
  210. else {
  211. scanf("%i", &Numer);
  212. for (i = 0; i < Numer; i++)
  213. scanf(" %i", &Temp);
  214. }
  215. }
  216. else if (*(input + 0) == 'D' && *(input + 1) == 'F' && *(input + 2) == 'R') { //OK
  217. if(IloscWierszy > 0)
  218. UsunWiersz(Tab, &IloscWierszy, 0);
  219. }
  220. else if (*(input + 0) == 'D' && *(input + 1) == 'L' && *(input + 2) == 'R') { //OK
  221. if (IloscWierszy > 0)
  222. UsunWiersz(Tab, &IloscWierszy, IloscWierszy-1);
  223. }
  224. else if (*(input + 0) == 'R' && *(input + 1) == 'M' && *(input + 2) == 'R') { //OK
  225. scanf("%i", &Numer);
  226. if (Numer >= 0 && Numer < IloscWierszy)
  227. UsunWiersz(Tab, &IloscWierszy, Numer);
  228. }
  229. else if (*(input + 0) == 'A' && *(input + 1) == 'F' && *(input + 2) == 'C') { //OK
  230. scanf("%i", &Numer);
  231. DodajElementDoWiersza(Tab, 0, 0, Numer, &IloscWierszy);
  232. }
  233. else if (*(input + 0) == 'A' && *(input + 1) == 'L' && *(input + 2) == 'C') { //OK
  234. scanf("%i", &Numer);
  235. DodajElementDoWiersza(Tab, 100000, 0, Numer, &IloscWierszy);
  236. }
  237. else if (*(input + 0) == 'S' && *(input + 1) == 'W' && *(input + 2) == 'R') { //OK
  238. scanf("%i", &Numer);
  239. scanf("%i", &Numer2);
  240.  
  241. if (Numer < IloscWierszy && Numer2 < IloscWierszy)
  242. ZamienWiersze(Tab, Numer, Numer2);
  243. }
  244. else if (*(input + 0) == 'S' && *(input + 1) == 'W' && *(input + 2) == 'C') {
  245. scanf("%i", &Numer);
  246. scanf("%i", &Numer2);
  247. ZamienKolumny(Tab, Numer, Numer2, IloscWierszy);
  248. }
  249. else if (*(input + 0) == 'D' && *(input + 1) == 'F' && *(input + 2) == 'C') {
  250. UsunPierwszaKolumne(Tab, &IloscWierszy);
  251. }
  252. else if (*(input + 0) == 'D' && *(input + 1) == 'L' && *(input + 2) == 'C') {
  253. UsunOstatniaKolumne(Tab, &IloscWierszy);
  254. }
  255. else if (*(input + 0) == 'R' && *(input + 1) == 'M' && *(input + 2) == 'C') {
  256. scanf("%i", &Numer);
  257. UsunDowolnaKolumne(Tab, Numer, &IloscWierszy);
  258. }
  259. else if (*(input + 0) == 'P' && *(input + 1) == 'R' && *(input + 2) == 'T') //OK
  260. WyswietlTablice(Tab, IloscWierszy);
  261.  
  262. if (IloscWierszy == MaxIloscWierszy - 1) {
  263. Tab = (int**)realloc(Tab, IloscWierszy + 1);
  264. MaxIloscWierszy += 1;
  265. }
  266. } while (*(input + 0) != 'E' && *(input + 1) != 'N' && *(input + 2) != 'D');
  267.  
  268. if(Tab)
  269. free(Tab);
  270. if(input)
  271. free(input);
  272.  
  273. return 0;
  274. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement