Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 10.02.2017
Сообщений: 6

Переставить строки матрицы по невозрастанию набранных очков

21.05.2018, 20:01. Показов 1241. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите найти ошибку, пожалуйста! Когда хочу переставить строки по возрастанию, делает все нормально, а как только меняю знак, чтобы по убыванию расставить, как мне надо, он неправильно выдает последнюю строку......Мозг уже плавится, ничего не вижу..Помогите пожалуйста!
Задание:
Дано: квадратная матрица A[N,N] - таблица результатов некоторого шахматного турнира, в котором участвовало N шахматистов (N>2). A[i,j]=B, если i-й участник выиграл у j-го (при этом A[j,i]=П), A[i,j]=Н, если i-й и j-й участники сыграли вничью, и A[i,i]=X. За выигрыш дается одно очко, за ничью - 0,5 очка, за проигрыш - 0 очков.
Распечатать номера участников в порядке не возрастания набранных ими очков. Подсчет очков одного участника оформить как функцию. Сортировку номеров участников оформить как функцию. Входной файл lb 7_18. in содержит в первой строке число N (размерность матрицы). В последующих N строках входного файла содержится по N символов , разделенных пробелами, и являющихся элементами матрицы А. Выходной файл Lb 7_25. out содержит номера участников, разделенные пробелами.

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
// функции и массивы.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <clocale>
#include <fstream>
#include <conio.h>
 
using namespace std;
 
void vvod_arr(double **arr, int n);//ф-ия считывает матрицу в массив и обрабатывает ее по заданию
double Sum(double *arr, int n);//ф-ия для суммирования элементов строки массива
void poisk(double **arr, int n);//ф-ия для сравнивания строк массива
void perest(double *arr1,double *arr2, int n);//ф-ия для перестановки строк
void vivod_arr(double **arr, int n);//ф-ия для вывода полученного результата и для его записи в файл
 
int main()
{
    system("chcp 1251");
    
    int n = 0;
    double **arr = new double*[n];
 
    ifstream in("lb7_19.in.txt");
    in >> n;
    
    for (int i = 0; i < n+1; i++)
    {
        arr[i] = new double[n];
    }
 
    vvod_arr(arr, n);
    poisk(arr, n);
    vivod_arr(arr, n);
 
    for (int i(0); i < n; i++)
        delete[]arr[i];
 
    _getch();
    return 0;
}
 
void vvod_arr(double **arr, int n)
{
    ifstream in("lb7_19.in.txt");
    in >> n;
    cout << "Результаты и в последнем столбце номера участников, соответственно: \n";
 
    for (int i(0); i < n; i++)
    {
        for (int j(0); j < n+1; j++)
        {
            in >> arr[i][j];
            cout.width(3);
            cout << arr[i][j]<<" ";
        }
        cout << endl;
    }
 
    cout << "Обработанная сетка результатов: \n";
    cout << endl;
 
    for (int i(0); i < n; i++)
    {
        /*cout << arr1[i]<<"   ";*/
        for (int j(0); j < n; j++)
        {
            
            if (j == i)
            {
                cout << 'Х' << " ";
            }
            if (arr[i][j] == 1)
            {
                cout << 'В' << " ";
            }
            if (arr[i][j] == 0.5)
            {
                cout << 'Н' << " ";
            }
            if (arr[i][j] == 0)
            {
                cout << 'П' << " ";
            }
 
        }
        cout << endl;
    }
}
double Sum(double *arr, int n)
{
 
    double S = 0;
    for (int i(0); i < n; i++)
    {
        if (arr[i] > 0)
        {
            S += arr[i];
        }
    }
    return S;
}
 
 
void poisk(double ** arr, int n)
{
    cout << endl;
    double k = 0, p = 0;
    for (int i(0); i < n; i++)//строки представляются как одномерные массивы
    {
        for (int j(0); j < n+1; j++)
        {
            p = Sum(arr[i], n);
            k = Sum(arr[j], n);
            if (p < k)
            {
                perest(arr[j], arr[i], n+1);
            }
        }
        cout << endl;
    } 
}
 
 
void perest(double *arr1, double *arr2, int n)
{
    double p = 0;
    for (int i(0); i < n; i++)
    {
        p = arr1[i];
        arr1[i] = arr2[i];
        arr2[i] = p;
    }
}
void vivod_arr(double **arr, int n)
{
    /*ofstream out("Lb7_25.out.txt");*/
    cout << "Номера участников представлены в порядке не возрастания: " << endl;
 
    for (int i(0); i < n; i++)
    {
        for (int j(0); j<n + 1; j++)
        {
            cout.width(2);
            cout << arr[i][j]<<"  ";
            /*out << arr[i][j];*/
        }
        cout << endl;
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.05.2018, 20:01
Ответы с готовыми решениями:

Упорядочить (переставить) строки матрицы по невозрастанию в соответствии с заданным критерием
Дана целочисленная матрица размером MxN. Пусть для каждой строки матрицы определена функция f(a), равная количеству четных чисел среди ...

Упорядочить (переставить) строки матрицы по невозрастанию сумм элементов строк методом простого выбора
Помогите решить задачку. Дана действительная матрица размером ; упорядочить(переставить) строки матрицы по невозрастанию сумм элементов...

Матрицы: распределить участников турнира по убыванию набранных очков
при записи данных о соревнованиях по шахматам формируется матрица турнирного особого вида. результат матча может быть 1 (выигранная...

2
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,243
21.05.2018, 21:14
строку 23
Цитата Сообщение от BezMozGgOFF Посмотреть сообщение
double **arr = new double*[n];
поставить после строки
Цитата Сообщение от BezMozGgOFF Посмотреть сообщение
in >> n;
после 38 строки добавить
C++
1
delete[] arr;
Добавлено через 3 минуты
Цитата Сообщение от BezMozGgOFF Посмотреть сообщение
perest(arr[j], arr[i], n+1);
Почему здесь n+1?
Это приведет к выходу за границы массива
1
0 / 0 / 0
Регистрация: 10.02.2017
Сообщений: 6
22.05.2018, 14:05  [ТС]
Спасибо!)
За границы не выйдет, у меня массив на самом деле 5х6, но в шестом столбце у меня номера участников, привела Вас в замешательство тем что забыла кинуть то, что у меня в текстовом документе >_< Но спасибо большое за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.05.2018, 14:05
Помогаю со студенческими работами здесь

Упорядочить (переставить) строки матрицы по невозрастанию сумм элементов строки
Нужно составить программу,как можно проще и короче,помогите! Дана действительная матрица размера(n на m) n,m&lt;=10 ...

Переставить строки матрицы по невозрастанию наибольших элементов строк
Здравствуйте! Пожалуйста, помогите решить задачу.C помощью датчика случайных чисел сформировать двумерный массив N*N и выполнить следующие...

Упорядочить (переставить) строки матрицы по невозрастанию значений наибольших элементов строк
Дана действительная матрица размерности n * m. Упорядочить (переставить) строки матрицы по невозростанию значений наибольших элементов...

Переставить строки матрицы так, чтобы элементы первого столбца были упорядочены по невозрастанию
Заданная матрица,Х(n,n),n&lt;=20. Разработать программу, которая переставляет строки матрицы так, чтобы элементы первого столбца были...

Известно количество очков, набранных каждой из 20-ти команд-участниц первенства по футболу. Перечень очков дан в порядке
Известно количество очков, набранных каждой из 20-ти команд-участниц первенства по футболу. Перечень очков дан в порядке убывания (ни...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru