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

Тип информационного поля - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перемещение эллипса в turbo С++ с разной скоростью http://www.cyberforum.ru/cpp-beginners/thread903178.html
#include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h> int main() { int gdriver = DETECT, gmode, errorcode;
C++ Дано 7 настоящих чисел Дано 7 настоящих чисел.Напечатать квадраты тех чисел, которые по абсолютной величене не превышает число М http://www.cyberforum.ru/cpp-beginners/thread903171.html
Бинарные деревья C++
Задание состоит в следующем: Написать программу, которая выполняет следующие действия: 1. Генерирует с помощью генератора случайных чисел 10 символов латинского алфавита. 2. Из полученных символов строит упорядоченное бинарное дерево, отсортированный в заданном порядке в соответствии с направлением прохождения дерева. 3. Отображает полученное дерево на экране. 4. Осуществляет поиск среди...
Передача функции (как параметра) в функцию унаследоваемого класса C++
Доброго времени суток. Есть класс (в моем случае это Sprite) и я создаю произвольный класс (например Game : public Sprite). У меня есть в Game функция draw (в Sprite она тоже есть, но для отрисовки всех объектов я использую vector<Sprite *> и выходит, что если я запущу цикл для вектора то он выполнит только Sprite::draw(), а то что было в Game::draw() даже не тронет) и я хочу эту функцию...
C++ Найти максимальную цифру в тексте строки (Переделать с Pascal на С++) http://www.cyberforum.ru/cpp-beginners/thread903146.html
Всем привет. Вот необходимо переписать этот код на С++ помогите плз: Задание 1. Найти максимальную цифру в тексте строки. uses crt; const cf=; var s,s1:string; t,c,mx:integer; n,i,j,k,f:byte;
C++ Вивести на печать мах и мин элементи и векторы Дан вектор содержащий К элементов. Удалить из него элементы, которые зна- ходятся между максимальным и минимальным элементами. Вывести на печать значение максимального и минимально элементов и два вектора. подробнее

Показать сообщение отдельно
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
18.06.2013, 02:37     Тип информационного поля
Цитата Сообщение от lxPrizRakxl Посмотреть сообщение
Добавлено через 7 минут
а односвязные списки это типо динамический?
Да, статический односвязный список точно не получиться
Вот какой-то старый мой код односвязного списка на си, может поможет чем разобраться
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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
#include <iostream>
#include <iomanip>
#include <cstring>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
using namespace std;
 
char* fileName;
 
struct Item
{
    Item(int k,const char* ch, Item* n=NULL)
    :key(k),info(new char[strlen(ch)+1]),next(n),length(strlen(ch)+1)
    {
        strcpy(info,ch); //копирование строчки с информацией в структуру
    }
    int key;//ключ
    char* info;//информация
    Item* next;//следующий элемент списка
    int length;//длина информации
    int shift;//смещение в файле (байт)
};
 
 
//проверяет принадлежит ли ключ списку
bool Belong(Item*& list, int key)
{
    Item* temp(list);
    while(temp && temp->key!=key)//пока есть элементы в списке и ключ текущего элемнта не равен ключу что мы ищем
     temp=temp->next;
 
    return (temp ? true : false);//возвращаем true если temp!=NULL, те если ключ найден в списке
}
 
//добавляет в список элемент
void Add(Item*& list,int key, const char* val)
{
    if(Belong(list, key))//проверяем нет ли у нас элемента уже с таким ключом
    {
        cerr<<"Element with key = "<<key<<" already exist\n";
        return;
    }
 
    if(!list)//если список пуст то добавим в голову списка элемент
     list= new Item(key,val,NULL);
    else//иначе найдём хвост и добавим после него элемент
    {
        Item* temp(list);
        while(temp->next)
         temp=temp->next;
        temp->next= new Item(key,val,NULL);
    }
}
 
//удаление элемента с заданным ключом
bool Delete(Item*& list, int key)
{
    Item* temp(list);
    while(temp && temp->key!=key)//ищем элемент с таким ключом как нас просят
     temp=temp->next;
 
    if(temp)//если елемент с таким ключом существует
    {
        //если елемент что нужно удалять это голова списка
        if(temp==list)
        {
            Item* toDel(list);
            list=list->next;
            delete toDel;
            return true;
        }
        //иначе элемент где-то в середине или в конце
        else
        {
            Item* toDel(temp);
            Item* newElem(list);
 
            //найдём элемент перед тем что собрались удалять
            while(newElem->next!=temp)
                    newElem=newElem->next;
            //уберём удаляемый элемент из списка
            newElem->next=temp->next;
 
            delete toDel;//удалим элемент
            return true;
        }
    }
    else//иначе элемента нет. Уведомляем пользователя об ошибке
    {
        cerr<<"Can't delete element with key = "<<key<<endl;
        return false;
    }
}
 
//поиск элемента по ключу
Item* Find(Item*& list, int key)
{
    Item* result;//результат. Этот указатель мы и вернём пользователю
    Item* temp(list);
    while(temp && temp->key!=key)//цикл происходит пока не будет найдено совпадение ключа (или пока не кончится список)
     temp=temp->next;
 
    if(temp)//если список не кончился - мы нашли ключ, скопируем этот элемент и вернём его как результа
     return (result=new Item(temp->key,temp->info,NULL));
 
    else//иначе список закончился быстрее чем мы нашли нужный элемент. Уведомим пользователя об ошибке и вернём указатель на NULL
     cerr<<"Can't find element with key = "<<key<<endl;
    return (result=NULL);
}
 
 
//Удаление всего списка, необходимо чтобы можно было освободить память
void DeleteList(Item*& list)
{
    Item *toDel(list);
    while(list)//пока есть что удалять - удаляем элементы
    {
        list=list->next;
        delete toDel;
        toDel=list;
    }
}
 
//вывод в поток списка
ostream& operator<<(ostream& os, const Item* print)
{
    const Item* temp(print);
    if(!temp)//если элементов в списке нет (list = NULL) то не будем ничего пытаться печатать
     os<<"List is empty.";
    else//иначе распечатаем построчно ключи и информационную часть элементов
     while(temp)
      os<<temp->key<<" -> "<<temp->info<<'\n', temp=temp->next;
    return (os<<endl);//вернём адрес потока чтобы пользователь мог туда ещё что-то засунуть (позволяет делать так cout<<list1<<list2<<list3)
}
 
void WriteList(Item*& list)
{
    FILE* file= fopen(fileName,"w");
    Item* temp=list;
    int Shift=0;
    int* count= new int (0);
    while(temp)
     temp=temp->next,count++;
 
    Shift+=sizeof(Item)*(*count);
    temp= list;
    while(temp)
    {
        temp->shift=Shift;
        Shift+=temp->length;
        temp=temp->next;
    }
    temp=list;
    fwrite(count,1,sizeof(int),file);
 
    while(temp)
    {
        fwrite(temp,1,sizeof(Item),file);
        temp=temp->next;
    }
    temp=list;
    while(temp)
    {
        fwrite(temp->info,temp->length,sizeof(char),file);
        temp=temp->next;
    }
    fclose(file);
}
 
Item* ReadList()
{
    int* count= new int(-1);
    Item* lst= NULL;
    Item* temp= (Item*) malloc(sizeof(Item));
    FILE* file= fopen(fileName,"r");
    fread(count,1,sizeof(int),file);
    for(int i=0;i<(*count);i++)
    {
        fread(temp,1,sizeof(Item),file);
        temp->info=new char[temp->length];
        fseek(file,temp->shift,SEEK_SET);
        fread(temp->info,temp->length,sizeof(char),file);
 
        Add(lst,temp->key,temp->info);
 
        fseek(file,sizeof(int)+(i+1)*sizeof(Item),SEEK_SET);
    }
    return lst;
}
 
 
 
 
 
int main()
{
    fileName= new char[strlen("out.txt")+1];
    strcpy(fileName,"out.txt");
    Item* lst= NULL;
    Add(lst,2,"value2");
    Add(lst,3,"zzzzzz4");
    //Add(lst,3,"value3");
    cout<<lst;
    WriteList(lst);
    Item* lst2= ReadList();
    cout<<lst2;
 
 
}
 
/*
int main()
{
    int choice=1;//выбор пользователя. Сюда считывается пункт меню что выбрал пользователь
    int key;//ключ который ввёл пользователь при добавлении/удалении/поиске
    char str[256];//строка для информации что будет вводить пользователь при добавлении/удалении/поиске
    Item* forFind=NULL;//результат поиска. Пока просто обнулим его
    Item* lst=NULL;//сам список. Пока что он пуст
 
    while(choice)
    {
        system("cls");
        cout<<"Main Menu\n"
        "1 - Add new element\n"
        "2 - Find element\n"
        "3 - Delete element\n"
        "4 - Print list\n"
        "5 - Exit\n";
        cin>>choice;
        cout<<endl;
        if(cin.fail() || (choice<1 || choice>5))//проверка на ошибочный выбор пользователем пункта меню
        {
            cin.clear();//очистка состояния потока
            choice=1;
            continue;
        }
        else
         switch (choice)
         {
            case 1:
            cout<<"Enter key:\n";
             cin>>key;
            if(cin.fail())
            {
                cin.clear();
                cout<<"Try again.\n";
                _flushall();//очистка потока от мусора что навводил пользователь
                break;
            }
            cin.ignore();
            cout<<"Enter info:\n";
            cin.getline(str,256);
            Add(lst,key,str);
            break;
 
            case 2:
            cout<<"Enter key:\n";
            cin>>key;
            if(cin.fail())
            {
                cin.clear();
                cout<<"Try again.\n";
                _flushall();
                break;
            }
            cin.ignore();
            forFind=Find(lst,key);
            if(forFind)
             cout<<forFind;
            break;
 
            case 3:
            cout<<"Enter key:\n";
            cin>>key;
            if(cin.fail())
            {
                cin.clear();
                cout<<"Try again.\n";
                _flushall();
                break;
            }
            cin.ignore();
            if(Delete(lst,key))
             cout<<"Done\n";
            break;
 
            case 4:
            cout<<lst;
            break;
 
            case 5:
            break;
 
            default:
            cout<<"Wrong selection.\n";
         }
         if(choice==5)
          break;
         cout<<"Press any key to continue...\n";
         getch();
    }
    DeleteList(lst);
    return 0;
}
*/
 
Текущее время: 00:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru