Advertisement
Kostiggig

LAB_17 fill arrays by different ways

Dec 4th, 2022
900
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.81 KB | Cryptocurrency | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. #include <stdbool.h>
  5. #include <string.h>
  6.  
  7. #define FILE_NAME "numbers.txt"
  8. #define FILE_NUMBERS_ARRAY_SIZE 10
  9.  
  10. void printArray(const int a[], int n) {
  11.     printf("\n");
  12.     printf("\n");
  13.     printf("[");
  14.     for(int i = 0; i < n; i++) {
  15.  
  16.         // printf with no dividers
  17.         if(i + 1 == n) {
  18.             printf("%d", a[i]);
  19.         } else {
  20.             printf("%d, ", a[i]);
  21.         }
  22.     }
  23.     printf("]");
  24.     printf("\n");
  25.     printf("\n");
  26. }
  27.  
  28. void printTwoDimensionalArray(int n, const int a[n][n]) {
  29.     printf("\n");
  30.     printf("\n");
  31.     for(int i = 0; i < n; i++) {
  32.         printf("row %d -  ", i);
  33.         for(int j = 0; j < n; j ++) {
  34.             printf(" %d ", a[i][j]);
  35.         }
  36.         printf("\n");
  37.     }
  38.     printf("\n");
  39.     printf("\n");
  40. }
  41.  
  42. void fill_array_via_key_board(int size) {
  43.     int array[size][size];
  44.     for(int i = 0; i < size; i++) {
  45.         for(int j = 0; j < size; j++) {
  46.             array[i][j] = j;
  47.         }
  48.     }
  49.  
  50.     printf("Print the 2d keyboard's array");
  51.     printTwoDimensionalArray(size, array);
  52. }
  53.  
  54. void fill_array_via_file(int size) {
  55.     int numbers[FILE_NUMBERS_ARRAY_SIZE];
  56.     int array[size][size];
  57.  
  58.     FILE *f = fopen(FILE_NAME, "r");
  59.    
  60.     if(f != NULL) { // file exists
  61.         int n = 0;
  62.         while(!feof(f)) {
  63.             fscanf(f, "%d", &numbers[n++]);
  64.         }
  65.     } else {
  66.         printf("file does not exist yet");
  67.     }
  68.     fclose(f);
  69.  
  70.     printf("\nPrint the file's array");
  71.     printArray(numbers, FILE_NUMBERS_ARRAY_SIZE);
  72.  
  73.     //fill the 2d array by default values
  74.     for(int i = 0; i < size; i++) {
  75.         for(int j = 0; j < size; j ++) {
  76.              array[i][j] = 0;
  77.         }
  78.     }
  79.  
  80.     // fill the 2d array by the file's numbers
  81.     int currentIndexRow2dArray = -1;
  82.     int currentIndexColumn2dArray = -1;
  83.     for(int i = 0; i < FILE_NUMBERS_ARRAY_SIZE; i++) {
  84.         if(i % size == 0) {
  85.             currentIndexRow2dArray++;
  86.             currentIndexColumn2dArray = -1;
  87.         }
  88.         currentIndexColumn2dArray++;
  89.         int fileNumber = numbers[i];
  90.        
  91.         array[currentIndexRow2dArray][currentIndexColumn2dArray] = fileNumber;
  92.     }
  93.  
  94.     printf("\nPrint the 2d file's array");
  95.     printTwoDimensionalArray(size, array);
  96. }
  97.  
  98. void fill_array_via_range(int size) {
  99.     int array[size][size];
  100.  
  101.     int A, B;
  102.     printf("Введите range.");
  103.    
  104.     printf("\nstart: ");
  105.     scanf("%d", &A);
  106.  
  107.     printf("end: ");
  108.     scanf("%d", &B);
  109.  
  110.     if(A > B) {
  111.         int temp = A;
  112.         A = B;
  113.         B = temp;
  114.     }
  115.  
  116.     for(int i = 0; i < size; i++) {
  117.         for(int j = 0; j < size; j++) {
  118.             int randomNumber = rand() % (B - A + 1) + A;
  119.             array[i][j] = randomNumber;
  120.         }
  121.     }
  122.  
  123.     printf("\nPrint the 2d random range's array");
  124.     printTwoDimensionalArray(size, array);
  125. }
  126.  
  127. int calculatedElementByFormula(int i, int j) {
  128.     int element = i + j;
  129.     if(i < j) {
  130.         element = i - j;
  131.     } else {
  132.         if (i == j)
  133.         {
  134.             if(j != 0) {
  135.                 element = i/j;
  136.             }
  137.         }
  138.     }
  139.     return element;
  140. }
  141.  
  142. void fill_array_via_formula(int size) {
  143.     int array[size][size];
  144.  
  145.      for(int i = 0; i < size; i++) {
  146.         for(int j = 0; j < size; j++) {
  147.             int element = calculatedElementByFormula(i, j);
  148.             array[i][j] = element;
  149.         }
  150.     }
  151.  
  152.     printf("\nPrint the 2d formulas' array");
  153.     printTwoDimensionalArray(size, array);
  154. }
  155.  
  156.  
  157. void task_1() {
  158.     int n;
  159.    
  160.     printf("\nEnter n to define the size of the array(N x N): ");
  161.     scanf("%d", &n);
  162.     if(n <= 0) {
  163.         printf("\nn must be more than zero");
  164.     } else {
  165.         int array[n][n];
  166.         int wayOfFilling;
  167.  
  168.         printf("\nEnter the way of filling the array: ");
  169.  
  170.         printf("\n1 - Via KeyBoard");
  171.         printf("\n2 - Via File");
  172.         printf("\n3 - Via Random numbers in range");
  173.         printf("\n4 - Via Formula: ");
  174.  
  175.         printf("\n");
  176.  
  177.         scanf("%d", &wayOfFilling);
  178.  
  179.         switch(wayOfFilling) {
  180.             case 1: fill_array_via_key_board(n); break;
  181.             case 2: fill_array_via_file(n); break;
  182.             case 3: fill_array_via_range(n); break;
  183.             case 4: fill_array_via_formula(n); break;
  184.             default: printf("Way by %d is not defined", wayOfFilling);
  185.         }
  186.  
  187.     }
  188. }
  189.  
  190. int main() {
  191.     int numOfTask = 0;
  192.     do
  193.     {
  194.         printf("\nEnter a number of the task: ");
  195.         scanf("%d", &numOfTask);
  196.  
  197.         switch (numOfTask) {
  198.         case 1:
  199.             task_1();
  200.             break;
  201.         default:
  202.             printf("\nThe task by num %d has not found", numOfTask);
  203.             break;
  204.         }
  205.  
  206.     } while (numOfTask != 0);
  207.  
  208.     return 0;
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement