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

Сортировка списков - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сформировать массив из п элементов (n <50), которыми могут быть только целые числа 0 и 1. Проверить, существует строгое чередование 0 и 1. http://www.cyberforum.ru/cpp-beginners/thread733235.html
Помогите написать прогу. Сформировать массив из п элементов (n <50), которыми могут быть только целые числа 0 и 1. Проверить, существует строгое чередование 0 и 1. Заранее спасибо!
C++ Почему не работает выведенная функция #include <iostream> #include <string> using namespace std; int otd(int prin); //Прототип функции int main() { int numbers; http://www.cyberforum.ru/cpp-beginners/thread733231.html
C++ Рост женщин закодировать со знаком ''-'',а рост мужчин со знаком ''+''
Добрый вечер! Есть задание: Рост студентов в группе представить в виде массива. Рост женщин закодировать со знаком ''-'',а рост мужчин со знаком ''+''. Определить средний рост мужчин. Проблема с алгоритмом кодирования: Ввожу массив, если элемент массива >0 то это мужчина,если нет,то женщина. Определяю средний рост >0. А вот как закодировать я не пойму,можете подсказать?
C++ Как сделать трапецию в движении
Вот сделал квадрат в движении, но как вместо квадрата сделать трапецию, не знаю помогите кодом пожалуйста буду очень признателен. #include <stdlib.h> #include <dos.h> #include <graphics.h> #include <conio.h> #include <iostream.h> #include <math.h>
C++ Шаблон структуры данных - массив указателей на заголовки списков http://www.cyberforum.ru/cpp-beginners/thread733204.html
Мне выдали задание на курсовую работу: "Шаблон структуры данных - массив указателей на заголовки списков. Элемент списка содержит указатель на строку (При включении последним предусмотреть ограничение длины текущего списка и переход к следующему)" Прошу помощи не в написании кода, а просто подскажите, для чего тут делать переменную шаблона? Вот моя основа template <class T> struct List...
C++ Найти номер компоненты, начиная с которой файлы различаются. Скопировать часть, которая отличается Создать два файла f и g. Найти номер компоненты, начиная с которой файлы различаются. Скопировать часть, которая отличается, в h. Вывести файлы f, g, h. #include <iostream> #include <fstream> using namespace std; int main() { ifstream f("C://input.txt"); ifstream g("C://inputsecont.txt"); подробнее

Показать сообщение отдельно
kukhtikov
2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
16.12.2012, 09:39     Сортировка списков
Вот пример программы
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include "stdafx.h"
#include <conio.h>
#include <locale.h>
#include <string.h>
 
struct sotrudnik
{
    char FIO[64];
    int day, month, year;
    char post[64];
    double oclad;
    sotrudnik *pNext;
};
 
void Add(sotrudnik *&pF, sotrudnik *p)
{
    if(pF==0)
    {
        p->pNext=0;
        pF=p;
    }
    else {
        p->pNext=pF;
        pF=p;
    }
    return;
}
 
// Извлечь элемент p из списка
sotrudnik *delP(sotrudnik *&pF, sotrudnik *p)
{
    if (pF==0 || p==0) return 0;
    if (p==pF)
    {
        pF=pF->pNext;
        return p;
    }
    // Ищем адрес предыдущего элеемнта перед p
    sotrudnik *pPred=pF;
    while(pPred->pNext!=p)
    {
        pPred=pPred->pNext;
        if (pPred==0) return 0; // Если элемента p нет в списке
    }
    pPred->pNext=p->pNext;
    return p;
}
 
// Элемент p вставить в любое место списка до заданного элемента p2
void insert(sotrudnik *&pF, sotrudnik *p2, sotrudnik *p)
{
    // Элемент p вставляем перед элементов p2
    p->pNext=p2;
    if (pF==p2) // Вставить перед первым элементом
    {
        pF=p; // Элемент становится первым
        return;
    }
    // Ищем адрес предыдущего элеемнта перед p
    sotrudnik *pPred=pF;
    while(pPred->pNext!=p)
    {
        pPred=pPred->pNext;
        if (pPred==0) return; // Если элемента p нет в списке
    }
    pPred->pNext=p;
}
 
//Поиск предыдущего элемента перед pi
sotrudnik *predEl(sotrudnik *&pF, sotrudnik *p)
{
    sotrudnik *pPred=pF;
    while(pPred->pNext!=p)
    {
        pPred=pPred->pNext;
        if (pPred==0) return NULL; // Если элемента p нет в списке
    }
    return pPred;
}
 
 
void main()
{
    setlocale(LC_ALL, "rus");
    sotrudnik *a, *pF=0;
    for(int i=0;;i++)
    {
        a = new sotrudnik;
        printf("Фамилия имя отчество сотрудника студента: ");
        flushall();
        gets((char *)a->FIO);
        printf("Введите дату приема на работу (День.Месяц.Год): ");
        scanf("%d.%d.%d", &a->day,&a->month,&a->year);      //Ввод даты приема на работу
        printf("Введите должность сотрудника: ");
        flushall();
        gets((char *)a->post);                              //Ввод должности
        printf("Введите базовый оклад сотрудника: ");
        scanf("%d",&a->oclad);          
        Add(pF,a);
        printf("Продолжить ввод сотрудников? Y/N: \n");
        char ch;
        ch=getche();
        printf("\n");
        if (!(ch=='Y' || ch=='y')) break;
        printf("\n");
    
    }
    // Печать списка
    for(a=pF; a; a=a->pNext)
        printf("Сотрудник: %s\nДата приема на работу: %d.%d.%d\nДолжность сотрудника: %s\nБазовый оклад сотрудника: %d\n", a->FIO, a->day, a->month, a->year, a->post, a->oclad);
    printf("\n\n\n");
    //Сортировка методом вставки
    sotrudnik *pi=pF;
    sotrudnik *pj=pi;
    sotrudnik *pbuf = NULL,*pbuf2= NULL;
    while(pi)
    {
        // Элемент pi вставляем в уже отсортированный массив
        pj=pi->pNext;
        while(pj)
        {
            if(strcmp(pj->FIO,pi->FIO)<0)
            {
                pbuf = predEl(pF,pi);
                pbuf2 = predEl(pF,pj);
                if(pbuf == NULL)
                    pF = pj;
                else
                    pbuf->pNext = pj;
                if(pbuf2 == NULL)
                    pF = pi;
                else
                    pbuf2->pNext = pi;
 
                pbuf = pi->pNext;
                pi->pNext = pj->pNext;
                if(pbuf == pj)
                    pj->pNext = pi;
                else
                    pj->pNext = pbuf;
                
                pbuf = pi;
                pi = pj;
                pj = pbuf;
            }
            pj=pj->pNext;
        }
        pi=pi->pNext;
    }
    printf("Отсортированный массив: ");
    printf("\n\n\n");
    for(a=pF; a; a=a->pNext)
        printf("Сотрудник: %s\nДата приема на работу: %d.%d.%d\nДолжность сотрудника: %s\nБазовый оклад сотрудника: %d\n", a->FIO, a->day, a->month, a->year, a->post, a->oclad);
    _getch();
}
 
Текущее время: 15:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru