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

Сортировка массива, по возрастанию на главной диагонали

05.07.2012, 22:28. Показов 3598. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Условие программы которую нужно написать на с:
путем перестановки квадратной вещественной матрицы добиться того, чтобы ее максимальный элемент находился в левом верхнем углу, следующий по величине - в позиции (2,2), следующий по величине в (3,3) и т.д., заполнив таким образом всю главную диагональ.
Найти номер первой из строк, не содержащей ни одного положительного элемента.
Суть в том что на главной диагонали должны быть максимальные элементы в порядке убывания, а те элементы что стояли на главной диагонали переходят на их места.
------------------------
Со вторым пунктом задания я справился легко. А вот с первым сколько не бился не могу, спрашивал у одногрупника, который лучше понимает программирование, он тоже посидев пару часиков сказал мне что путь только на форум. Помогите плиз. Это задание из моей летней практики в учебнике ""Павловская Т.А., Щупак Ю.А. - С и С++. Структурное программирование"".
Или хотябы подскажите какой тип сортировки мне поможет сдесь....
текст на С:
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
/*
* 
*/
int main(int argc, char** argv) {
float arr[100][100];
float nov[100][100];
int i, j, k, s, n, p, t, min, kr;
 
k=0;
float max;
float sred, lm;
FILE *fl;
printf("BBedite razmer kvadratnoy matrici n = ");
scanf("%d", &n);
printf("\n");
fl=fopen("text.txt", "r");
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
fscanf(fl, "%f", &arr[i][j]);
fscanf(fl, "%f", &nov[i][j]);
}
}
printf("\n");
 
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
printf("%1.f ", arr[i][j]);
}
printf("\n");
}
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
if(arr[i][j]<0){
k+=1;
}
}
if(k!=n){
k=0;
 
}
else{
s=i;
break;
}
}
 
printf("stroka pod nomerom %d imeet vse oricatelnye elementy\n", s);
float tmp=arr[1][1];
 
 
for(i=1; i<=n; i++){
for(j=1;j<=n;j++){
if(nov[i][j]>tmp){
lm=tmp;
tmp=nov[i][j];
nov[i][j]=lm;
}
}
}
 
 
 
 
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
printf("%1.f ", arr[i][j]);
}
printf("\n");
} 
return (EXIT_SUCCESS);
}
Знаю что косяков много, не судите строго программирую не давно так что, очень большое быдло....
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.07.2012, 22:28
Ответы с готовыми решениями:

Сортировка по возрастанию элементов строк двумерного массива размером N*N ниже главной диагонали методом выбора минимума
Помогите написать процедуру сортировки по возрастанию элементов строк двумерного массива размером N*N ниже главной диагонали методом выбора...

Сортировка главной диагонали StringGrid по возрастанию
Необходимо отсортировать главную диагональ массива по возрастанию, меняются только 2 первых элемента, не могу додумать, подскажите...

Сортировка элементов главной диагонали по возрастанию
Помогите пожалуйста. Мне надо написать программу сортирующую элементы главной диагонали по возрастанию используя два цикла с фиксиро-ванным...

2
 Аватар для Thirteen
32 / 32 / 8
Регистрация: 04.07.2012
Сообщений: 50
05.07.2012, 23:49
Лучший ответ Сообщение было отмечено HarryPhomin как решение

Решение

Ветка форума C++ так-то, а не C.
Я напишу решение в лучших традициях C.

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
#include <stdio.h>
#define N 4
 
int main()
{
    int Matrix[N][N], i, j, TheGreatestElement = 0, RestDiagonal = 0;
/*Matrix - матрица N на N; i, j - индексы; TheGreatrstElement - наибольший эл-т;
RestDiagonal - диагональные эл-ты.*/
    int temp = 0, IndexI = 0, IndexJ = 0, counter=1;
/*temp - временная переменная; IndexI, IndexJ - позиция наибольшего эл-та,
counter - счётчик итераций.*/
 
/*Задаём матрицу.*/
    Matrix[0][0]=1;  Matrix[0][1]=9;  Matrix[0][2]=7;  Matrix[0][3]=10;
    Matrix[1][0]=3;  Matrix[1][1]=5;  Matrix[1][2]=2;  Matrix[1][3]=16;
    Matrix[2][0]=6;  Matrix[2][1]=8;  Matrix[2][2]=4;  Matrix[2][3]=13;
    Matrix[3][0]=14; Matrix[3][1]=11; Matrix[3][2]=12; Matrix[3][3]=15;
 
/*Вывод.*/
    for(i = 0; i < N; i++)
    {
        for(j = 0; j < N; j++)
        {
            printf("%d\t", Matrix[i][j]);
        }
        printf("\n");
    }
    printf("\n");
 
/*Первый проход поместит на позицию [0][0] наибольший элемент.*/
    for(i = 0; i < N; i++)
    {
        for(j = 0; j < N; j++)
        {
             if(Matrix[i][j]>TheGreatestElement)
             {
/*Если текущий элемент больше наибольшего, то делаем его наибольшим.*/
                 TheGreatestElement = Matrix[i][j];
/*И запоминаем индексы.*/
                 IndexI = i;
                 IndexJ = j;
             }
        }
    }
/*Дальше меняем местами наибольший и [0][0].*/
    temp = Matrix[IndexI][IndexJ];
    Matrix[IndexI][IndexJ] = Matrix[0][0];
    Matrix[0][0] = temp;
    
/*Теперь заполняем остальную диагональ. Нам нужно заполнить 
оставшиеся три элемента: [1][1], [2][2] и [3][3].*/
    while(counter < N)
    {
        for(i = 0; i < N; i++)
        {
            for(j = 0; j < N; j++)
            {
/*Условие немного посложнее. Нам нужно, чтобы элемент был вторым по
большинству, то есть, меньше наибольшего.*/
                if(Matrix[i][j]>RestDiagonal&&Matrix[i][j]<TheGreatestElement)
                {
/*Запоминаем его и индексы.*/
                     RestDiagonal = Matrix[i][j];
                     IndexI = i;
                     IndexJ = j;
                }
            }
        }
/*Дальше меняем текущий элемент с диагональным.*/
        temp = Matrix[IndexI][IndexJ];
        Matrix[IndexI][IndexJ] = Matrix[counter][counter];
        Matrix[counter][counter] = temp;
/*А здесь наибольшим становится текущий элемент, постольку поскольку,
нам нужен будет уже третий по старшинству и т.д.*/
        TheGreatestElement = RestDiagonal;
/*Обнуляем то, с чем будем сравнивать. (Кстати, если в матрице только 
отрицательные эл-ты, то 0 нужно заменить на наименьшее отрицательное.*/
        RestDiagonal = 0;
        counter++;
    }
 
/*Здесь просто вывод.*/
    for(i = 0; i < N; i++)
    {
        for(j = 0; j < N; j++)
        {
            printf("%d\t", Matrix[i][j]);
        }
        printf("\n");
    }
}
Вот... Конечно, тут тоже много косяков, но что-то менее тривиальное, чем брутфорс, сочинить я сейчас не смогу.
Смысл алгоритма, я думаю, понятен.
Вопросы пожалуйста.
1
1 / 1 / 0
Регистрация: 05.07.2012
Сообщений: 34
06.07.2012, 10:10  [ТС]
Большое спасибо за такое подробное объяснение! Программа отлично работает!
Я изначально делал похоже такое же условие в if но дальше с переприсваиваниями я не смог раззобраться. TheGreatestElement = RestDiagonal; RestDiagonal = 0;
Вот про эти строчки я видимо забыл. Еще раз спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.07.2012, 10:10
Помогаю со студенческими работами здесь

Отсортировать элементы выше главной диагонали матрицы по возрастанию, а ниже главной диагонали по убыванию
1) Вводится массив 6*6. Отсортировать элементы выше главной диагонали по возрастанию, а ниже главной диагонали по убыванию.

Отсортировать элементы главной диагонали массива по возрастанию
Заполнить двумерный числовой массив А целыми числами. Отсортировать элементы главной диагонали массива по возрастанию и выделить красным...

Выполнить сортировку элементов главной диагонали массива по возрастанию и убыванию
Доброго времени суток. Уважаемые знатоки , помогите пожалуйста решить задачу : во вложении программа создающая массив из случайных чисел в...

Сортировка главной диагонали двумерного массива
Всем привет. Решаю задачу столкнулся с проблемой: Не могу отсортировать главную диагональ двумрного массива( матрицы ) по...

Расположить по возрастанию n-минимальные элементы матрицы на главной диагонали по возрастанию
Путем перестановки элементов квадратной матрицы размерностью n*n из действительных чисел добиться того,что бы её n-минимальные элементы...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru