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

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

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

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

16.06.2013, 11:49. Просмотров 640. Ответов 5
Метки нет (Все метки)

помогите с заданием плиз
1)Тип информационного поля char*
Добавить в список элемент после элемента с заданным информационным полем.
2)Тип информационного поля double.
Удалить из списка все элементы с отрицательными информациоными полями.
3)Тип информационного поля int.
Найти среднее арифметическое элементов дерева.

я это ваще не шарю вдуплил Си до одномерного массива а тут такое ужас=((((((
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2013, 11:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Тип информационного поля (C++):

Нужно создать двунаправленный список. Тип информационного поля char - C++
Нужно добавить в список элементы с номерами 1,3,5... ______________ Даже не могу представить создание списка char..помогите ,пожалуйста

Подскажите пожалуйста, существует ли какие либо ограничения на тип информационного поля списка? - C++
существует ли какие либо ограничения на тип информационного поля списка?

Сформировать стек по файлу чисел. Удалить из стека узлы с минимальным значением информационного поля - C++
Сформировать стек по файлу чисел. Удалить из стека узлы с минимальным значением информационного поля. Использовать дополнительный стек.

Как в связном списке присвоить NULL полю next, если тип этого поля не указатель, а ссылка? - C++
Друзья! В общем, надо реализовать связный список и понятно, последний элемент должен содержать адрес NULL, вот ломаю голову как это...

Задача (язык С + +). Описать тип данных «Студент», содержащий поля «Фамилия», «Группа», «Количество прогулов». Вывести фамилии всех прогульщиков второ - C++
Приветик))) Если не трудно, помогите плиз решыть несколько задач по С++, а то екзамен почти на носу а я в етому ничего не понимаю! Заранее...

Описать структуру с именем AEROFLOT содержащей поля: название пункта назначения рейса, номер рейса, тип самолета, - C++
Описать структуру с именем AEROFLOT содержащей поля: название пункта назначения рейса, номер рейса, тип самолета, Написать прогу,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
lxPrizRakxl
0 / 0 / 0
Регистрация: 13.06.2013
Сообщений: 4
17.06.2013, 14:41  [ТС] #2
блин ну пожалуйста помогите очень прошу
0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
17.06.2013, 15:02 #3
Цитата Сообщение от lxPrizRakxl Посмотреть сообщение
я это ваще не шарю вдуплил Си до одномерного массива а тут такое ужас=((((((
Значит пришло время зайти в гугл и ввести в строку поиска "си односвязный список". Список это базовое понятие, не выучите его сдав чужой код - дальше только сложнее будет понять что-либо, не поленитесь и почитайте, вам его не оминуть никак.
1
lxPrizRakxl
0 / 0 / 0
Регистрация: 13.06.2013
Сообщений: 4
17.06.2013, 17:02  [ТС] #4
та времени уже нет учить,если учить то уже после сессии

Добавлено через 7 минут
а односвязные списки это типо динамический?
0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
18.06.2013, 02:37 #5
Цитата Сообщение от 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;
}
*/
1
gray_fox
18.06.2013, 02:40     Тип информационного поля
  #6

Не по теме:

Цитата Сообщение от Gepar Посмотреть сообщение
код односвязного списка на си
Цитата Сообщение от Gepar Посмотреть сообщение
C++
1
Item(int k,const char* ch, Item* n=NULL) :key(k),info(new char[strlen(ch)+1]),next(n),length(strlen(ch)+1)
"C-style" наверное, но уж точно не С
Я не придираюсь, если что

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2013, 02:40
Привет! Вот еще темы с ответами:

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата" - C++
определить тип данных запись имеющий поля фамилия пол зарплата. определить массив из 10 записей. в программе ввести в массив данные и...

Какой символьный тип использует тип std::string? - C++
Какой тип данных использует класс String? Char? И написано ли это в в документе #include &lt;string&gt;?

Восьмибитный тип переменной (что за тип, но не BYTE и не CHAR? - C++
Вроде давно занимаюсь программированием на С++, но встала проблема... Есть некий массив переменных имеющих 8 битный размер... без знака...

тип cout-a ostrieam? соответствено тип cin-a istream? - C++
тип cout-a ostrieam? соответствено тип cin-a istream?


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

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

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