Дано: список 10 рек:
1. Волга
2. Амур
3. Иртыш
....
Конкретные названия непринципиальны. Реки определяются порядковым номером.
Напишите программу на языке C++, которая принимает на
вход набор пар (river_id, river_length), т. е. номер реки в списке и длина. Результатом работы
программы должен быть список рек, расположенных в порядке возрастания длины с сохранением первоначального номера (идентификатора). Для каждой реки должен быть написан её номер и длина. Подсказка: может быть полезно завести несколько массивов. В частности,
целочисленный массив с номерами рек. А потом изменить порядок следования
номеров одновременно с тем, как вы располагаете длины в порядке возрастания.
Другие языки программирования и технологии
Подскажите, как правильно написать сортировку на СИ++ (два вложенных цикла)...
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct river {
unsigned id;
string name;
unsigned short length;
void console_write_line()const { cout << id << ". " << name << ", " << length << " км\n"; }
};
bool comp(river a, river b) { return a.length > b.length; }
int main() {
system("chcp 1251 > nul");
vector<river> rivers;
const vector<river>::size_type size = 10;
river temp;
for (vector<river>::size_type i = 0; i < size; ++i) {
temp.id = i + 1;
cout << "Река: ";
getline(cin, temp.name);
cout << "Длина: ";
cin >> temp.length;
cin.sync();
rivers.push_back(temp);
}
vector<river> query = rivers;
sort(query.begin(), query.end(), comp);
for (auto i : query) i.console_write_line();
cin.get();
}
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct river {
unsigned id;
string name;
unsigned short length;
void console_write_line()const { cout << id << ". " << name << ", " << length << " км\n"; }
};
bool comp(river a, river b) { return a.length > b.length; }
int main() {
system("chcp 1251 > nul");
vector<river> rivers;
const vector<river>::size_type size = 10;
river temp;
for (vector<river>::size_type i = 0; i < size; ++i) {
temp.id = i + 1;
cout << "Река: ";
getline(cin, temp.name);
cout << "Длина: ";
cin >> temp.length;
cin.sync();
rivers.push_back(temp);
}
vector<river> query = rivers;
sort(query.begin(), query.end(), comp);
for (auto i : query) i.console_write_line();
cin.get();
}
Простейшая сортировка "пузырьком".
Делается в 2-х циклах:
1) Просматриваем все элементы до ПРЕДпоследнего, назовем текущий S0
2) Просматриваем все элементы, от следующего за S0, до последнего, ищем минимальный, и меньше, чем S0
3) Если нашли, то меняем его с S0. Если НЕ нашли, то значит S0 стоит на своем месте.
Дополнительные массивы могут иметь смысл: толко при больших объемах. При объемах порядка десятков, не имеет.
Делается в 2-х циклах:
1) Просматриваем все элементы до ПРЕДпоследнего, назовем текущий S0
2) Просматриваем все элементы, от следующего за S0, до последнего, ищем минимальный, и меньше, чем S0
3) Если нашли, то меняем его с S0. Если НЕ нашли, то значит S0 стоит на своем месте.
Дополнительные массивы могут иметь смысл: толко при больших объемах. При объемах порядка десятков, не имеет.
Если пишешь на си++, то лучше использовать не несколько массивов, а класс.
1. Определи класс с двумя полями - число и строка.
2. Определи для него операторы сравнения.
3. Создай вектор по шаблону этого класса.
4. Добавляй в него новые экземпляры класса, создаваемые на основе ввода, пока ввод не будет закончен.
5. Воспользуйся методом сортировки стандартной библиотеки.
1. Определи класс с двумя полями - число и строка.
2. Определи для него операторы сравнения.
3. Создай вектор по шаблону этого класса.
4. Добавляй в него новые экземпляры класса, создаваемые на основе ввода, пока ввод не будет закончен.
5. Воспользуйся методом сортировки стандартной библиотеки.
Похожие вопросы
- Сортировки, язык Си.
- Язык СИ. Массивы Ребят, как на Си написать сортировку массива от меньшего к большему?
- Почему goto считается неправильным оператором? И как предлагается "правильно" выйти из третьего вложенного цикла?
- методы сортировок на Си
- Написать программу на Си
- Язык Си. Массивы и циклы. Что не так в этом коде?
- Задача на С++.Вложенные циклы for и работа со строками.
- Помогите решить задачу по программированию, пожалуйста. Найти сумму наименьших значений элементов строк. (вложенные циклы)
- Помогите правильно построить функцию в Си
- Нужно написать программу на СИ++, которая переводит с паскаля на СИ++
9класс, новая гимназия, спросить пока не у кого... Напишите, пожалуйста, совсем просто... #include
using namespace std;
void pechat_massiva(const int data[],int N)
{
for(int w = 0;w<N;++w)
{
cout«data[w]«" ";
}
cout«endl;
}
int main ()
{
int N = 8;
int id_rec[N];
cout«"Vvedite id rec:"«endl;
for(int i = 0;i<N;++i)
{
cin»id_rec[i];
}
cout«"Vvedite sootvedstvushie dlini rec:"«endl;
int dlina_rec[N];
for(int i = 0;i<N;++i)
{
cin»dlina_rec[i];
}
int sort_id[N],sort_dlina[N];
for(int s = 0;s-1;--i)
{
if(dlina_rec[i]<dlina_rec[i-1])
{
int x,y;
x = dlina_rec[i-1];
dlina_rec[i-1] = dlina_rec[i];
dlina_rec[i] = x;
y = id_rec[i-1];
id_rec[i-1]
using namespace std;
void pechat_massiva(const int data[],int N)
{
for(int w = 0;w<N;++w)
{
cout«data[w]«" ";
}
cout«endl;
}
int main ()
{
int N = 8;
int id_rec[N];
cout«"Vvedite id rec:"«endl;
for(int i = 0;i<N;++i)
{
cin»id_rec[i];
}
cout«"Vvedite sootvedstvushie dlini rec:"«endl;
int dlina_rec[N];
for(int i = 0;i<N;++i)
{
cin»dlina_rec[i];
}
int sort_id[N],sort_dlina[N];
for(int s = 0;s-1;--i)
{
if(dlina_rec[i]<dlina_rec[i-1])
{
int x,y;
x = dlina_rec[i-1];
dlina_rec[i-1] = dlina_rec[i];
dlina_rec[i] = x;
y = id_rec[i-1];
id_rec[i-1] = id_rec[i];
id_rec[i] = y;
}
}
sort_id[s] = id_rec[s];
sort_dlina[s] = dlina_rec[s];
—i;
}
pechat_massiva(sort_id,N);
pechat_massiva(sort_dlina,N);
system ("pause");
return 0;
}
Спасибо.