Pohuyumer

LAB 2.10 HEADER

Jun 6th, 2020
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.04 KB | None | 0 0
  1. #include "Attachment.h"
  2.  
  3. void input1(int argc, char* argv[], TElem*& stack1, TElem*& stack2) {
  4.     // создание стеков из файла    
  5.     if (argc < 3) { // три параметра: путь+имя запущенного файла и два текстовых(один входной+выходной)
  6.         printf("Мало параметров\nPress any key");
  7.         exit(1);                                    // выходим из программы
  8.     }
  9.  
  10.     FILE* fin1 = fopen(argv[1], "rt");              // открытие текстового файла с информацией для первого стека
  11.     if (fin1 == NULL) {
  12.         printf("Error: не удалось открыть первый файл с исходными данными %s\n", argv[1]);
  13.         printf("Press any key.\n");
  14.         exit(1);
  15.     }
  16.  
  17.     int kol1 = 0;                         // количество элементов в первом стеке
  18.  
  19.     create_stack(&stack1, fin1, &kol1);             // создаем первый стек
  20.  
  21.     if (kol1 == 0) { printf("Первый стек пустой.\n"); }
  22.     else { printf("Создан первый стек, состоящий из %d элеметов.\n", kol1); }
  23.  
  24.     fclose(fin1);       // закрываем входные файлы
  25.    
  26. }
  27.  
  28. void input2(int argc, char* argv[], TElem*& stack2, TElem*& stack3) {
  29.     // создание стеков из файла    
  30.     if (argc < 3) { // три параметра: путь+имя запущенного файла и два текстовых(один входной+выходной)
  31.         printf("Мало параметров\nPress any key");
  32.         exit(1);                                    // выходим из программы
  33.     }
  34.  
  35.     FILE* fin1 = fopen(argv[1], "rt");              // открытие текстового файла с информацией для первого стека
  36.     if (fin1 == NULL) {
  37.         printf("Error: не удалось открыть первый файл с исходными данными %s\n", argv[1]);
  38.         printf("Press any key.\n");
  39.         exit(1);
  40.     }
  41.  
  42.     int kol2 = 0;                         // количество элементов в 2 стеке
  43.  
  44.     create_stack(&stack2, fin1, &kol2);             // создаем 2 стек
  45.  
  46.     if (kol2 == 0) { printf("Второй стек пустой.\n"); }
  47.     else { printf("Создан второй стек, состоящий из %d элеметов.\n", kol2); }
  48.  
  49.  
  50.     fclose(fin1);       // закрываем входные файлы
  51.  
  52. }
  53.  
  54. void input3(int argc, char* argv[], TElem*& stack3, TElem*& stack4) {
  55.     // создание стеков из файла    
  56.     if (argc < 3) { // три параметра: путь+имя запущенного файла и два текстовых(один входной+выходной)
  57.         printf("Мало параметров\nPress any key");
  58.         exit(1);                                    // выходим из программы
  59.     }
  60.  
  61.     FILE* fin1 = fopen(argv[1], "rt");              // открытие текстового файла с информацией для первого стека
  62.     if (fin1 == NULL) {
  63.         printf("Error: не удалось открыть первый файл с исходными данными %s\n", argv[1]);
  64.         printf("Press any key.\n");
  65.         exit(1);
  66.     }
  67.  
  68.     int kol3 = 0;                         // количество элементов в 3 стеке
  69.  
  70.     create_stack(&stack3, fin1, &kol3);             // создаем первый стек
  71.  
  72.     if (kol3 == 0) { printf("Третий стек пустой.\n"); }
  73.     else { printf("Создан третий стек, состоящий из %d элеметов.\n", kol3); }
  74.  
  75.  
  76.     fclose(fin1);       // закрываем входные файлы
  77.  
  78. }
  79.  
  80. void output_c(TElem* stack1, TElem* stack2, TElem* stack3, TElem* stack4) {
  81.     // вывод стеков в консоль
  82.     printf("Первый стек:");
  83.     print_c(stack1);
  84.  
  85.     printf("Второй стек:");
  86.     print_c(stack2);
  87.  
  88.     printf("Третий стек:");
  89.     print_c(stack3);
  90.  
  91.     printf("Четвертый стек:");
  92.     print_c(stack4);
  93.  
  94. }
  95.  
  96. void output_f(int argc, char* argv[], TElem* stack1, TElem* stack2, TElem* stack3, TElem* stack4) {
  97.     // вывод стеков в текстовый файл
  98.     if (argc < 3) {// три параметра: путь+имя запущенного файла и два текстовых(один входной+выходной)
  99.         printf("Мало параметров\nPress any key");
  100.         exit(1);
  101.     }
  102.  
  103.     FILE* fout = fopen(argv[2], "wt");             // открытие текстового файла для записи информации
  104.     if (fout == NULL) {
  105.         printf("Error: не удалось открыть второй файл с исходными данными %s\n", argv[2]);
  106.         printf("Press any key ");
  107.         exit(1);
  108.     }
  109.  
  110.     fprintf(fout, "Первый стек:");
  111.     print_f(stack1, fout);
  112.  
  113.     fprintf(fout, "Второй стек:");
  114.     print_f(stack2, fout);
  115.  
  116.     fprintf(fout, "Третий стек:");
  117.     print_f(stack3, fout);
  118.  
  119.     fprintf(fout, "Четвертый стек:");
  120.     print_f(stack4, fout);
  121.  
  122.     printf("Стеки выведены в текстовый файл.");
  123.  
  124.     fclose(fout);   // закрыть файл для записи
  125. }
  126.  
  127. TElem* solution(TElem*& stack1, TElem*& stack2, TElem*& stack3, TElem*& stack4) {
  128.     // решение задачи    
  129.     TElem* stack = NULL;       // изначально возвращаемое значение = 0
  130.  
  131.     do {
  132.         TopToTop(&stack1, &stack2);             // перекладываем в другой стек
  133.         TopToTop(&stack2, &stack3);             // перекладываем в другой стек
  134.         TopToTop(&stack3, &stack4);             // перекладываем в другой стек
  135.      
  136.  
  137.     } while (stack1);                 // пока 1 стек не нулевой
  138.  
  139.     do {
  140.         TopToTop(&stack2, &stack3);             // перекладываем в другой стек
  141.         TopToTop(&stack3, &stack4);             // перекладываем в другой стек
  142.  
  143.     } while (stack2);                 // пока 2 стек не нулевой
  144.  
  145.     do {
  146.         TopToTop(&stack3, &stack4);             // перекладываем в другой стек
  147.  
  148.     } while (stack3);                 // пока 3 стек не нулевой
  149.  
  150.     return stack;
  151. }
  152.  
  153. void free_stacks(TElem** stack1, TElem** stack2, TElem** stack3, TElem** stack4) {
  154.     // очистка первого, второго и третьего стеков    
  155.     (*stack1) = free_stack(stack1);
  156.     (*stack2) = free_stack(stack2);
  157.     (*stack3) = free_stack(stack3);
  158.     (*stack4) = free_stack(stack4);
  159.     printf("Стеки очищены.");
  160. }
Advertisement
Add Comment
Please, Sign In to add comment