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

Организовать список объектов и сортировку списка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сортировка рёбер по длине http://www.cyberforum.ru/cpp-beginners/thread1003619.html
Ориентированный взвешенный граф задан перечнем дуг (ориентированных рёбер). Отсортировать эти дуги по возрастанию длин, сохранив (в дополнительных полях) номера этих дуг во входных данных. Входные...
C++ классы и подклассы #include <iostream.h> #include <string.h> class Otdel_kadrov { public: char family; char inicialy; float oklad; float god_rozhd; http://www.cyberforum.ru/cpp-beginners/thread1003617.html
C++ Класс строка и переопределение операций
Класс Строка должен включать данное типа строка символов - S и уметь обрабатывать параметр методов типа строка символов - S1. Для этого в нём должны быть реализованы следующие операции над строками....
Секретарша C++
Однажды, неловкая секретарша перепутала личные дела учащихся. Теперь их снова необходимо упорядочить сначала по классам, а внутри класса по фамилиям. В первой строке дано число N (1 ≤ N ≤ 1000) –...
C++ Сортировка массива методом простого обмена http://www.cyberforum.ru/cpp-beginners/thread1003587.html
Привет,программисты! Мне поставлена задача выполнить сортировку одномерного массива методом простого обмена. Массив я задаю с помощью датчика рандомных чисел. Мой датчик: ...
C++ С++ оператор присвоения Всем доброго времени суток. Я написал класс в котором имеется приватный указатель или вернее 2 мерный массив. Выглядит он вот так вот: class Bitmap { protected: ... подробнее

Показать сообщение отдельно
Джем
1 / 1 / 0
Регистрация: 04.03.2013
Сообщений: 40

Организовать список объектов и сортировку списка - C++

10.11.2013, 18:12. Просмотров 278. Ответов 0
Метки (Все метки)

Поправьте, пожалуйста, прогу. Ошибка выскакивает, а какая - не понять...
Само задание: Организовать список объектов и сортировку списка. Данные списка вводятся с клавиатуры, после каждого элемента идет запрос на ввод следующего элемента или завершение ввода. При сортировке элементы списка остаются в оперативной памяти на «своих местах», меняются только значения указателей, связывающие элементы. Вывести на экран список до сортировки и после сортировки. Объект- сотрудник (поля: ФИО, дата приема на работу, должность, базовый оклад) Сортировка по окладу методом вставки.
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include "stdafx.h"
#include <iostream>
#include <locale>
#include <string>
#include <conio.h>
 
struct sotrudnik
{
    char name[64];
    char priem; 
    char dolzhnost;
    int oclad;
};
 
struct List
{
    sotrudnik inf;
    List *pNext, *pPred; 
};
 
void add(List *&pF, List *p, bool first)
{
    if (pF==0)
    {
        pF=p->pNext=p->pPred=p;
        return;
    }
    p->pNext=pF;
    p->pPred=pF->pPred;
    pF->pPred->pNext=p;
    pF->pPred=p;
    if (first) pF=p;
}
void print(List *pF)
{
    List *p=pF;
    do
    {   
        printf("\nName %s \nPriem %d \nDolzhnost %s \nSize proc\n  %f", p->inf.name, p->inf.priem, p->inf.dolzhnost, p->inf.oclad);
        p=p->pNext;
    }
    while(p!=pF);
}
void addList(List *pZad, List *p)
{
    p->pPred=pZad;
    p->pNext=pZad->pNext;
    pZad->pNext->pPred=p;
    pZad->pNext=p;
}
List * remove(List *&pF, List *p)
{
    if (pF==0) return 0;
    if (pF->pNext==pF) 
    {
        if (p==pF) 
        {
            pF=0;
            return p;
        }
        else return 0; 
    }
    if (p==pF) 
        pF=pF->pNext; 
    p->pPred->pNext=p->pNext;
    p->pNext->pPred=p->pPred;
    return p;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    List *pF=0;
    List *p;
    setlocale(LC_ALL,"rus");
    int i;
    printf("Введите данные");
    do
    {
        p=new List;
        printf("\nВведите ФИО ");
        flushall();
        gets(p->inf.name);
        printf("\nВведите дату приема на работу ");
        flushall();
        scanf("%d",&p->inf.priem);
        printf("\nВведите должность ");
        flushall();
        gets(p->inf.dolzhnost);
        printf("\nВведите процентную ставку ");
        flushall();
        scanf("%lf",&p->inf.oclad);
        add(pF,p,false);
        printf("\nХотите продолжить ввод?\n да - 1\n нет - 0"); 
        flushall();
        scanf("%d",&i);
    }
    while(i!=0);
    setlocale(LC_ALL,"C");
    print(pF);
    setlocale(LC_ALL,"rus");
    // Сортировка методом вставки
    if (pF==pF->pNext) 
    {
        printf("\nСписок отсортирован");
        getch();
        return 0;
    }
    p=pF->pNext; 
    do
    {
        List *p1=p->pNext; 
        List *p2=pF; 
        do
        {
            if (p2->inf.oclad>p->inf.oclad) 
            {
                p=remove(pF, p); 
                if (p==0)
                {
                    printf("Ошибка!");
                    getch();
                    return 0;
                }
                if (p2==pF) add(pF, p,true); 
                else addList(p2->pPred, p);
                break;
            }
            p2=p2->pNext; 
        }
        while(p2!=p);
        p=p1; 
    }
    while(p!=pF);
    printf("\n\nОтсортированный список:");
    setlocale(LC_ALL,"C");
    print(pF);
    getch();
    return 0;
}
Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru