Advertisement
Guest User

prvi

a guest
Oct 21st, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.08 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. double *allocate_double(long len)
  6. {
  7. double *dyn=0;
  8. if((dyn=calloc(len, sizeof(double)))!=0)
  9. return dyn;
  10. else
  11. {
  12. fprintf(stderr, "Fehler bei der Allozierung!\n");
  13. exit(-1);
  14. }
  15. }
  16. void free_double(double *mem)
  17. {
  18. if(mem)
  19. {
  20. free(mem);
  21. mem=0;
  22. }
  23. else
  24. {
  25. mem=0;
  26. fprintf(stderr, "Fehler bei Speicherfreigabe!\n");
  27. }
  28. }
  29. void print(double *mem, long len)
  30. {
  31. long i=0;
  32. if(mem)
  33. {
  34. for(i=0;i<len;i++)
  35. printf("Element %ld: %lf\n", i, mem[i]);
  36. }
  37. else
  38. {
  39. fprintf(stderr, "Fehler bei der Speicherausgabe!\n");
  40. }
  41. }
  42. double *double_size(double *zahl, long old_size)
  43. {
  44. double *dyn=0;
  45. if((dyn=realloc(zahl, 2*(old_size)*sizeof(double)))!=0)
  46. {
  47. return dyn;
  48. }
  49. else
  50. {
  51. fprintf(stderr, "Fehler bei der Verdopplung!\n");
  52. exit(-1);
  53. }
  54. }
  55. long sub(double *a, long size1, double *b, long size2, double *c, long size3)
  56. {
  57. long i=0;
  58. for(i=0;i<size1;i++)
  59. c[i]=a[i]-b[i];
  60. return 1;
  61. }
  62. char **store_in_array(char **storage, long length, char *newitem)
  63. {
  64. char **dyn;
  65. if((dyn=realloc(storage, (length+1)*sizeof(char*)))!=0)
  66. {
  67. dyn[length]=newitem;
  68. return dyn;
  69. }
  70. else
  71. {
  72. fprintf(stderr, "Fehler in der store_in_array Funktion!\n");
  73. exit(-1);
  74. }
  75. }
  76. char **delete_from_array(char **storage, long length, long delete_index)
  77. {
  78. char **dyn=0;
  79. long i=0;
  80. for(i=delete_index;i<length;i++)
  81. {
  82. storage[i]=storage[i+1];
  83. }
  84. if((dyn=realloc(storage, (length-1)*sizeof(char*)))!=0)
  85. {
  86. return dyn;
  87. }
  88. else
  89. {
  90. fprintf(stderr, "Fehler in der Funktion delete_from_array!\n");
  91. exit(-1);
  92. }
  93. }
  94. // compare small to big
  95. long compare_StB(char *text1, char *text2)
  96. {
  97. if(strcmp(text1, text2)>0)
  98. return 1;
  99. return 0;
  100. }
  101. // compare big to small
  102. long compare_BtS(char *text1, char *text2)
  103. {
  104. if(strcmp(text1,text2)<0)
  105. return 1;
  106. return 0;
  107. }
  108. void sort_storage(char **storage, long length, long order)
  109. {
  110. long (*operation)(char*, char*);
  111. char *temp;
  112. long i=0, j=0;
  113. if(order)
  114. operation=compare_StB;
  115. else
  116. operation=compare_BtS;
  117. for(j=length-1;j>0;j--)
  118. {
  119. for(i=0;i<j;i++)
  120. {
  121. if(operation(storage[i], storage[i+1]))
  122. {
  123. temp=storage[i];
  124. storage[i]=storage[i+1];
  125. storage[i+1]=temp;
  126. }
  127. }
  128. }
  129. }
  130. int main()
  131. {
  132. double *speicher=0, *a=0, *b=0, *c=0;
  133. long anzahl=0, i=0, num=0, del=0;
  134. printf("##### MINA #####\n");
  135. printf("-----------------\n");
  136. printf("Wieviele Elemente sollen initialisiert werden?\n");
  137. scanf("%ld", &anzahl);
  138. speicher=allocate_double(anzahl);
  139. for(i=0;i<anzahl;i++)
  140. speicher[i]=i+1;
  141. printf("Speicherinhalt:\n");
  142. print(speicher, anzahl);
  143. printf("##### MINB #####\n");
  144. printf("-----------------\n");
  145. speicher=double_size(speicher, anzahl);
  146. for(i=0;i<2*anzahl;i++)
  147. speicher[i]=i+1;
  148. printf("Die Anzahl der Elemente wurde verdoppelt und aufsteigend initialisiert!\n");
  149. printf("Speicherinhalt:\n");
  150. print(speicher, 2*anzahl);
  151. free_double(speicher);
  152. printf("Size of a, b & c?\n");
  153. scanf("%ld", &num);
  154. a=allocate_double(num);
  155. b=allocate_double(num);
  156. c=allocate_double(num);
  157. for(i=0;i<num;i++)
  158. {
  159. a[i]=i+10;
  160. b[i]=i+5;
  161. }
  162. printf("Speicherinhalt von a:\n");
  163. print(a, num);
  164. printf("Speicherinhalt von b:\n");
  165. print(b, num);
  166. printf("Speicherinhalt von c:\n");
  167. sub(a,num,b,num,c,num);
  168. printf("Die Subtraktion der Elemente a[i]-b[i] wurde in c[i] gespeichert!\n");
  169. printf("Neuer Speicherinhalt von c:\n");
  170. print(c, num);
  171.  
  172. free_double(a);
  173. free_double(b);
  174. free_double(c);
  175.  
  176. printf("##### ERWEITERUNG #####\n");
  177. printf("------------------------\n");
  178. char **ptr=malloc(5*sizeof(char*));
  179. ptr[0]="hallo,";
  180. ptr[1]="wie";
  181. ptr[2]="geht's";
  182. ptr[3]="dir";
  183. ptr[4]="heute?";
  184. char *toStore="danke, gut!\n";
  185. printf("Das Feld beinhaltet folgende Zeichenketten:\n");
  186. for(i=0;i<5;i++)
  187. printf("%ld. %s\n", i, ptr[i]);
  188. printf("Es wird folgende Zeichenkette angehaengt:\n%s\n", toStore);
  189. ptr=store_in_array(ptr, 5, toStore);
  190. printf("Das neue Feld beinhaltet folgende Zeichenketten:\n");
  191. for(i=0;i<6;i++)
  192. printf("%ld. %s\n", i, ptr[i]);
  193. printf("Welche Zeichenkette soll geloescht werden? (Indizes 0-5)\n");
  194. scanf("%ld", &del);
  195. ptr=delete_from_array(ptr, 6, del);
  196. printf("Das Feld beinhaltet folgende Zeichenketten:\n");
  197. for(i=0;i<5;i++)
  198. printf("%ld. %s\n", i, ptr[i]);
  199. sort_storage(ptr, 5, 1);
  200. printf("Das Feld wurde sortiert:\n");
  201. for(i=0;i<5;i++)
  202. printf("%ld. %s\n", i, ptr[i]);
  203.  
  204. free(ptr);
  205. return 8;
  206. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement