Advertisement
drochun

liba5 1

Dec 12th, 2021
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.92 KB | None | 0 0
  1. //Вариант 8 задание №1, Гринкевич, 11.11.2021 - 03.12.2021
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <windows.h>
  6. #include <locale.h>
  7. #include <stdlib.h>
  8.  
  9. int main(void)
  10. {
  11.     setlocale(LC_ALL, "Russian");     // русификация вывода информации на экран
  12.     int* ms1;
  13.     int chek = 0;
  14.     int size; //size of array;
  15.     printf("\nНапишите размер одномерного массива\n");
  16.     do
  17.     {
  18.         rewind(stdin); // чтобы ещё раз запросить ввод
  19.         chek = scanf("%d", &size);
  20.         if (size == 0 || size < 0) chek = 0;
  21.         if (chek == 0) printf("\nВы ввели что-то не так, попробуйте ещё раз\n");
  22.     } while (chek == 0);
  23.     if (!(ms1 = (int*)calloc(size, sizeof(int)))) { return 0; }
  24.  
  25.     input(ms1, size);
  26.  
  27.     /*
  28.     int i;
  29.     int min = *ms1; // для записи минимального значения
  30.     for (i = 0; i < size; i++)
  31.     {
  32.         if (min > *(ms1 + i)) min = *(ms1 + i);
  33.     }
  34.     return min;
  35.  
  36.     int i;
  37.     int counter = 0;
  38.     for (i = 0; i < size; i++)
  39.     {
  40.         if (min == *(ms1 + i)) counter++;
  41.     }
  42.     return counter;
  43.     */
  44.     int min = foo(ms1, size);
  45.     int counter = bar(ms1, size, min);
  46.     int position = srt(ms1, size, min);
  47.     output(ms1, size, position, counter, min);
  48.     repeat();
  49.     free(ms1);
  50.     return 0;
  51. }
  52.  
  53. int foo(int* ms1, int size) // минимальное значение
  54. {
  55.     int i;
  56.     int min = *ms1; // для записи минимального значения
  57.     for (i = 0; i < size; i++)
  58.     {
  59.  
  60.         if (min > *(ms1 + i)) min = *(ms1 + i);
  61.     }
  62.     return min;
  63. }
  64.  
  65. int bar(int* ms1, int size, int min) // сколько элементов убрать
  66. {
  67.     int i;
  68.     int counter = 0;
  69.     for (i = 0; i < size; i++)
  70.     {
  71.         if (min == *(ms1 + i)) counter++;
  72.     }
  73.     return counter;
  74. }
  75.  
  76.  
  77.  
  78.  
  79. // убираю элементы с мин значением:
  80. int srt(int* ms1, int size, int min)
  81.  
  82. {
  83.     int i, i2, j, j2; // счетчик
  84.     //int min = *ms1; // для записи минимального значения
  85.     int position = 0;
  86.     /*
  87.     for (i = 0; i < size; i++)
  88.     {
  89.         if (min > *(ms1 + i)) min = *(ms1 + i);
  90.     }
  91.     */
  92.     for (i = 0; i < size; i++)
  93.     {
  94.         if (*(ms1 + i) == min)
  95.         {
  96.             position++;
  97.             i2 = i;
  98.             for (j = i + 1; j != (size + position); j++)
  99.             {
  100.                 for (j2=j; *(ms1 + i2)==*(ms1 + j2); j2++ )
  101.                 {
  102.                    
  103.                 }
  104.                 *(ms1 + i2) = *(ms1 + j2);
  105.                 *(ms1 + j2) = min;
  106.                 i2++;
  107.             }
  108.         }
  109.     }
  110.     //if (min == *(ms1 + i)) position++;
  111.     //position--;
  112.     //position += counter;
  113.     return position;
  114. }
  115.  
  116.  
  117. int repeat(void)
  118.  
  119. {
  120.     char key;
  121.     int prov = 0;
  122.     printf("\nПовторить выполнение программы? (y/n)");
  123.     while (prov == 0)
  124.     {
  125.         rewind(stdin);
  126.         prov = scanf("%c", &key);
  127.         if (key == 'y') main();
  128.         if (key == 'n')
  129.         {
  130.             printf("\nПрограмма завершена!");
  131.             exit(0);
  132.         }
  133.         printf("\nВы должны написать 'y'(да) или 'n'(нет)");
  134.         prov = 0;
  135.     }
  136. }
  137.  
  138. int input(int* ms1, int size)
  139. {
  140.     int i; //counter
  141.     int chek = 0;
  142.     printf("\nЗаполним массив\n");
  143.     for (i = 0; i < size; i++) //заполняем массив с клавиатуры
  144.     {
  145.         do
  146.         {
  147.             rewind(stdin);
  148.             printf("\nВведите %d элемент массива :", i);
  149.             chek = scanf("%d", ms1+i);
  150.             if (chek == 0) printf("\nВы ввели что-то не так, попробуйте ещё раз\n");
  151.         } while (chek == 0);
  152.     }
  153. }
  154.  
  155. int output(int* ms1, int size, int position, int counter, int min)
  156. {
  157.     int i;
  158.     int temp;
  159.     temp = size - counter;
  160.     //position++;
  161.     ms1 = (int*)realloc(ms1, (size - position) * sizeof(int));
  162.     printf("\nмасссив после изъятия элементов и сминимальным значением : ");  // вывод  массива без элементов с мин. значениями
  163.     for (i = 0; i != temp; i++) printf("%3d ", *(ms1 + i));
  164.     fflush(stdin);
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement