#include <stdio.h> #include <stdlib.h> #include <time.h> // predicate which determines if specified integer array has nonzero elements bool has_nonzero(size_t size, int* row) { for (int* end = row + size; row < end; ++row) if (*row) return true; return false; } // evaluate sum of a row int sum(size_t size, int* row) { int s = 0; for (int* end = row + size; row < end; ++row) s += *row; return s; } int main(int argc, char** argv) { int rows, columns; // read matrix dimensions if (argc < 3) { printf("Usage: <app> <rows> <columns>\n"); return 0; } sscanf(argv[1], "%d", &rows); sscanf(argv[2], "%d", &columns); // random seed srand(time(0)); // create matrix and init it int i; printf("Creating matrix\n"); int** matrix = new int*[rows]; if (!matrix) return 1; printf("Matrix:\n"); for (i = 0; i < rows; ++i) { matrix[i] = new int[columns]; if (!matrix[i]) return 1; int j; for (j = 0; j < columns; ++j) { matrix[i][j] = (rand() % 10) - 4; matrix[i][j] = matrix[i][j] <= 0 ? 0 : matrix[i][j] - 3; printf("%d ", matrix[i][j]); } printf("\n"); } // make sums printf("Sums (per row):\n"); fflush(stdin); int **end = matrix + rows; for (int** row = matrix; row < end; ++row) if (has_nonzero(columns, *row)) printf("%d: %d\n", row - matrix, sum(columns, *row)); //perform cleanup for (i = 0; i < rows; i++) delete[] matrix[i]; delete[] matrix; return 0; } |