Advertisement
Guest User

Untitled

a guest
Feb 18th, 2019
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.76 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. char bubl(int *); // сортировка пузырьком
  5. int *readf(const char *); // считывает вектор из файла
  6.  
  7. int main(void) {
  8.    
  9.     int *vp = readf("input.txt");
  10.     if (!*vp)
  11.     {
  12.         printf("Error reading\n");
  13.         return 0;
  14.     }
  15.  
  16.     for(size_t i = 1; i <= *vp; i++)
  17.     {
  18.         printf("Num %i = %i\n", i, *(vp+i));
  19.     }
  20.  
  21.     if (!bubl(vp))
  22.     {
  23.         printf("Error sort");
  24.         return 0;
  25.     }
  26.  
  27.     for(size_t i = 1; i <= *vp; i++)
  28.     {
  29.         printf("Num %i = %i\n", i, *(vp+i));
  30.     }
  31.  
  32.     return 0;
  33. }
  34.  
  35. char bubl(int *vect)
  36. {
  37.     // сортировка пузырьком
  38.     // сортирует данные внутри указателя на вектор
  39.     // вход - указатель на вектор (нулевой элемент - размер вектора)
  40.  
  41.     // если вектор нулевой - выход
  42.     if (!*vect)
  43.     {
  44.         return 0;
  45.     }
  46.  
  47.     // сортировка пузырьком
  48.     int buff = 0;
  49.     char chek = 1;
  50.     while (chek == 1)
  51.     {
  52.         chek = 0;
  53.         for (size_t i = 1; i < *vect; i++)
  54.         {
  55.             if (*(vect + i) > *(vect + i + 1))
  56.             {
  57.                 buff = *(vect + i);
  58.                 *(vect + i) = *(vect + i + 1);
  59.                 *(vect + i + 1) = buff;
  60.                 chek = 1;
  61.             }
  62.         }
  63.     }
  64. }
  65.  
  66. int *readf(const char *file_name)
  67. {
  68.     // чтение вектора из файла
  69.     // вход - имя файла с вектором в txt
  70.     // выход - указатель на считанный вектор
  71.     // нулевой элемент - размер вектора
  72.     // структура считываемого файла - одно число в строке
  73.  
  74.     FILE *input_fp = fopen(file_name, "r");
  75.     if (input_fp == 0)
  76.     {
  77.         printf("Error 1\n");
  78.         return 0;
  79.     }
  80.     // определение количества строк в файле (одна строка - одно число)
  81.     int vsize = 0;
  82.     while (!feof(input_fp) && !ferror(input_fp))
  83.     {
  84.         fscanf(input_fp, "%*[^\n]%*c");
  85.         vsize++;
  86.     }
  87.     // выделение памяти под считываемый вектор (нулевой элемент является размером вектора)
  88.     int *vector_p = malloc(vsize * sizeof *vector_p);
  89.     if (!vector_p)
  90.     {
  91.         printf("Error 2\n");
  92.         return 0;
  93.     }
  94.     vsize--;
  95.  
  96.     rewind(input_fp);
  97.  
  98.     *vector_p = vsize;
  99.     // чтение вектора
  100.     for (size_t i = 1; i <= vsize; i++)
  101.     {
  102.         fscanf(input_fp, "%i", vector_p+i);
  103.     }
  104.  
  105.     fclose(input_fp);
  106.  
  107.     return vector_p;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement