Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Вариант 8 задание №1, Гринкевич, 11.11.2021 - 03.12.2021
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <conio.h>
- #include <windows.h>
- #include <locale.h>
- #include <stdlib.h>
- int main(void)
- {
- setlocale(LC_ALL, "Russian"); // русификация вывода информации на экран
- int* ms1;
- int chek = 0;
- int size; //size of array;
- printf("\nНапишите размер одномерного массива\n");
- do
- {
- rewind(stdin); // чтобы ещё раз запросить ввод
- chek = scanf("%d", &size);
- if (size == 0 || size < 0) chek = 0;
- if (chek == 0) printf("\nВы ввели что-то не так, попробуйте ещё раз\n");
- } while (chek == 0);
- if (!(ms1 = (int*)calloc(size, sizeof(int)))) { return 0; }
- input(ms1, size);
- /*
- int i;
- int min = *ms1; // для записи минимального значения
- for (i = 0; i < size; i++)
- {
- if (min > *(ms1 + i)) min = *(ms1 + i);
- }
- return min;
- int i;
- int counter = 0;
- for (i = 0; i < size; i++)
- {
- if (min == *(ms1 + i)) counter++;
- }
- return counter;
- */
- int min = foo(ms1, size);
- int counter = bar(ms1, size, min);
- int position = srt(ms1, size, min);
- output(ms1, size, position, counter, min);
- repeat();
- free(ms1);
- return 0;
- }
- int foo(int* ms1, int size) // минимальное значение
- {
- int i;
- int min = *ms1; // для записи минимального значения
- for (i = 0; i < size; i++)
- {
- if (min > *(ms1 + i)) min = *(ms1 + i);
- }
- return min;
- }
- int bar(int* ms1, int size, int min) // сколько элементов убрать
- {
- int i;
- int counter = 0;
- for (i = 0; i < size; i++)
- {
- if (min == *(ms1 + i)) counter++;
- }
- return counter;
- }
- // убираю элементы с мин значением:
- int srt(int* ms1, int size, int min)
- {
- int i, i2, j, j2; // счетчик
- //int min = *ms1; // для записи минимального значения
- int position = 0;
- /*
- for (i = 0; i < size; i++)
- {
- if (min > *(ms1 + i)) min = *(ms1 + i);
- }
- */
- for (i = 0; i < size; i++)
- {
- if (*(ms1 + i) == min)
- {
- position++;
- i2 = i;
- for (j = i + 1; j != (size + position); j++)
- {
- for (j2=j; *(ms1 + i2)==*(ms1 + j2); j2++ )
- {
- }
- *(ms1 + i2) = *(ms1 + j2);
- *(ms1 + j2) = min;
- i2++;
- }
- }
- }
- //if (min == *(ms1 + i)) position++;
- //position--;
- //position += counter;
- return position;
- }
- int repeat(void)
- {
- char key;
- int prov = 0;
- printf("\nПовторить выполнение программы? (y/n)");
- while (prov == 0)
- {
- rewind(stdin);
- prov = scanf("%c", &key);
- if (key == 'y') main();
- if (key == 'n')
- {
- printf("\nПрограмма завершена!");
- exit(0);
- }
- printf("\nВы должны написать 'y'(да) или 'n'(нет)");
- prov = 0;
- }
- }
- int input(int* ms1, int size)
- {
- int i; //counter
- int chek = 0;
- printf("\nЗаполним массив\n");
- for (i = 0; i < size; i++) //заполняем массив с клавиатуры
- {
- do
- {
- rewind(stdin);
- printf("\nВведите %d элемент массива :", i);
- chek = scanf("%d", ms1+i);
- if (chek == 0) printf("\nВы ввели что-то не так, попробуйте ещё раз\n");
- } while (chek == 0);
- }
- }
- int output(int* ms1, int size, int position, int counter, int min)
- {
- int i;
- int temp;
- temp = size - counter;
- //position++;
- ms1 = (int*)realloc(ms1, (size - position) * sizeof(int));
- printf("\nмасссив после изъятия элементов и сминимальным значением : "); // вывод массива без элементов с мин. значениями
- for (i = 0; i != temp; i++) printf("%3d ", *(ms1 + i));
- fflush(stdin);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement