MartinSRB

Spektroskopija: teški metali u piću

Dec 11th, 2021 (edited)
1,067
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.29 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX_SIMBOL (2 + 1)
  6. #define MAX_SIZE (20 + 1)
  7.  
  8. typedef struct element_st{
  9.     char simbol[MAX_SIMBOL];
  10.     char ime[MAX_SIZE];
  11.     char vrsta[MAX_SIZE];
  12.     unsigned int a_tezina;
  13.     struct element_st *sl;
  14. }ELEMENT;
  15.  
  16. void list_init(ELEMENT**);
  17. void delete_list(ELEMENT**);
  18. ELEMENT* make_element(char*,char*,char*,unsigned int);
  19. void add_to_list(ELEMENT**,ELEMENT*);
  20.  
  21. FILE* safe_open(char*,char*);
  22. void load(FILE*,ELEMENT**);
  23. void save(FILE*,ELEMENT*,char*);
  24.  
  25. int main(int argc, char** argv){
  26.     if(argc != 4){
  27.         printf("Nepravilno pokretanje programa.");
  28.         return EXIT_FAILURE;
  29.     }else{
  30.         ELEMENT* el;
  31.         FILE*    file = safe_open(argv[2],"r");
  32.         list_init(&el);
  33.         load(file,&el);
  34.         fclose(file);
  35.         file = safe_open(argv[3],"w");
  36.         save(file,el,argv[1]);
  37.         delete_list(&el);
  38.         return EXIT_SUCCESS;
  39.     }
  40. }
  41.  
  42. void list_init(ELEMENT **glava){
  43.     *glava = NULL;
  44. }
  45.  
  46. void delete_list(ELEMENT** glava){
  47.     ELEMENT *t;
  48.     while(*glava != NULL){
  49.         t = *glava;
  50.         *glava = (*glava)->sl;
  51.         t->sl = NULL;
  52.         free(t);
  53.     }
  54. }
  55.  
  56. ELEMENT* make_element(char* t_simbol,char* t_ime,char* t_vrsta,unsigned int t_tezina){
  57.     ELEMENT* new = (ELEMENT*)malloc(sizeof(ELEMENT));
  58.     if(new == NULL){
  59.         printf("Nema dovoljno memorije.");
  60.         exit(EXIT_FAILURE);
  61.     }
  62.     strcpy(new->simbol,t_simbol);
  63.     strcpy(new->ime,t_ime);
  64.     strcpy(new->vrsta,t_vrsta);
  65.     new->a_tezina = t_tezina;
  66.     new->sl = NULL;
  67.     return new;
  68. }
  69.  
  70. void add_to_list(ELEMENT** glava,ELEMENT* el){
  71.     if(*glava == NULL){
  72.         *glava = el;
  73.     }else{
  74.         ELEMENT* t = *glava;
  75.         while(t->sl != NULL){
  76.             t = t->sl;
  77.         }
  78.         t->sl = el;
  79.     }
  80.     return;
  81. }
  82.  
  83.  //-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  84.  
  85. FILE* safe_open(char* name,char* mode){
  86.     FILE* f = fopen(name,mode);
  87.     if(f == NULL){
  88.         printf("Nemoguce je otvoriti fajl %s.\n",name);
  89.         exit(EXIT_FAILURE);
  90.     }
  91.     return f;
  92. }
  93.  
  94. void load(FILE* f,ELEMENT** glava){
  95.     char t_ime[MAX_SIZE];
  96.     char t_vrsta[MAX_SIZE];
  97.     char t_simbol[MAX_SIMBOL];
  98.     unsigned int t_tezina;
  99.     while(fscanf(f,"%s %s %u %s",
  100.                                 t_simbol,
  101.                                 t_ime,
  102.                                 &t_tezina,
  103.                                 t_vrsta) != EOF){
  104.         add_to_list(glava,make_element(t_simbol,t_ime,t_vrsta,t_tezina));                            
  105.     }
  106.     return;
  107. }
  108.  
  109. void save(FILE* f,ELEMENT* glava,char* vrsta){
  110.     ELEMENT* t = glava,
  111.            * s = NULL;
  112.     while(t != NULL){
  113.         fprintf(f,"%-2s %3u %s\n",
  114.                             t->simbol,t->a_tezina,t->vrsta);
  115.         if(strcmp(t->vrsta,vrsta) == 0){
  116.             if(s == NULL){
  117.                 s = t;
  118.             }else{
  119.                 if(s->a_tezina < t->a_tezina){
  120.                     s = t;
  121.                 }
  122.             }
  123.         }                
  124.         t = t->sl;
  125.     }
  126.     if(s == NULL){
  127.         fprintf(f,"\nNe postoji element vrste %s.",vrsta);
  128.     }else{
  129.         fprintf(f,"\nNajtezi %s je %s (%s), atomska tezina %u",vrsta,s->ime,s->simbol,s->a_tezina);
  130.     }
  131.     return;
  132. }
Add Comment
Please, Sign In to add comment