Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- struct matrixData {
- int lines, columns;
- };
- int get_matrixData(const char* filename, struct matrixData * data);
- int getMatrix(const char* filename, int**matrix, struct matrixData data);
- int getAvg(int** matrix, struct matrixData data);
- int findAvg(int **matrix, struct matrixData data, int avg);
- void deleteAvg(int** matrix, int**result, int avgLine, struct matrixData data);
- int printResult(const char* filename, int** matrix, int lines, int columns);
- int main() {
- struct matrixData data;
- int** matrix;
- int** result;
- int avg, avgLine, i, j;
- if (get_matrixData("C:\\Users\\m video\\Desktop\\work with\\data_dat.txt", &data)==0) {
- return -1;
- }
- //выделение памяти под матрицу
- matrix = (int**)malloc(sizeof(int**) * (data.lines * data.columns));
- for (i = 0; i < data.lines; i++) {
- matrix[i] = (int*)malloc(sizeof(int) * data.columns);
- if (!matrix[i]) {
- for (j = 0; j < data.lines; j++)
- free(matrix[j]);
- return -1;
- }
- }
- //заполнение матрицы
- if (getMatrix("C:\\Users\\m video\\Desktop\\work with\\data_dat.txt", matrix, data) == -1) {
- return -1;
- }
- avg = getAvg(matrix, data);
- avgLine = findAvg(matrix, data, avg);
- if (avgLine == -1) {
- printResult("C:\\Users\\m video\\Desktop\\work with\\data_res.txt", matrix, data.lines, data.columns);
- for (i = 0; i < data.lines; i++)
- free(matrix[i]);
- free(matrix);
- return 0;
- }
- result = (int**)malloc(sizeof(int*) * ((data.lines - 1) * data.columns));
- for (i = 0; i < (data.lines - 1); i++) {
- result[i] = (int*)malloc(sizeof(int) * data.columns);
- if (!result[i]) {
- for (j = 0; j < (data.lines - 1); j++)
- free(result[j]);
- return -1;
- }
- }
- deleteAvg(matrix, result, avgLine, data);
- printResult("data.res", result, data.lines - 1, data.columns);
- for (i = 0; i < (data.lines - 1); i++)
- free(result[i]);
- free(result);
- for (i = 0; i < data.lines; i++)
- free(matrix[i]);
- free(matrix);
- return 0;
- }
- //заполнение struct matrixData
- int get_matrixData(const char* filename, struct matrixData *data) {
- FILE* f = fopen(filename, "r");
- if (f==NULL) {
- printf("file error\n");
- return 0;
- }
- if (fscanf(f, "%d %d", &data->lines, &data->columns) != 2) {
- fclose(f);
- return 0;
- }
- fclose(f);
- return 1;
- }
- //заполнение двумерного массива(матрицы) из файла
- int getMatrix(const char* filename, int** matrix, struct matrixData data) {
- FILE* f = fopen(filename, "r");
- int i, j, musor[2];
- if (!f)
- return -1;
- fscanf(f, "%d %d", &musor[0], &musor[1]);
- for (i = 0; i < data.lines; i++) {
- for (j = 0; j < data.columns; j++) {
- if (fscanf(f, "%d", &matrix[i][j])!= 1) {
- fclose(f);
- return -1;
- }
- }
- }
- fclose(f);
- return 0;
- }
- //считаем среднее арифметическое
- int getAvg(int** matrix, struct matrixData data) {
- int avg = 0, i, j;
- for (i = 0; i < data.lines; i++) {
- for (j = 0; j < data.columns; j++)
- avg += matrix[i][j];
- }
- return avg / (data.lines + data.columns);
- }
- //ищем среднее арефметическое
- int findAvg(int** matrix, struct matrixData data, int avg) {
- int i, j;
- for (i = 0; i < data.lines; i++) {
- for (j = 0; j < data.columns; j++) {
- if (matrix[i][j] == avg)
- return j;
- }
- }
- return -1;
- }
- //переписывание matrix в result без строки с avg, поэлементно
- void deleteAvg(int** matrix,int **result, int avgLine, struct matrixData data) {
- int matrixLines =0, resultLines = 0, columns = 0;
- for (matrixLines = 0; matrixLines < data.lines; matrixLines++) {
- if (matrixLines != avgLine) {
- for (columns = 0; columns < data.columns; columns++)
- result[resultLines][columns] = matrix[matrixLines][columns];
- resultLines++;
- }
- }
- }
- //вывод результата в файл
- int printResult(const char* filename, int** result, int lines, int columns) {
- FILE* f = fopen(filename, "w");
- if (!f)
- return -1;
- int i, j;
- for (i = 0; i < lines; i++) {
- for (j = 0; j < columns; j++) {
- fprintf(f, "%d \n", result[i][j]);
- printf("%d ", i);
- }
- }
- fclose(f);
- return 0;
- }
Add Comment
Please, Sign In to add comment