Форум программистов, компьютерный форум 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
25.12.2013, 19:24  [ТС]
в if в сортировке какой-то ужас во время дебага:
p = 0x002af654 {0x0037d4c0 {good=true a=0x0037d4c4 {2, 3, 4, 5, 2, -842150451, -842150451, -842150451, -842150451, ...} ...}, ...} arr *[10]

и еще: в цикле сичтывания из файла я сразу выставляю max:
C++
1
2
3
4
5
6
7
for(i=0;i<n;i++)    //заполняем массив
            for(j=0;j<m;j++)
            {fin>>matr[i].a[j];
            if(matr[i].a[j]>matr[i].max) matr[i].max=matr[i].a[j];//надо бы выставить значения max
            if(matr[i].a[j]==0) {count++; matr[i].good=false; continue;}//если в строке есть 0, то good=0, 
            }                                           //чтобы пропустить эту строку при сортировке
            fin.close();
Добавлено через 21 час 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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*Дана целочисленная матрица А = {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>>m>>n;      //читаем размер матрицы
    
    arr *matr = new arr[n];
    for(i=0;i<n;i++)
        for(j=m;j<N;j++)
        {
        matr[i].a[j]=0;//обнулим все элементы в полях а
        }
 
        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]>matr[i].max) matr[i].max=matr[i].a[j];//надо бы выставить значения max
                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= new arr;//пытаемся инициализировать структуру -_-
            tmp = p[0];
            
            for(int k=0;k<m;k++)//а вот здесь начинается сортировка -_-*
            {
                for(i=1;i<n;)
                for(j=0;j<n;)
                {
                    while(p[j]->good && p[i]->good==0){i++;}
                    
                    if( p[j]->good && p[i]->good &&
                         p[j]->max > p[i]->max)
                         {
                            tmp = p[j];
                            p[j] = p[i];
                            p[i] = tmp;
                        }
                    j+=2;i=j+1;             
                }
            }
        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;
    };
system("pause");
return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru