Генерация матрицы 10×10 с выбором пользователя: Получение суммы и среднего значения по строке и столбцу матрицы

#c #matrix #sum #row #calculated-columns

Вопрос:

нам была поставлена задача сгенерировать матрицу с различными вариантами на выбор. Среди них были получение суммы и среднего значения по строке и столбцу матрицы (вариант A и B). Кажется, я не получаю сумму по строкам и столбцам. Кто-нибудь может мне помочь. Спасибо!

Часть проблемы: Вариант A и B

Вот мой код до сих пор:

 #include lt;stdio.hgt; #include lt;stdlib.hgt;   void printOptions() {  printf("nOptionsn");  printf("a: Total sum, average, median per rown");  printf("b: Total sum, average, median per columnn");  printf("c: Display the same matrix but all ODD numbers are replaced with '-'n");  printf("d: Display the same matrix but all EVEN numbers are replaced with ' 'n");  printf("e: Display the same matrix but all PRIME numbers are replaced with '*'n");  printf("f: Display the whole matrix with every row in ascending ordern");  printf("g: Display the whole matrix with every row in descending ordern");  printf("h: Display the whole matrix with every column in ascending ordern");  printf("i: Display the whole matrix with every column in descending ordern");  printf("j: Generate new set of random numbersn");  printf("q: Close the programn");  printf("n"); }  // function to swap the elements void swapEl(int *a, int *b) {  int temp = *a;  *a = *b;  *b = temp; }  // function to check if the given number is a prime number int isPrime(int x) {  for(int i = 2; i lt; x; i  ) {  if(x % i == 0) return 0;  }  return 1; }  // function to sort the array int *Sortarr(int given[], int n) {  int *arr = given;  for (int i = 0; i lt; n - 1; i  ) {  for (int j = 0; j lt; n - i - 1; j  ) {  if (arr[j] gt; arr[j   1]) {  swapEl(amp;arr[j], amp;arr[j   1]);  }  }  }  return arr; }  int main() {  int N = 10;  int matrix[N][N];  int tot_sum;  double median_r[N], median_c[N], sum_r[N], sum_c[N];   printf("nMatrix:n");  for(int i = 0; i lt; N; i  ) {  for(int j = 0; j lt; N; j  ) {  matrix[i][j] = rand() % 100;  //print  if(matrix[i][j] lt; N amp;amp; matrix[i][j] gt; 0)  {   printf("%d t",matrix[i][j]);  }  else{  printf("%d t",matrix[i][j]);  }   }  printf("n");  }    int sorted_r[N][N], sorted_c[N][N];   // sum per row  for(int i =0; i lt; N; i  ){  tot_sum = 0;  for (int j = 0; j lt; N; j  ) {  tot_sum  = matrix[i][j];  sum_r[j] = matrix[i][j];  }   }  // sum per column  for(int j =0; j lt; N; j  ){  tot_sum = 0;  for (int i = 0; i lt; N; i  ) {  tot_sum  = matrix[i][j];  sum_c[j] = matrix[i][j];  }   }   // median per row  for(int i = 0; i lt; N; i  ) {  int temparr[N];  for(int j = 0; j lt; N; j  ) temparr[j] = matrix[i][j];  int *sorted = Sortarr(temparr, N);  median_r[i] = (sorted[N / 2]   sorted[N / 2 - 1]) / 2.0;  for(int j = 0; j lt; N; j  ) sorted_r[i][j] = sorted[j];  }   // median per column  for(int i = 0; i lt; N; i  ) {  int temparr[N];  for(int j = 0; j lt; N; j  ) temparr[j] = matrix[j][i];  int *sorted = Sortarr(temparr, N);  median_c[i] = (sorted[N / 2]   sorted[N / 2 - 1]) / 2.0;  for(int j = 0; j lt; N; j  ) sorted_c[j][i] = sorted[j];  }   int ch = 0;   while(ch != 1) {   printOptions();  char userChoice;  printf("Select an option ('x'): ");  userChoice = getc(stdin);  getchar();    switch(userChoice) {  case 'a':   for(int i = 0; i lt; N; i  ) {  printf("Sum for row %d : %ft", i   1, sum_r[i]);  printf("Average for row %d : %ft", i   1, sum_r[i]/10);  printf("Median for row %d : %fn", i   1, median_r[i]);  }  break;  case 'b':  for(int j = 0; j lt; N; j  ) {  printf("Sum for column %d : %ft", j   1, sum_c[j]);  printf("Average for column %d : %ft", j   1, sum_c[j]/10);  printf("Median for column %d : %fn", j   1, median_c[j]);  }  break;  case 'c':  for(int i = 0; i lt; N; i  ) {  for(int j = 0; j lt; N; j  ) {  if(matrix[i][j] % 2 == 1) printf("- ");  else printf("%d ", matrix[i][j]);  }  printf("n");  }  break;  case 'd':  for(int i = 0; i lt; N; i  ) {  for(int j = 0; j lt; N; j  ) {  if(matrix[i][j] % 2 == 0) printf("  ");  else printf("%d ", matrix[i][j]);  }  printf("n");  }  break;  case 'e':  for(int i = 0; i lt; N; i  ) {  for(int j = 0; j lt; N; j  ) {  if(isPrime(matrix[i][j]) == 1) printf("* ");  else printf("%d ", matrix[i][j]);  }  printf("n");  }  break;  case 'f':  for(int i = 0; i lt; N; i  ) {  for(int j = 0; j lt; N; j  ) {  printf("%d ", sorted_r[i][j]);  }  printf("n");  }  break;  case 'g':  for(int i = 0; i lt; N; i  ) {  for(int j = N - 1; j gt;= 0; j--) {  printf("%d ", sorted_r[i][j]);  }  printf("n");  }  break;  case 'h':  for(int i = 0; i lt; N; i  ) {  for(int j = 0; j lt; N; j  ) {  printf("%d ", sorted_c[i][j]);  }  printf("n");  }  break;  case 'i':  for(int i = N - 1; i gt;= 0; i--) {  for(int j = 0; j lt; N; j  ) {  printf("%d ", sorted_c[i][j]);  }  printf("n");  }  break;  case 'j':  tot_sum = 0;  for(int i = 0; i lt; N; i  ) {  for(int j = 0; j lt; N; j  ) {  matrix[i][j] = rand() % 100;  tot_sum  = matrix[i][j];  printf("%d ", matrix[i][j]);  }  printf("n");  }   break;  case 'q':  ch = 1;  break;  default:  break;  }   printf("n");   }  }  

Комментарии:

1. sum_r[j] = matrix[i][j]; имело бы больше смысла после j цикла с sum_r[j] = tot_sum;

2. Примечание: isPrime(int x) дает неправильный ответ x lt;= 1 и работает медленно .

3. В общем, я предлагаю использовать гораздо больше специализированных функций, а не втискивать в них все main подряд . Такие вещи, как generateMatrix , printMatrix , sumRow , sumColumn , medianOfRow … и т. Д.

4. @chux На самом деле, sum_r[i] = tot_sum; 🙂 (Но sum_c[j] = tot_sum; .)