#c #matrix #sum #row #calculated-columns
Вопрос:
нам была поставлена задача сгенерировать матрицу с различными вариантами на выбор. Среди них были получение суммы и среднего значения по строке и столбцу матрицы (вариант 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;
.)