Advertisement
drochun

Liba5_1z

Nov 26th, 2021
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.20 KB | None | 0 0
  1. //Лабораторная работа "Динамические массивы",Лужков Иван,7.11.2021,задание 1,вариант 17
  2. #include <stdio.h>
  3. #include <malloc.h>
  4.  
  5.  
  6. void delete_elem_of_ms(int* ms, int index, int size);
  7. void main_func();
  8. int input_save();
  9. int input_save_w_ceil_floor(int ceil, int floor);
  10. void delete_less_prv(int * ms, int size);
  11.  
  12. int main() {
  13.     int flg_for_repeat = 0;
  14.  
  15.     do
  16.     {
  17.         main_func();
  18.  
  19.         printf("Repeat the programm again?Enter 1 if yes and 2 if no\n");       //запрос на повтор программы
  20.         flg_for_repeat = input_save_w_ceil_floor(1, 2);
  21.  
  22.     } while (flg_for_repeat == 1);
  23.  
  24.     return 0;
  25. }
  26.  
  27. int input_save_w_ceil_floor(int ceil, int floor) {      //проверка на ввод int с заданным диапазоном
  28.     int number = 0, flag = 0, amount_symbol;
  29.     do {
  30.         amount_symbol = 0;
  31.         if (flag++ > 0)             //проверка на повторный ввод - если вводится повторно,то вывод "try again"
  32.         {
  33.             printf("Try again\n");
  34.         }
  35.         scanf_s("%d", &number);     //скан интового значения
  36.         scanf_s("%*[^\n]%n", &amount_symbol);       //скан любого символа кроме \n
  37.     } while (amount_symbol > 0 || number < ceil || number > floor); //если были другие символы,кроме введенного числа или число не находится
  38.                                                                     // в диапазоне,то повтор цикла      
  39.     return number;
  40. }
  41.  
  42.  
  43.  
  44. int input_save() {          //проверка на ввод int
  45.     int number = 0, flag = 0, amount_symbol;
  46.     do {
  47.         amount_symbol = 0;
  48.         if (flag++ > 0)
  49.         {
  50.             printf("Try again\n");
  51.         }
  52.         scanf_s("%d", &number);                     //скан интового значения
  53.         scanf_s("%*[^\n]%n", &amount_symbol);       //скан любого символа кроме \n
  54.     } while (amount_symbol > 0);                    //если были другие символы,кроме введенного числа ,то повтор цикла
  55.  
  56.     return number;
  57. }
  58.  
  59. void main_func() {
  60.     int* ms;
  61.     int tmp, size;
  62.  
  63.     printf("Enter size of a massive\n");            //запрос на ввод размера массива
  64.     size = input_save();
  65.  
  66.     ms =(int *) calloc(size, sizeof(int));          //выделение памяти на массив
  67.  
  68.     if (!ms)                                        //проверка на выделение памяти
  69.     {
  70.         printf("Error : not enough space");
  71.         return;
  72.     }
  73.  
  74.     for (int i = 0; i < size; i++)                  //ввод значений массива
  75.     {
  76.         printf("Enter value of ms[%d]\n", i);
  77.         *(ms + i) = input_save();
  78.     }
  79.  
  80.     delete_less_prv(ms, size);     
  81.  
  82.     free(ms);
  83.  
  84.     return 0;
  85. }
  86.  
  87. void delete_less_prv(int* ms, int size) {
  88.     for (int i = 1; i < size; i++)
  89.     {
  90.         if (*(ms + i) < *(ms + i - 1))             
  91.         {
  92.             delete_elem_of_ms(ms, i, size);
  93.             size--;
  94.             i--;
  95.         }
  96.     }
  97.  
  98.     for (int i = 0; i < size; i++)                      //вывод массива
  99.     {
  100.         printf("ms[%d] = %d\n", i, *(ms + i));
  101.     }
  102. }
  103.  
  104. void delete_elem_of_ms(int* ms, int index, int size) {
  105.     for (int i = index; i < size - 1; i++)
  106.     {
  107.         *(ms + i) = *(ms + i + 1);
  108.     }
  109.     ms = realloc(ms, (size - 1) * (sizeof(int)));
  110.     if (!ms)
  111.     {
  112.         printf("Error : not enough memory");
  113.         return;
  114.     }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement