Advertisement
Merso1913

dynamic_list

Oct 20th, 2019
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.66 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. struct Node {
  5.     Node* prev = 0;
  6.     int year;
  7.     int ussr;
  8.     int usa;
  9.     int uk;
  10.     int fr;
  11. };
  12.  
  13. struct queue {
  14.     Node* beg;
  15.     Node* end;
  16.     int size;
  17. };
  18.  
  19. void init(queue& qu);
  20.  
  21. void push(queue& qu, int year, int ussr, int usa, int uk, int fr);
  22.  
  23. void pop(queue& qu);
  24.  
  25. void clear(queue& qu);
  26.  
  27. int input_check();
  28.  
  29. void input(int& count, queue& qu);
  30.  
  31.  
  32. int main() {
  33.     /*
  34.     years = {1928, 1940, 1950, 1955}
  35.     ussr = {120, 422, 580, 837}
  36.     usa = {137, 166, 209, 250}
  37.     uk = {94, 105, 122, 139}
  38.     fr = {105, 114, 131, 172}
  39.     */
  40.  
  41.     queue qu;
  42.     init(qu);
  43.  
  44.     ///////////////////// inputing table /////////////////////
  45.  
  46.     int count = 5;
  47.     input(count, qu);
  48.  
  49.  
  50.     ///////////////////// part A /////////////////////
  51.  
  52.     Node* pos = qu.beg;
  53.     Node* max = pos;
  54.     int diff = abs( pos->uk  - pos->fr);
  55.     pos = qu.beg -> prev;
  56.     for (int i = 1; i < qu.size; ++i) {
  57.  
  58.         if (abs(pos->uk - pos->fr) > diff) {
  59.             max = pos;
  60.             diff = abs(pos->uk - pos->fr);
  61.         }
  62.         pos = pos -> prev;
  63.     }
  64.     printf("Год: %d\nПроцент роста Англии: %d\nПроцент роста Франции: %d\nРазница: %d\n\n", max->year, max->uk, max->fr, diff);
  65.  
  66.  
  67.     ///////////////////// part B /////////////////////
  68.  
  69.     int growth;
  70.     printf("Введите темп роста производительнсоти в США:\n");
  71.     scanf("%d", &growth);
  72.  
  73.     pos = qu.beg;
  74.     for (int i = 0; i < qu.size; ++i) {
  75.         if (pos->usa <= growth) {
  76.             printf("Год:%d ========== Процент роста:%d\n", pos -> year, pos->usa);
  77.         }
  78.         pos = pos -> prev;
  79.     }
  80.  
  81.     clear(qu);
  82.     return 0;
  83. }
  84.  
  85.  
  86. void init(queue& qu) {              //initializing queue
  87.     qu.size = 0;
  88.     qu.beg = 0;
  89.     qu.end = 0;
  90. }
  91.  
  92. void push(queue& qu, int year, int ussr, int usa, int uk, int fr) {
  93.     Node* pv = new Node;            //new field (equals to string in table)
  94.  
  95.     pv -> year = year;              //pushing data
  96.     pv -> ussr = ussr;
  97.     pv -> usa = usa;
  98.     pv -> uk = uk;
  99.     pv -> fr = fr;
  100.  
  101.     ////////////////organizing queue//////////////////
  102.  
  103.     if (!qu.size) {                 //pushing when size = 0
  104.         qu.beg = pv;
  105.     } else if (qu.size > 0) {       //pushing when size > 0
  106.         qu.end -> prev = pv;
  107.     }
  108.     qu.end = pv;
  109.     ++qu.size;
  110. }
  111.  
  112. void pop(queue& qu) {
  113.     if (qu.size) {                  // size > 0
  114.         Node* pv = qu.beg;
  115.         qu.beg = qu.beg -> prev;
  116.         printf("%d\n", pv -> year); //printing deleted year
  117.         delete pv;
  118.         --qu.size;
  119.         if (!qu.size) {             //reiniting in case of deleting every field
  120.             init(qu);
  121.         }
  122.     }
  123. }
  124.  
  125. void clear(queue& qu) {
  126.     if (qu.size) {
  127.         int size = qu.size;
  128.         for (int i = 0; i < size; ++i) {
  129.             Node* pv = qu.beg;
  130.             qu.beg = qu.beg -> prev;
  131.             delete pv;
  132.             --qu.size;
  133.         }
  134.     }
  135.     init(qu);
  136. }
  137.  
  138. int input_check() {
  139.  
  140.     int data;
  141.     int len = 0;
  142.     char ch;
  143.     char* str = (char*)malloc(sizeof(char));
  144.     //printf("Input:\n");
  145.     while (1) {
  146.  
  147.         ch = getchar();
  148.         if (ch == '\n') {
  149.             break;
  150.         } else {
  151.             str[len] = ch;
  152.             str = (char*)realloc(str,(1 + (++len)*sizeof(char)));
  153.         }
  154.  
  155.     }
  156.  
  157.     //printf("Str: %s", str);
  158.     data = atoi(str);
  159.     if (!len) {
  160.         return -2;
  161.     }
  162.     if (data == 0 && str[0] != '0') {
  163.         return -1;
  164.     } else if (data < 0) {
  165.         return -3;
  166.     } else {
  167.         return data;
  168.     }
  169.  
  170. }
  171.  
  172. void input (int& count, queue& qu) {
  173.  
  174.     int     year,
  175.             ussr,
  176.             usa,
  177.             uk,
  178.             fr;
  179.     int* data;
  180.  
  181.  
  182.     while (count > 0) {
  183.  
  184.         switch (count) {
  185.  
  186.             case 5:
  187.                 printf("Введите год:\n");
  188.                 data = &year;
  189.                 break;
  190.             case 4:
  191.                 printf("Введите темпы роста СССР в процентах:\n");
  192.                 data = &ussr;
  193.                 break;
  194.             case 3:
  195.                 printf("Введите темпы роста США в процентах:\n");
  196.                 data = &usa;
  197.                 break;
  198.             case 2:
  199.                 printf("Введите темпы роста Англии в процентах:\n");
  200.                 data = &uk;
  201.                 break;
  202.             case 1:
  203.                 printf("Введите темпы роста Франции в процентах:\n");
  204.                 data = &fr;
  205.                 break;
  206.         }
  207.  
  208.         *data = input_check();
  209.  
  210.         if (*data == -2 && count%5 == 0) {
  211.  
  212.             //printf("Konez\n");
  213.             break;
  214.  
  215.         } else if (*data < 0) {
  216.  
  217.             printf("Vvedite eshe raz\n");
  218.             continue;
  219.  
  220.         } else {
  221.  
  222.             //printf("Data: \n");
  223.             if (count == 1) {
  224.  
  225.                 count = 5;
  226.                 push(qu, year, ussr, usa, uk, fr);
  227.                 //printf("Year: %d, Ussr: %d, Usa: %d, Uk: %d, Fr: %d\n", qu.beg->year, qu.beg->ussr, qu.beg->usa, qu.beg->uk, qu.beg->fr );
  228.  
  229.             } else {
  230.                 --count;
  231.             }
  232.  
  233.         }
  234.  
  235.     }
  236.  
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement