Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.51 KB | None | 0 0
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdbool.h>
  4. #include <stdlib.h>
  5. #include <malloc.h>
  6.  
  7. #define themeMessage "Тема: Дана матрица А порядка n. Подсчитать \nколичество строк матрицы, \\nэлементы которых представляют перестановки \nчисел от 1 до n.\\n"
  8. #define dottedLine "--------------------------------------------------------------------\n"
  9. #define mistakeNotOpenMessage "Ошибка! Невозможно открыть данный файл. Пожалуйста, проверьте файл и повторите попытку.\n"
  10.  
  11. enum typeOfInput {
  12. CHOOSEKEYBOARD, CHOOSEFILE
  13. };
  14. enum typeOfOutput {
  15. YES, NO
  16. };
  17.  
  18. enum typeOfInput chooseInput(){
  19. enum typeOfInput answer = (enum typeOfInput) NULL;
  20. bool isNotCorrect;
  21.  
  22. do {
  23. printf("Если желаете заполнять массив с клавиатуры, пожалуйста, введите K,\nесли желаете считать массив из файла, пожалуйста, введите F:\n");
  24. char symbol;
  25. fseek(stdin, 0, SEEK_END);
  26. scanf("%c", &symbol);
  27. symbol = toupper(symbol);
  28. isNotCorrect = false;
  29. if ((symbol != 'K') && (symbol != 'F')) {
  30. printf("Внимание, при вводе произошла ошибка. Пожалуйста, повторите попытку.\n");
  31. isNotCorrect = true;
  32. }
  33. else if (symbol == 'K') {
  34. answer = CHOOSEKEYBOARD;
  35. }
  36. else if (symbol == 'F'){
  37. answer = CHOOSEFILE;
  38. }
  39. }
  40. while (isNotCorrect);
  41. return answer;
  42. }
  43.  
  44. int inputMatrixLength() {
  45. const int minLengthOfMatrix = 1;
  46. const int maxLengthOfMatrix = 10;
  47. int lengthOfMatrix;
  48. bool notCorrectCheck;
  49.  
  50. do {
  51. printf("Пожалуйста, введите размер массива(значение от %d до %d): ", minLengthOfMatrix, maxLengthOfMatrix);
  52. scanf("%d", &lengthOfMatrix);
  53. notCorrectCheck = (lengthOfMatrix < minLengthOfMatrix || lengthOfMatrix > maxLengthOfMatrix);
  54. if (notCorrectCheck) {
  55. notCorrectCheck = true;
  56. printf("Ошибка! Число не удовлетворяет промежутку значений от %d до %d.\n", minLengthOfMatrix, maxLengthOfMatrix);
  57. }
  58. } while (notCorrectCheck);
  59. return lengthOfMatrix;
  60. }
  61.  
  62. int fillMatrixFromKeyboard(int firstIndex, int secondIndex) {
  63. const int minElement = 1;
  64. bool notCorrectFilling;
  65. int element;
  66.  
  67. printf("Пожалуйста, введите элементы массива(значения от %d до %d).\n", minElement, INT_MAX);
  68. do {
  69. printf("A[%d, %d] = ", firstIndex, secondIndex);
  70. scanf("%d", &element);
  71. notCorrectFilling = (element < minElement || element > INT_MAX);
  72. if (notCorrectFilling) {
  73. printf("Ошибка! Число не удовлетворяет промежутку значений от %d до %d.\n", minElement, INT_MAX);
  74. }
  75. } while (notCorrectFilling);
  76. return element;
  77. }
  78.  
  79. int** inputMatrixFromFile(int *lengthOfMatrix) {
  80. bool isInvalidInput;
  81. int **methodMatrix = NULL;
  82.  
  83. do {
  84. isInvalidInput = false;
  85. printf("Пожалуйста, введите имя файла, из которого будут считываться данные.\nНапример, \"C:\\Users\\lenovo\\Desktop\\Name.txt\".\n");
  86. char fileName[260];
  87. scanf("%s", fileName);
  88. FILE *inFile;
  89. inFile = fopen(fileName, "rt");
  90. if (inFile == NULL) {
  91. printf("Ошибка! Невозможно открыть данный файл. Пожалуйста, проверьте файл и повторите попытку.\n");
  92. isInvalidInput = true;
  93. } else {
  94. fscanf_s(inFile, "%d", lengthOfMatrix);
  95. if ((*lengthOfMatrix < 1) || (*lengthOfMatrix > 10)){
  96. printf("Ошибка! Число, находящееся в файле, не является натуральным. Пожалуйста, проверьте файл и повторите попытку.\n");
  97. isInvalidInput = true;
  98. }
  99. else {
  100. methodMatrix = (int **) malloc(*lengthOfMatrix * sizeof(int));
  101. for (int i = 0; i < *lengthOfMatrix; i++){
  102. methodMatrix[i] = (int*) malloc(*lengthOfMatrix * sizeof(int));
  103. for (int j = 0; j < *lengthOfMatrix; j++){
  104. fscanf_s(inFile, "%d", &methodMatrix[i][j]);
  105. }
  106. }
  107. }
  108. fclose(inFile);
  109. for (int i = 0; i < *lengthOfMatrix; i++){
  110. for (int j = 0; j < *lengthOfMatrix; j++) {
  111. printf("A[%d, %d] = %d\n", i, j, methodMatrix[i][j]);
  112. }
  113. }
  114. }
  115. } while (isInvalidInput);
  116. return methodMatrix;
  117. }
  118.  
  119. int main() {
  120. SetConsoleOutputCP(CP_UTF8);
  121. printf(themeMessage);
  122. printf(dottedLine);
  123. int matrixLength = 0;
  124. int **matrix;
  125. enum typeOfInput input = chooseInput();
  126. switch (input){
  127. case CHOOSEKEYBOARD:
  128. matrixLength = inputMatrixLength();
  129. matrix = (int **) malloc(matrixLength * sizeof(int));
  130. for (int i = 0; i < matrixLength; i++) {
  131. matrix[i] = (int *) malloc(matrixLength * sizeof(int));
  132. for (int j = 0; j < matrixLength; j++) {
  133. matrix[i][j] = fillMatrixFromKeyboard(i, j);
  134. }
  135. }
  136. break;
  137. case CHOOSEFILE:
  138. matrix = inputMatrixFromFile(&matrixLength);
  139. break;
  140. }
  141. getchar();
  142. getchar();
  143. return 0;
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement