Resonati

Untitled

Jun 9th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.80 KB | None | 0 0
  1.  
  2. #include<stdio.h>
  3. #include<math.h>
  4. #include<stdbool.h>
  5. #include<stdlib.h>
  6. #include<wchar.h>
  7. #include<wctype.h>
  8. #include<ctype.h>
  9. #include<string.h>
  10.  
  11. ///cw 7_2_1
  12. Zdefiniuj strukturę trojkat przechowującą długości boków trójkąta. Napisz funkcję, która otrzymuje jako argument zmienną typu struct trojkat, i zwraca jako wartość obwód trójkąta przekazanego w argumencie.
  13. struct trojkat{
  14. double a,b,c;
  15. };
  16.  
  17. double obwod(struct trojkat t){
  18. return t.a+t.b+t.c;
  19. }
  20.  
  21. double pole(struct trojkat t){
  22. double p=obwod(t)/2;
  23. return pow(p*(p-t.a)*(p-t.b)*(p-t.c),0.5);
  24. }
  25.  
  26. ///cw 7_2_2Napisz funkcję, która otrzymuje jako argumenty zmienną troj1 typu struct trojkat zdefiniowanego w zadaniu 7.2.1 oraz zmienną troj2 wskaźnik na zmienną typu struct trojkat, i przepisuje za je zawartość zmiennej troj1 do zmiennej wskazywanej przez troj2.
  27.  
  28. void przepisz(struct trojkat t1, struct trojkat *t2){
  29. *t2=t1;
  30. }
  31.  
  32. Zdefiniuj strukturę punkt służącą do przechowywania współrzędnych punktów w trójwymiarowej przestrzeni kartezjańskiej.Napisz funkcję, która otrzymuje jako argumenty tablicę tab o argumentach typu struct punkt oraz jej rozmiar, i zwraca jako wartość najmniejszą spośród odległości pomiędzy punktami przechowywanymi w tablicy tab. Zakładamy, że otrzymana w argumencie tablica
  33. ma co najmniej dwa argumenty.
  34.  
  35. struct punkt{
  36. double x,y,z;
  37. };
  38.  
  39. double minimum(struct punkt tab[], int n){
  40. int i,j;
  41. double pom;
  42. double min=sqrt(pow(tab[1].x-tab[0].x,2)
  43. +pow(tab[1].y-tab[0].y,2)+pow(tab[1].z-tab[0].z,2));
  44. for(i=0;i<n-1;i++)
  45. {
  46. for(j=i+1;j<n;j++)
  47. {
  48. pom=sqrt(pow(tab[j].x-tab[i].x,2)
  49. +pow(tab[j].y-tab[i].y,2)+pow(tab[j].z-tab[i].z,2));
  50. }
  51. if(pom<min)
  52. {
  53. min=pom;
  54. }
  55. }
  56. return min;
  57. }
  58.  
  59. Zdefiniuj unię super_int, w której będzie można przechowywać zarówno zmienne typu int, jak i unsigned int
  60.  
  61. union super_int{
  62. int i;
  63. unsigned int u;
  64. };
  65.  
  66. ///Listy bez glowy
  67. Napisz funkcję utworz zwracającą wskaźnik do pustej listy bez głowy o elementach typu element.
  68. struct element{
  69. int i;
  70. struct element *next;
  71. };
  72.  
  73. struct element *utworz(){
  74. return NULL;
  75. }
  76.  
  77. Napisz funkcję wyczysc, która dostaje jako argument wskaźnik do pierwszego elementu listy wskaźnikowej bezgłowy o elementach typu element i usuwa wszystkie elementy listy
  78. void wyczysc(struct element* Lista){
  79. struct element *wsk=Lista;
  80. while(Lista!=NULL){
  81. Lista=Lista->next;
  82. free(wsk);
  83. wsk=Lista;
  84. }
  85. }
  86.  
  87. Napisz funkcję dodaj o dwóch argumentach Lista typu element* oraz a typu int zwracającą wskaźnik do typu element. Funkcja powinna dodawać na początek listy reprezentowanej przez zmienną Lista
  88. nowy element o wartości a pola i oraz zwracać wskaźnik do pierwszego
  89. elementu tak powiększonej listy.
  90.  
  91. struct element * dodajnapoczatek(struct element* Lista, int a){
  92. struct element *wsk=malloc(sizeof(struct element));
  93. wsk->i=a;
  94. wsk->next=Lista;
  95. return wsk;
  96. }
  97.  
  98. Napisz funkcję dodajk o dwóch argumentach Lista typu element* i a typu int zwracającą wskaźnik do typu element. Funkcja powinna dodawać na koniec listy reprezentowanej przez zmienną Lista nowy element o wartości a pola i oraz zwracać wskaźnik do pierwszego elementu tak powiększonej listy.
  99.  
  100. struct element *dodajnakoniec(struct element * Lista, int a){
  101. struct element *wsk;
  102. if(Lista==NULL)
  103. {
  104. Lista=wsk=malloc(sizeof(struct element));
  105. }
  106. else
  107. wsk=Lista;
  108. while(wsk->next!=NULL)
  109. {
  110. wsk=wsk->next;
  111. }
  112. wsk->next=malloc(sizeof(struct element));
  113. wsk=wsk->next;
  114. wsk->i=a;
  115. wsk->next=NULL;
  116. return Lista;
  117. }
  118.  
  119. Napisz funkcję dodajw o trzech argumentach Lista i elem typu element* oraz a typu int zwracającą wskaźnik do typu element. Funkcja powinna dodawać element o wartości a pola i do listy reprezentowanej przez zmienną Lista na miejscu tuż za elementem wskazywanym przez elem. W przypadku, gdy elem jest równy NULL funkcja powinna wstawić nowy element na początek listy. Funkcja powinna zwrócić jako wartość wskaźnik do pierwszego elementu powiększonej listy.
  120.  
  121. struct element * dodajodpowiednio(struct element* Lista,
  122. struct element* elem, int a){
  123. struct element *wsk=malloc(sizeof(struct element));
  124. wsk->i=a;
  125. if(elem==NULL)
  126. {
  127. wsk->next=Lista;
  128. Lista=wsk;
  129. }
  130. else
  131. {
  132. wsk->next=elem->next;
  133. elem->next=wsk;
  134. }
  135. return Lista;
  136. }
  137.  
  138. Napisz funkcję znajdz o dwóch argumentach Lista typu element* i a typu int zwracającą wskaźnik do typu element. Funkcja powinna sprawdzać, czy na liście reprezentowanej przez zmienną
  139. Lista znajduje się element o polu i równym a. Jeżeli tak, to funkcja powinna zwrócić wskaźnik do tego elementu. W przeciwnym wypadku funkcja powinna zwrócić wartość NULL.
  140.  
  141. struct element * znajdz(struct element * Lista, int a){
  142. while((Lista!=NULL)&&(Lista->i!=a))
  143. {
  144. Lista=Lista->next;
  145. }
  146. return Lista;
  147. }
  148.  
  149. Napisz funkcję usun o dwóch argumentach Lista typu element* i a typu int zwracającą wskaźnik do typu element. Funkcja powinna usuwać z listy reprezentowanej przez zmienną Lista element o wartości a pola i (o ile taki element znajduje się na liście) oraz zwracać wskaźnik do pierwszego elementu zmodyfikowanej listy (jeżeli po usunięciu elementu lista będzie pusta, to funkcja powinna zwrócić wartość NULL).
  150.  
  151. struct element * usun(struct element * Lista, int a){
  152. struct element *wsk,*wsk2;
  153. if (Lista==NULL)
  154. {
  155. return Lista;
  156. }
  157. wsk=Lista;
  158. if(Lista->i==a)
  159. {
  160. Lista=Lista->next;
  161. free(wsk);
  162. }
  163. else{
  164. while((wsk->next!=NULL)&&(wsk->next->i!=a))
  165. {
  166. wsk=wsk->next;
  167. }
  168. if(wsk->next!=NULL){
  169. wsk2=wsk->next;
  170. wsk->next=wsk2->next;
  171. free(wsk2);
  172. }
  173. return Lista;
  174. }
  175. }
  176.  
  177. Napisz funkcję usunw o dwóch argumentach Lista i elem typu element* i zwracającą wskaźnik do typu element. Funkcja powinna usuwać z listy reprezentowanej przez zmienną Lista element wskazywany przez elem oraz zwracać wskaźnik do pierwszego elementu
  178. zmodyfikowanej listy (jeżeli po usunięciu elementu lista będzie pusta, to funkcja powinna zwrócić wartość NULL). Dla elem równego NULL funkcja usunw nie powinna nic robić
  179.  
  180. struct element *usunwybrany(struct element* Lista,
  181. struct element *elem){
  182. struct element *wsk,*wsk2;
  183. if(Lista==NULL)
  184. {
  185. return Lista;
  186. }
  187. wsk=Lista;
  188. if(Lista==elem){
  189. Lista=Lista->next;
  190. free(wsk);
  191. return Lista;
  192. }
  193. while((wsk->next!=NULL)&&(wsk->next!=elem))
  194. wsk=wsk->next;
  195. if(wsk->next!=NULL)
  196. {
  197. wsk2=wsk->next;
  198. wsk->next=wsk2->next;
  199. free(wsk2);
  200. }
  201. return Lista;
  202. };
  203.  
  204. Napisz funkcję usunw2 o dwóch argumentach Lista i elem typu
  205. 7.3. Listy jednokierunkowe 43
  206. element* i zwracającą wskaźnik do typu element. Funkcja powinna usuwać z listy reprezentowanej przez zmienną Lista element wskazywany przez elem->next oraz zwracać wskaźnik do pierwszego elementu zmodyfikowanej listy (jeżeli po usunięciu elementu lista będzie pusta, to funkcja powinna zwrócić wartość NULL). Dla elem równego NULL funkcja powinna usunąć pierwszy element listy (o ile taki istnieje). Dla elem różnego od NULL i elem->next równego NULL funkcja usunw2 nie powinna nic robić.
  207.  
  208. struct element *usunwybrany2(struct element* Lista,
  209. struct element *elem){
  210. struct element *wsk;
  211. if(Lista==NULL)
  212. {
  213. return Lista;
  214. }
  215. if(Lista==elem){
  216. wsk=Lista;
  217. Lista=Lista->next;
  218. }
  219. else if(elem->next==NULL)
  220. {
  221. return Lista;
  222. }
  223. else
  224. {
  225. wsk=elem->next;
  226. elem->next=wsk->next;
  227. }
  228. free(wsk);
  229. return Lista;
  230. }
  231.  
  232. ///Listy z glowa
  233. Napisz funkcję utworz tworzącą pustą listę z głową o elementach typu element i zwracającą jako wartość wskaźnik do głowy utworzonej listy
  234.  
  235. struct element *utworzzglowa(){
  236. struct element *wsk=malloc(sizeof(struct element));
  237. wsk->next=NULL;
  238. return wsk;
  239. }
  240.  
  241. Napisz funkcję wyczysc, która dostaje jako argument wskaźnik do listy wskaźnikowej z głową o elementach typu element i usuwa wszystkie elementy listy (razem z głową).
  242.  
  243. void wyczysczglowa(struct element* Lista){
  244. struct element *wsk=Lista->next;
  245. Lista=wsk;
  246. while(Lista!=NULL){
  247. Lista=Lista->next;
  248. free(wsk);
  249. wsk=Lista;
  250. }
  251. }
  252.  
  253. Napisz funkcję dodaj o dwóch argumentach Lista typu element* i a typu int. Funkcja powinna dodawać na początek listy reprezentowanej przez zmienną Lista nowy element o wartości a pola i.
  254.  
  255. void dodajnapoczatekzglowa(struct element *Lista,int a){
  256. struct element *wsk=malloc(sizeof(struct element));
  257. wsk->i=a;
  258. wsk->next=Lista->next;
  259. Lista->next=wsk;
  260. }
  261.  
  262. Napisz funkcję dodajk o dwóch argumentach Lista typu element*
  263. i a typu int. Funkcja powinna dodawać na koniec listy reprezentowanej przez zmienną Lista nowy element o wartości a pola i.
  264.  
  265. void dodajnakonieczglowa(struct element *Lista,int a){
  266. struct element *wsk=Lista;
  267. while(wsk->next!=NULL)
  268. {
  269. wsk=wsk->next;
  270. }
  271. wsk->next=malloc(sizeof(struct element));
  272. wsk=wsk->next;
  273. wsk->i=a;
  274. wsk->next=NULL;
  275. }
  276.  
  277. ///Pozostale zadania z list jednokierunkowych
  278. Napisz funkcję zeruj, która dostaje jako argument listę wskaźnikową o elementach typu element i nadaje wartość 0 polom i we wszystkich elementach listy. Napisz dwie wersje funkcji: dla list z głową
  279. i dla list bez głowy.
  280.  
  281. ///bezglowy
  282. void zeruj(struct element * Lista){
  283. while(Lista!=NULL){
  284. Lista->i=0;
  285. Lista=Lista->next;
  286. }
  287. }
  288.  
  289. ///z glowa
  290. void zerujzglowa(struct element *Lista){
  291. while(Lista->next!=NULL){
  292. Lista=Lista->next;
  293. Lista->i=0;
  294. }
  295. }
  296.  
  297. ///mozna tez modyfikujac algorytm bez glowy
  298. void zerujzglowa2(struct element * Lista){
  299. Lista=Lista->next;
  300. while(Lista!=NULL){
  301. Lista->i=0;
  302. Lista=Lista->next;
  303. }
  304. }
  305.  
  306. Napisz funkcję bezwzględna, która dostaje jako argument listę wskaźnikową o elementach typu element i zapisuje do pól i wszystkich
  307. elementów listy wartość bezwzględną ich pierwotnej wartości. Napisz
  308. dwie wersje funkcji: dla list z głową i dla list bez głowy.
  309.  
  310. ///bezglowy
  311. void bezwzgledna(struct element * Lista){
  312. while(Lista!=NULL){
  313. Lista->i=abs(Lista->i);
  314. Lista=Lista->next;
  315. }
  316. }
  317.  
  318. Zdefiniuj strukturę trojka mającą służyć jako typ elementu jednokierunkowej listy wskaźnikowej przechowującej trójki dodatnich liczb
  319. całkowitych a. b, c. Napisz funkcję pitagoras, która dostaje w argumencie listę wskaźnikową o elementach typu trojka i usuwa z otrzymanej listy wszystkie elementy nieprzechowujące trójek pitagorejskich (czyli takich, że a^2 + b^2 = c^2). Napisz dwie wersje funkcji: dla list z głową i dla list bez głowy. W wersji dla list bez głowy funkcja powinna zwracać wskaźnik do pierwszego elementu przekształconej listy. Jeżeli wynikowa lista bez głowy będzie pusta, funkcja powinna zwrócić NULL.
  320.  
  321. struct trojka{
  322. unsigned int a,b,c;
  323. struct trojka * next;
  324. };
  325.  
  326. bool czyspelnia(struct trojka *e){
  327. if(e->a*e->a+e->b*e->b==e->c*e->c)
  328. {
  329. return true;
  330. }
  331. else
  332. {
  333. return false;
  334. }
  335. }
  336.  
  337. ///wersja bez glowy
  338. struct trojka * pitagoras(struct trojka*Lista){
  339. struct trojka * pom,*pom2;
  340. while((Lista!=NULL)&&(!czyspelnia(Lista))){
  341. pom=Lista;
  342. Lista=Lista->next;
  343. free(pom);
  344. }
  345. if(Lista==NULL)
  346. {
  347. return NULL;
  348. }
  349. pom=Lista;
  350. while(pom->next!=NULL){
  351. if(czyspelnia(pom->next))
  352. {
  353. pom=pom->next;
  354. }
  355. else
  356. {
  357. pom2=pom->next;
  358. pom->next=pom2->next;
  359. free(pom2);
  360. }
  361. }
  362. return Lista;
  363. }
  364.  
  365. ///z glowa
  366. void pitagoraszglowa(struct trojka * Lista){
  367. struct trojka* pom;
  368. while(Lista->next!=NULL){
  369. if(czyspelnia(Lista->next))
  370. {
  371. Lista=Lista->next;
  372. }
  373. else
  374. {
  375. pom=Lista->next;
  376. Lista->next=pom->next;
  377. free(pom);
  378. }
  379. }
  380. }
  381. Napisz funkcję suma, która dostaje jako argument listę wskaźnikową o elementach typu element i zwraca jako wartość sumę pól Listy jednokierunkowe 45
  382. ze wszystkich elementów listy. Napisz dwie wersje funkcji: dla list z głową i dla list bez głowy
  383. int suma(struct element *Lista){
  384. int sum=0;
  385. while(Lista!=NULL){
  386. sum=sum+Lista->i;
  387. Lista=Lista->next;
  388. }
  389. return sum;
  390. }
  391.  
  392. int sumazglowa(struct element * Lista){
  393. int sum=0;
  394. Lista=Lista->next;
  395. while(Lista!=NULL){
  396. sum=sum+Lista->i;
  397. Lista=Lista->next;
  398. }
  399. }
  400.  
  401. ) Napisz funkcję minimum, która dostaje jako argument listę wskaźnikową o elementach typu element i zwraca jako wartość najmniejszą spośród wartości pól i elementów listy. Napisz dwie wersje funkcji: dla list z głową i dla list bez głowy
  402.  
  403. int minimumbezglowy(struct element * Lista){
  404. int min=Lista->i;
  405. while(Lista!=NULL){
  406. if(Lista->i<min)
  407. {
  408. min=Lista->i;
  409. }
  410. Lista=Lista->next;
  411. }
  412. return min;
  413. }
  414.  
  415. int minimumzglowa(struct element * Lista){
  416. int min=Lista->next->i;
  417. while(Lista!=NULL){
  418. Lista=Lista->next;
  419. if(Lista->i<min)
  420. {
  421. min=Lista->i;
  422. }
  423. }
  424. return min;
  425. }
  426.  
  427. ///wyswietl
  428. void wyswietl(struct element *Lista){
  429. while(Lista!=NULL){
  430. printf("%d\n",Lista->i);
  431. Lista=Lista->next;
  432. }
  433. }
  434.  
  435. ///wczytaj
  436.  
  437.  
  438. int main(){
  439. struct element *Lista=utworz();
  440. dodajnakoniec(Lista,4);
  441. dodajnakoniec(Lista,7);
  442. dodajnakoniec(Lista,5);
  443. dodajnakoniec(Lista,2);
  444. printf("%d",Lista->i);
  445. wyswietl(Lista);
  446. return 0;
  447. }
Add Comment
Please, Sign In to add comment