48765 (572218), страница 2
Текст из файла (страница 2)
– Poisk elementa po polyu «Koli4estvo»;
– Raspe4atka podspiskov;
– Korrektirovka zna4eniya polya «Koli4estvo» nekotorogo elementa.
// Обираємо дію 2 Add:
0 Exit 1 About 2 Add 2
K = 10
Vvedite Naimenovanie izdeliya: Keyboard
Vvedite datu izgotovleniya: 26 12 2003
Vvedite koli4estvo izdeliy: 6
// Обираємо дію 4 Count K:
0 Exit 1 About 2 Add 3 Count
4 Count K 5 Print 6 Print K 7 Search K :4
Spisok sostoit iz 1 strok
// Обираємо дію 2 Add:
0 Exit 1 About 2 Add 3 Count
4 Count K 5 Print 6 Print K 7 Search K :2
Vvedite Naimenovanie izdeliya: Mouse
Vvedite datu izgotovleniya: 01 01 2001
Vvedite koli4estvo izdeliy: 3
// Обираємо дію 4 Count K:
0 Exit 1 About 2 Add 3 Count
4 Count K 5 Print 6 Print K 7 Search K :4
Spisok sostoit iz 2 strok
// Обираємо дію 6 Print K:
0 Exit 1 About 2 Add 3 Count
4 Count K 5 Print 6 Print K 7 Search K :6
–
| | Naimenovanie izdeliya | Data izgotovleniya | Koli4estvo |
–
| 1| Keyboard| 26.12.2003 | 6|
–
| 2| Mouse| 1. 1.2001 | 3|
–
// Обираємо дію 5 Print:
0 Exit 1 About 2 Add 3 Count
4 Count K 5 Print 6 Print K 7 Search K :5
–
| | Naimenovanie izdeliya | Data izgotovleniya | Koli4estvo |
–
| 1| Keyboard| 26.12.2003 | 6|
–
| 2| Mouse| 1. 1.2001 | 3|
–
// Обираємо дію 2 Add:
0 Exit 1 About 2 Add 3 Count
4 Count K 5 Print 6 Print K 7 Search K :2
Vvedite Naimenovanie izdeliya: Lamp
Vvedite datu izgotovleniya: 31 12 2006
Vvedite koli4estvo izdeliy: 33
// Обираємо дію 5 Print:
0 Exit 1 About 2 Add 3 Count
4 Count K 5 Print 6 Print K 7 Search K :5
–
| | Naimenovanie izdeliya | Data izgotovleniya | Koli4estvo |
–
| 1| Keyboard| 26.12.2003 | 6|
–
| 2| Mouse| 1. 1.2001 | 3|
–
| 3| Lamp| 31.12.2006 | 33|
–
// Обираємо дію 6 Print K:
0 Exit 1 About 2 Add 3 Count
4 Count K 5 Print 6 Print K 7 Search K :6
–
| | Naimenovanie izdeliya | Data izgotovleniya | Koli4estvo |
–
| 1| Keyboard| 26.12.2003 | 6|
–
| 2| Mouse| 1. 1.2001 | 3|
–
// Обираємо дію 7 Search K:
0 Exit 1 About 2 Add 3 Count
4 Count K 5 Print 6 Print K 7 Search K :7
Vvedite K: 33
–
| | Naimenovanie izdeliya | Data izgotovleniya | Koli4estvo |
–
| 3| Lamp| 31.12.2006 | 33|
–
// Обираємо дію 3 Count:
0 Exit 1 About 2 Add 3 Count
4 Count K 5 Print 6 Print K 7 Search K :3
Spisok sostoit iz 3 strok
// Обираємо дію 4 Count K:
0 Exit 1 About 2 Add 3 Count
4 Count K 5 Print 6 Print K 7 Search K :4
Spisok sostoit iz 2 strok
// Обираємо дію 0 Exit:
0 Exit 1 About 2 Add 3 Count
4 Count K 5 Print 6 Print K 7 Search K :0
// Виконується вихід з програми.
ВИСНОВКИ
Отже, можна сказати, що покажчики дають нам можливість працювати з динамічними даними. Укупі з структурами досягається найбільш зручний метод організації зберігання, обробки даних, що знаходяться у динамічній пам’яті.
В даній курсовій роботі був реалізований один із видів абстрактних типів даних – двохзв’язний список.
В процесі реалізації було використано розподіл необхідних дій на функції, що значно спростило модифікацію в налагодженні програми. Також розроблені алгоритми для обробки двохзв’язного списку, виконуючи такі операції: додавання елементів до підсписків, друк підсписків та кількість елементів в них, корегування поля елемента, пошук елементів по полю.
Розглянуто головні властивості динамічних структур даних, область їх використання, а також приведені приклади їх вживання.
Література
-
Шилдт Г. «Справочник программиста по С/С++»: Пер. с англ.: Видавництво «Вильямс», 2001.
-
А. Хортон «Visual C++ 2005. Базовый курс» Москва, Санкт-Петербург 2007.
-
А.П. Сергеев, А.Н. Терен «Программирование в Microsoft Visual C++ 2005» Москва, Санкт-Петербург 2006.
Додаток
Код програми
#include
#include
#include
#include
#include
using namespace std;
////////////////////////////////////////////////////////////////////////////////
// глобальные переменные
const char dd=3; // отвечает за 3 числа даты
const char width=79; // ширина экрана
////////////////////////////////////////////////////////////////////////////////
// описание структуры
struct S_Spisok {
char SName[40];
int SDate[dd];
int SCount;
S_Spisok *Next;
S_Spisok *Next_K;
};
////////////////////////////////////////////////////////////////////////////////
// глобальные переменные
S_Spisok *First = NULL;
S_Spisok *Lost = NULL;
S_Spisok *First_K = NULL;
S_Spisok *Lost_K = NULL;
////////////////////////////////////////////////////////////////////////////////
// 1 About
void About(void) {
cout<<»\n KURSOVAYA RABOTA PO DISCIPLINE PROGRAMMIPOVANIE\n Variant #15»
<<»\n Realizovat' dvusvyazniy snisok dlya hraneniya i operaciy s dannimi vida»
<<»\n –»
<< "| Naimenovanie izdeliya | Data izgotovleniya | Koli4estvo |»
<<» –»
<<» V perviy odnosvyazniy podspisok vhodyat vse zapisi.»
<<» Vo vtoroy – tol'ko te, gde pole \ «Koli4estvo\» < K\n»
<<» Obespe4it' vipolnenie operaciy:»
<<»\n – Dobavlenie novogo elementa v spiskok;»
<<»\n – Poisk elementa po polyu \ «Koli4estvo\»;»
<<»\n – Raspe4atka podspiskov;»
<<»\n – Korrektirovka zna4eniya polya \ «Koli4estvo\» nekotorogo elementa.\n\n»;
};
////////////////////////////////////////////////////////////////////////////////
// 2 Add (функция добавления нового элемента)
bool Add (char *Name, int *D, int &Count, int &K)
{
S_Spisok *Temp = new S_Spisok;
strcpy_s (Temp->SName, Name);
for (int c=0; cSDate[c] = D[c];
Temp->SCount = Count;
Temp->Next = NULL;
Temp->Next_K = NULL;
if(Lost)
{
Lost->Next = Temp;
Lost = Temp;
}
else
{
First = Temp;
Lost = Temp;
};
if (Count < K)
{
if (Lost_K)
{
Lost_K->Next_K = Temp;
Lost_K = Temp;
}
else
{
First_K = Temp;
Lost_K = Temp;
};
};
return 1;
};
////////////////////////////////////////////////////////////////////////////////
// 3 Count (определение размера списка)
int Count (S_Spisok *Temp)
{
int k=0;
while(Temp)
{
k++;
Temp = Temp->Next;
};
return k;
};
////////////////////////////////////////////////////////////////////////////////
// 4 Count_K (определение размера списка К)
int Count_K (S_Spisok *Temp)
{
int k=0;
while(Temp)
{
k++;
Temp = Temp->Next_K;
};
return k;
};
////////////////////////////////////////////////////////////////////////////////
// 5 Print (вывод на экран данных)
// –
void Line0 (void) {
for (int c=0; c cout<<»\n| | Naimenovanie izdeliya | Data izgotovleniya | Koli4estvo |\n»; for (int c=0; c }; // – // – void Line (S_Spisok *Temp, int &k) { cout<<»\n| "< cout<<» «< < < cout< for (int c=0; c }; // – void Print(void) { S_Spisok *Temp = First; int k=0; if(Temp) Line0 (); while(Temp) { k++; Line (Temp, k); Temp = Temp->Next; }; cout<<»\n»; }; // – void Print_K(void) { S_Spisok *Temp = First_K; int k=0; if(Temp) Line0 (); while(Temp) { k++; Line (Temp, k); Temp = Temp->Next_K; }; cout<<»\n»; }; //////////////////////////////////////////////////////////////////////////////// // 7 Search (поиск элемента с полем, равным К) void Search_K (int k) { S_Spisok *Temp = First; bool b=0; int c=1; while(Temp) { if (Temp->SCount == k) { if (b==0) { Line0 (); b=1; }; Line (Temp, c); }; Temp = Temp->Next; c++; }; if (b==0) cout<<»\n Zna4eniy, udovletvoryayuwih usloviyu, ne suwestvuet.»; }; //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // основное тело проги int main (void) { char Name[40]; // масив для хранения наименования продукта int a, // храним тут выбранную команду меню D[dd], // масив для хранени даты k, // храним вводимое количество продукта K=0; // инициализация числа К do { cout<<»\n 0 Exit «<<«1 About «<< «2 Add»; if(First) cout<< «3 Count \n» <<» 4 Count K» <<«5 Print «<<«6 Print K «<< «7 Search K :»; cin>>a; switch(a) { case 0: break; case 1: About(); break; case 2: if(! First) { cout<<»\n K =»; cin>>K; }; cout<<»\n Vvedite Naimenovanie izdeliya:»; cin>>Name; cout<<» Vvedite datu izgotovleniya:»; for (int c=0; c>D[c]; cout<<» Vvedite koli4estvo izdeliy:»; cin>>k; Add (Name, D, k, K); break; case 3: cout<<»\n Spisok sostoit iz «< break; case 4: cout<<»\n Spisok sostoit iz «< break; case 5: Print(); break; case 6: Print_K(); break; case 7: cout<<»\n Vvedite K:»; cin>>k; Search_K(k); break; default: cout<<» Neponyatnen'ko, povtorite vvod.»; break; }; } while (a!=0); return 0;};















