Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.71
Killing Friend
1 / 1 / 0
Регистрация: 26.07.2009
Сообщений: 15
#1

Связные списки - C++

16.08.2009, 18:48. Просмотров 3435. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2009, 18:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Связные списки (C++):

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

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

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

Связные списки - C++
Вот есть код все работает отлично но препод сказал что-бы при вводе элементов в список элементы сортировались вот к примеру 20 5 8 12 1 10...

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

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

7
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
16.08.2009, 19:06 #2
Цитата Сообщение от Killing Friend Посмотреть сообщение
Помогите пожалуйста!
http://lmgtfy.com/?q=%D1%81%D0%B2%D1...81%D0%BE%D0%BA
0
Killing Friend
1 / 1 / 0
Регистрация: 26.07.2009
Сообщений: 15
16.08.2009, 19:13  [ТС] #3
Уже искал. Так и не вкурил как реализовать мою задачу в виде списков.
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
16.08.2009, 19:33 #4
C++
1
vector <blud>
замени на std::list<blud>
list - это двусвязный список.
0
Killing Friend
1 / 1 / 0
Регистрация: 26.07.2009
Сообщений: 15
16.08.2009, 19:52  [ТС] #5
Тогда компилятор игнорирует тело функции (4 синтаксические ошибки при построении).
0
zim22
depict1
276 / 141 / 2
Регистрация: 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
insolent
826 / 344 / 15
Регистрация: 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
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 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
17.08.2009, 09:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2009, 09:44
Привет! Вот еще темы с ответами:

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

Связные списки - C++
12. Использовать (линейные) однонаправленные списки без заглавной звена (рис. А) или с заглавной звеном (рис. Б) при последующем их...

Массивы и связные списки - C++
Нужно взять како-то небольшой текст и напечатать все слова, которые начинаются с буквы, отличную от буквы, с которой начинается первое...

однонаправленные связные списки - C++
сформировать однонаправленный список содержащий последовательность символов s1 , s2 , . . . , sn ( n &gt;= 2 и заранее неизвестно)....


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

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

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