MartinSRB

Спектроскопија - исправак

Dec 11th, 2021 (edited)
1,187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.54 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.     unsigned tezina;
  12.     char vrsta[MAX_SIZE];
  13.     struct element_st *sledeci;
  14. }ELEMENT;
  15.  
  16. void inicijalizacija(ELEMENT**);
  17. void brisanje(ELEMENT**);
  18. ELEMENT* make_element(char*,char*,unsigned,char*);
  19. void dodavanje(ELEMENT**,ELEMENT*);
  20. FILE* safe_open(char*,char*);
  21. void ucitavanje(FILE*,ELEMENT**);
  22. void save(FILE* ,ELEMENT* ,char* );
  23. int main(int argc, char** argv){
  24.     if(argc != 4){
  25.         printf("Nepravilan poziv programa. Primer: %s metal uzorak_vino.txt analiza.txt\n",argv[0]);
  26.         return EXIT_FAILURE;
  27.     }else{  
  28.     ELEMENT *glava;
  29.     FILE   *file = safe_open(argv[2],"r");
  30.     inicijalizacija(&glava);
  31.     ucitavanje(file,&glava);
  32.     fclose(file);
  33.     file = safe_open(argv[3],"w");
  34.         save(file,glava,argv[1]);
  35.     fclose(file);
  36.     brisanje(&glava);
  37.  
  38. return EXIT_SUCCESS;
  39. }
  40. }
  41. void inicijalizacija(ELEMENT** glava){
  42.     *glava=NULL;
  43.     /*у коду који си ми послао имао си стављено == што је за проверу па је твоја листа увек нулл
  44.     тј. празна и ти покушаваш да приступиш меморији која ти није додељена*/
  45.     return;
  46. }
  47.  
  48. void brisanje(ELEMENT** glava){
  49.     ELEMENT *tekuci;
  50.     while(*glava != NULL){
  51.     tekuci = *glava;
  52.     *glava = (*glava)->sledeci;
  53.     free(tekuci);
  54. }
  55. }
  56.    
  57. ELEMENT* make_element(char* t_simbol,char* t_ime,unsigned int t_tezina,char* t_vrsta){
  58.     ELEMENT *novi = (ELEMENT*)malloc(sizeof(ELEMENT));
  59.     if(novi == NULL){
  60.         printf("Nije moguce zauzeti memoriju.\n");
  61.         exit(EXIT_FAILURE);
  62. }
  63.     strcpy(novi->simbol,t_simbol);
  64.     strcpy(novi->ime,t_ime);
  65.     strcpy(novi->vrsta,t_vrsta);
  66.     novi->tezina = t_tezina;
  67.     novi->sledeci = NULL;
  68.    
  69.     return novi;
  70. }
  71. void dodavanje(ELEMENT** glava,ELEMENT* novi){
  72.     if(*glava==NULL){
  73.     *glava=novi;
  74. }else{
  75.     ELEMENT* tekuci=*glava;
  76.     while(tekuci->sledeci !=NULL){
  77.     tekuci = tekuci->sledeci;
  78. }
  79.     tekuci->sledeci=novi;
  80. }
  81. }
  82.  
  83. FILE* safe_open(char* name,char* mode){
  84.     FILE *f = fopen(name,mode);
  85.     if(f == NULL){
  86.         printf("Nije moguce otvoriti fajl %s.\n",name);
  87.         exit(EXIT_FAILURE);
  88.     }
  89.     return f;
  90. }
  91.  
  92. void ucitavanje(FILE* f,ELEMENT** glava){
  93.     char simbol[MAX_SIMBOL],
  94.          vrsta[MAX_SIZE],
  95.          ime[MAX_SIZE];
  96.     unsigned int tezina;
  97.     while(fscanf(f,"%s %s %u %s",
  98.                                 simbol,
  99.                                 ime,
  100.                                 &tezina,
  101.                                 vrsta) != EOF){
  102.         dodavanje(glava,make_element(simbol,ime,tezina,vrsta));                            
  103.     }
  104.     return;
  105. }
  106. void save(FILE* f,ELEMENT* glava,char* vrsta){
  107.     ELEMENT *t   = glava,
  108.             *max = NULL;
  109.     while(t != NULL){
  110.         fprintf(f,"%-2s %3u %s\n",t->simbol,t->tezina,t->vrsta);
  111.         if(strcmp(t->vrsta,vrsta) == 0){
  112.             if(max == NULL){
  113.                 max = t;
  114.             }else{
  115.                 if(max->tezina < t->tezina){
  116.                     max = t;
  117.                 }
  118.             }
  119.         }
  120.       t = t->sledeci;
  121.     }
  122.     if(max == NULL){
  123.         fprintf(f,"\nU uzorku nije pronadjen nijedan %s!",vrsta);
  124.     }else{
  125.         fprintf(f,"\nNajtezi %s je %s (%s), atomska tezina %u.",vrsta,max->ime,max->simbol,max->tezina);
  126.     }
  127.     return;
  128. }
Advertisement
Add Comment
Please, Sign In to add comment