Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 12. Лабораторная работа №4: элементы алгоритмизации и процедурного программирования
- ВАРИАНТ №22
- Студента группы ИКБО-05-18
- Сахарова Владислава Игоревича
- */
- #include <stdio.h>//базовая библиотека
- #include <stdlib.h>//базовая библиотека
- #include <math.h>//библиотека для математических операций
- #include <time.h>//библиотека для нормальной работы рандома
- #include <locale.h>//библиотека для русского языка
- void sort(int ar[],int n);
- int check_fib(float a){ //ПРОВЕРКА ЧИСЛА НА ФИБАНАЧИ
- float b,c; //СОЗДАЕМ 2 ПЕРЕМЕННЫЕ С ПЛАВАЮЩЕЙ ТОЧКОЙ
- int q,q_1;//ОДНУ ЦЕЛОЧИСЛЕННУЮ
- b=sqrt(5*a*a+4);//Считаем b
- c=sqrt(5*a*a-4);//Считаем c
- q=b; //Присваиваем целочисленной переменной q b
- q_1=c; //Присваиваем целочисленной переменной q_1 с
- if ( (b-q) == 0 || (c-q_1) == 0){ //Если есть целый корень, то это число Фибаначи
- return 1;//Возвращаем результат проверки
- }
- else//иначе
- return 0;//Возвращаем результат проверки
- }
- void sort(int ar[],int n) //Функция сортировки методом бутылочки
- {
- int i,j;//создаем 2 целочисленные переменные
- double t;//а так же переменную типа double
- for(i=1;i<n;i++)//цикл прохода по одномерному массиву
- {
- j=i-1; t=ar[i];//промежуточная переменная j равна предыдущему значению счетчика i,t равно i-тому элементу
- while(j>=0 && ar[j]<t)//пока j>0 и значение j-того элемента меньше переменной t
- {
- ar[j+1]=ar[j];//присваиваем следующиму элементу значение j-того элемента
- j--;//уменьшаем счетчик
- }
- ar[j+1]=t;//обработка следующего элемента
- }
- }
- int main()//главная функция
- {
- setlocale(LC_ALL, "Rus"); //Устанавливаем русский язык
- int vvod=0; //Инициализируем целочисленную переменную режима работы и присваиваем ей начальное значение 1
- printf("Выберите режим ввода:\n1.Случайные числа\n2.Пользовательский ввод\n");//Выводим сообщение о режиме работы
- char oks[255];//создаем символьный массив для выбора режима работы
- while ((vvod !=1) && (vvod != 2) || (strlen(oks)) != 1){//проверка на корректность ввода
- printf("Введите корректный режим работы ");//Выводим сообщение о режиме работы
- gets(oks);//Получаем введеную строку
- vvod=atoi(oks);//Присваиваем режиму работы значение символьного ввода
- }
- printf("\n");//переводим на новую строку
- int a[4][4];//создаем целочисленный двумерный массив 4х4
- if (vvod == 1){//если был выбран режим работы (1)
- srand(time(NULL));//команда для нормальной работы рандома
- for (int i=0; i<4; i++){//цикл заполнения массива
- for (int j=0; j<4; j++){// цикл заполнения массива
- a[i][j]=(rand()% 101);//присваиваем элементу массива случайное значение от [0;100]
- }
- }
- }
- if (vvod == 2){//если был выбран режим работы (2)
- char buf[255];//создаем символьный массив под ввод элемента
- int ok,q;//а также переменную проверки и промежуточной переменной для самого элемента
- for (int i=0; i<4; i++){ printf("Введите строку массива столбиком:\n");//цикл заполнения массива
- for (int j=0; j<4; j++){//цикл заполнения массива
- fflush(stdin);//очищаем буфер
- ok=0;//присваиваем нуль переменной проверки
- while (ok != 1){//цикл коррестного вода(вводим пока значение проверки !=1)
- printf("\nВведите число в диапазоне от [0;100]:\n");//выводим сообщения о вводе
- fflush(stdin);//очищаем буфер
- gets(buf);//считываем строку
- int check=1;//создаем еще одну переменную проверки(которая изначально верна)
- int len=strlen(buf);//создаем переменную len и присваиваем ей значение длины введенной строки
- char check1[1];//создаем символьный массив для проверки
- for (int i=0; i<len; i++){//цикл проверки корректного ввода
- check1[0]=buf[i];//присваиваем i символ символу проверки
- if ((buf[(i)]!='0') && (atoi(check1)) == 0){//если он не символ '0', а перевод строки в число равен нуль
- check=2;//то число введено не корректно, присваиваем переменной проверки значение отличное от 1
- }
- }
- for (int k=0; k<5; k++){//проверка на ввод только одного числа
- if(buf[k] == ' ') check=0;//если есть пробел, значит переменной проверки значение отличное от 1
- }
- if (buf[0] == '0' && strlen(buf)==1 ) q=atoi(buf);//Если первый символ нуль и длина строки 1, ввели нуль, переводим его из строки в число и присваиваем его численное значение промежуточной переменной q
- else if (strlen(buf) !=1 && atoi(buf) == 0 ) check=0;//Если длина строки не 1, а значение строки нуль, значит ввели не корректное число, значит переменной проверки значение отличное от 1
- else if (atoi(buf) != 0 ) q=atoi(buf);//если численной представление строки не равно 0, присваиваем его численное значение промежуточной переменной q
- //else if (buf[0] != '0' && strlen(buf)==1 ) check=0;//Не помню что это
- if (((q>-1) && (q<101)) && check == 1){//если попали в диапазон и все проверки прошли успешно
- ok=1;//значению начальной проверки присваиваем 1
- printf("\nЧисло %d принято\n", q);//выводим сообщение, что число принято
- }
- else {//иначе
- printf("\nВы ввели не корректное число\n");//Выводим сообщения об ошибке
- if (check == 0) printf(" (пробелов быть не должно)\n");//уточняем где она
- }
- }
- a[i][j]=q;//если итоговая проверка прошло, присваиваем элементу массива значение временной переменной q
- }
- }
- }
- printf("\nВаша матрица:");//выводим нашу матрицу
- for (int i=0; i<4; i++){ printf("\n");//цикл про работе с двумерными массивами
- for (int j=0; j<4; j++){//цикл про работе с двумерными массивами
- printf("%5d ", a[i][j]);//выводим значение каждого элемента массива
- }
- }
- printf("\n");//переводим на новую строку
- int b[16];//создаем целочисленный одномерный массив из 16 элементов(4*4)
- int temp = 0;//создаем временную переменную счетчика, чтобы корректно заполнить одномерный массив(без пропусков
- for (int i=0; i<4; i++){//цикл по работе с двумерным массивом
- for (int j=0; j<4; j++){//цикл по работе с двумерным массивом
- if (check_fib(a[i][j]) == 0){//если число не Фибаначи
- b[temp]=a[i][j];//присваиваем элементу одномерного массива значение элемента двумерного массива
- temp++;//счетчику добавляем 1
- }
- }
- }
- if (temp != 0){//если в массиве не все элементы Фибаначи
- printf("\n\nМассив без чисел Фибаначи:\n");//Выводим этот одномерный массив
- for (int i=0; i<temp; i++){//Выводим этот одномерный массив
- printf("%d ", b[i]);//Выводим этот одномерный массив
- }
- printf("\n\nСортированный массиы без чисел Фибаначи:\n");//Выводим этот одномерный массив, предворительно отсортировав его
- sort(b,temp);//обращаемся к нашей функции сортировки
- for (int i=0; i<temp; i++){//выводим отсортированный массив
- printf("%d ", b[i]);//выводим отсортированный массив
- }
- }
- else printf("\nВаш массив состоит только из чисел Фибаначи\n\n");//если в массиве все элементы являются числами Фибаначи, то выводим сообщение о том, что массив состоит только из чисел Фибаначи
- system ( "Pause" );//ставим работу программы на паузу, для удобства чтения выводов
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement