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

C++ Наследование динамического списка классом стеком. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Литература по структурам данных и алгоритмам http://www.cyberforum.ru/cpp-beginners/thread359673.html
Доброго Времени Суток! Хочу спросить совета, по поводу обширной книги по структурам данных и алгоритмам на C++. Отыскал следующие книги: 1. Организация структур данных и решение задач на С++,...
C++ Перестановка строки. #include <iostream> using namespace std; void change(char &a, char &b); void permutation(char* Str) { if(strlen(Str)%2 == 0) http://www.cyberforum.ru/cpp-beginners/thread359665.html
Объясните код программы C++
Вот рабочий код) напротив каждой строки через 2 слеша обьясните что происходит в программе, желательно поподробнее) спасибо) #include <stdafx.h> #include <iostream> #include <algorithm> #include...
Написать функцию is_equal() - поэлементное сравнение двух контейнера C++
C++ Реализуйте следующую функцию: bool is_equa1( const int*ia, int ia_size,const vector<int> &ivec ); Функция is_equal() сравнивает поэлементно два контейнера. В случае разного размера...
C++ Покритикуйте код http://www.cyberforum.ru/cpp-beginners/thread359638.html
Есть класс Студенты (реализован через односвязный список), хотел бы услышать критику по поводу его улучшения, если кому не лень разбираться в столь поздний час :) Сам код естественно полностью...
C++ правильно записать выражения арифметические суть задания по фортрану и си записать выражения и посчитать их..я записала но результаты выходят разные.. помогите пожалуйста записать правильно задание моя запись на фортран Код: подробнее

Показать сообщение отдельно
iWord
10 / 10 / 1
Регистрация: 21.12.2010
Сообщений: 109
08.10.2011, 05:51  [ТС]
Салют. Решил снова перепилить. Вроде односвязный список организовал, но вдруг приспичило двусвязный сделать. Прошу подскажите с какой стороны зайти.

List.cpp
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
/* 
 * File:   List.cpp
 * Author: iWord
 * 
 */
 
#include "List.h"
#include <locale>
#include <stdio.h>
#include <stdlib.h>
 
List::List() {
    setlocale(LC_ALL, "");
    printf("\033[44m \033[37m \033[1m Конструктор по умолчанию начал работу \033[m \033[m \033[m \n");
 
    list *tmp;
    tmp = new list;
 
    tmp -> info = 0;
    tmp -> next = NULL;
    start = tmp;
 
    printf("\033[44m \033[37m \033[1m Конструктор по умолчанию закончил работу \033[m \033[m \033[m \n");
}
 
List::List(int count, int method) {
 
    int item, item_1;
    char buffer[200];
 
    printf("\033[44m \033[37m \033[1m Конструктор с параметрами начал работу \033[m \033[m \033[m \n");
 
    list *tmp1, *tmp2;
    tmp1 = new list;
 
    tmp1 -> info = 0;
    tmp1 -> next = NULL;
    start = tmp1;
 
    time_t time_var;
    time_var = time(NULL);
    srandom(time(NULL));
 
    for (int i = 0; i < count; i++) {
        if (!method) {
            printf(" \033[36m \033[1m Введите элемент очереди \033[m \033[m \n");
            fgets(buffer, 120, stdin);
            item = atoi(buffer);
        } else {
            item = rand() % 101;
            item_1 = item;
            for (int i = 0; i < item_1; i++) {
                item = item * (-1);
            }
        }
        tmp1 = start;
        while (tmp1 -> next != NULL)
            tmp1 = tmp1 -> next;
        tmp2 = (list*) malloc(sizeof (list));
        tmp2 -> info = item;
        tmp2 -> next = NULL;
        tmp1 -> next = tmp2;       
        start -> info++;
    }
printf("\033[44m \033[37m \033[1m Конструктор с параметрами завершил работу \033[m \033[m \033[m \n");
}
 
List::~List() {
    printf("\033[44m \033[37m \033[1m Деструктор начал работу \033[m \033[m \033[m \n");
    
    while (!Empty()) {
        Delete(start -> info);
    }
        printf(" \033[31m \033[1m Память освобождена \033[m \033[m \n");
        printf("\033[44m \033[37m \033[1m Деструктор завершил работу \033[m \033[m \033[m \n");
}
 
int List::Empty(){
    if (start -> info) {
        return 0;
    }else{
        return 1;
    }
}
 
void List::Append(int item){
    list *tmp1,*tmp2;
    tmp1 = start;
    while (tmp1 -> next != NULL)
        tmp1 = tmp1 -> next;
    tmp2 = (list*)malloc(sizeof(list));
    tmp2 -> info = item;
    tmp2 -> next = NULL;
    tmp1 -> next = tmp2;
    start ->info++;
}
 
void List::Delete(int item){
    list *tmp1,*tmp2;
    tmp2 = start;
    for (int i = 1; i < item; i++)
      tmp2 = tmp2 -> next;
    tmp1 = tmp2 -> next;
    tmp2 -> next = tmp1 -> next;
    free(tmp1);
    start -> info--;
}
 
void List::Print(){
    list *tmp;
    if (!start -> info) {
        printf(" \033[36m \033[1m Очередь пуста \033[m \033[m \n");
    }else{
        tmp = start;
        tmp = tmp -> next;
        while (tmp != NULL) {
            printf("\033[36m \033[1m %d \033[m \033[m",tmp -> info);
            tmp = tmp -> next;
        }
    }
}
 
int List::Value(int number){
    list *tmp;
    tmp = start;
    for (int i = 0; i < number; i++)
        tmp = tmp -> next;
    return tmp -> info;
}
 
void List::Insert(int position,int item){
    list *tmp,*tmp1,*tmp2;
    tmp = addres(position - 1);
    tmp1 = tmp -> next;
    tmp2 = (list*)malloc(sizeof(list));
    tmp2 -> info = item;
    tmp -> next = tmp2;
    tmp2 -> next = tmp1;
    start -> info++;
}
List.h
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
/* 
 * File:   List.h
 * Author: iWord
 *
 */
 
#ifndef LIST_H
#define LIST_H
 
struct list{
    int info;
    struct list *next;
    struct list *prev;
};
 
class List {
protected:
    struct list *start;
    int buffer;
public:
    
    /**
     * @constructor     Конструктор по умолчанию
     */
    
    List();
    
    /**
     * @constructor     Конструктор с параметрами
     * @param count     Количество элементов
     * @param method    Метод заполнения
     */
    
    List(int count, int method);
    
    /**
     * @destructor      Деструктор
     */
    
    virtual ~List();
    
    /**
     * @method          Проверка на заполненность списка
     */
    
    int Empty();
    
    /**
     * @method          Добавление в конец списка
     */
    
    void Append(int item);
    
    /**
     * @method          Удаление элемента
     */
    
    void Delete(int item);
    
    /**
     * @method          Печать списка
     */
    
    void Print();
    
    /**
     * @method          Возвращение значения элемента списка
     * @return          Значение элемента
     */
    
    int Value(int number);
    
    /**
     * @method          Вставка элемента списка
     */
    
    void Insert(int position,int item);
    
    /**
     * 
     * @method Печать отрезка  
     */
    
    void Negative_pos();
    
    list *addres(int number){
        list *tmp;
        tmp = start;
        for (int i = 0; i < number; i++)
            tmp = tmp -> next;
        return tmp;
    };
 
};
 
#endif  /* LIST_H */
main.cpp
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
/* 
 * File:   main.cpp
 * Author: iWord
 *
 */
 
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <locale>
#include "List.h"
#include <malloc.h>
#include <time.h>
#include <string.h>
 
int main(int argc, char** argv) {
    
    setlocale(LC_ALL,"");
    
    int count,method,i,methodx;
    int params[10];
    
    char buffer[500];
    char temp[500];
    char text[10][500];
    char *slovar[] = {"count","method","zadanie","author"};
    
    FILE *config,*log;
    time_t times;
    
    if((log = fopen("lab1.log","a")) == NULL){
        printf("\033[31m Ошибка открытия файла логирования!\033[m \n");
        printf("\033[1m Нажмите Enter. \033[m \n");
        getchar();
        
        if((log = fopen("lab1.log","wt")) == NULL){
            printf("\033[31m Ошибка открытия файла логирования!\033[m \n");
            printf("\033[1m Нажмите Enter. \033[m");
            getchar();
            exit(0);
        }else{
            printf("\033[1m Файл протокола открыт успешно. \033[m \n");
        }
    }else{
         printf("\033[1m Файл протокола открыт на добавление данных. \033[m \n");
    }
    
    times = time(NULL);
    fprintf(log,"\n%s : запуск программы \n",ctime(&times));
    
    if((config=fopen("configure.config","r")) == NULL){
        times = time(NULL);
        fprintf(log,"%s : ошибка открытия конфигурационного файла! \n",ctime(&times));
        printf("\033[31m \033[1m Ошибка открытия конфигурационного файла! \033[m \033[m \n");
        getchar();
        exit(0);
    }
    
fgets(temp,5,config);
    if (strlen(temp)==5)
        {
 
        if (strstr(temp,"Laba1")==0) 
        {
        fprintf(log,"Не верный конфигурационный файл!\n");
        puts("Не верный конфигурационный файл!");
        printf(" ERROR = %s\n", temp);
        getchar();
        }
        }
 printf("Конфигурационный файл верен.\n");
 
 rewind(config);
 fgets(buffer,200,config);
 i = 0;
 while (!feof(config)){
     fgets(buffer,300,config);
     if(buffer[0]!='#'){
         for (int i = 0; i < 4; i++) {
             if(strstr(buffer,slovar[i]) != NULL){
                 strcpy(text[i],strchr(buffer,'='));
             }
            }
     }
    }
 
 for (int i = 1; i < strlen(text[0]); i++) 
     buffer[i-1] = text[0][i];
 params[1] = atoi(buffer);
 
 for (int i = 1; i < strlen(text[1]); i++) 
     buffer[i-1] = text[1][i];
 params[2] = atoi(buffer);
 
 for(i=1;i<=strlen(text[2]);i++)
     buffer[i-1]=text[2][i];
    
 for (i=0;i<=strlen(buffer);i++) 
    text[2][i]=buffer[i];
 
  for(i=1;i<=strlen(text[3]);i++)
     buffer[i-1]=text[3][i];
    
 for (i=0;i<=strlen(buffer);i++) 
    text[3][i]=buffer[i];
 
 count = params[1];
 method = params[2];
 
 printf("\n \033[36m \033[1m Лабораторная работа №1 \n \033[m");
 printf("\033[1mЗадание: %s \033[m ",text[2]);
 fprintf(log,"%s :%s",ctime(&times),text[2]);
 printf("\033[1mВыполнил: %s \033[m ",text[3]);
 fprintf(log,"%s :выполнил %s",ctime(&times),text[3]);
 printf("\n\033[36m\033[1m____________________________________________________ \n\033[m");
 printf("Количество элементов в списке: %d",count);
 fprintf(log,"%s :количество элементов в списке - %d",ctime(&times),count);
 
 if(method != 0){
     puts("\nВыбран автоматический режим.");
     fprintf(log,"%s :выбран автоматический режим.",ctime(&times));
     methodx = 1;
 }else{
     puts("\nВыбран ручной режим.");
     fprintf(log,"%s :выбран ручной режим.",ctime(&times));
     methodx = 0;
 }
 
 if(count <0 || count > 20){
     printf("\033[31m\033[1mВы указали слишком большое количество элементов очереди: %d.\nИнтервал значений от 0 < x < 20. По умолчанию будет устаовлено значение 5.\033[m",count);
     fprintf(log,"%s :Вы указали слишком большое количество элементов очереди: %d.\nИнтервал значений от 0 < x < 20. По умолчанию будет устаовлено значение 5",ctime(&times),count);
 }
 
 List mylist(count,method);
 mylist.Insert(2,10);
 mylist.Print();
 
 
 
 
    
 
 
 
    printf("\n____________________________________________________ \n \033[1m Работа программы успешно завершена \033[m \n");
    getchar();
    return 0;
}
configure.config
C++
1
2
3
4
5
6
7
8
9
Laba1
#Количество элементов очереди n>0&n<20
count=10
#Способ заполнения 0-ручное заполнение, другое значение - автозаполнение
method=1
#Формулировка задания
zadanie=В списке целых чисел подсчитать кол-во переменных знаков. Вывести между какими элементами
#Автор
author=Мухамедгалиев Ринат ИВТ-21
0
Вложения
Тип файла: rar Laba1.rar (38.8 Кб, 8 просмотров)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru