Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- struct Node {
- Node* prev = 0;
- int year;
- int ussr;
- int usa;
- int uk;
- int fr;
- };
- struct queue {
- Node* beg;
- Node* end;
- int size;
- };
- void init(queue& qu);
- void push(queue& qu, int year, int ussr, int usa, int uk, int fr);
- void pop(queue& qu);
- void clear(queue& qu);
- int input_check();
- void input(int& count, queue& qu);
- int main() {
- /*
- years = {1928, 1940, 1950, 1955}
- ussr = {120, 422, 580, 837}
- usa = {137, 166, 209, 250}
- uk = {94, 105, 122, 139}
- fr = {105, 114, 131, 172}
- */
- queue qu;
- init(qu);
- ///////////////////// inputing table /////////////////////
- int count = 5;
- input(count, qu);
- ///////////////////// part A /////////////////////
- Node* pos = qu.beg;
- Node* max = pos;
- int diff = abs( pos->uk - pos->fr);
- pos = qu.beg -> prev;
- for (int i = 1; i < qu.size; ++i) {
- if (abs(pos->uk - pos->fr) > diff) {
- max = pos;
- diff = abs(pos->uk - pos->fr);
- }
- pos = pos -> prev;
- }
- printf("Год: %d\nПроцент роста Англии: %d\nПроцент роста Франции: %d\nРазница: %d\n\n", max->year, max->uk, max->fr, diff);
- ///////////////////// part B /////////////////////
- int growth;
- printf("Введите темп роста производительнсоти в США:\n");
- scanf("%d", &growth);
- pos = qu.beg;
- for (int i = 0; i < qu.size; ++i) {
- if (pos->usa <= growth) {
- printf("Год:%d ========== Процент роста:%d\n", pos -> year, pos->usa);
- }
- pos = pos -> prev;
- }
- clear(qu);
- return 0;
- }
- void init(queue& qu) { //initializing queue
- qu.size = 0;
- qu.beg = 0;
- qu.end = 0;
- }
- void push(queue& qu, int year, int ussr, int usa, int uk, int fr) {
- Node* pv = new Node; //new field (equals to string in table)
- pv -> year = year; //pushing data
- pv -> ussr = ussr;
- pv -> usa = usa;
- pv -> uk = uk;
- pv -> fr = fr;
- ////////////////organizing queue//////////////////
- if (!qu.size) { //pushing when size = 0
- qu.beg = pv;
- } else if (qu.size > 0) { //pushing when size > 0
- qu.end -> prev = pv;
- }
- qu.end = pv;
- ++qu.size;
- }
- void pop(queue& qu) {
- if (qu.size) { // size > 0
- Node* pv = qu.beg;
- qu.beg = qu.beg -> prev;
- printf("%d\n", pv -> year); //printing deleted year
- delete pv;
- --qu.size;
- if (!qu.size) { //reiniting in case of deleting every field
- init(qu);
- }
- }
- }
- void clear(queue& qu) {
- if (qu.size) {
- int size = qu.size;
- for (int i = 0; i < size; ++i) {
- Node* pv = qu.beg;
- qu.beg = qu.beg -> prev;
- delete pv;
- --qu.size;
- }
- }
- init(qu);
- }
- int input_check() {
- int data;
- int len = 0;
- char ch;
- char* str = (char*)malloc(sizeof(char));
- //printf("Input:\n");
- while (1) {
- ch = getchar();
- if (ch == '\n') {
- break;
- } else {
- str[len] = ch;
- str = (char*)realloc(str,(1 + (++len)*sizeof(char)));
- }
- }
- //printf("Str: %s", str);
- data = atoi(str);
- if (!len) {
- return -2;
- }
- if (data == 0 && str[0] != '0') {
- return -1;
- } else if (data < 0) {
- return -3;
- } else {
- return data;
- }
- }
- void input (int& count, queue& qu) {
- int year,
- ussr,
- usa,
- uk,
- fr;
- int* data;
- while (count > 0) {
- switch (count) {
- case 5:
- printf("Введите год:\n");
- data = &year;
- break;
- case 4:
- printf("Введите темпы роста СССР в процентах:\n");
- data = &ussr;
- break;
- case 3:
- printf("Введите темпы роста США в процентах:\n");
- data = &usa;
- break;
- case 2:
- printf("Введите темпы роста Англии в процентах:\n");
- data = &uk;
- break;
- case 1:
- printf("Введите темпы роста Франции в процентах:\n");
- data = &fr;
- break;
- }
- *data = input_check();
- if (*data == -2 && count%5 == 0) {
- //printf("Konez\n");
- break;
- } else if (*data < 0) {
- printf("Vvedite eshe raz\n");
- continue;
- } else {
- //printf("Data: \n");
- if (count == 1) {
- count = 5;
- push(qu, year, ussr, usa, uk, fr);
- //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 );
- } else {
- --count;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement