Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2015, 21:52   #1
Dikins
 
Регистрация: 01.01.2015
Сообщений: 4
По умолчанию Среднее арифметическое главной и побочной диагоналей матрицы

Здравствуйте, помогите пожалуйста разобраться с ошибкой
В текстовом файле на первой строке расположены данные о размерности квадратной матрицы. Начиная со второй строки, расположена сама матрица. Не считывая матрицу в память, найти среднее арифметическое элементов главной и побочной диагонали, дописать найденные значения с пояснительной строкой в конец файла. Например, «Среднее арифметическое элементов главной диагонали - 127»
Код:
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main()
{
 
    setlocale(LC_ALL, "Rus");
    FILE *f = fopen("matrix.txt", "r");
    if (f==NULL) 
    {
     printf("Файл не найден... /n Для окончания работы нажмите любую клавишу...");
     system("pause");
     exit(0);
    }
            
    int n, m;   // Razmernost`
    int i,j,a;
    int Smain=0; // Summa glavnoy
    int Ssec=0; //Summa pobochnoy
    float Smean, Gmean; //Pobochnaya i Glavnaya diagonali srednee znachenie
    
    fscanf(f, "%d%d", &n, &m); // Chitaem dannie iz faila  
    for (i = 0; i < n; i++)
    for (j = 0; j < m; j++)   // Glavnaya
    {   
        fscanf(f, "%d", &a);
        if(i==j) 
        {
           Smain+=a;
           Gmean+=Smain;   
        }
        Gmean/=m;
        }
        for (i = 0; i < n; i++) 
        for(j = 0; j < m; j++) // Pobochnaya
     {
        fscanf(f, "%d", &a);
        if(i+j==1+n)
        {
           Ssec+=a;
           Smean+=Ssec;     
        }
        Smean/=m;
    }
     fclose(f); 
     f = fopen("matrix.txt", "a");
     fprintf(f, "\n Mean main = %f;\n Mean secondary = %f;", Gmean, Smean);
     fclose(f);   
    system("PAUSE");
    return EXIT_SUCCESS;
}
Вообщем, ошибка в подсчёте побочной диагонали, всё время пишет одно и тоже значение, даже если меняю значения в матрице.
Dikins вне форума Ответить с цитированием
Старый 10.10.2015, 22:18   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Ну все правильно, вы же два раза пытаетесь читать матрицу из файла, а она там только один раз записана. Находите сумму элементов обоих диагоналей в одном цикле. Да и нахождение среднего вынесите за пределы циклов.
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal. Дана квадратная матрица. Найти сумму элементов отдельно главной и побочной диагоналей. Вывести произведение найденных /// Звездочка 22 Паскаль, Turbo Pascal, PascalABC.NET 4 01.02.2015 12:28
VBA: Построить вектор L, элементы которого равны разнице главной и побочной диагоналей матрицы K (m,m). Glazastik Помощь студентам 0 15.11.2014 17:36
Найти наибольший элемент среди стоящих выше главной и побочной диагоналей Иляна Помощь студентам 0 29.01.2013 21:43
найти наибольший элемент среди стоящих на главной и побочной диагоналях и поменять местами с эл-том на пересечении диагоналей (C#) Vovchik123 Помощь студентам 5 27.12.2011 00:01
Вычислить сумму элементов главной и побочной диагонали двумерного массива , найти среднее арифметическое neBu4kaMaXiM Помощь студентам 7 24.02.2009 15:58