Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- typedef struct tackica{
- float x,y;
- struct tackica *next;
- }TACKA;
- typedef struct cvor{
- TACKA t;
- struct cvor* next;
- }CVOR;
- void readDots(CVOR **head);
- void showAllDots(CVOR *head);
- void dodajTacku(CVOR **head, TACKA tmp);
- void uporediTacke(CVOR *head, TACKA tmp);
- void obrisiListu(CVOR **head);
- float sq(TACKA t);
- int main()
- {
- CVOR* head;
- head=NULL;
- TACKA tmp;
- int izbor;
- readDots(&head);
- do{
- puts("***************************************************");
- printf("\n\t1. Unos nove tacke.");
- printf("\n\t2. Prikaz svih tacaka.");
- printf("\n\t3. Pronalazenje najblize tacke zadatoj.");
- printf("\n\t4. Brisanje liste.");
- printf("\n\t5. Finito.");
- printf("\n\t >>");
- scanf("%d", &izbor);
- puts("***************************************************");
- switch(izbor){
- case 1:
- printf("X = ");
- scanf("%f", &tmp.x);
- printf("Y = ");
- scanf("%f", &tmp.y);
- dodajTacku(&head, tmp);
- break;
- case 2:
- showAllDots(head);
- break;
- case 3:
- printf("X = ");
- scanf("%f", &tmp.x);
- printf("Y = ");
- scanf("%f", &tmp.y);
- printf("Tacka najbliza zadatoj je tacka :");
- uporediTacke(head, tmp);
- break;
- case 4:
- obrisiListu(&head);
- break;
- }
- }while(izbor!=5);
- obrisiListu(&head);
- showAllDots(head);
- return 0;
- }
- void readDots(CVOR **head){
- FILE *fp;
- TACKA tmp;
- if((fp=fopen("tacke.txt", "r"))!=NULL){
- while((fscanf(fp,"%f,%f",&tmp.x,&tmp.y))==2){
- CVOR* novi;
- novi = (CVOR*)malloc(sizeof(CVOR));
- novi->t = tmp;
- novi->next = *head;
- *head = novi;
- }
- puts("\nPODACI USPESNO UCITANI!\n");
- }
- else puts("\nGRESKA PRI OTVARANJU DATOTEKE!");
- fclose(fp);
- }
- void showAllDots(CVOR *head){
- while(head!=NULL){
- printf("TACKA: %.2f, %.2f\n", head->t.x, head->t.y);
- head = head->next;
- }
- }
- void dodajTacku(CVOR **head, TACKA tmp){
- CVOR* novi;
- novi = (CVOR*)malloc(sizeof(CVOR));
- novi->t = tmp;
- novi->next = *head;
- *head = novi;
- }
- void uporediTacke(CVOR *head, TACKA tmp){
- float dist1, dist2;
- dist1 = sq(tmp);
- dist2 = sq(head->t);
- float dist = fabs(dist1-dist2);
- TACKA min = head->t;
- while(head!=NULL){
- dist2 = sq(head->t);
- if((fabs(dist1-dist2)) < dist){
- min = head->t;
- dist = (fabs(dist1-dist2));
- }
- head = head->next;
- }
- printf("[%.2f, %.2f]\n", min.x, min.y);
- }
- void obrisiListu(CVOR **head){
- CVOR *ovajTuSad = *head;
- while(*head){
- ovajTuSad = *head;
- //obrisiListu((*head)->next);
- *head = (*head)->next;
- printf("Deleting... %.2f, %.2f DELETED\n", ovajTuSad->t.x, ovajTuSad->t.y);
- free(ovajTuSad);
- }
- *head = NULL;
- }
- float sq(TACKA t){
- return sqrt((t.x*t.x)+(t.y*t.y));
- }
Add Comment
Please, Sign In to add comment