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

Задание на работу со односвязными списками - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Генерация псевдоравномерных чисел. В чем ошибка? http://www.cyberforum.ru/cpp-beginners/thread952152.html
Написал метод для генерации псевдоравномерных чисел. Для проверки считается математическое ожидание (среднее арифметическое). Т.к. интервал генерируемых чисел от 0 до 1, то M = 0,5. После подсчета выдает M = 0,425 что далеко от эталона. Алгоритм проверял, но не нашел в чем косяк. Ниже приведен алгоритм и код программы. Алгоритм имитации квазиравномерных чисел сводится к выполнению следующих...
C++ Вычислить функцию и вывести значения в виде таблицы. Ошибка "Undeclared identifier" Задание: написать программу, которая должна работать при разных значениях параметров, введенных пользователем. В программе определить структуру с полями a, b, x1, x2 типа double с указателем на массив значений типа float. В этот массив занести значения функции на интервале от x1 до x2 с шагом dx. Результат вывести на экран в виде таблицы Функция: f(x)=1/(ax)-b при x<=2 f(x)=(x-a)/x при x>-2... http://www.cyberforum.ru/cpp-beginners/thread952145.html
C++ 18. Написать программу, которая решает уравнение с одним неизвестным и выводит в консоль значение неизвестного. Уравнение посимвольно вводится с клави
#include <iostream> using namespace std; void main() { int urov1 = 0; int urov2 = 0; int urov3 = 0; float stad = 0; cout << "Enter the number of: ax="; cin >> urov1;
Прокомментируйте пожалуйста C++
Не до конца понимаю код программы. Прошу дать комментарии к коду. #include "stdafx.h" #include <iostream> #include<math.h> using namespace std; int main() { const int max = 4;
C++ Random for double:( http://www.cyberforum.ru/cpp-beginners/thread952132.html
Задание: Создать функцию random(a, b), которая возвращает случайное вещественное число от вещественного числа a включительно до вещественного числа b не включительно. И что такое static_cast<double>? Похожие задания: #include <iostream> #include <cstdlib> // для использования генератора случайных чисел #include <ctime> // функции времени для инициализации генератора с. ч. using...
C++ Написать программу, которая решает уравнение с одним неизвестным и выводит в консоль значение неизвестного. Уравнение посимвольно вводится с клавиатур Заупутался :-( подробнее

Показать сообщение отдельно
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.09.2013, 07:43     Задание на работу со односвязными списками
Кликните здесь для просмотра всего текста
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
 
struct list             // определение структурного типа list
{   int dat;            // данные
    struct list *next;  // указатель на следующий эл-т списка
};
 
typedef list *P_list;   // определение указателя на тип list
 
void show(P_list head); // вывод списка
void find_max_min(P_list head, P_list &pmax, P_list &pmin); // поиск в списке элементов с max и min
P_list find_prev(P_list head, P_list p); // поиск в списке элементов, стоящих перед элементами с max и min
void swap(P_list pmax, P_list pmin); // замена значений в элементах с max и min
void swap(P_list &head, P_list pmax, P_list pmin); // перестановка в списке элементов с max и min
void delete_list(P_list &head); // удаление списка
 
int main()
{   
    int N, i;        // N-количество элементов в списке
 
    P_list pb;      // указатель на начало списка
    P_list pt;      // указатель на текущий элемент списка
 
    time_t t;
    srand (time(&t));   // инициировать датчик случ. чисел
    cout << " N = ";  // ввести размер списка (с клавиатуры)
    cin >> N;
    //_____________________ Создание списка
    // создать первый элемент
    pb = new list;       // выделить память
    pb ->dat = rand()%100;   // записать данные
    pt = pb;      // установить текущий указатель на начало
    for (i = 1; i < N; i++)   // в цикле создать список
    {
        pt ->next = new list;     // очередной элемент (выделить память)
        pt = pt ->next;           //текущий указатель-на вновь созданный элемент
        pt ->dat = rand() % 100;  // записать данные 
    }                            // создание списка завершено
    pt ->next = NULL;            // записать признак конца списка
    //_______________________ печать списка в 10 колонок
    
    show(pb);
 
    P_list pmax = NULL; 
    P_list pmin = NULL;
    
    find_max_min(pb, pmax, pmin);
    swap(pmax, pmin);
 
    show(pb);
    
    find_max_min(pb, pmax, pmin);
    swap(pb, pmax, pmin);
 
    show(pb);
 
    delete_list(pb);
    
    return 0;
}
 
void show(P_list head)
{
    P_list pt;
    int i;
    cout << endl;
    for (pt = head, i = 1; pt != NULL ;i++)
    {
        cout << pt->dat; // печать информационного поля списка
        pt = pt ->next;      //перемещение указателя на следующий элемент
        if (i % 10 == 0) cout << endl;       // форматирование (в 10 колонок)
        else cout << "\t";
    }
}
 
void find_max_min(P_list head, P_list &pmax, P_list &pmin)
{
    pmax = pmin = head;
    int max, min;
    max = min = head ->dat;
    
    for (list *p = head ->next; p; p = p ->next) 
    {
        if (p ->dat > max)
        {
             max = p ->dat;
             pmax = p;
        }
        if (p->dat < min)
        {
             min = p ->dat;
             pmin = p;
        }
    }
    
}
 
void swap(P_list pmax, P_list pmin) 
{
    int tmp  = pmax ->dat;
    pmax ->dat = pmin ->dat;
    pmin ->dat = tmp;
}
 
P_list find_prev(P_list head, P_list p)
{
    if (p == head) return head;
    P_list pt;
    for (pt = head; pt ->next != p; pt = pt ->next);
        return pt;
}
 
void swap(P_list &head, P_list pmax, P_list pmin) 
{
    if (pmax == pmin) return;
    
    P_list prev_max = find_prev(head, pmax);
    P_list prev_min = find_prev(head, pmin);
    P_list temp;
 
    if (pmax != head && pmin != head)
    {
            prev_max ->next = pmin;
            prev_min ->next = pmax;
            temp = pmax ->next;
            pmax ->next = pmin ->next;
            pmin ->next = temp;
            return;
    }
    
    if (pmin == head)
    {
        temp = pmax;
        pmax = pmin;
        pmin = temp;
        temp = prev_max;
        prev_max = prev_min;
        prev_min = temp;
    }
    
    temp = pmax ->next;
    pmax ->next = pmin ->next;
    if (prev_min != pmax)
    {
        pmin ->next = temp;
        prev_min ->next = pmax;
    }
    else
    {
        pmax ->next = pmin ->next;
        pmin ->next = pmax;
    }
    
    head = pmin;
}
 
void delete_list(P_list &head)
{
    P_list temp;
    while (head)
    {
        temp = head ->next;
        delete head;
        head = temp;
    }
}
 
Текущее время: 15:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru