Guest User

Untitled

a guest
May 20th, 2018
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.30 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. typedef struct tackica{
  6.     float x,y;
  7.     struct tackica *next;
  8. }TACKA;
  9.  
  10. typedef struct cvor{
  11.     TACKA t;
  12.     struct cvor* next;
  13. }CVOR;
  14.  
  15. void readDots(CVOR **head);
  16. void showAllDots(CVOR *head);
  17. void dodajTacku(CVOR **head, TACKA tmp);
  18. void uporediTacke(CVOR *head, TACKA tmp);
  19. void obrisiListu(CVOR **head);
  20. float sq(TACKA t);
  21.  
  22. int main()
  23. {
  24.     CVOR* head;
  25.     head=NULL;
  26.     TACKA tmp;
  27.     int izbor;
  28.  
  29.     readDots(&head);
  30.  
  31.     do{
  32.         puts("***************************************************");
  33.         printf("\n\t1. Unos nove tacke.");
  34.         printf("\n\t2. Prikaz svih tacaka.");
  35.         printf("\n\t3. Pronalazenje najblize tacke zadatoj.");
  36.         printf("\n\t4. Brisanje liste.");
  37.         printf("\n\t5. Finito.");
  38.         printf("\n\t >>");
  39.         scanf("%d", &izbor);
  40.         puts("***************************************************");
  41.  
  42.         switch(izbor){
  43.             case 1:
  44.                 printf("X = ");
  45.                 scanf("%f", &tmp.x);
  46.                 printf("Y = ");
  47.                 scanf("%f", &tmp.y);
  48.                 dodajTacku(&head, tmp);
  49.                 break;
  50.             case 2:
  51.                 showAllDots(head);
  52.                 break;
  53.             case 3:
  54.                 printf("X = ");
  55.                 scanf("%f", &tmp.x);
  56.                 printf("Y = ");
  57.                 scanf("%f", &tmp.y);
  58.                 printf("Tacka najbliza zadatoj je tacka :");
  59.                 uporediTacke(head, tmp);
  60.                 break;
  61.             case 4:
  62.                 obrisiListu(&head);
  63.                 break;
  64.         }
  65.  
  66.     }while(izbor!=5);
  67.  
  68.     obrisiListu(&head);
  69.     showAllDots(head);
  70.     return 0;
  71. }
  72. void readDots(CVOR **head){
  73.  
  74.     FILE *fp;
  75.     TACKA tmp;
  76.  
  77.     if((fp=fopen("tacke.txt", "r"))!=NULL){
  78.         while((fscanf(fp,"%f,%f",&tmp.x,&tmp.y))==2){
  79.             CVOR* novi;
  80.             novi = (CVOR*)malloc(sizeof(CVOR));
  81.             novi->t = tmp;
  82.             novi->next = *head;
  83.             *head = novi;
  84.         }
  85.         puts("\nPODACI USPESNO UCITANI!\n");
  86.     }
  87.     else puts("\nGRESKA PRI OTVARANJU DATOTEKE!");
  88.     fclose(fp);
  89. }
  90.  
  91. void showAllDots(CVOR *head){
  92.     while(head!=NULL){
  93.         printf("TACKA: %.2f, %.2f\n", head->t.x, head->t.y);
  94.         head = head->next;
  95.     }
  96. }
  97.  
  98. void dodajTacku(CVOR **head, TACKA tmp){
  99.     CVOR* novi;
  100.     novi = (CVOR*)malloc(sizeof(CVOR));
  101.     novi->t = tmp;
  102.     novi->next = *head;
  103.     *head = novi;
  104. }
  105.  
  106. void uporediTacke(CVOR *head, TACKA tmp){
  107.     float dist1, dist2;
  108.     dist1 = sq(tmp);
  109.     dist2 = sq(head->t);
  110.     float dist = fabs(dist1-dist2);
  111.     TACKA min = head->t;
  112.  
  113.     while(head!=NULL){
  114.         dist2 = sq(head->t);
  115.         if((fabs(dist1-dist2)) < dist){
  116.             min = head->t;
  117.             dist = (fabs(dist1-dist2));
  118.         }
  119.         head = head->next;
  120.     }
  121.     printf("[%.2f, %.2f]\n", min.x, min.y);
  122. }
  123.  
  124. void obrisiListu(CVOR **head){
  125.     CVOR *ovajTuSad = *head;
  126.     while(*head){
  127.         ovajTuSad = *head;
  128.         //obrisiListu((*head)->next);
  129.         *head = (*head)->next;
  130.         printf("Deleting... %.2f, %.2f DELETED\n", ovajTuSad->t.x, ovajTuSad->t.y);
  131.         free(ovajTuSad);
  132.     }
  133.     *head = NULL;
  134. }
  135.  
  136. float sq(TACKA t){
  137.     return sqrt((t.x*t.x)+(t.y*t.y));
  138. }
Add Comment
Please, Sign In to add comment