Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Лабораторная работа "Динамические массивы",Лужков Иван,7.11.2021,задание 1,вариант 17
- #include <stdio.h>
- #include <malloc.h>
- void delete_elem_of_ms(int* ms, int index, int size);
- void main_func();
- int input_save();
- int input_save_w_ceil_floor(int ceil, int floor);
- void delete_less_prv(int * ms, int size);
- int main() {
- int flg_for_repeat = 0;
- do
- {
- main_func();
- printf("Repeat the programm again?Enter 1 if yes and 2 if no\n"); //запрос на повтор программы
- flg_for_repeat = input_save_w_ceil_floor(1, 2);
- } while (flg_for_repeat == 1);
- return 0;
- }
- int input_save_w_ceil_floor(int ceil, int floor) { //проверка на ввод int с заданным диапазоном
- int number = 0, flag = 0, amount_symbol;
- do {
- amount_symbol = 0;
- if (flag++ > 0) //проверка на повторный ввод - если вводится повторно,то вывод "try again"
- {
- printf("Try again\n");
- }
- scanf_s("%d", &number); //скан интового значения
- scanf_s("%*[^\n]%n", &amount_symbol); //скан любого символа кроме \n
- } while (amount_symbol > 0 || number < ceil || number > floor); //если были другие символы,кроме введенного числа или число не находится
- // в диапазоне,то повтор цикла
- return number;
- }
- int input_save() { //проверка на ввод int
- int number = 0, flag = 0, amount_symbol;
- do {
- amount_symbol = 0;
- if (flag++ > 0)
- {
- printf("Try again\n");
- }
- scanf_s("%d", &number); //скан интового значения
- scanf_s("%*[^\n]%n", &amount_symbol); //скан любого символа кроме \n
- } while (amount_symbol > 0); //если были другие символы,кроме введенного числа ,то повтор цикла
- return number;
- }
- void main_func() {
- int* ms;
- int tmp, size;
- printf("Enter size of a massive\n"); //запрос на ввод размера массива
- size = input_save();
- ms =(int *) calloc(size, sizeof(int)); //выделение памяти на массив
- if (!ms) //проверка на выделение памяти
- {
- printf("Error : not enough space");
- return;
- }
- for (int i = 0; i < size; i++) //ввод значений массива
- {
- printf("Enter value of ms[%d]\n", i);
- *(ms + i) = input_save();
- }
- delete_less_prv(ms, size);
- free(ms);
- return 0;
- }
- void delete_less_prv(int* ms, int size) {
- for (int i = 1; i < size; i++)
- {
- if (*(ms + i) < *(ms + i - 1))
- {
- delete_elem_of_ms(ms, i, size);
- size--;
- i--;
- }
- }
- for (int i = 0; i < size; i++) //вывод массива
- {
- printf("ms[%d] = %d\n", i, *(ms + i));
- }
- }
- void delete_elem_of_ms(int* ms, int index, int size) {
- for (int i = index; i < size - 1; i++)
- {
- *(ms + i) = *(ms + i + 1);
- }
- ms = realloc(ms, (size - 1) * (sizeof(int)));
- if (!ms)
- {
- printf("Error : not enough memory");
- return;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement