Advertisement
Guest User

Untitled

a guest
Dec 15th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.42 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4.  
  5. typedef struct gorivo_st{
  6.  
  7. char oznaka[3];
  8. char tip[11];
  9. double cena;
  10. struct gorivo_st *next;
  11.  
  12. }node;
  13.  
  14. void insert(node ** root, char oznaka[],char tip[], double cena){
  15.  
  16. node* newNode = (node*)malloc(sizeof(node));
  17. strcpy(newNode->oznaka,oznaka);
  18. strcpy(newNode->tip, tip);
  19. newNode->cena = cena;
  20. newNode->next = NULL;
  21.  
  22. if(*root == NULL){
  23. *root = newNode;
  24. }else{
  25. newNode->next = *root;
  26. *root = newNode;
  27. }
  28.  
  29. }
  30.  
  31. void insertNaKraj(node ** root, char oznaka[],char tip[], double cena){
  32. node* newNode = (node*)malloc(sizeof(node));
  33. strcpy(newNode->oznaka,oznaka);
  34. strcpy(newNode->tip, tip);
  35. newNode->cena = cena;
  36. newNode->next = NULL;
  37. node * current = *root;
  38. if(*root == NULL){
  39. *root = newNode;
  40. return;
  41. }
  42. while(current->next == NULL){
  43. current = current->next;
  44. }
  45. current->next= newNode;
  46. }
  47. void printList(node * root){
  48.  
  49. node* current = root;
  50. while(current != NULL){
  51. printf("%lf %s %s\n",current->cena,current->oznaka,current->tip);
  52. current = current->next;
  53. }
  54. }
  55.  
  56. void ucitajIzFajla(char imeFajla[], node ** root){
  57.  
  58. FILE *f = fopen(imeFajla,"r");
  59. if(f==NULL){
  60. printf("Greska prilikom otvaranja ulaznog fajla");
  61. exit(1);
  62. }
  63. char oznaka[3];
  64. char tip[11];
  65. double cena;
  66. while(fscanf(f,"%s %s %lf\n",oznaka,tip,&cena) != EOF){
  67. insert(root,oznaka,tip,cena);
  68. }
  69. fclose(f);
  70. }
  71.  
  72. void obrisiListu(node** root){
  73. node* temp = *root;
  74. while(*root!=NULL){
  75. temp = *root;
  76. *root = (*root)->next;
  77. //printf("Brisem: %lf %s %s\n",temp->cena,temp->oznaka,temp->tip);
  78. free(temp);
  79. }
  80. *root=NULL;
  81. }
  82.  
  83. node* nadjiNajeftinije(node* root){
  84.  
  85. node* min = root;
  86. node* current = root;
  87.  
  88. while(current != NULL){
  89. if(min->cena > current->cena)
  90. min=current;
  91. current = current->next;
  92. }
  93. return min;
  94. }
  95.  
  96. node* getAt(node * root, int pos){ //pronalazi cvor na odredjenoj poziciji
  97. int i = 0;
  98. node * current = root;
  99. while(i != pos && current != NULL){
  100. current = current->next;
  101. i++;
  102. }
  103. return current;
  104. }
  105.  
  106. void deleteNode(node ** root, node* zaBrisanje){
  107.  
  108. if(*root ==NULL){ //ukoliko je lista prazna
  109. return;
  110. }
  111. if(*root == zaBrisanje){ //ukoliko je cvor za brisanje prvi cvor u listi
  112. *root = zaBrisanje->next;
  113. free(zaBrisanje);
  114. }
  115. //iteratori
  116. node* current = *root;
  117. node* previous;
  118.  
  119. //iteriramo kroz listu dok ne dodjemo do kraja ili dok ne nadjemo cvor za brisanje
  120. while(current != NULL && current != zaBrisanje){
  121. previous = current;
  122. current = current->next;
  123. }
  124. if(current != NULL){ // ukoliko smo nasli radimo prevezivanje
  125. previous->next = current->next;
  126. free(current);
  127. }
  128. }
  129.  
  130. float average(node * root){
  131. node * current = root;
  132. float sum=0;
  133. int count=0;
  134. while(current != NULL){
  135. sum = sum + current->cena;
  136. count = count + 1;
  137. current = current->next;
  138. }
  139. return sum/count;
  140. }
  141. float averageZaTip(node * root,char tip[]){
  142. node * current = root;
  143. float sum=0;
  144. int count=0;
  145. while(current != NULL){
  146. if(strcmp(current->tip,tip)==0){
  147. sum = sum + current->cena;
  148. count = count + 1;
  149. }
  150. //ovo obavezno izvan if-a
  151. current = current->next;
  152. }
  153. if(count == 0){
  154. return -1;
  155. }
  156. return sum/count;
  157. }
  158.  
  159. void ispisiVeceOdProsecene(node * root,float prosecna){
  160. node * current = root;
  161.  
  162. while(current != NULL){
  163. if(current->cena > prosecna){
  164. printf("%s %f\n",current->tip,current->cena);
  165. }
  166. current = current->next;
  167. }
  168. }
  169.  
  170. void ispisiVeceOdProsecenePoTipu(node * root,float prosecna,char tip[]){
  171. node * current = root;
  172.  
  173. while(current != NULL){
  174. if(current->cena > prosecna && strcmp(current->tip,tip)==0){
  175. printf("%s %f\n",current->tip,current->cena);
  176. }
  177. current = current->next;
  178. }
  179. }
  180.  
  181.  
  182. void main(){
  183.  
  184. node * root = NULL;
  185. ucitajIzFajla("cene.txt",&root);
  186. printList(root);
  187. node* najeftiniji = getAt(root,4);
  188.  
  189. printf("gorivo %lf %s %s\n",
  190. najeftiniji->cena,najeftiniji->oznaka,najeftiniji->tip);
  191. float prosecna = average(root);
  192. float prosecnaGas = averageZaTip(root,"kerozin");
  193. printf("Vece od prosecne\n***********************\n");
  194. ispisiVeceOdProsecene(root,prosecna);
  195.  
  196. printf("Vece od prosecne\n***********************\n");
  197. if(prosecnaGas == -1){
  198. printf("NOT FOUND(nema tog goriva");
  199. }else{
  200. printf("\nprosecna cena gorivaa je %f\n",prosecnaGas);
  201. }
  202.  
  203. //deleteNode(&root,najeftiniji);
  204. printf("Nakon brisanja :\n");
  205. printList(root);
  206.  
  207. obrisiListu(&root);
  208. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement