Advertisement
stev4

Untitled

Dec 6th, 2019
466
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.86 KB | None | 0 0
  1. //NE ZABORAVI DA KORISTIS -lm KAD POKRECES
  2. // ./a.out 100 13 13 5 ULAZ.txt IZLAZS.txt
  3. //ULAZNI FILE
  4.  
  5. /*
  6. Petar 50 Warrior 10 10
  7. Milos 55 Warrior 10 15
  8. Jovan 750 Mage 30 30
  9. Milica 250 Cleric 15 30
  10. */
  11.  
  12.  
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <string.h>
  16. #include <math.h>
  17.  
  18. #define MAX_NIZ 30
  19. #define MAX_IME 20+1
  20. #define MAX_RANK 7+1
  21.  
  22. struct igrac_st{
  23.     char naziv[MAX_IME];
  24.     int helti;
  25.     char rank[MAX_RANK];
  26.     int x;
  27.     int y;
  28. };
  29.  
  30. struct preziveti_st{
  31.     char naziv[MAX_IME];
  32.     int helti;
  33. };
  34.  
  35. FILE *safe_fopen(char filename[], char mode[], int error_code);
  36. void citaj_file(FILE *in, struct igrac_st igrac[], int *n);
  37. void racunaj(struct igrac_st igrac[],struct preziveti_st preziveti[],int n,int xcen,int ycen,int radijus, int steta);
  38. void cuvaj_file(FILE *out,struct preziveti_st preziveti[],struct preziveti_st temp[], int n);
  39. double racunaj_udeljenost(struct igrac_st igrac,int xcen,int ycen);
  40.  
  41.  
  42. int main(int arg_num, char **args){
  43. if(arg_num!=7){
  44.     printf("Niste pravilno pokrenuli program");
  45.     exit(404);
  46. }
  47.  
  48. int steta= atoi(args[1]);
  49. int xcen=atoi(args[2]);
  50. int ycen=atoi(args[3]);
  51. int radijus=atoi(args[4]);
  52. char *in_filename=args[5];
  53. char *out_filename=args[6];
  54.  
  55. FILE *in=safe_fopen(in_filename, "r", 1);
  56. FILE *out=safe_fopen(out_filename, "w", 2);
  57. int n;
  58. struct igrac_st igrac[MAX_NIZ];
  59. struct preziveti_st preziveti[MAX_NIZ];
  60. struct preziveti_st temp[MAX_NIZ];
  61.  
  62. citaj_file(in, igrac, &n);
  63. racunaj(igrac, preziveti, n, xcen, ycen, radijus, steta);
  64. cuvaj_file(out, preziveti, temp, n);
  65. fclose(in);
  66. fclose(out);
  67. return 0;
  68. }
  69.  
  70. FILE *safe_fopen(char filename[], char mode[], int error_code){
  71.  
  72.     FILE *fp=fopen(filename, mode);
  73.     if(fp==NULL){
  74.     printf("NISTE USPELI DA OTVORITE FILE");
  75.     exit(error_code);
  76.     }
  77. return fp;
  78. }
  79.  
  80. void citaj_file(FILE *in, struct igrac_st igrac[], int *n){
  81.     *n=0;
  82.     while(fscanf(in, "%s %d %s %d %d",
  83.     igrac[*n].naziv,
  84.     &igrac[*n].helti,
  85.     igrac[*n].rank,
  86.     &igrac[*n].x,
  87.     &igrac[*n].y
  88.     )!=EOF){
  89.     (*n)++;
  90.     }
  91. }
  92.  
  93.  
  94. void racunaj(struct igrac_st igrac[],struct preziveti_st preziveti[],int n,int xcen,int ycen,int radijus, int steta){
  95.  
  96.     //AKO SE GLEDA KAO KOCKA
  97.  
  98.     /*int i,radijusxmanje,radijusymanje, radijusxvece, radijusyvece;
  99.     radijusxmanje = xcen-radijus;
  100.     radijusymanje = ycen-radijus;
  101.     radijusxvece = xcen+radijus;
  102.     radijusyvece = ycen+radijus;
  103.     char warrior_rank[MAX_IME];
  104.        strcpy(warrior_rank, "Warrior");
  105.     for(i=0;i<n;i++){
  106.         if(igrac[i].x>=radijusxmanje && igrac[i].x<=radijusxvece)   //ako je u tom radijusu
  107.         {
  108.         if(igrac[i].y>=radijusymanje && igrac[i].y<=radijusyvece)
  109.         {
  110.             if ((strcmp(igrac[i].rank, warrior_rank))==0)
  111.             {
  112.                 preziveti[i].helti=igrac[i].helti-steta/2;
  113.             }
  114.             else
  115.             {
  116.                 preziveti[i].helti=(igrac[i].helti)-steta; 
  117.             }
  118.            
  119.         }
  120.         else
  121.                 preziveti[i].helti=igrac[i].helti;
  122.         }
  123.         else
  124.         preziveti[i].helti=igrac[i].helti;
  125. */
  126.  
  127.  
  128.  
  129.     //AKO SE GLEDA KAO KRUG
  130.  
  131.     int i,poluprecnik;
  132.     char warrior_rank[MAX_IME];
  133.     double udaljenost_tacke_od_centra;
  134.     strcpy(warrior_rank, "Warrior");
  135.     for(i=0;i<n;i++){
  136.         udaljenost_tacke_od_centra=racunaj_udeljenost(igrac[i],xcen,ycen);
  137.         if(udaljenost_tacke_od_centra<=radijus) //ako je u tom radijusu
  138.         {
  139.        
  140.             if ((strcmp(igrac[i].rank, warrior_rank))==0)
  141.             {
  142.                 preziveti[i].helti=igrac[i].helti-steta/2;
  143.             }
  144.             else
  145.             {
  146.                 preziveti[i].helti=(igrac[i].helti)-steta; 
  147.             }
  148.  
  149.         }
  150.         else
  151.         preziveti[i].helti=igrac[i].helti;
  152.  
  153.        
  154.     strcpy(preziveti[i].naziv, igrac[i].naziv);
  155.     }  
  156. }
  157.  
  158. void cuvaj_file(FILE *out,struct preziveti_st preziveti[],struct preziveti_st temp[], int n){
  159.  
  160.     int i;
  161.     for(i=0;i<n;i++){
  162.     if(preziveti[i].helti>0){
  163.     fprintf(out, "%s %d\n",
  164.     preziveti[i].naziv,
  165.     preziveti[i].helti);
  166.     }}
  167.  
  168. }
  169.  
  170.  
  171. double racunaj_udeljenost(struct igrac_st igrac,int xcen,int ycen){
  172.     double udaljenost;
  173.     udaljenost=sqrt((xcen-igrac.x)*(xcen-igrac.x)+(ycen-igrac.y)*(ycen-igrac.y));
  174.  
  175.     return udaljenost;
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement