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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Джем
1 / 1 / 0
Регистрация: 04.03.2013
Сообщений: 40
#1

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

10.11.2013, 18:12. Просмотров 266. Ответов 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;
}
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2013, 18:12     Организовать список объектов и сортировку списка
Посмотрите здесь:

Организовать список объектов и сортировку списк - C++
Помогите пожалуйста написать программу.Вот само задание: Организовать список объектов и сортировку списка. Данные списка вводятся с...

Организовать ввод в однонаправленный список; подсчитать сумму чисел списка - C++
Организовать ввод в однонаправленный список. Узел списка состоит из двух полей: целое число и указатель. Необходимо подсчитать сумму чисел...

Организовать ввод в однонаправленный список. Узел списка состоит из двух полей: целое число и указатель. Не - C++
Организовать ввод в однонаправленный список. Узел списка состоит из двух полей: целое число и указатель. Необходимо добавить узел после...

Организовать ввод в однонаправленный список, узел списка состоит из двух полей: целое число и указатель - C++
Здравствуйте, нужна ваша помощь!!! Нужно написать программу Организовать ввод в однонаправленный список. Узел списка состоит из двух...

Как организовать сортировку динамического массива - C++
Ввести num - количество массивов. Ввести размерность очередного массива и его элементы типа double, разместить их в динамической памяти....

В динамическом массиве организовать двунаправленную экстремумную сортировку - C++
в динамическом массиве организовать двунаправленную экстремумную сортировку. как объяснял преподаватель нужно &quot;свапать&quot; максимальный...

Реализовать сортировку массива объектов пользовательского типа по заданному полю (структуры) - C++
Есть перечень студентов, прибывших в лагерь по форме: ФИО, факультет, номер отряда. Упорядочить перечень по номерам отрядов, внутри отряда...

Реализовать поиск и сортировку по заданному полю в списке объектов пользовательского типа - C++
Доброго времени суток. Дали задачу &quot;Запись о багаже пассажира содержит: фамилия, номер рейса, дата время вылета, пункт назначения, кол-во...

Написать сортировку односвязного списка - C++
Здравствуйте. Написал программу для работы со списком. Программа работает, но не получается написать сортировку по полю pole. Помогите...

Слить два линейных списка, сохранив сортировку по возрастанию - C++
лучше через стандартные, только начали изучать. Есть 2 лин.списка, где эл-ты по возрастанию, нужно их слить в один, чтобы эл-ты шли по...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru