Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

сортировка массива стуктур посредством указателей - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Дано целое число N (> 0) и символ C. Вывести строку длины N, кото-рая состоит из символов C http://www.cyberforum.ru/cpp-beginners/thread1054825.html
ребят писал в MC visual, а в dev++ не компилируется, помогите плиз #include <cstdlib> #include <iostream> #include <clocale> using namespace std; int main(int argc, char *argv) { int n;...
C++ Найти в каждом массиве среднее арифметическое простых элементов Из массива Х(N) все положительные элементы записать в массив Y(k). Найти в каждом массиве среднее арифметическое простых элементов. В программе написать функции: формирования массива Y, определения... http://www.cyberforum.ru/cpp-beginners/thread1054823.html
C++ Код С++.Исправить ошибку
#include "stdafx.h" #include <iostream> #include <string> #include <conio.h> using namespace std; class strana { public:
C++ Элементы массива A разместить в обратном порядке в массиве B
подскажите как это организовать
C++ Описать структуру с именем NOTE http://www.cyberforum.ru/cpp-beginners/thread1054804.html
Помогите пожалуйста решить!!! Описать структуру с именем NOTE, содержащую следующие поля: • фамилия, имя; • номер телефона; • дата рождения (массив из трех чисел). Написать программу,...
C++ Вызов меню из меню Добрый день, начал писать простую программку что бы попрактиковаться. В программе даётся 3 пункта меню, нужно что бы при нажатии на любой пункт меню, открывалось его под меню. Т.е при нажатии на... подробнее

Показать сообщение отдельно
GrimSpirit
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 6
24.12.2013, 21:12  [ТС]
прошу помочь с реализацией моей задачи, все мозги уже прокипятил себе

Добавлено через 13 минут
извиняюсь, мозги чуток подостыли, стал понимать.

C++
1
// if( p[i]->good && p[j]->good && ( сравниваем соответствующие строки  ) )
а вот как тут сравнивать соответствующие строки?
как в обычной сортировке, я правильно понял?

Добавлено через 35 минут
фуф. вроде бы похоже на правду.
гляньте пожалуйста на это:
C++
1
2
3
4
5
6
7
8
9
10
11
for(i=0;i<n;i++)//а вот здесь начинается сортировка -_-*
            {for(j=0;j<n;j++)
                {if( p[i]->good && p[j]->good &&
                    p[j+1]->max < p[j]->max)
                    {
                        for(int k=0;k<n;k++)
                        {tmp->a[k] = p[j+1]->a[k];} tmp->good = p[j+1]->good; tmp->max = p[j+1]->max;
                         for(int k=0;k<n;k++)
                        {p[j+1]->a[k] = p[j]->a[k];} p[j+1]->good = p[j]->good; p[j+1]->max = p[j]->max;
                         for(int k=0;k<n;k++)
                        {p[j]->a[k] = tmp->a[k];} p[j]->good = tmp->good; p[j]->max = tmp->max;
Добавлено через 15 минут
где-то ошибка, выводит неотсортированную матрицу
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
/*Дана целочисленная матрица А = {aij}, где 1<=i<=n; 1<=j<=m; 
Выбрать строки матрицы, не содержащие нулевых элементов, и отсортировать выбранные строки 
по возрастанию максимальных элементов таких строк. Если таких строк в матрице нет, выдать сообщение.*/
#include<iostream>
#include<fstream>
 
using namespace std;
const int N=10;
 
struct arr
{
    bool good; int a[N]; int max;
};
 
 
int main()
{
    int n,m,i,j,count=0;    //размерности; count для подсчета строк с нулями, если count == m, то выведем сообщение.
    ifstream fin("data.txt");
    if(fin.fail()) 
        cout<<"can't open data file"<<endl;
    fin>>n>>m;      //читаем размер матрицы
    
    arr *matr = new arr[N];
    for(i=0;i<n;i++)
        {matr[i].good=true;//по умолчанию присвоим всем bool-элементам значение true
        matr[i].max=-32768;}//присвоим всем элементам поля max начальное значение
                
        for(i=0;i<n;i++)    //заполняем массив
            for(j=0;j<m;j++)
            {fin>>matr[i].a[j];
        if(matr[i].a[j]==0) {count++; matr[i].good=false; continue;}//если в строке есть 0, то good=0, 
                
            }                                           //чтобы пропустить эту строку при сортировке
            fin.close();
            
    for(i=0;i<n;i++)    //выводим изначальный массив на экран
    {
        for(j=0;j<m;j++)
    cout<<matr[i].a[j]<<" ";
    cout<<endl;
    }cout<<endl;
 
        arr *p[N];//объявляем масив указателей
            for(i=0;i<n;i++) 
        p[i] = &matr[i]; //p[i] - указатель на массив структур matr[i]
                
        arr *tmp;
        for(i=0;i<n;i++)//а вот здесь начинается сортировка -_-*
            {for(j=0;j<n;j++)
                {if( p[i]->good && p[j]->good &&
                    p[j+1]->max < p[j]->max)
                    {
                        for(int k=0;k<n;k++)
                        {tmp->a[k] = p[j+1]->a[k];} tmp->good = p[j+1]->good; tmp->max = p[j+1]->max;//из j+1 во временную структуру
                         for(int k=0;k<n;k++)
                        {p[j+1]->a[k] = p[j]->a[k];} p[j+1]->good = p[j]->good; p[j+1]->max = p[j]->max;//из j+1 в j
                         for(int k=0;k<n;k++)
                        {p[j]->a[k] = tmp->a[k];} p[j]->good = tmp->good; p[j]->max = tmp->max;//из временной структуры в j
                    }
                }
            }
if(count==n)cout<<"All str have 0"<<endl;
    
 
if((n-count)>1) 
    for(i=0;i<n;i++)    //выводим полученный массив на экран
    {
        for(j=0;j<m;j++)
    cout<<p[i]->a[j]<<" ";
    cout<<endl;
    };
cout<<
system("pause");
return 0;
}
Добавлено через 43 минуты
не получается инициализировать структуру tmp.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru