Gistrec

ОП СЕМ 2 Л 1

Feb 7th, 2017
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.12 KB | None | 0 0
  1. // Если кол-во элементов четно - выбираем каждый четный (по порядку) элемент
  2. // Иначе каждый нечетный (по порядку) элемент
  3. // Удаляя при этом ненужные элементы
  4.  
  5. #include "stdafx.h"
  6. #include <stdio.h>
  7.  
  8. struct line {
  9.     char elem;
  10.     line *next;
  11. };
  12.  
  13. void addSymbol(line *now, char elem) {
  14.     now->next = new line;
  15.     now->next->elem = elem;
  16.     now->next->next = NULL;
  17. }
  18.  
  19. void main() {
  20.     line *start = NULL; // start - начало последовательности
  21.     line *now = NULL; // Текущий элемент
  22.     int count = 0; // Кол-во элементов
  23.     char elem; // Элемент
  24.     FILE *file; // Указатель на файл
  25.     // Если файл пустой, то говорим, что ошибка
  26.     if ((file = fopen("data.txt", "r")) == NULL) perror("error");
  27.     else {
  28.         // Создание первого элемента
  29.         fscanf(file, "%c", &elem);
  30.         start = new line;
  31.         start->elem = elem;
  32.         now = start;
  33.  
  34.         // Пока не достигнут конец файла
  35.         while (fscanf(file, "%c", &elem) != EOF) {
  36.             addSymbol(now, elem);
  37.             now = now->next;
  38.         }
  39.         fclose(file);
  40.  
  41.         // Вывод последовательности
  42.         now = start;
  43.         while (now != NULL) {
  44.             printf("%c ", now->elem);
  45.             count++;
  46.             now = now->next;
  47.         }
  48.         // Вывод кол-ва элементов
  49.         printf("count: %d\n", count);
  50.  
  51.         line* del; // del - переменная, которая будет "удаляться"
  52.         // Кореляция четности элементов
  53.         if (count % 2 == 0) {
  54.             del = start;
  55.             start = start->next;
  56.             delete del;
  57.         }
  58.  
  59.         // Основная задача - "выборка" нужных элементов
  60.         now = start;
  61.         while (now->next != NULL) {
  62.             del = now->next;
  63.             now->next = now->next->next;
  64.             now = now->next;
  65.             delete del;
  66.         }
  67.  
  68.         // Вывод получившейся последовательности
  69.         now = start;
  70.         while (now != NULL) {
  71.             printf("%c ", now->elem);
  72.             now = now->next;
  73.         }
  74.     }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment