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

Создания однонаправленного списка и сохранения в типизированный файл. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Класс-Контейнер Вектор http://www.cyberforum.ru/cpp-beginners/thread269559.html
Подскажите пожалуйста, как заполнить вектор латинским алфавитом?
C++ Обработка нажатия клавиши без подтвержения enter Здравствуйте, уважаемые программисты. Подскажите в чем проблема. Вывожу рисунок посредством команды dos в языке turbo c. Необходимо зациклить вывод картинки до нажатия клаши esc. При нажатии стрелки вправво выполнить некую другую команду. Короче, надо обработать нажатые символы на клавиатуре, но без подтвердения клавишей enter. Вот, что получилось у меня. Жирным большим шрифтом выделил мое... http://www.cyberforum.ru/cpp-beginners/thread269546.html
FirstBlood C++
Добрый вечер, форумчане. добрался до winapi :D . как говорится без практики ни куда. так вот. после внимательного прочтения, попробовал написать в VisuatStudio стандартную прогу helloworld. короче вод код: #include <windows.h> int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
C++ В чем ошибка
Странно выдает ошибку на это, ничего не понимаю, почему? char * text; *text = 'h'; *text = 'o'; *text = 'u'; *text = 's'; *text = 'e'; Выдает Необработанное исключение в "0x004013dc" в "r.exe": 0xC0000005: Нарушение прав доступа при записи "0x00000014".
C++ помогите сделать!!!! http://www.cyberforum.ru/cpp-beginners/thread269527.html
Составить алгоритм решения задачи: сколько можно купить быков, коров и телят, платя за быка 10 р., за корову - 5 р., а за теленка - 0,5 р., если на 100 р. надо купить 100 голов скота? Нужно сделать через 4 цикла А*10(первый цикл)+Б*5(второй цикл)+С*0,5(третийцикл) А+Б+С=100(четветый цикл)-если это выполняется то правильно... ПОМОГИТЕ СДЕЛАТЬ!!!!!
C++ Посимвольная проверка строк без массива Всем доброго времени суток, собственно, сабж: Нужно проверить 2 строки посимвольно на наличие одинаковых элементов, но без использования массива. Я думаю, что есть стандарная функция C++. Если кто знает, буду благодарен) подробнее

Показать сообщение отдельно
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
04.04.2011, 19:42     Создания однонаправленного списка и сохранения в типизированный файл.
в сmd:
  • >car.exe datafile.txt resultfile.txt

nodes
C++
1
2
3
4
5
6
7
8
9
struct nodes{
    char category[str_size];    //категория (тип)
    char company[str_size];     //компания-производитель
    float swept;                //от "swept volume" - литраж
    float mileage;              //пробег(в милях, но нам не важно)
    float price;                //цена автомобиля
    
    nodes* tail;                //тут будет адресс следующего элемента. 
};

my_linked_list
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class my_linked_lists{
    public:
        int add(nodes* node);   //будет добавлять узлы в начало списка
        int gsort(void);        //сортирует список по убыванию пробега
        const nodes* get_node(int i); 
                                //возвращает указатель на i-тый узел.
        
        int size(void)
            {return count;};    //возвращает количество элементов списка
        
        my_linked_lists()   :head(NULL), count(0) {};
        ~my_linked_lists()  {free();};
    private:
        int free();             //освобождает память.
        nodes* head;            //указатель на голову.
        int count;              //количество узлов в списке.
};

его функционал
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
const nodes* my_linked_lists::get_node(int i){
    assert(i>0);
//возвращает указатель на i-тый узел списка, 
// либо NULL если i-того узла не существует
    if(i>count) return NULL;
    nodes* tmp = head;
    for(int j=1;j<i;j++) tmp = tmp->tail;
 
return tmp; 
}
int my_linked_lists::gsort(void){
    if(head == NULL) return 0;      //пустой список отсортирован изначально
    if(head->tail == NULL) return 0;//список из одного элемента - тоже.
    
    nodes** array = new nodes*[count];
    nodes* tmp = head;
    for(int i = 0;i<count;i++){
        array[i] = tmp;
        tmp = tmp->tail;
    }
    //сортировка выбором:
    //1. находим минимальное значение в текущем списке
    //2. производим обмен этого значения со значением на первой неотсортированной позиции
    //3. сортируем хвост списка, исключив из рассмотрения уже отсортированные элементы
    //4.повторяем шаги 1-3, пока массив не будет отсортирован.
    
    for(int sorted = 0;sorted < count-1;sorted++){
        //ищем индекс максимального элемента подстроки:
        int imax = sorted;          
        for(int i = 0;i<count;i++)
            if (array[imax]->mileage < array[i]->mileage)
                imax = i;
        //производим обмен индексов максимального и 
        //первого не отсортированного:
        tmp = array[0]; 
        array[0] = array[imax]; 
        array[imax] = tmp;
    }
    
    //выстраиваем связи в списке согласно упорядоченому массиву:
    head = array[0];
    for(int i = 0;i<count-1;i++)
        array[i]->tail = array[i+1];
    
    array[count-1]->tail = NULL; //последний элемент в массиве.
    //массив больше не нужен - освобождаем память:
    delete array;
    
return 0;
}
int my_linked_lists::add(nodes* node){
// добавляет узел в наш список.
 
    //создадим объект-копию node (для этого копируем все поля node в tmp)
    nodes* tmp = new nodes;
    strcpy(tmp->category,node->category);
    strcpy(tmp->company,node->company);
    tmp->swept      =   node->swept;
    tmp->mileage    =   node->mileage;
    tmp->price      =   node->price;
    
    // теперь добавим объет-копию к нашему связному списку:
    tmp->tail = head;
    head = tmp;
    count++;
    
return 0;
}
int my_linked_lists::free(){
//вызывается деструктором, удаляет узлы списка.
    nodes* tmp = head;      // итерирующий указатель
    while(tmp!=NULL){
        //исключаем из списка, потом удаляем:
        head = tmp->tail;
        delete tmp;
        tmp = head;
        
        count--;
    }
    //список пуст.
return 0;
}


main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int get_fname(char* fname1, char* fname2, char** argv);
int load_data(char* fname, my_linked_lists* list);
int save_data(char* fname, my_linked_lists* list);
 
int main(int argc, char* argv[]){
 
    char fload[str_size];   //имя фаила из которого читаем
    char fsave[str_size];   //имя фаила в который пишем
    //перехватываем значения параметров командной строки:
    get_fname(fload,fsave,argv);
    //создаем объект класса связный список.
    my_linked_lists list;
    //заполняем его из фаила данных:
    load_data(fload,&list);
    //сортируем:
    list.gsort();
    //сохраняем в фаил результата:
    save_data(fsave,&list);
    
 
return 0;
};


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