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

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

Войти
Регистрация
Восстановить пароль
 
Рейвол
2 / 2 / 0
Регистрация: 06.10.2012
Сообщений: 44
#1

Нужны советы по задачам - C++

27.03.2013, 22:53. Просмотров 380. Ответов 3
Метки нет (Все метки)

У меня при написании программ возникли проблемы.
1)в программе где я работаю со списками:
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
#include <conio.h>
#include <stdio.h>
#include <iostream>
using namespace std;
 
struct STack
{
    int *number;
};
 
void Print(const STack* st)
{
    cout <<"\n<"<<st->number<<">";
    for(int i=0; i<st->number; i++)
        cout<<st->number[i]<<"\t";
    
}
 
void Input(STack* const st)
{
    cout <<"\nSay number:";
    cin >>st->number;
    for(int i=0; i<st->number; i++) 
        cin>>st->number[i];
 
}
 
struct STnum
{STack *data; // данные числа
STnum *prev; // указатель на предыдущий элемент
STnum *next; // указатель на последний элемент списка
STnum();
};
 
STnum::STnum()
{data = NULL;
prev = next = NULL;
}
 
 
struct Tlist
{
    STnum *head; // указатель на начало списка
    STnum *tail; // указатель на конец списка
 
    Tlist();
    void AddToHead(STack*); // добавить число в начало списка
    void DelFirst ();
    void Clear();
    void PrintN();
};
 
    Tlist::Tlist()
    {
        head=tail = NULL;
    }
 
    void Tlist::AddToHead(STack* st)
    {
        STnum *p = new STnum;
        p->data = st;
        if(!head)
        {
            head=tail=p;
        }
        else
        {
            p->prev = head;
            p->next = head->next;
            head = tail = p;
        }
    }
    void Tlist::DelFirst()
    {
        if(head)
        {
            if(head==tail)
            {
                delete head;
                head=tail=NULL;
            
            }
            else
            {   STnum *p = head;
                head = head->next;
                delete p->data;
                delete p;
            }
        }
    }
 
    void Tlist::Clear()
    {
        STnum *p = head;
        while(p!=NULL)
        {
            DelFirst();
            p=p->next;
        }
    }
 
    void Tlist::PrintN()
    {
        STnum *p = head;
        while(p!=NULL)
        {
            Print(p->data);
            p=p->next;
        }
    }
 
    int Menu()
    {   system("clr");
        cout<<"\n Menu\n";
        cout<<"1. New number\n";
        cout<<"2. Delete first number\n";
        cout<<"3. Delete all numbers\n";
        cout<<"4. Show numbers\n";
        cout<<"0. close menu\n";
        cout<<"choose function of menu =>";
        int punkt;
        do
        cin>>punkt;
        while(punkt <0 || punkt >4);
        return punkt;
    }
 
    int main()
    {
        
        Tlist group;
        
 
        int subPunkt;
        do{
            subPunkt = Menu();
            switch(subPunkt)
            {
case 1:{
                cout<<"\nNew number";
                STack *st = new STack;
                Input(st);
                group.AddToHead(st);
      }
       break;
case 2: group.DelFirst(); 
    break;
case 3: group.Clear();
    break;
case 4: 
    {
        cout<<"\n Show Num\n";
        if(!group.head)
            cout<<"\n you have no Num!\n";
        else
            group.PrintN();
    }
    break;
            };
            getch();
        }
        while(subPunkt!= 0);
        group.Clear();
    }
я абсолютно не знаю, как написать ф-ю считывания списка с файла(блокнота). Здесь мне нужна помощь конкретно с написанием самой ф-и, так как с работой с файлами, я вообще не бум-бум.

2) в этой же программе возникла такая проблема, что при выполнении заполнения списка, я могу ввести 1 элемент, после чего посмотреть, что он присутствует в списке через ф-ю показа списка. Но вводя второй элемент, он показывает только последний элемент списка, не показывая первый. Как можно с этим справится?


3) Эта проблема с другой задачей, но тут мне нужен лишь совет. Как в одномерном массиве, поставить после максимального элемента, все минимальные? я так понимаю, что нужно найти индексы максимального и минимального элемента, но что делать с ними дальше, я не знаю.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2013, 22:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нужны советы по задачам (C++):

Класс редактирования данных. Нужны советы по реализации - C++
Есть задача: написать класс, позволяющий редактировать данные в памяти. Указатель на данные и их начальный размер передаются в конструктор....

Нужны советы как реализовать сложение, вычитание, умножение полиномов/многочленов и деление на число - C++
Всем здравствуйте! надеюсь написать с вашей помощью программку для сложения, вычитания и умножения полиномов, а также деления на число....

Структура "Сканер". Нужны советы профессионалов по программе - C++
Программа ПОЧТИ работает, очень все сырое, код мне кажется мог быть и короче. Прошу Вас, эксперты, указать явные недоработки и как было бы...

Блок-схемы к задачам - C++
Помогите пожалуйста нарисовать блок-схему к задаче.Очень срочно.Заранее спасибо. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Блок-схемы к задачам - C++
Помогите пожалуйста нарисовать блок-схему к задаче.Очень срочно.Заранее спасибо. #include &lt;iostream&gt; #include &lt;cmath&gt; #include...

Блок-схемы к простым задачам - C++
Учусь на втором курсе,а блок схемы до сих пор не научилась рисовать:gcray2: Может кто нибудь поможет?Или литературу посоветуйте. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
eocron
Кактус
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
27.03.2013, 23:13 #2
1) Вот документация по считыванию, с конкретным примером - http://www.cplusplus.com/reference/f...ifstream/open/

2) Для печати списка вам нужно пробежаться по всем элементам от головы до хвоста и последовательно их распечатать. Для этого заводите "итератор" типа (STnum *iter=head; ) (грубо говоря это ссылка, которая сообщает на каком узле вы находитесь в данный момент), в начале iter=голове списка. Далее, Вы последовательно делаете шаги вглубь - iter=iter->next до тех пор пока iter не равен NULL.

3) Вы реализуете сортировку? В таком случае лучше ее назвать. Если же это НЕ сортировка и вам просто нужно поставить все минимальные вправо - вы находите максимальный элемент и меняете его с первым. И все.
0
Рейвол
2 / 2 / 0
Регистрация: 06.10.2012
Сообщений: 44
27.03.2013, 23:47  [ТС] #3
eocron, с третьим у меня вопрос, мне нужно найти минимальное значение и максимальное, я его нашел, но нужно именно определить позицию максимального(с этим проблем нет), и после него всем последующим элементам присвоить значение одного единственного минимального, то есть условно говоря, есть массив:
4 1 3 9 8 7 5 6 и получить:
4 1 3 9 1 1 1 1. Мне кажется, что через ваш способ не подходит для этого, или я ошибаюсь? может просто я вас немного не понял.

Добавлено через 4 минуты
eocron, и ещё, во втором, мне этим способом, нужно работать с ф-й заполнения списка или ф-й вывода на экран списка?
0
eocron
Кактус
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
27.03.2013, 23:51 #4
Тогда все просто, вы сохраняет индекс минимального элемента в min и максимального элемента в max, далее простенький цикл:
for(int i=max+1; i<n;i++) a[i]=a[min];
Дословно он говорит следующее: начиная со следующей позиции после позиции максимального элемента, заполнять все минимальным элементом.

где n - число элементов в массиве, a[] - сам массив.


----------------
Во втором, на итераторы в интернете есть хорошая документация. Он позволяет множество вещей вытворять со структурой данных. В данном случае, да, вам всего лишь с помощью итератора нужно пробежать по всем элементам пошагово - начиная от головы делать iter=iter->next и в вплоть до NULL не включая.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2013, 23:51
Привет! Вот еще темы с ответами:

Кто сможет научить задачам по С++ - C++
есть ли кто сможет научить задачам по С++ ( просто объяснить задачи, дать направления) (бесплатно :))))

Как применить шаблоны к данным задачам? - C++
Есть 7 заданий с использование шаблонов. Объясните пожалуйста в чем шаблонность классов( см. 6 задание) в каждом из заданий. Еще...

Какие значения нужны нужны циклу while? - C++
#include &lt;algorithm&gt; #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int main(void) { int A={1,2,3,4,49,100,49};...

Советы - C++
Добрый день, сделал с горем пополам калькулятор, но необходимы советы о написании программ на примере того же калькулятора, так как было...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.03.2013, 23:51
Ответ Создать тему
Опции темы

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