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

Список - вперёд в С++ - C++

Восстановить пароль Регистрация
 
Prostoplus
 Аватар для Prostoplus
11 / 1 / 0
Регистрация: 21.09.2012
Сообщений: 122
21.09.2012, 21:35     Список - вперёд в С++ #1
Здравствуйте! Помогите с созданием списка - вперед (в динамической памяти) в С++.
Мой Visual Studio 2012 то отказывается корректно принимать указатели, переменные ...
Задание: Сформировать связной список – вперёд перечня доступных меблей в магазине.
Для каждого элемента указать название, цену, материал и производителя. Иметь возможность дополнить запись в список и удалить запись со списка.

Если это возможно, помогите реализовать выборку, просмотр стека.

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
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cstdio>
#include <conio.h>
using namespace std;
 
 
//-----------------------------------------------------------------
struct shop
{
    int key;
    char name[10];      //Название
    float price;                    //Цена
    char material[15];  //Материал
    char maker[20];         //Производитель
    struct shop *next;  //указатель на следующий элемент списка
}shoping;
//-----------------------------------------------------------------
//ФУНКЦИИ
int menu();
void enter(shop **nov); //Добавление --!!!-???
void view();
/*int del(shop **top);  //Выборка из стека*/
shop *first (int d); //Формирование первого new - элемента
 
//-----------------------------------------------------------------
int main()
{
    setlocale (0, "Rus");
 
    shop *top = NULL; //Начальная иницаилизация ук.-вершины 0 адресом
    top = first(1);
    char choice;
    shop *nov1;
    for (;;)
    {
        choice = menu();
        switch (choice)
        {
        case 'e': enter(&nov1); //-!!!-бывает ошибка при вызове функции???
            break;
        case 'v': view();
            break;
        /*case 'd': del();
            break;*/
        case 'q': cout<<"\nСпасибо за использование программы!\n";
            system ("PAUSE");
            return 0;
        }
    }
}
 
//--------------------------------------------------------------
 
int menu ()
{
    char ch;
    do 
    {
        
        cout<<"Программа предназначена для учёта мебели в магазине.\n\n";
        cout<<"Пожалуйста, вводите данные на латинице!!!\n\n";
        cout<<"Выберие действие:\n"
            <<"\"E\" Ввод данных;\n"
            <<"\"V\" Просмотр списка;\n"
            <<"\"D\" Удаление єлемента;\n"
            <<"\"Q\" Выход;\n\n";
        cout<<"Сделайте выбор: "; cin>>ch;
        if (!strchr ("evdq", tolower(ch)))
        {
                cout<<"\nВыбор сделан НЕ ВЕРНО!!!\n";
                system ("PAUSE");
                system ("cls");
        }
    } while (!strchr ("evdq", tolower(ch)));
return tolower (ch);
}
 
//------------------------------------------------------------
//Начальное формирование
shop *first(int d)
{
    shop *s=0; //Без инициализации не катит???
    //shop *pv=new shop;    //Создаем элемнт: структура
    s->key = d;     //Присваиваем полю данных значения
    s->next = 0;        //Первый элемент даёт признак конца стека NULL. Нужно при выборке.
    cout<<s->key<<' ';
    return s;           //Возвращаем адрес структуры
}
 
//-------------------------------------------------------------
 
void enter (shop *nov) //Вставка в стэк элемент
{
    system ("cls");
    //shop *new_shop;
    
    //shop *pv;         //Создаем элемент - структура
    //new_shop = malloc (sizeof (shop));
    shop new1; //---!!!---???
    //nov =  malloc (sizeof (shop)); ---!!!---???--не компилируется???
    new1= *nov; //--!!!--???
    cout<<"Введите название: "; cin>>nov->name; //ОШИБКА!!! при вводе
    cout<<"\nВведите цену: "; cin>>nov->price;          
    cout<<"\nВведите материал: "; cin>>nov->material;   /*pv->material = material;*/
    cout<<"\nВведите производителя:"; cin>>nov->maker;  /*pv->maker = maker;*/
    /* Заносим данные*/
    shop *top;
    nov->next = top;        //Созданный элемент связывается с эл, который на вершине
//  top = nov;              //Созданные эл помещается на вершину вместо старой вершины
 
    system ("cls");
}
//-------------------------------------------------------------
 
void view ()
{
    system ("cls");
    cout<<"\nПросмотр запущен!\n";
    system ("PAUSE");
}
 
//------------------------------------------------------------
 
/*int del (shop **top)
{
}*/
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2012, 21:35     Список - вперёд в С++
Посмотрите здесь:

Список: связный список, в котором информация о книгах сортируется по убыванию стоимости. C++
C++ 3 класса: список, стек(как список), очередь(как список)
list. Cоздать список из результатов(с массивами), а потом просмотреть весь список C++
C++ Создать список L3 из элементов, входящих и в список L1 и в список L2
C++ После нажатия enter переносить курсор на несколько определённых символов вперёд
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
21.09.2012, 22:09     Список - вперёд в С++ #2
почему бы не впихнуть все в класс ?
C++ (Qt)
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
struct shop
{
    int key;
    char name[10];      //Название
    float price;                    //Цена
    char material[15];  //Материал
    char maker[20];         //Производитель
    struct shop *next;  //указатель на следующий элемент списка
}
 
class List  {
private:
shop *pHead, *pTail;
int count;
public:
List()  {
count = 0;
pHead = pTail = NULL;
}
void AddTail()  {
shop *temp = new shop;
//-----заполнение полей temp;
//---------------------------
                
        temp->next = NULL;
        if(pHead==pTail && pHead==NULL)
        {
            pHead = pTail = temp;
        }
        else
        {
            pTail->next = temp;
            pTail = temp;
        }
        count++;
}
//void AddHead();
void DelTail();
//void DelHead();
void DellAll()  {
shop *temp = pHead;
while(temp)  {
pHead = pHead->next;
delete temp;
temp = pHead;
}
}
~List()  {
DelAll();
}
 
};
и т.д...
Prostoplus
 Аватар для Prostoplus
11 / 1 / 0
Регистрация: 21.09.2012
Сообщений: 122
21.09.2012, 22:13  [ТС]     Список - вперёд в С++ #3
Да у нас расходятся предметы - в ООП только классы начали учить, оператор ->, динамическую память почти не учили, а по Алогоритмах и Структурах - вот это задание.
veverix
39 / 39 / 2
Регистрация: 14.09.2012
Сообщений: 85
21.09.2012, 23:04     Список - вперёд в С++ #4
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
#include <iostream>
 
using namespace std;
 
struct shop
{
    int key;
    char name[10];
    float price;
    char material[15];
    char maker[20];
    shop *next;
};
 
shop *create(float price, char name[], char material[], char maker[])
{
    shop *s = new shop;
    s->key = 0;
    s->next = NULL;
    strcpy_s(s->name, 10, name);
    strcpy_s(s->material, 15, material);
    strcpy_s(s->maker, 20, maker);
    s->price = price;
    return s;
}
 
void add(float price, char name[], char material[], char maker[], shop *s)
{
    if(s->next != 0)    
        add(price, name, material, maker, s->next);
    else
    {
        s->next = new shop;
        s->next->key = s->key;
        s->next->key++;
        strcpy_s(s->next->name, 10, name);
        strcpy_s(s->next->maker, 20, maker);
        strcpy_s(s->next->material, 15, material);
        s->next->next = 0;
        s->next->price = price;
    }
}
 
void decID(shop *beg)
{
    if(beg->next == 0)
        return;
    else
    {
        beg->next->key--;
        decID(beg->next);
    }
}
 
void del(int key, shop *beg)
{
    if(beg->key != key-1)
        if(beg->next != 0)
            del(key, beg->next);
        else
        {
            return;
        }
    else
    {
        if(beg->next == 0)
            return;
        if(beg->next->next != 0)
        {
        shop *temp = beg->next->next;
        delete beg->next;
        beg->next = temp;
        }
        else  delete beg->next;
        decID(beg);
    }
}
 
void out(int key, shop *s)
{
    if(s->key != key)
        if(s->next != 0)
            out(key, s->next);
        else
        {
            cout<<"Object dont exist!"<<endl;
            return;
        }
    else
    {
        cout<<s->key<<endl;
        cout<<"Name "<<s->name<<endl;
        cout<<"Price "<<s->price<<endl;
        cout<<"Maker "<<s->maker<<endl;
        cout<<"Material "<<s->material<<endl;
        cout<<'\n';
    }
}
 
void main()
{
    float price = 0;
    char name[10] = "Ivan";
    char material[15] = "Wood";
    char maker[20] = "Vasilij";
    shop *begin = create(price, name, material, maker);
    out(0, begin);
    add(price++, name, material, maker, begin);
    add(price+2, "Valera", material, maker, begin);
    add(price+3, "Divan", "Gold", "Yamaha", begin);
    out(1, begin);
    out(2, begin);
    out(3, begin);
    del(2, begin);
    out(0, begin);
    out(1, begin);
    out(2, begin);
    out(3, begin);
    system("pause");
}
Yandex
Объявления
21.09.2012, 23:04     Список - вперёд в С++
Ответ Создать тему
Опции темы

Текущее время: 01:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru