Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/20: Рейтинг темы: голосов - 20, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 26.07.2009
Сообщений: 15
1

Связные списки

16.08.2009, 18:48. Просмотров 3993. Ответов 7
Метки нет (Все метки)

Я практически полный нуб в С++. Вот такая задача: В столовой предлагаются N комплексных обедов, состоящих из Q блюд. Известна стоимость и калорийность каждого блюда. Сколько стоит самый деше¬вый и самый дорогой обед? Сколько калорий включает в себя самое калорийное блюдо? Есть вот такая реализация с помощью структур и векторов:
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
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
using namespace std;
struct blud
{
    int kal, c;
    string naz;
};
vector <blud> zapic(vector <blud> m, int n)
{
    blud temp;
    for (int i=0;i<n;i++)
    {
        cout<<"Введите название"<<endl;
        cin>>temp.naz;
        cout<<"Введите калорийность"<<endl;
        cin>>temp.kal;
        cout<<"Введите цену"<<endl;
        cin>>temp.c;
        m.push_back(temp);
    }
    return m;
}
void display (vector <blud> m, int n)
{
    for (int i=0;i<n;i++)
    {
        cout<<m[i].naz<<" ";
        cout<<m[i].kal<<" ";
        cout<<m[i].c<<" ";
        cout<<endl;
    }
}
vector <blud> desh (vector <blud> m,vector <blud> min, int n)
{
    blud temp1;
    int v=0;
    temp1=m[0];
    for (int i=1; i<n; i++)
    {
        if (m[i].c<m[v].c)
        {
            temp1=m[i];
            v=i;
        }
        else
        {
        v++;
        }
    }
    min.push_back(temp1);
    return min;
}
vector <blud> dor (vector <blud> m, vector <blud> max, int n)
{
    blud temp;
    int p=0;
    temp=m[0];
    for (int i=1; i<n; i++)
    {
        if (m[i].c>m[p].c)
        {
            temp=m[i];
        }
        p++;
    }
    max.push_back(temp);
    return max;
}
vector <blud> z3 (vector <blud> m, vector <blud> k, int n)
{
    blud temp3;
    int p=0;
    temp3=m[0];
    for (int i=1; i<n; i++)
    {
        if (m[i].kal>m[p].kal)
        {
            temp3=m[i];
        }
        p++;
    }
    k.push_back(temp3);
    return k;
}
int main()
{
    setlocale (LC_ALL, "Russian");
    vector <blud> m, min, max, k;
    int n;
    cout<<"Введите количество блюд"<<endl;
    cin>>n;
    cout<<endl;
    m = zapic(m, n);
    cout<<endl;
    display(m, n);
    min=desh (m, min, n);
    cout<<"Самое дешёвое блюдо"<<endl;
    for (int i=0;i<1;i++)
    {
        cout<<min[i].naz<<" ";
        cout<<min[i].kal<<" ";
        cout<<min[i].c<<" ";
        cout<<endl;
    }
    cout<<"Самое дорогое блюдо"<<endl;
    max=dor (m, max, n);
    for (int i=0;i<1;i++)
    {
        cout<<max[i].naz<<" ";
        cout<<max[i].kal<<" ";
        cout<<max[i].c<<" ";
        cout<<endl;
    }
    k = z3 (m, k, n);
    for (int i=0; i<1; i++)
    {
    cout<<"Самое калорийное блюдо "<<k[i].naz<<" содержит в себе "<<k[i].kal<<" калорий"<<endl;
    }
    system ("pause");
    return 0;
}
Надо переделать в виде связный списков. А как не знаю - не показывали. Помогите пожалуйста!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.08.2009, 18:48
Ответы с готовыми решениями:

Связные списки.
Всем привет ребят можете привести пример двусвязносго списка.

Связные списки
Помогите пожалуйста осуществить в программе вот такие вот действия: 1) добавление элементов в...

Связные списки
12. Использовать (линейные) однонаправленные списки без заглавной звена (рис. А) или с заглавной...

Связные списки
Друзья, помогите исправить код!!! Программа описывет таблицу о книгах.(Название, автор, стоимость)....

7
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
16.08.2009, 19:06 2
Цитата Сообщение от Killing Friend Посмотреть сообщение
Помогите пожалуйста!
http://lmgtfy.com/?q=%D1%81%D0... 0%BE%D0%BA
0
1 / 1 / 0
Регистрация: 26.07.2009
Сообщений: 15
16.08.2009, 19:13  [ТС] 3
Цитата Сообщение от zim22 Посмотреть сообщение
Уже искал. Так и не вкурил как реализовать мою задачу в виде списков.
0
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
16.08.2009, 19:33 4
C++
1
vector <blud>
замени на std::list<blud>
list - это двусвязный список.
0
1 / 1 / 0
Регистрация: 26.07.2009
Сообщений: 15
16.08.2009, 19:52  [ТС] 5
Тогда компилятор игнорирует тело функции (4 синтаксические ошибки при построении).
0
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
16.08.2009, 20:00 6
Цитата Сообщение от Killing Friend Посмотреть сообщение
Тогда компилятор игнорирует тело функции (4 синтаксические ошибки при построении).
C++
1
2
list <blud> m,
cout<<m[i].naz<<" ";
у std::list не определён оператор взятия индекса. обращаться к элементам можно через итераторы.
C++
1
std::list::iterator
0
827 / 349 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
17.08.2009, 01:16 7
Killing Friend, я
вот
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
170
171
#include <iostream>
using namespace std;
//////////////////////////////////////////////////////////////////////////
struct dish
{
    double price;
    double caloric;
    dish* next;
};
//////////////////////////////////////////////////////////////////////////
class set_meal
{
private:
    dish* first_dish;
    int amount_dishes;
public:
    set_meal():amount_dishes(0),first_dish(NULL)
    {}
    set_meal(int n_d):amount_dishes(n_d),first_dish(NULL)
    {}
    set_meal(set_meal& s1)
    {
        amount_dishes = s1.amount_dishes;
    }
    void get_dish();
    double total_cost();
    double total_calories();
};
//------------------------------------------------------------------------
void set_meal::get_dish()
{
    for(int i = 0;i < amount_dishes;i++)
    {
        dish* new_dish = new dish;
        cout << "\nВведите калорийность блюда №"
             << i+1
             << ": ";
        cin >> new_dish->caloric;
        cout << "\nВведите цену блюда №"
             << i+1
             << ": $";
        cin >> new_dish->price;
        new_dish->next = first_dish;
        first_dish = new_dish;
    }
    _flushall();
}
//------------------------------------------------------------------------
double set_meal::total_cost()
{
    double t_price = 0;
    dish* current = first_dish;
    while(current)
    {
        t_price += current->price;
        current = current->next;
    }
    return t_price;
}
//------------------------------------------------------------------------
double set_meal::total_calories()
{
    double t_calories = 0;
    dish* current = first_dish;
    while(current)
    {
        t_calories += current->caloric;
        current = current->next;
    }
    return t_calories;
}
//////////////////////////////////////////////////////////////////////////
class cashbox
{
private:
    int amount_set_meals;
    int amount_dishes;
    double* t_cost_meal;
    double* t_calories_meal;
    set_meal* meal;
    void price_meal();
    void calorie_meal();
    void most();
public:
    cashbox():amount_set_meals(0),amount_dishes(0)
    {}
    ~cashbox()
    {
        delete[] meal;
        delete[] t_cost_meal;
    }
    void run();
};
//------------------------------------------------------------------------
void cashbox::run()
{
    cout << "Введите количество комплексных обедов: ";
    cin >> amount_set_meals;
    cout << "\nВведите количество блюд в обеде: ";
    cin >> amount_dishes;
    _flushall();
    meal = new set_meal[amount_set_meals];
    t_cost_meal = new double[amount_set_meals];
    t_calories_meal = new double[amount_set_meals];
    for(int i = 0; i < amount_set_meals;i++)
    {
        meal[i] = set_meal(amount_dishes);
        cout << "\nОбед №" << i+1;
        meal[i].get_dish();
    }
    most();
}
//------------------------------------------------------------------------
void cashbox::price_meal()
{
    for (int i = 0;i < amount_set_meals;i++)
    {
        t_cost_meal[i] = meal[i].total_cost();
    }
}
//------------------------------------------------------------------------
void cashbox::calorie_meal()
{
    for(int i = 0; i < amount_set_meals;i++)
    {
        t_calories_meal[i] = meal[i].total_calories();
    }
}
//------------------------------------------------------------------------
void cashbox::most()
{
    //double low_price = 0;
    int num_cheap = 0;
    int num_m_exp = 0;
    int num_h_calories = 0;
    price_meal();
    calorie_meal();
    for(int i = 0; i < amount_set_meals;i++)
    {
        if(t_cost_meal[i] < t_cost_meal[num_cheap])
            num_cheap = i;
        if(t_cost_meal[i] > t_cost_meal[num_m_exp])
            num_m_exp = i;
        if(t_calories_meal[i] > t_calories_meal[num_h_calories])
            num_h_calories = i;
    }
    cout << "\nСамое дешовый обед - обед №" 
         << num_cheap+1 
         << "($" 
         << t_cost_meal[num_cheap]
         << ").";
    cout << "\nСамое дорогой обед - обед №"
         << num_m_exp+1
         << "($"
         << t_cost_meal[num_m_exp]
         << ").";
    cout << "\nСамое калорийный обед - обед №"
         << num_h_calories+1
         << "("
         << t_calories_meal[num_h_calories]
         << " Кал.).";
}
//////////////////////////////////////////////////////////////////////////
int main(int argc, char* argv[])
{
    setlocale(0,"");
    cashbox cash;
    cash.run();
    getchar();
    return 0;
}
попробовал решить твою задачку..
1
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442
17.08.2009, 09:44 8
Цитата Сообщение от Killing Friend Посмотреть сообщение
Уже искал. Так и не вкурил как реализовать мою задачу в виде списков.
Если учите динамические структуры, то программу нужно писать заново.
А если подойдёт библиотечный std::list, то переделайте только операторы типа for на использование итераторов (как сказал zim22)
for (Spisok::const_iterator i=f.begin(); i!=f.end(); ++i)
в таком цикле к элементам обращаетесь по *i или i->
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.08.2009, 09:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Связные списки
Написать функцию, удаляющую из исходной строки заданный символ. Например, удаление символа ‘i’ из...

Связные списки
Доброго времени суток. И у меня такая проблема - не могу разобраться со связными списками. Не...

связные списки
12. Використовувати (лінійні) односпрямовані списки без заголовної ланки (мал. а) або з заголовною...

Связные списки
Вот есть код все работает отлично но препод сказал что-бы при вводе элементов в список элементы...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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