Необходимо немного исправить мою программу. Что требуется? Нужно сделать сортировку не по возрастанию, а по убыванию (поменять мою) и настроить правильный вывод сортировки . (В программе вводятся названия предметов, кол-во часов практики и тд) Вот и нужно, чтобы вводились все данные, сортировались по убыванию из них только часы практики, а потом уже выводились полные данные каждого предмета, но в зависимости от результата сортировки часов практики.
Т.е, например:
Название предмета: математика
Кол-во часов лекц: 16
Кол-во часов практики: 25
Семестр: 1
И таких 3 предмета, т.е они все просто выводятся по часам практики.
Буду очень благодарен вашей помощи.
Сама программа:
#include <clocale>
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <string>
using namespace std;
struct tDisc
{
string nameDisc; //название дисциплины
int numLec; //лекционных часов
int numPract; //практических часов
int numbSem; //номер семестра
};
void Sort(tDisc** q, int n)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < n - i - 1; j++)
if (q[j]->numPract > q[j + 1]->numPract)
{
tDisc* temp = q[j];
q[j] = q[j + 1];
q[j + 1] = temp;
}
}
int main()
{
setlocale(LC_ALL, "RUS");
const int n = 3;
tDisc* aray = new tDisc[n];
for (int i = 0; i < n; i++)
cin >> aray[i].nameDisc >> aray[i].numLec >> aray[i].numPract >> aray[i].numbSem;
tDisc** q = new tDisc * [n];
for (int i = 0; i < n; i++)
q[i] = &aray[i];
Sort(q, n);
for (int i = 0; i < n; i++)
cout << q[i]->nameDisc << " " << q[i]->numLec << " " << q[i]->numPract << " " << q[i]->numbSem << " \n";
system("pause");
return 0;
}
C/C++
Задача на сортировку структур. Язык C++.
#include < clocale >
#include < iostream >
#include < conio.h >
#include < windows.h >
#include < string >
using namespace std;
struct tDisc
{
string nameDisc; //название дисциплины
int numLec; //лекционных часов
int numPract; //практических часов
int numbSem; //номер семестра
};
void swapp(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
void sort(int* arr, tDisc* array, int size, bool type)
{
if (type)
{
for (int i = 0; i < size - 1; i++)
{
for (int j = i + 1; j < size; j++)
if (array[i].numPract > array[j].numPract) swapp(arr[i], arr[j]);
}
return;
}
else
{
for (int i = 0; i < size - 1; i++)
{
for (int j = i + 1; j < size; j++)
if (array[i].numPract < array[j].numPract) swapp(arr[i], arr[j]);
}
return;
}
}
int main()
{
setlocale(LC_ALL, "RUS");
const int n = 3;
int* sorter = new int[n];
for (int i = 0; i < n; i++) sorter[i] = i;
tDisc* aray = new tDisc[n];
for (int i = 0; i < n; i++)
cin >> aray[i].nameDisc >> aray[i].numLec >> aray[i].numPract >> aray[i].numbSem;
sort(sorter, aray, n, 0);
for (int i = 0; i < n; i++) cout << sorter[i] << " "; cout << endl;
for (int i = 0; i < n; i++)
cout << aray[sorter[i]].nameDisc << " " << aray[sorter[i]].numLec << " " << aray[sorter[i]].numPract << " " << aray[sorter[i]].numbSem << " \n";
system("pause");
return 0;
}
массив сортировки sorter хранит порядок вывода элементов.
функция сортировки sort принимает (массив сортировки, массив структур, размер, булл (0 для убывания, 1 для возрастания)).
#include < iostream >
#include < conio.h >
#include < windows.h >
#include < string >
using namespace std;
struct tDisc
{
string nameDisc; //название дисциплины
int numLec; //лекционных часов
int numPract; //практических часов
int numbSem; //номер семестра
};
void swapp(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
void sort(int* arr, tDisc* array, int size, bool type)
{
if (type)
{
for (int i = 0; i < size - 1; i++)
{
for (int j = i + 1; j < size; j++)
if (array[i].numPract > array[j].numPract) swapp(arr[i], arr[j]);
}
return;
}
else
{
for (int i = 0; i < size - 1; i++)
{
for (int j = i + 1; j < size; j++)
if (array[i].numPract < array[j].numPract) swapp(arr[i], arr[j]);
}
return;
}
}
int main()
{
setlocale(LC_ALL, "RUS");
const int n = 3;
int* sorter = new int[n];
for (int i = 0; i < n; i++) sorter[i] = i;
tDisc* aray = new tDisc[n];
for (int i = 0; i < n; i++)
cin >> aray[i].nameDisc >> aray[i].numLec >> aray[i].numPract >> aray[i].numbSem;
sort(sorter, aray, n, 0);
for (int i = 0; i < n; i++) cout << sorter[i] << " "; cout << endl;
for (int i = 0; i < n; i++)
cout << aray[sorter[i]].nameDisc << " " << aray[sorter[i]].numLec << " " << aray[sorter[i]].numPract << " " << aray[sorter[i]].numbSem << " \n";
system("pause");
return 0;
}
массив сортировки sorter хранит порядок вывода элементов.
функция сортировки sort принимает (массив сортировки, массив структур, размер, булл (0 для убывания, 1 для возрастания)).
Фаниль Галямов
Работает! Я немного исправил программу и ради интереса попытался добавить ещё одну сортировку, уже по возрастанию семестра, но вот она почему-то работает через раз. Не совсем пойму.
algorithm не используешь принципиально? Самому нужно?
Фаниль Галямов
да, самому
Роман Вульф
опустим проверку на выделение памятипод структуру сосредоточившись на сортировке. Хотя проверка тоже нужна иначе потеряешь в большом проекте ВСЮ инфу и академики с тебя голову снимут
Роман Вульф
и ГДЕ в принципе delete структуры и массива структур?
Роман Вульф
for (int i = 0; i < n; i++)
{
delete [] q[i];
}
delete [] aray;
в конец программы добавишь и ранее проверки на NULL
{
delete [] q[i];
}
delete [] aray;
в конец программы добавишь и ранее проверки на NULL
Роман Вульф
Она в принципе НЕ работает
Фаниль Галямов
были мысли, что с выводом ошибся
Роман Вульф
ОНА в принципе НЕ рабочая. Жди
Роман Вульф
Насчёт сортировки... Если в памяти организовать массив указателей на структуру, тогда и сортировка будет не самих структур, а только их адресов по условию. Так?
Роман Вульф
https://pastebin.com/eRADBXvU
Здесь сортируются в принципе сами структуру. Намного производительнее создать массив указателей на эти структуры и сортировать сами указатели по условию. Так я понял?
Здесь сортируются в принципе сами структуру. Намного производительнее создать массив указателей на эти структуры и сортировать сами указатели по условию. Так я понял?
Роман Вульф
https://pastebin.com/v0iVEUui
А это сортировка УКАЗАТЕЛЕЙ на структуры по полю записи ПРАКТИКА и вывод массива несортированного самих структур
А это сортировка УКАЗАТЕЛЕЙ на структуры по полю записи ПРАКТИКА и вывод массива несортированного самих структур
Похожие вопросы
- Сортировка выбором. Язык C++. Помощь с кодом.
- Как сделать сортировку массива по убыванию, сохранив индексы на языке C
- Задача на языке C.
- Задача на структуры по c++
- Как решить ошибку C2079 использует не имеющую определения структуру class C++
- Чем лучше язык С языка C++?
- Задача на языке C++
- Решить задачу на языке C (НЕ С++!!!)
- Университетская задача на циклы в языке С
- Задание по программированию язык C/СИ