Advertisement
simov

SP Lab. 7

Dec 2nd, 2013
390
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.65 KB | None | 0 0
  1. 1. Замена
  2. Во низа од N природни броеви (N и низата се читаат од СВ) соседните заемно прости броеви (немаат заеднички делители) да си ги заменат позициите. На ист елемент од низата може најмногу еднаш да му се изврши замена. Да се испечати на СИ изменетата низа. Замената да се реализира во посебна функција.
  3.  
  4. Sample input:
  5. 8
  6. 4 8 9 15 7 12 4 7
  7. Sample output:
  8. 4 9 8 7 15 12 7 4
  9. -------------------------------------------------
  10. #include <stdio.h>
  11.  
  12. int zaemnoProsti(int a, int b) {
  13. int temp, i, flag = 0;
  14. if(b == 0 || a == 0)
  15. return 0;
  16.  
  17. if(b > a){
  18. temp = b;
  19. b = a;
  20. a = temp;
  21. }
  22.  
  23. for(i = 2; i <= b; i++){
  24. if(a % i == 0 && b % i == 0){
  25. flag = 1;
  26. break;
  27. }
  28. }
  29.  
  30. if(flag)
  31. return 0;
  32. else
  33. return 1;
  34. }
  35.  
  36. void zameni(int* a, int n)
  37. {
  38. int i;
  39. for (i = 0; i < n-1; i++)
  40. {
  41. if (zaemnoProsti(*(a + i), *(a + i + 1)))
  42. {
  43. int temp = *(a + i);
  44. *(a + i) = *(a + i + 1);
  45. *(a + i + 1) = temp;
  46. i++; // Ne vrsi zamena dvapati za ist element;
  47. }
  48. }
  49. }
  50.  
  51. int main()
  52. {
  53. int n, i;
  54. scanf("%d", &n);
  55. int niza[n];
  56. for (i = 0; i < n; i++) scanf("%d", &(*(niza + i)));
  57. zameni(niza, n);
  58. for (i = 0; i < n; i++) printf("%d ", *(niza + i));
  59.  
  60. return 0;
  61. }
  62. -------------------------------------------------
  63. 2. Ротирање низа
  64. Да се напише функција за ротирање на елементите на дадена низа за m места (ако m е позитивен низата се ротира во десно, а ако е негативен низата се ротира во лево). Задачата да се реши со помош на покажувачи.
  65.  
  66. Sample input:
  67. 4
  68. 2
  69. 1 2 3 4
  70. Sample output:
  71. 3 4 1 2
  72. -------------------------------------------------
  73. #include<stdio.h>
  74. void desno(int *a,int n)
  75. {
  76. int i,pom=*(a+n-1);
  77. for (i=n-1;i>0;i--)
  78. *(a+i)=*(a+i-1);
  79. *a=pom;
  80. }
  81. void levo(int *a,int n)
  82. {
  83. int i,k=*a;
  84. for(i=0;i<n-1;i++)
  85. *(a+i)=*(a+i+1);
  86. *(a+n-1)=k;
  87. }
  88. int main()
  89. {
  90. int m,n,a[100],k,i;
  91. scanf("%d",&n);
  92. scanf("%d",&m);
  93. for(i=0;i<n;i++)
  94. scanf("%d",&a[i]);
  95. k=m;
  96.  
  97. if(m>0)
  98.  
  99. while(k)
  100. {
  101. desno(a,n);
  102. k--;
  103. }
  104. else{
  105.  
  106. while(k)
  107. {
  108. levo(a,n);
  109. k++;
  110. }
  111. }
  112.  
  113. for(i=0;i<n;i++)
  114. printf("%d ",a[i]);
  115.  
  116. return 0;
  117. }
  118. -------------------------------------------------
  119. 3. Сортирање
  120. Да се напише функциjа за сортирање на низа од цели броеви. Потоа да се напише функциjа за споjување на две низи од цели броеви сортирани во растечки редослед. Оваа функциjа треба во нова низа да ги смести веќе сортираните две низи во нова низа коjа ќе биде исто така сортирана во растечки редослед. Во оваа функциjа не смее да се повикува функиjата за сортирање.
  121.  
  122. Sample input:
  123. 3
  124. 8 5 12
  125. 7 1 4
  126. Sample output:
  127. 1 4 5 7 8 12
  128. -------------------------------------------------
  129. #include <stdio.h>
  130. #define MAX 400
  131.  
  132. void sort(int *a, int n) {
  133. int i, j, swapped = 0;
  134.  
  135. for(i = 0; i < n; i++)
  136. {
  137. for(j = 0; j < n-1; j++)
  138. {
  139. if(a[j] > a[j+1])
  140. {
  141. int temp = a[j+1];
  142. a[j+1] = a[j];
  143. a[j] = temp;
  144. }
  145. }
  146. }
  147. }
  148.  
  149. void merge(int *a, int *b, int *c, int n) {
  150. int i = 0, j = 0, k = 0;
  151.  
  152. while (i < n&&j < n)
  153. {
  154. if (a[i] < b[j])
  155. c[k++] = a[i++];
  156. else
  157. c[k++] = b[j++];
  158. }
  159.  
  160. int l;
  161. if (i < n)
  162. {
  163. for (l = i; l < n; l++)
  164. {
  165. c[k++] = a[l];
  166. }
  167. }
  168. else
  169. {
  170. for (l = j; l < n; l++)
  171. c[k++] = b[l];
  172. }
  173. }
  174.  
  175. int main() {
  176. int n;
  177. int a[MAX];
  178. int b[MAX];
  179. int c[MAX];
  180. scanf("%d", &n);
  181. int i;
  182. for(i = 0; i < n; ++i) {
  183. scanf("%d", &a[i]);
  184. }
  185. for(i = 0; i < n; ++i) {
  186. scanf("%d", &b[i]);
  187. }
  188. sort(a, n);
  189. sort(b, n);
  190. merge(a, b, c, n);
  191. for(i = 0; i < 2 * n; ++i) {
  192. printf("%d ", c[i]);
  193. }
  194. return 0;
  195. }
  196. -------------------------------------------------
  197. 4. Печатење на низа
  198. Напишете програма која со помош на еден покажувач ќе ги испечати вредностите на една низа во обратен редослед. Најпрво од СВ се чита бројот на елементите во низата а потоа и самите елементи (вредности). Вредностите во низата се целобројни.
  199.  
  200. Sample input:
  201. 3
  202. 12 34 56
  203. Sample output:
  204. 56 34 12
  205. -------------------------------------------------
  206. #include <stdio.h>
  207.  
  208. int main()
  209. {
  210. int n, i;
  211. scanf("%d", &n);
  212. int niza[n];
  213. for (i = 0; i < n; i++) scanf("%d", &niza[i]);
  214. for (i = n-1; i >= 0; --i) printf("%d ", *(niza + i));
  215.  
  216. return 0;
  217. }
  218. -------------------------------------------------
  219. 5. Збир на парни
  220. Напишете функција која го враќа збирот на елементите на една низа кои се парни броеви (не на парни позиции). Задачата да се реши со покажувачи.
  221. Пример: За низата 2 4 5 6 излезот е 12.
  222.  
  223. Sample input:
  224. 4
  225. 2 12 3 13
  226. Sample output:
  227. 14
  228. -------------------------------------------------
  229. #include <stdio.h>
  230. #define MAX 100
  231.  
  232. int suma(int *a,int n){
  233. int i, suma = 0;
  234. for (i = 0; i < n; i++)
  235. if (a[i] % 2 == 0) suma += a[i];
  236. return suma;
  237. }
  238.  
  239. int main() {
  240. int n, i;
  241. scanf("%d", &n);
  242. int niza[n];
  243. for (i = 0; i < n; i++) scanf("%d", &niza[i]);
  244. printf("%d", suma(niza, n));
  245.  
  246. return 0;
  247. }
  248. -------------------------------------------------
  249. 6. Проверка на тежини
  250. Дадени се две низи со ист број на елементи во чии полиња се сместува злато во килограми. Во првата низа максималната количина на злато што може да се смести во секое поле е 500 килограми, додека во втората е неограничено. Напишете процедура која ги заменува килограмите од првата и втората низа (полињата на исти позиции) доколку во полето во првата низа има повеќе од 500 килограми, или запишува нула (го уништува златото) доколку во двете низи на соодветната позиција бројот на килограми е поголем од 500. Задачата да се реши со покажувачи.
  251. Пример: За низите 100 501 600 и 200 300 700 треба да се испечатат низите 100 300 0 и 200 501 700.
  252.  
  253. Sample input:
  254. 5
  255. 33 48 567 589 123
  256. 0 0 0 0 0
  257. Sample output:
  258. 33 48 0 0 123
  259. 0 0 567 589 0
  260. -------------------------------------------------
  261. #include <stdio.h>
  262. #define MAX 100
  263.  
  264. void fixGold(int *a, int* b, int n)
  265. {
  266. int i;
  267. for (i = 0; i < n; i++)
  268. {
  269. if (*(a + i) > 500 && *(b + i) > 500)
  270. {
  271. *(a + i) = 0;
  272. }
  273. else if (*(a + i) > 500 && *(b + i) <= 500)
  274. {
  275. int temp = *(a + i);
  276. *(a + i) = *(b + i);
  277. *(b + i) = temp;
  278. }
  279. }
  280. }
  281.  
  282. int main() {
  283. int n, i;
  284. scanf("%d", &n);
  285. int a[n], b[n];
  286. for (i = 0; i < n; i++) scanf("%d", &a[i]);
  287. for (i = 0; i < n; i++) scanf("%d", &b[i]);
  288. fixGold(a, b, n);
  289. for (i = 0; i < n; i++) printf("%d ", a[i]);
  290. printf("\n");
  291. for (i = 0; i < n; i++) printf("%d ", b[i]);
  292. return 0;
  293. }
  294. -------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement