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

Защита курсовой работы! - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа написанная мной не отвечает http://www.cyberforum.ru/cpp-beginners/thread596957.html
Я написал программу на c++ которая делает следуещее: просит ввести цифру, после ввода выводит на экран, следующий раз просит тоже ввести значение, но если это значение самое большое или самое...
C++ Процедуры шифрования и сортировки 1.Описать процедуру EncodeText(S, K), которая шифрует текстовый файл с именем S, выполняя циклическую замену каждой русской буквы на букву того же регистра, расположенную в алфавите на K-й позиции... http://www.cyberforum.ru/cpp-beginners/thread596947.html
C++ функция поиска простых чисел
не могу сделать функции для поиска простых чисел, вот код функции int prost(int x) { if (x/2) return true; else return false; }
Перегрузка операторов C++
Приветствую! Необходима помощь. Разработать класс Vec4 как вектор из 4-х float. Определить оператор ~ для перестановки элементов вектора в обратном порядке и операторы ввода >> и вывода <<. Напишите...
C++ количество букв подряд http://www.cyberforum.ru/cpp-beginners/thread596912.html
привет ... задачка такая, Дана строка (string) .Подсчитать наибольшее количество букв 'а', идущих в ней подряд.
C++ Программа пропускает ввод первой строки здраствуйте. в коде програмы, приведенном ниже, в структуру Track записываются данные, считанные с клавиатуры(функция Track *input_track_list(int n); ). когда в цикле производится считываение строк,... подробнее

Показать сообщение отдельно
Сергей(студент)
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 29

Защита курсовой работы! - C++

05.06.2012, 14:09. Просмотров 685. Ответов 0
Метки (Все метки)

Оставьте пожалуйста комментарии о курсовой работе! Может чего- нибудь еще добавить или убрать??? Да и вообще правильно я сделал или нет? Дайте пожалуйста ответ! Скоро защита,нужна помощь специалистов!


Текст пояснительной записки


1 Постановка задачи

Необходимо создать однонаправленный динамический список,, содержащий информацию о реках. Список должен состоять из 4 полей:

1 поле – название реки, 2 поле - длина реки, 3 поле – площадь реки, 4 поле количество притоков.

Необходимо реализовать следующие действия со списком

 Ввод динамического списка
 Вывод списка
 Обмен элементов (задаются номера элементов, которые нужно поменять местами)
 Удаление последнего элемента в списке

Программу построить по процедурному принципу.
Пользовательский интерфейс реализовать в виде меню.



2 Разработка метода решения задачи и её формализация

Использование динамических величин предоставляет программисту ряд дополнительных возможностей. Во-первых, подключение динамической памяти позволяет увеличить объем обрабатываемых данных. Во-вторых, если потребность в каких-то данных отпала до окончания программы, то занятую ими память можно освободить для другой информации. В-третьих, использование динамической памяти позволяет создавать структуры данных переменного размера.
Работа с динамическими величинами связана с использованием ссылочного типа данных. Величины, имеющие ссылочный тип, называют указателями.
Указатель содержит адрес поля в динамической памяти, хранящего величину определенного типа. Сам указатель располагается в статической памяти.
Адрес величины — это номер первого байта поля памяти, в котором располагается величина. Размер поля однозначно определяется типом.

Списком называется структура данных, каждый элемент которой посредством указателя связывается со следующим элементом.
Из определения следует, что каждый элемент списка содержит поле данных (Inf ) (оно может иметь сложную структуру) и поле ссылки на следующий элемент (Next). Поле ссылки последнего элемента должно содержать пустой указатель (Null)



Рисунок 1
Здесь Inf — информационная часть звена списка (величина любого простого или структурированного типа, кроме файлового), Next — указатель на следующее звено списка; First — указатель на заглавное звено списка.
Согласно определению, список располагается в динамически распределяемой памяти, в статической памяти хранится лишь указатель на заглавное звено. Структура, в отличие от массива, является действительно динамической: звенья создаются и удаляются по мере необходимости, в процессе выполнения программы.
Однонаправленный список – это список, в котором указатель ссылается только на следующее звено списка (как показано на рисунке).

3 Разработка состава и структуры данных и результатов

Поля исходных данных, программы, разрабатываемой в данной курсовой, будут иметь следующий вид:
Таблица 1

Название Длина Площадь Притоки





Название – название реки
Длина – длина реки
Площадь – площадь бассейна реки
Притоки – количество притоков

В таблице приведены используемые данные:
Таблица 2

Обозначение Тип Назначение
a Char (символьный) Название
b Int целый тип Длина
c Int целый тип Площадь
d Int целый тип Притоки
list_head Ссылочный тип Ссылка на начало списка
Sheet Struct Структура Sheet
new_sheet Struct Создание структуры Sheet
first Ссылочный тип Меняемый элемент
second Ссылочный тип Меняемый элемент
cur Ссылочный тип Указатель
s Тип Sheet Переменная
menuc Char (символьный) Меню
code Char (символьный) Переменная
p1 Int целый тип Первая позиция
p2 Int целый тип Вторая позиция


Результатом выполнения программы является вывод на экран пунктов меню:
• Запись – Ввод данных с клавиатуры.
• Вывод– Вывод данных на экран в виде таблицы.
• Обмен – Обмен элементов с заданными номерами.
• Удаление – Удаление последнего элемента в списке.
• Выход – Выход.
При выборе пункта меню выполняется соответствующее действие.


4 Разработка алгоритма

Алгоритм решения поставленной задачи мы будем разрабатывать по процедурному принципу. С реализацией меню. Он будет состоять из 4 функций, и главной программы объединяющей все функции.

 Запись
 Вывод
 Обмен
 Удаление
 Выход
 Главная часть
Перемещение по меню будет реализовано с помощью клавиш (влево, вправо) Выбор каждого пункта меню производиться с помощью клавиши Enter
1) Запись

В данной функции будет производиться ввод списка, а также последующее его добавление. При этом начнётся цикл создания динамического однонаправленного списка, создание первого элемента и последующих элементов в цикле. При создании каждого элемента, будет предложено заполнить привёдённые ниже поля данных:
1 Введите имя реки – название реки
2 Введите длину – длина реки
3 Введите площадь бассейна – площадь бассейна реки
4 Введите количество притоков – количество притоков

После заполнения всех полей списка, программа выходит в меню предлагая пользователю выбор.



2) Вывод
В данной функции реализуется вывод списка в виде таблицы.
Выводиться шапка выходной таблицы. Затем с помощью цикла начинают просматриваться и выводиться элементы данного списка на экран. Все элементы начиная с первого помещая их в таблицу с разделами: Название, Длина, Площадь, Притоков. После вывода, программа просит нажатия «<Spase> , для выхода в меню.

3) Обмен
Здесь задаются элементы, которые нужно поменять местами друг с другом.
Задаются элементы, которые нужно обменять. С помощью 1 цикла находим первый элемент и запоминаем его. С помощью второго цикла находим 2 элемент и запоминаем. Проверяем, что они не пустые, если они не пустые, то производим обмен, если пустые не обмениваем и выходим.

4) Удаление
Функция реализует удаление последнего элемента в списке. Устанавливаем указатель на начало списка. Проверяем пустой ли список. Если он пустой, то пишем сообщение, что он пустой и выходим из функции. Если список не пустой, просматриваем весь список и находим предпоследний элемент, запоминаем. Если последний элемент не пустой, то мы его удаляем, и ставим указатель на 0.

5) Выход
Выход. При выборе этого пункта меню происходит выход в систему, при этом все введенные данные будут потеряны.

6) Главная часть
Реализует меню и «собирает все функции воедино». Создается меню с бесконечным циклом, которое позволяет выбирать функции для выполнения.


Блок схема алгоритма приведена в Приложении 1.

5 Выбор языка программирования
Для реализации программы был выбран язык C++. Язык C++ - это универсальный язык программирования, для которого характерны экономичность выражения, современный поток управления и структуры данных, богатый набор операторов. Язык “C” не является ни языком “очень высокого уровня”, ни “большим” языком, и не предназначается для некоторой специальной области применения, но отсутствие ограничений и общность языка делают его более удобным и эффективным для многих задач, чем языки, предположительно более мощные. Ключевым понятием С++ является класс. Класс - это тип, определяемый пользователем. Классы обеспечивают сокрытие дан¬ных, гарантированную инициализацию данных, неявное преобразо¬вание типов для типов, определенных пользователем, динамичес¬кое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. С++ предоставляет гораздо лучшие, чем в C, средства выражения модульности прог¬раммы и проверки типов. В языке есть также усовершенствова¬ния, не связанные непосредственно с классами, включающие в себя символические константы, inline-подстановку функций, па¬раметры функции по умолчанию, перегруженные имена функций, операции управления свободной памятью и ссылочный тип. В С++ сохранены возможности языка C по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса и т.п.). Это позволяет весьма эффективно реализовывать типы, определя¬емые пользователем.
С++ и его стандартные библиотеки спроектированы так, чтобы обеспечивать переносимость. Имеющаяся на текущий момент реализация языка будет идти в большинстве систем, поддержива¬ющих C. Из С++ программ можно использовать C библиотеки, и с С++ можно использовать большую часть инструментальных средств, поддерживающих программирование на C.
Также в С++ есть средство для работы с динамическими данными, что позволяет решить поставленную выше задачу.

6 Разработка программы
Построение программы будем производить по процедурному принципу.
Программа состоит из следующих процедур:
1) Главная часть – эта часть программы, которая выводит на экран все пункты меню, то есть организует пользовательский интерфейс, также она объединяет все процедуры используемые в программе. Она состоит из бесконечного цикла, который позволяет создать «вечное меню». При выборе пункта Выход, происходит выход и этого вечного цикла, и выход в систему. Результатом работы данной части программы является вывод на экран следующих пунктов меню:

 Запись
 Вывод
 Обмен
 Удаление
 Выход

Перемещение по меню реализуется с помощью клавиш (право, влево), а выбор производиться с помощью клавиши Enter.


2) Ввод – это процедура создания однонаправленного динамического списка, она требует заполнения четырёх полей списка. Заполнение происходит следующим образом:
Вводиться сначала последовательно четыре поля, затем происходит выделение памяти для новых элементов и перемещение их в начало с помощью функции
push_front. Причём при последующем вводе происходит добавление элементов в начало списка.

3) Вывод – эта процедура вывода созданного динамического списка. Вывод начинается с первого элемента и заканчивается последним элементом. Таблица заполняется данными введёнными после заполнения динамического списка, а также после его обработки.
4)Обмен – эта процедура меняет заданные элементы местами. Т.е. сначала задаётся первый номер элемента, затем второй номер. С помощью 1 цикла происходит поиск номера первого элемента, с помощью второго цикла происходит поиск 2 элемента. Затем происходит проверки на 0 элементов second и first и если они равны 0, обмена не происходит, иначе они обмениваются. После выполнения действия программа возвращается в меню.

5) Удаление – эта процедура удаляет последний элемент в динамическом списке. Сначала происходит установка указателя на начало. Затем проверяем пустой ли список. Если он пустой, то пишем сообщение, что список пуст и выходим из функции в меню. Если список не пустой, то начинаем просматривать весь список и находим предпоследний элемент, производим запоминание найдённого элемента. Если последний элемент не пустой, то мы его удаляем, и ставим указатель на 0. После завершения работы с функцией, программа производит выход в меню.


7 Отладка и тестирование
Отладка и тестирование проводились встроенными средствами интегрированной среды программирования, языка Borland C++ 5.02. После создания программы возникла необходимость исправить синтаксические и лексические ошибки. Нахождение ошибок осуществлялось попыткой запустить программу, при этом система показывала номер строки ошибки и выводила код данной ошибки. Исправление синтаксических и лексических ошибок осуществлялось при помощи пункта меню Debug, а также с помощью литературы, приведённой в разделе пояснительной записки 8. Список литературы. После исправления синтаксических ошибок, средствами Отладки, языка Borland C++ 5.02 .Производилась проверка всех путей алгоритма, посредством ввода разнообразных, тестирующих данных. После устранения всех ошибок и недочётов, программа стала отвечать требованиям задания курсового проекта. Дальнейшая отладка и тестирование программы на этом прекратилось.







8 Список Литературы

1) Язык Си++: Учеб. пособие.-5-е изд.- М.: Финансы и статистика, 2001.-560 с.: ил.
2) www.chelp.ru






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
#include <stdio.h>
#include <conio.h>
 
 
 
struct Sheet
{
    char a[20];
    int b;
    int c;
    int d;
 
    Sheet* next;
 
    void operator=(const Sheet& s)
    {
        int i;
        for (i = 0; i < 20; ++i)
           a[i] = s.a[i];
        b = s.b;
        c = s.c;
        d = s.d;
    }
};
 
Sheet* list_head;// sozdanie ykazatelya tipa Sheet
 
//------------------------------------------------------------------------------
void push_front(Sheet s)
{
   textbackground(0); textcolor(15);
     clrscr();
    //Videlaem pamat dla new element
    Sheet* new_sheet = new Sheet; //new ykazatel Sheet
    *new_sheet = s;
 
    // pomeshaem v nachalo
    new_sheet->next = list_head;
    list_head       = new_sheet;
}
 
//------------------------------------------------------------------------------
void swap_position(int p1, int p2)
{
    Sheet* first;
    Sheet* second;
    int    i;
 
    //nahodim pervij element
    i = 0;
    for (first = list_head; first != NULL; first = first->next)
        if (i++ == p1)
            break;
 
    // nahodim vtoroj elemnt
    i = 0;
    for (second = list_head; second != NULL; second = second->next)
        if (i++ == p2)
            break;
 
    if (second == NULL || first == NULL)
        cprintf("obmen nevozmojen \n");
    else
{
 
    // obmen
    Sheet t;
    t      = *first;
    *first = *second;
    *second = t;
        
}}
 
 
 
//------------------------------------------------------------------------------
void remove_back()
{
    textbackground(0); textcolor(15);
     clrscr();
   printf("\n"); cprintf("“¤*«Ґ*ЁҐ ‡*ўаҐиҐ*®");
    Sheet* cur;
 
    cur = list_head;
                  if(cur==NULL) cprintf("Spisok pust");
                  else
{
    // **室Ё¬ ЇаҐ¤Ї®б«Ґ¤*Ё© н«Ґ¬Ґ*в бЇЁбЄ*
    for (cur = list_head; cur->next->next != NULL; cur = cur->next);
 
    // г¤*«пҐ¬ Ї®б«Ґ¤*Ё© н«Ґ¬Ґ*в
    if (cur->next != NULL)
    {
        delete cur->next; //ydalenie ykazatela cur->next
        cur->next = 0;
    }}
 
   printf("\n"); cprintf("Ќ*¦¬ЁвҐ Їа®ЎҐ« ¤«п Їа®¤®«¦Ґ*Ёп");
    while (getch() != 32);
 
   textbackground(1);
        clrscr();
        textbackground(7);
        gotoxy(1, 25); clreol();
        gotoxy(1, 25); clreol();
 
 
   }
//-----------------------------------------------------------------------------
void add_new_element()
{
    Sheet s;
   textbackground(0); textcolor(15);
   clrscr();
 
 
 
    printf("‚ўҐ¤ЁвҐ Ё¬п ४Ё - ");
   scanf("%s", &s.a);
 
    printf("‚ўҐ¤ЁвҐ ¤«Ё*г - ");
   scanf("%d", &s.b);
 
    printf("‚ўҐ¤ЁвҐ Ї«®й*¤м Ў*бᥩ**  - ");
   scanf("%d", &s.c);
 
    printf("‚ўҐ¤ЁвҐ Є®««ЁзҐбвў® ЇаЁв®Є®ў - ");
   scanf("%d", &s.d);
 
    push_front(s);
 
        textbackground(1);
        clrscr();
        textbackground(7);
        gotoxy(1, 25); clreol();
        gotoxy(1, 25); clreol();
 
};
//-----------------------------------------------------------------------------
  void print_list()
{
   textbackground(0); clrscr();
    textbackground(1); textcolor(14);
    cprintf("ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї");printf("\n");
    cprintf("і   Ќ*§ў**ЁҐ  і  „«Ё**  і Џ«®й*¤м  і ЏаЁв®Є®ў і");printf("\n");
 
 
 
    // prohodim cherex vse elementi spiska
    for (Sheet* cur = list_head; cur != NULL; cur = cur->next)
    {
 
        // vivodim na ekran
        cprintf("і %11s і", cur->a);
        cprintf("%8d і", cur->b);
        cprintf("%9d і", cur->c);
        cprintf("%9d і", cur->d);
        printf("\n");
 
   };
    cprintf("АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ");printf("\n");
    textbackground(0); textcolor(7);
 
    printf("\n"); cprintf("Ќ*¦¬ЁвҐ Їа®ЎҐ« ¤«п Їа®¤®«¦Ґ*Ёп");
    while (getch() != 32);
 
    textbackground(1);
    clrscr();
    textbackground(7);
    gotoxy(1, 25); clreol();
    gotoxy(1, 25); clreol();
 
 
 
};
 
 
//-----------------------------------------------------------------------------
 
 int main()
{
    char code;
 
   char menuc = 0;
 
    textbackground(1); textcolor(0); clrscr();
 
    textbackground(7);
    gotoxy(1, 25); clreol();
    gotoxy(1, 1); clreol();
 
    do {
        textbackground(7); textcolor(0);
        gotoxy(1, 1); clreol();
        gotoxy(2, 1); cprintf(" ‡*ЇЁбм ");
        gotoxy(10, 1); cprintf(" ‚лў®¤ ");
        gotoxy(17, 1); cprintf(" ЋЎ¬Ґ* ");
        gotoxy(23, 1); cprintf(" “¤*«Ґ*ЁҐ ");
      gotoxy(34, 1); cprintf(" ‚л室 ");
 
        textbackground(7); textcolor(4);
        gotoxy(3, 1); cprintf("‡");
        gotoxy(11, 1); cprintf("‚");
        gotoxy(18, 1); cprintf("Ћ");
      gotoxy(24, 1); cprintf("“");
        gotoxy(35, 1); cprintf("‚");
 
        textbackground(2); textcolor(0);
        gotoxy(2, 1); if (menuc == 1) cprintf(" ‡*ЇЁбм ");
        gotoxy(10, 1); if (menuc == 2)  cprintf(" ‚лў®¤ ");
        gotoxy(17, 1); if (menuc == 3)  cprintf(" ЋЎ¬Ґ* ");
        gotoxy(23, 1); if (menuc == 4)  cprintf(" “¤*«Ґ*ЁҐ ");
      gotoxy(34, 1); if (menuc == 5) cprintf(" ‚л室 ");
 
        textbackground(2); textcolor(4);
        gotoxy(3, 1); if (menuc == 1)  cprintf("‡");
        gotoxy(11, 1); if (menuc == 2)  cprintf("‚");
        gotoxy(18, 1); if (menuc == 3)  cprintf("Ћ");
        gotoxy(24, 1); if (menuc == 4)  cprintf("“");
      gotoxy(35, 1); if (menuc == 5) cprintf("‚");
 
        gotoxy(1, 1);
 
        code = getch();
 
        if (code == 75) menuc--;
        if (code == 77) menuc++;
 
        if (menuc > 6) menuc = 1;
        if (menuc < 0) menuc = 5;
 
        textbackground(7); textcolor(0);
        gotoxy(1, 25); clreol();
        gotoxy(2, 25);
        switch (menuc) {
        case 1: cprintf("‚ў®¤ ¤***ле ® ४*е  б Є«*ўЁ*вгал"); break;
        case 2: cprintf("‚лў®¤ ¤***ле нЄа**"); break;
        case 3: cprintf("ЋЎ¬Ґ* н«Ґ¬Ґ*в®ў"); break;
        case 4: cprintf("“¤*«пҐ¬ Ї®б«Ґ¤*Ё© н«Ґ¬Ґ*в ў бЇЁбЄҐ"); break;
      case 5: cprintf("‡*ўҐаиҐ*ЁҐ а*Ў®вл"); break;
        };
 
        if (code == 13) switch (menuc){
        case 1: add_new_element(); break;
        case 2: print_list() ; break;
        case 3:
 
     textbackground(0); textcolor(15);
     clrscr();
 
    int p1, p2;
 
            printf("‚ўҐ¤ЁвҐ Ї®§ЁжЁо н«Ґ¬Ґ*в®ў.\n");
 
            printf("ЏҐаўл©: ");
            scanf("%d", &p1);
 
            printf("‚в®а®©: ");
            scanf("%d", &p2);
 
            swap_position(p1, p2);
 
      textbackground(1);
        clrscr();
        textbackground(7);
        gotoxy(1, 25); clreol();
        gotoxy(1, 25); clreol();
 
 
      break;
 
        case 4:
 
      remove_back(); break;
      case 5: code = -1; break;
 
      };
 
        if (code == -1) break;
 
    } while (1);
 
    return 0;
}
0
Вложения
Тип файла: zip kyrsovik_s.zip (191.7 Кб, 20 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru