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

Сортировка пузырьком

20.02.2020, 19:45. Показов 2096. Ответов 5

Студворк — интернет-сервис помощи студентам
Нужно осортировать методом пузырька по 4 столбцу (который я как смог добавил криво косо так как в задании было что бы он вычислялся автоматически а не ввод вручную)
Первые три столбца считываются с файла.
Нужно осортировать методом пузырька по 4 столбцу, но что бы менялись не числа в последнем столбце а целиком строка меняла свое положение вхзависимости от значения в 4 столбице.
Не силен особо в программирование тем более на 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
92
using namespace std;
 
 
int main()
{
    setlocale(LC_ALL, "RUSSIAN");
 
    //Создаем файловый поток и связываем его с файлом
    ifstream in("input.txt");
 
    if (in.is_open())
    {
        //Если открытие файла прошло успешно
 
        //Вначале посчитаем сколько чисел в файле
        int count = 0;// число чисел в файле
        int temp;//Временная переменная
 
        while (!in.eof())// пробегаем пока не встретим конец файла eof
        {
            in >> temp;//в пустоту считываем из файла числа
            count++;// увеличиваем счетчик числа чисел
        }
 
        //Число чисел посчитано, теперь нам нужно понять сколько
        //чисел в одной строке
        //Для этого посчитаем число пробелов до знака перевода на новую строку 
 
        //Вначале переведем каретку в потоке в начало файла
        in.seekg(0, ios::beg);
        in.clear();
 
        //Число пробелов в первой строчке вначале равно 0
        int count_space = 0;
        char symbol;
        while (!in.eof())//на всякий случай цикл ограничиваем концом файла
        {
            //теперь нам нужно считывать не числа, а посимвольно считывать данные
            in.get(symbol);//считали текущий символ
            if (symbol == ' ') count_space++;//Если это пробел, то число пробелов увеличиваем
            if (symbol == '\n') break;//Если дошли до конца строки, то выходим из цикла
        }
        //cout << count_space << endl;
 
        //Опять переходим в потоке в начало файла
        in.seekg(0, ios::beg);
        in.clear();
 
        //Теперь мы знаем сколько чисел в файле и сколько пробелов в первой строке.
        //Теперь можем считать матрицу.
 
        int n = count / (count_space + 1);//число строк
        int m = count_space + 1;//число столбцов на единицу больше числа пробелов
        double** x;
        x = new double* [n];
        for (int i = 0; i < n; i++) x[i] = new double[m];
 
        //Считаем матрицу из файла
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
                in >> x[i][j];
        x[0][3] = ((x[0][0] * x[0][1]) - (x[0][0] * x[0][2]));
        x[1][3] = ((x[1][0] * x[1][1]) - (x[1][0] * x[1][2]));
        x[2][3] = ((x[2][0] * x[2][1]) - (x[2][0] * x[2][2]));
        cout << "Обьем "<<" Цена "  << " Себестоимость " << "Прибыль"<<endl;
        cout << "Продаж " << " Продаж " <<" "<<endl;
        //Выведем матрицу
        
    
    
        for (int i = 0; i < n; i++)
        {
            
            for (int j = 0; j-1 < m; j++)
            
                cout << x[i][j] << "\t";
 
            cout << "\n";
            
        
        }
        in.close();//под конец закроем файла
    }
    else
    {
        //Если открытие файла прошло не успешно
        cout << "Файл не найден.";
    }
 
    system("pause");
 
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.02.2020, 19:45
Ответы с готовыми решениями:

сортировка пузырьком
#include &lt;iostream&gt; using namespace std; void main() { const n=4; int a,i,j,buffer; for(i=0;i&lt;n;i++) cin&gt;&gt;a; for (i=0;...

Сортировка пузырьком
Как сделать пошаговый вывод сортировки? #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;ctime&gt; using namespace std; void...

Сортировка Пузырьком
Здравствуйте! Пытался выполнить задание: Сортировка Пузырьком - один из простейших способов осуществления такого упорядочивания. Мы...

5
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.02.2020, 20:44
Лучший ответ Сообщение было отмечено Frol1337 как решение

Решение

Frol1337, надеюсь 2 кода в один соедините и чтение добавите - это если Вам на массиве нужно

определение размера матрицы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    #include <fstream>
    #include <string>
    #include <sstream>
 
    int n=0, m=0;
    string line;
    ifstream in(input.txt);
    
    if (in.is_open()) 
    {
        while (getline(in,line)) 
        {             
            n++;
        }
        in.close();
        
        stringstream ss(line); 
        while (ss >> line) 
        {
            m++;
        }    
    }
    else cout << "Unable to open file\n";
сортировка:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int n, m;
    cout << "n="; cin >> n;
    cout << "m="; cin >> m;
    
      int **a = new int*[n];
      for (int i = 0; i < n; i++)
          a[i]=new int[m];  
    
    cout << "Matrix:\n"; 
    for (int i = 0; i < n; i++)
    {        
        for (int j = 0; j < m; j++)
        {
        a[i][j]=rand()%9 + 1;   
        cout << a[i][j] << " ";    
        }                
        cout << "\n";
    }     
 
    for (int i = 1; i < n; i++)    
        for (int k = 0; k < n-i; k++)        
            if (a[k][3]>a[k+1][3]) swap(a[k],a[k+1]);             
            
    cout << "Sorted matrix:\n";
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < m; j++)        
        cout << a[i][j] << " ";  
        
        cout << "\n";
    }    
    
    for (int i = 0; i < n; i++)
    delete[]a[i];
    delete[]a;   
system("pause");
return 0;
}
1
0 / 0 / 0
Регистрация: 17.02.2020
Сообщений: 14
21.02.2020, 12:19  [ТС]
Не совсем онимаю как мне теперь добавить чтение из файла, что массив заполнялся не ранждомными цыфрами а из файла и просчитывал 4 столбец исходя из 1 2 3 столбца

Добавлено через 17 минут
Необработанное исключение по адресу 0x00C1C343 в Project9.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDFDFE0D.
if (x[i][2] > x[i + 1][2]) swap(x[i], x[i + 1]);
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
21.02.2020, 13:05
Цитата Сообщение от Frol1337 Посмотреть сообщение
как мне теперь добавить чтение из файла
я решил что код в первом сообщении Ваш и это не вызовет сложностей. очевидно заменить случайное заполнение на
Цитата Сообщение от Frol1337 Посмотреть сообщение
in >> x[i][j];
Цитата Сообщение от Frol1337 Посмотреть сообщение
Необработанное исключение по адресу 0x00C1C343
if (x[i][2] > x[i + 1][2]) swap(x[i], x[i + 1]);
думаете по одной строчке взятой непонятно откуда можно что-то сказать ?

Добавлено через 10 минут
я тут другое обнаружил - всё что выше очевидно не подходит. причина: не сформулирован оригинал условия задачи, который очевидно находится здесь:
Метод пузырька

поэтому:
1) не создавайте темы-дубли
2) пишите полное условие задачи, а не отрывки из неё или как Вы её понимаете
3) для решения задачи нужен не массив, а структура (у Вас не только данные - числа но и названия месяцев года)

Добавлено через 5 минут
напишите чётко - что у Вас в файле (полный формат и чем именно разделены данные)
0
0 / 0 / 0
Регистрация: 17.02.2020
Сообщений: 14
21.02.2020, 17:30  [ТС]
Как смог разобрался за место слов добавил просто первым столбцом номера мсяцов
Получилось что то похожее
Миниатюры
Сортировка пузырьком  
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
22.02.2020, 02:39
Цитата Сообщение от Frol1337 Посмотреть сообщение
Как смог разобрался за место слов добавил просто первым столбцом номера месяцоев
видел такое решение, даже написал его Вам, но потом убрал сообщение, а Вы сами нашли этот путь решения
но это халтура. пробуйте сделать со структурой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.02.2020, 02:39
Помогаю со студенческими работами здесь

сортировка пузырьком
Вечер добрый! Задача проста: отсортировать сначала по зп, если &lt; 400, то в 1ый список, а если больше, то во второй, отсортировав по...

Сортировка пузырьком
вот написала программу но не работает :( #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; using...

Сортировка пузырьком
Привет всем! У меня по методу вопросов нет, успешно отсортировал от меньшего к большему, но вот от большего к меньшему - какая-то шляпа...

Сортировка пузырьком
Всем доброго времени суток! Я новичек в С++.У меня глупая ситуация: недавно написал код сортировки на C++, и сегодня решил...

Сортировка пузырьком
ребята, такая проблема: нужно подсчитать колличество сравнений и перестановок в сортировки пузырьков при разных видах массивов. ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru