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

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

Восстановить пароль Регистрация
 
Джем
1 / 1 / 0
Регистрация: 04.03.2013
Сообщений: 40
10.11.2013, 18:12     Организовать список объектов и сортировку списка #1
Поправьте, пожалуйста, прогу. Ошибка выскакивает, а какая - не понять...
Само задание: Организовать список объектов и сортировку списка. Данные списка вводятся с клавиатуры, после каждого элемента идет запрос на ввод следующего элемента или завершение ввода. При сортировке элементы списка остаются в оперативной памяти на «своих местах», меняются только значения указателей, связывающие элементы. Вывести на экран список до сортировки и после сортировки. Объект- сотрудник (поля: ФИО, дата приема на работу, должность, базовый оклад) Сортировка по окладу методом вставки.
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;
}
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2013, 18:12     Организовать список объектов и сортировку списка
Посмотрите здесь:

Организовать новый список из различных элементов заданного, включив в информационную часть узла количество его вхождения в первоначальный список C++
Двусвязный список (в конец двусвязного списка добавить другой список) C++
Слить два линейных списка, сохранив сортировку по возрастанию C++
Организовать список объектов и сортировку списк C++
C++ Используя производные классы, определить класс параметризованного списка одного из следующих типов. Применить его для построения списка объектов указа
C++ Написать сортировку односвязного списка
Сортировку вставками меняем на Пирамидальную сортировку и на Сортировку подсчётом C++
В динамическом массиве организовать двунаправленную экстремумную сортировку C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 13:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru