Advertisement
Guest User

Untitled

a guest
Dec 10th, 2018
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 11.51 KB | None | 0 0
  1. /*
  2. 12. Лабораторная работа №4: элементы алгоритмизации и процедурного программирования
  3. ВАРИАНТ №22
  4. Студента группы ИКБО-05-18
  5. Сахарова Владислава Игоревича
  6. */
  7. #include <stdio.h>//базовая библиотека
  8. #include <stdlib.h>//базовая библиотека
  9. #include <math.h>//библиотека для математических операций
  10. #include <time.h>//библиотека для нормальной работы рандома
  11. #include <locale.h>//библиотека для русского языка
  12. void sort(int ar[],int n);
  13. int check_fib(float a){ //ПРОВЕРКА ЧИСЛА НА ФИБАНАЧИ
  14.     float b,c; //СОЗДАЕМ 2 ПЕРЕМЕННЫЕ С ПЛАВАЮЩЕЙ ТОЧКОЙ
  15.     int q,q_1;//ОДНУ ЦЕЛОЧИСЛЕННУЮ
  16.     b=sqrt(5*a*a+4);//Считаем b
  17.     c=sqrt(5*a*a-4);//Считаем c
  18.     q=b; //Присваиваем целочисленной переменной q b
  19.     q_1=c; //Присваиваем целочисленной переменной q_1 с
  20.     if ( (b-q) == 0 || (c-q_1) == 0){ //Если есть целый корень, то это число Фибаначи
  21.     return 1;//Возвращаем результат проверки
  22.     }
  23.     else//иначе
  24.     return 0;//Возвращаем результат проверки
  25. }
  26. void sort(int ar[],int n) //Функция сортировки методом бутылочки
  27. {
  28.     int i,j;//создаем 2 целочисленные переменные
  29.     double t;//а так же переменную типа double
  30.     for(i=1;i<n;i++)//цикл прохода по одномерному массиву
  31.     {
  32.         j=i-1; t=ar[i];//промежуточная переменная j равна предыдущему значению счетчика i,t равно i-тому элементу
  33.         while(j>=0 && ar[j]<t)//пока j>0 и значение j-того элемента меньше переменной t
  34.         {
  35.             ar[j+1]=ar[j];//присваиваем следующиму элементу значение j-того элемента
  36.             j--;//уменьшаем счетчик
  37.         }
  38.         ar[j+1]=t;//обработка следующего элемента
  39.     }
  40. }
  41. int main()//главная функция
  42. {
  43. setlocale(LC_ALL, "Rus"); //Устанавливаем русский язык
  44.     int vvod=0; //Инициализируем целочисленную переменную режима работы и присваиваем ей начальное значение 1
  45.     printf("Выберите режим ввода:\n1.Случайные числа\n2.Пользовательский ввод\n");//Выводим сообщение о режиме работы
  46.     char oks[255];//создаем символьный массив для выбора режима работы
  47.     while ((vvod !=1) && (vvod != 2) || (strlen(oks)) != 1){//проверка на корректность ввода
  48.         printf("Введите корректный режим работы ");//Выводим сообщение о режиме работы
  49.         gets(oks);//Получаем введеную строку
  50.         vvod=atoi(oks);//Присваиваем режиму работы значение символьного ввода
  51.     }
  52.     printf("\n");//переводим на новую строку
  53.     int a[4][4];//создаем целочисленный двумерный массив 4х4
  54.     if (vvod == 1){//если был выбран режим работы (1)
  55.     srand(time(NULL));//команда для нормальной работы рандома
  56.         for (int i=0; i<4; i++){//цикл заполнения массива
  57.             for (int j=0; j<4; j++){// цикл заполнения массива
  58.                 a[i][j]=(rand()% 101);//присваиваем элементу массива случайное значение от [0;100]
  59.             }
  60.         }
  61.     }
  62.     if (vvod == 2){//если был выбран режим работы (2)
  63.         char buf[255];//создаем символьный массив под ввод элемента
  64.         int ok,q;//а также переменную проверки и промежуточной переменной для самого элемента
  65.         for (int i=0; i<4; i++){ printf("Введите строку массива столбиком:\n");//цикл заполнения массива
  66.             for (int j=0; j<4; j++){//цикл заполнения массива
  67.                         fflush(stdin);//очищаем буфер
  68.                         ok=0;//присваиваем нуль переменной проверки
  69.                     while (ok != 1){//цикл коррестного вода(вводим пока значение проверки !=1)
  70.                         printf("\nВведите число в диапазоне от [0;100]:\n");//выводим сообщения о вводе
  71.                         fflush(stdin);//очищаем буфер
  72.                         gets(buf);//считываем строку
  73.                         int check=1;//создаем еще одну переменную проверки(которая изначально верна)
  74.                         int len=strlen(buf);//создаем переменную len и присваиваем ей значение длины введенной строки
  75.                         char check1[1];//создаем символьный массив для проверки
  76.                         for (int i=0; i<len; i++){//цикл проверки корректного ввода
  77.                              check1[0]=buf[i];//присваиваем i символ символу проверки
  78.                         if ((buf[(i)]!='0') && (atoi(check1)) == 0){//если он не символ '0', а перевод строки в число равен нуль
  79.                             check=2;//то число введено не корректно, присваиваем переменной проверки значение отличное от 1
  80.                         }
  81.                         }
  82.                         for (int k=0; k<5; k++){//проверка на ввод только одного числа
  83.                             if(buf[k] == ' ') check=0;//если есть пробел, значит переменной проверки значение отличное от 1
  84.                         }
  85.                         if (buf[0] == '0' && strlen(buf)==1 ) q=atoi(buf);//Если первый символ нуль и длина строки 1, ввели нуль, переводим его из строки в число и присваиваем его численное значение промежуточной переменной q
  86.                         else if (strlen(buf) !=1 && atoi(buf) == 0 ) check=0;//Если длина строки не 1, а значение строки нуль, значит ввели не корректное число, значит переменной проверки значение отличное от 1
  87.                         else if (atoi(buf) != 0 ) q=atoi(buf);//если численной представление строки не равно 0, присваиваем его численное значение промежуточной переменной q
  88.  
  89.                         //else if (buf[0] != '0' && strlen(buf)==1 ) check=0;//Не помню что это
  90.  
  91.                         if (((q>-1) && (q<101)) && check == 1){//если попали в диапазон и все проверки прошли успешно
  92.                             ok=1;//значению начальной проверки присваиваем 1
  93.                             printf("\nЧисло %d принято\n", q);//выводим сообщение, что число принято
  94.                         }
  95.                         else {//иначе
  96.                             printf("\nВы ввели не корректное число\n");//Выводим сообщения об ошибке
  97.                             if (check == 0) printf(" (пробелов быть не должно)\n");//уточняем где она
  98.                         }
  99.                     }
  100.                     a[i][j]=q;//если итоговая проверка прошло, присваиваем элементу массива значение временной переменной q
  101.                 }
  102.             }
  103.     }
  104.     printf("\nВаша матрица:");//выводим нашу матрицу
  105.     for (int i=0; i<4; i++){ printf("\n");//цикл про работе с двумерными массивами
  106.         for (int j=0; j<4; j++){//цикл про работе с двумерными массивами
  107.               printf("%5d ", a[i][j]);//выводим значение каждого элемента массива
  108.         }
  109.     }
  110.     printf("\n");//переводим на новую строку
  111.     int b[16];//создаем целочисленный одномерный массив из 16 элементов(4*4)
  112.     int temp = 0;//создаем временную переменную счетчика, чтобы корректно заполнить одномерный массив(без пропусков
  113.     for (int i=0; i<4; i++){//цикл по работе с двумерным массивом
  114.         for (int j=0; j<4; j++){//цикл по работе с двумерным массивом
  115.             if (check_fib(a[i][j]) == 0){//если число не Фибаначи
  116.                 b[temp]=a[i][j];//присваиваем элементу одномерного массива значение элемента двумерного массива
  117.                 temp++;//счетчику добавляем 1
  118.             }
  119.         }
  120.     }
  121.     if (temp != 0){//если в массиве не все элементы Фибаначи
  122.     printf("\n\nМассив без чисел Фибаначи:\n");//Выводим этот одномерный массив
  123.     for (int i=0; i<temp; i++){//Выводим этот одномерный массив
  124.         printf("%d ", b[i]);//Выводим этот одномерный массив
  125.     }
  126.     printf("\n\nСортированный массиы без чисел Фибаначи:\n");//Выводим этот одномерный массив, предворительно отсортировав его
  127.     sort(b,temp);//обращаемся к нашей функции сортировки
  128.         for (int i=0; i<temp; i++){//выводим отсортированный массив
  129.                printf("%d ", b[i]);//выводим отсортированный массив
  130.     }
  131.     }
  132.     else printf("\nВаш массив состоит только из чисел Фибаначи\n\n");//если в массиве все элементы являются числами Фибаначи, то выводим сообщение о том, что массив состоит только из чисел Фибаначи
  133.     system ( "Pause" );//ставим работу программы на паузу, для удобства чтения выводов
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement