Форум программистов, компьютерный форум CyberForum.ru

Работа с элементами над/под побочной диагональю - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перекодировщик http://www.cyberforum.ru/cpp-beginners/thread527233.html
Есть четыре среды: 1) среда 1251 2) среда 866 3) KOI-8 4) UTF-8 Запускаем программу, и она должна открыть запрашиваемый файл, перекодировать на одну из выбранных кодировок и вывести это в новом файле Примечание: программа должна уметь перекодировать также из одной среды в другую, сделать быстродейственную программу.
C++ В двумерной матрице найти минимальные элементы каждой строки и переставить на первое место В двумерной матрице состоящей из N на M элементов, найти min элементы каждой строки и min переставить на первое место http://www.cyberforum.ru/cpp-beginners/thread527232.html
Слияние двух массивов, решение с помощью указателей C++
помогите,пожалуйста,решить! Задан массив A из N элементов и массив B из M элементов. Сформировать массив L из массивов A и B путем их слияния так, чтобы сначала располагались все элементы массива A, а затем все элементы массива B. Значения N и M ввести с клавиатуры, а массивы A и B сформировать из случайных чисел в диапазоне от 0 до 100
поставить элемент на указанную позицию,файлы,cи C++
нужно написать программу на си которая ставит некоторую цифру на указнную позицию проблема как прописать код так чтобы цифра не заменяла то что стоит на укзанной позиции а смещала то что стоит на этой позиции пыталась создать временный файл и еще дополнительный массивчик не получается ничего
C++ Телефонный справочник C (без классов) http://www.cyberforum.ru/cpp-beginners/thread527198.html
Написать информационную систему "Телефонный справочник" со следующими требованиями: - динамическое изменение размеров массива для хранения информации; - автоматическая загрузка данных из файла в программу при старте программы; - автоматическая выгрузка данных из программы в файл при завершении программы; - добавление, изменение и удаление информации об абоненте; - поиск абонента по номеру...
C++ Проблемка с указателями Нужно перегрузить "+" чтобы он делал слияние 2ух массивов(элементы не повторялись) вот код: #include <iostream.h> #include <stdio.h> class mas {int n,*a; public: mas(); ~mas(); подробнее

Показать сообщение отдельно
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
24.03.2012, 22:36     Работа с элементами над/под побочной диагональю
Доброго времени суток.
Имеется задание:
Дана квадратная вещественная матрица. Определить отдельно сумму S1 элементов, расположенных выше побочной диагонали, и сумму S2 элементов, расположенных ниже этой диагонали. Если эти суммы не равны, то ко всем элементам, образующим меньшую сумму, добавить такое значение, чтобы суммы S1 и S2 оказались равными.

Собственно рабочий код написал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
    setlocale(LC_ALL, "");
    srand(time(NULL));
    int size;
    cout << "Введите размер квадратной матрицы: ";
    cin >> size;
    double **A = new double *[size];
    int i, j;
    for (i=0; i<size; ++i)
        *(A+i) = new double [size];
    cout << "\nИсходная матрица:" << endl;
    for (i=0; i<size; ++i)
    {
        for (j=0; j<size; ++j)
        {
            *(*(A+i)+j) = double (rand()%901+100)/100;
            cout << *(*(A+i)+j) << "\t";
        }
        cout << endl;
    }
    double S1 = 0,
           S2 = 0,
           // кол-во элементов по одну из сторон побочной диагонали
           S_num = 0;
    // Находим S1, S2 и кол-во эл-тов
    for (i=0; i<size; ++i)
        for (j=0; j<size; ++j)
        {
            if (i+j<size-1) 
            {
                S1 += *(*(A+i)+j);
                S_num++;
            }
            if (i+j>size-1) S2 += *(*(A+i)+j);
        }
    cout << "\nS1 = " << S1 << endl
         << "S2 = " << S2 << endl;
    double S = 0;
    if (S1 < S2) S = S2-S1;
    else S = S1-S2;
    // Находим число, на которое требуется увеличить эл-ты
    S /= S_num;
    cout << "\nПолученная матрица:" << endl;
    // Преобразуем и выводим матрицу на экран
    for (i=0; i<size; ++i)
    {
        for (j=0; j<size; ++j)
        {
            if (S1<S2) 
            {
                if (i+j<size-1) *(*(A+i)+j) += S;
            }
            else
                if (i+j>size-1) *(*(A+i)+j) += S;
            cout << *(*(A+i)+j) << "\t";
        }
        cout << endl;
    }
    cout << "\nКаждый из элементов";
    if (S1 < S2) cout << " выше ";
    else cout << " ниже ";
    cout << "побочной диагонали увеличен на " << S << endl
         << "Поздравляем! Теперь суммы элементов выше и ниже побочной диагонали равны."
         << endl;
    for (i=0; i<size; ++i)
        delete [] A[i];
    delete [] A;
    cin.sync();
    cin.get();
    return 0;
}
Код получился достаточно громоздким, и мне кажется его можно в некоторых местах упростить, но идей уже нет. Есть ли какие нибудь идеи по упрощению? Может гдето в условиях или... Любые пожелания готов выслушать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 08:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru