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

класс "Предметный указатель" - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Одномерный массив http://www.cyberforum.ru/cpp-beginners/thread36711.html
Помогите,пожайлуста,решить эту задачу! В одномерном массиве,состоящем из n вещественных элементов,вычислить: 1)максимальный по модулю элемент массива. 2)сумму элементов массива,расположенных между первым и вторым положительными элементами. Преобразовать массив таким образом,чтобы элементы,равные нулю,располагались после всех остальных.
C++ Исключение из стркои символов последовательности, заключенной в кавычки Помогите написать программу, которая исключает из строки, которую вводит пользователь, последовательность символов, заключенную в кавычки. Программа на С. http://www.cyberforum.ru/cpp-beginners/thread36707.html
C++ Немогу разобраться в строчке кода!
Программисты помогите понять эту строку кода while(b) b^=a^=b^=a%=b; Что делает этот while? а и б обычные целые числа.
Получить номера строк матрицы, элементы каждой из которых образуют упорядоченную последовательность Java SE
Размерность и элементы матрицы ввести с клавиатуры. Получите номера строк, элементы каждой из которых образуют убывающую или возрастающую последовательность. Помогите плиз. for (int i = 0; i < n; i++) { for (int j = 0; j < m - 1; j++) { if (Matrix < Matrix) { if (i == (n - 1))
C++ Распечатать введённую строку, заменив строчные буквы прописными и повторив дважды каждую цифру http://www.cyberforum.ru/cpp-beginners/thread36677.html
Вот такое вот задание! Помогите кто нибудь плииииз!!!
C++ Как вытащить элемент из массива не используя цикл и выбор? Вот собственно код: const int size = 30; char name; char last_name; char grade = {'A', 'B', 'C', 'D', 'F'}; int age; подробнее

Показать сообщение отдельно
Mc_crazy
Сообщений: n/a

класс "Предметный указатель" - C++

27.05.2009, 15:38. Просмотров 704. Ответов 0
Метки (Все метки)

у Нас есть класс "Предметный указатель" ..
реализованный в 3 файлах..
всё работает.. нужно сделать так, чтобы появился раздел PRIVATE ( и в нём были какие то элементы) выручайте..

если что пишите в icq: 331-532-593 (очень нужна помощь)

Заголовочный файл:
struct termin
{ char info [20]; //термин
char page [20]; //страница где он присутствует в файле
};
struct element //элемент списка, где хранятся
{ termin info; //термины
element *next;
};

class deck //задание класса
{
public:
element *left;
//конструктор и деструктор
deck();
~deck();
//Функции класса без ФОП
void print();
//Функции класса с ФОП
void add (char term [20],char index [20]);
void find(char term [20]);

};


Файл реализации:


#include "File2.h"
#include <string.h>
#include <iostream.h>
string rus(char s[ ])
// перевод кодировки Windows в Dos
{
string t;
int i=0;
t=s;
while (t[i]!=0)
{
if(t[i]>='А'&& t[i]<='п' )
t[i]-=64;
if(t[i]>='р'&& t[i]<='я' )
t[i]-=16;
i++;
}
return t;
}
//конструтор и деструктор
deck::deck()
{
left=0; //началу списка присваивание конца (0)
}
deck::~deck()
{
}

void deck::add (char term [20],char index [20]) //функция добавления элемента в список
{ element *p; //указатель на новый элемент списка
element *q; //указатель для перехода по списку
element *t; //указатель для перехода по списку
int sorted,changed; //переменные для сортировки
termin buff; //временный буфер для сортировки
p=new element; //выделение памяти под новый элемент списка
q=left; //для перехода по списку присваиваем переменной q начало списка
strcpy (p->info.info,""); //очистка переменной инфо
strcpy(p->info.info,term); //копирование в инфо того, что ввели в функцию
strcpy (p->info.page,""); //очистка переменной страницы
strcpy(p->info.page,index); //копирование в страницу того, что ввели в функцию
if (left==0) //если это первый элемент в нашем списке
{
left = p;
p->next=0;
return;
}
else //если этот элемент не первый
{ while (q!=0)
{
t=q;
q=q->next;
}
t->next=p;
p->next=0;
}

q=left;
t=left;
sorted=0;

while (q!=0) //сортировка
{ do
{
changed = 0;
t=q;
do
{
if ((t->next!=0)&&((strcmp(t->info.info,t->next->info.info)>0)||((strcmp(t->info.info,t->next->info.info)==0)&&(strcmp(t->info.page,t->next->info.page)>0))))
/*условие того что надо сортировать: если не конец списка, если два термина разные, если термины одинаковые, но страницы разные*/
{
buff=t->info;
t->info=t->next->info;
t->next->info=buff;
changed=1;
}
t=t->next;
}
while (t!=0);
} while (sorted!=changed);
q=q->next;
}

}
//---------------------------------------------------------------------------
void deck:rint() //функция вывода на экран
{ element *p=left;element *q=left;
char buff [20];
if (left==0) //проверка на наличие элементов в списке
cout<<rus("Список пуст")<<endl;
else
{cout<< rus("Предметный указатель:")<<endl; //вывод на экран
while (q!=0) //переход по списку
{if (strcmp(buff,q->info.info)!=0) //если имена терминов разные, то
{
strcpy(buff,"");
strcpy(buff,q->info.info);
cout<<q->info.info<<" ";
p=q;
while (p!=0)
{
if ((strcmp(buff,p->info.info)==0)&&(strcmp(p->info.page,"0")!=0)) //проверка на нулевую страницу
cout<<p->info.page<<" ";
p=p->next;
}
cout<<endl;
}
q=q->next;
}
}
}
//---------------------------------------------------------------------------
void deck::find(char term [20]) //функция поиска
{
int f=0; //переменная - флаг
element *p=left;
if (left==0) //проверка на пустоту списка
cout<<rus("Список пуст")<<endl;
else
{
cout<< rus("Ваш элемент: ");
cout<<term<<" ";
while (p!=0) //вывод элемента
{
if ((strcmp(term,p->info.info)==0)&&(strcmp(p->info.page,"0")!=0))
{
cout<<p->info.page<<" ";
f=1; //если нашлась хотя бы одна ненулевая страница то флаг =1
}
p=p->next;
}
if (f==0) cout<<rus("не имеет страниц"); //флаг = 0 таких страниц не нашлось
cout<<endl;
}
}


и Файл меню:

//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream.h>
#include <string.h>
#include <fstream.h>
#include <conio.h>

string rus(char s[ ])
// перевод кодировки Windows в Dos
{
string t;
int i=0;
t=s;
while (t[i]!=0)
{
if(t[i]>='А'&& t[i]<='п' )
t[i]-=64;
if(t[i]>='р'&& t[i]<='я' )
t[i]-=16;
i++;
}
return t;
}

struct termin
{ char info [20]; //термин
char page [20]; //страница где он присутствует в файле
};

struct element //структура типа элемент списка, где хранятся
{ termin info; //термины
element *next;
};

string rus(char s[ ]); //функция перекодировки
int menu( ); //функция меню

void create(element *&left) //создание списка
{ left=0; //началу списка присваивание конца (0)
}

void add (char term [20],char index [20], element *&left) //функция добавления элемента в список
{ element *p; //указатель на новый элемент списка
element *q; //указатель для перехода по списку
element *t; //указатель для перехода по списку
int sorted,changed; //переменные для сортировки
termi //временный буфер для сортировки
p=new element; //выделение памяти под новый элемент списка
q=left; //для перехода по списку присваиваем переменной q начало списка
strcpy (p->info.info,""); //очистка поля инфо
strcpy(p->info.info,term); //копирование в поле инфо того, что ввели в функцию
strcpy (p->info.page,""); //очистка переменной страницы
strcpy(p->info.page,index); //копирование в страницу того, что ввели в функцию
if (left==0) //если это первый элемент в нашем списке
{
left = p;
p->next=0;
return;
}
else //если этот элемент не первый
{ while (q!=0)
{
t=q;
q=q->next;
}
t->next=p;
p->next=0;
}

q=left;
t=left;
sorted=0;

while (q!=0) //сортировка
{ do
{
changed = 0;
t=q;
do
{
if ((t->next!=0)&&((strcmp(t->info.info,t->next->info.info)>0)||((strcmp(t->info.info,t->next->info.info)==0)&&(strcmp(t->info.page,t->next->info.page)>0))))
/*условие того что надо сортировать: если не конец списка, если два термина разные, если термины одинаковые, но страницы разные*/
{
buff=t->info;
t->info=t->next->info;
t->next->info=buff;
changed=1;
}
t=t->next;
}
while (t!=0);
} while (sorted!=changed);
q=q->next;
}


}

void print(element *left) //вывод на экран
{ element *p=left;element *q=left;
char buff [20];
if (left==0) //проверка на наличие элементов в списке
cout<<rus("Список пуст")<<endl;
else
{cout<< rus("Предметный указатель:")<<endl; //вывод на экран
while (q!=0) //переход по списку
{if (strcmp(buff,q->info.info)!=0) //если имена терминов разные, то
{
strcpy(buff,"");
strcpy(buff,q->info.info);
cout<<q->info.info<<" ";
p=q;
while (p!=0)
{
if ((strcmp(buff,p->info.info)==0)&&(strcmp(p->info.page,"0")!=0)) //проверка на нулевую страницу
cout<<p->info.page<<" ";
p=p->next;
}
cout<<endl;
}
q=q->next;
}
}
}

void find(char term [20],element *&left) //функция поиска
{ int f=0; //переменная - флаг(указатель)
element *p=left;
if (left==0) //проверка на пустоту списка
cout<<rus("Список пуст")<<endl;
else
{ cout<< rus("Ваш элемент: ");

cout<<term<<" ";
while (p!=0) //вывод элемента
{
if ((strcmp(term,p->info.info)==0)&&(strcmp(p->info.page,"0")!=0))
{
cout<<p->info.page<<" ";
f=1; //если нашлась хотя бы одна ненулевая страница то флаг =1
}
p=p->next;
}
if (f==0) cout<<rus("не имеет страниц"); //флаг = 0 таких страниц не нашлось
cout<<endl;
}
}

int menu( )
{ int p;
cout<<endl;
cout<<rus("Меню")<<endl;
cout<< rus("1. Добавление термина в предметный указатель")<<endl;
cout<< rus("2. Добавление элемента в предметный указатель")<<endl;
cout<< rus("3. Обновление информации об элементе указателя")<<endl;
cout<< rus("4. Вывод элементов указателя в алфавитном порядке")<<endl;
cout<< rus("5. Поиск элемента указателя по термину")<<endl;
cout<< rus("6. Выход из программы")<<endl;
cout<<endl;
cout<<rus("Укажите пункт меню: ");
cin>>p;
return p; }

void main()
{ element* left; //Первый элемент списка
element *t; //Текущий элемент
element *q; //Текущий элемент
char buff [20];
int i,p,x,f,page;
char g [20];
char n [20];
ifstream ftext("text.txt"); //файл ввода текста для построения предметного указателя
ifstream fin ("vxod.txt"); //файл ввода терминов
ofstream fout("vixod.txt"); //файл для вывода окончательного предметного указателя
create(left);
cout<<rus("Выберите метод ввода:")<<endl;
cout<<rus("1.Получение информации из файла")<<endl;
cout<<rus("2.Ручной ввод")<<endl;
cin>>p;
//ввод терминов из файла
if (p==1)
{
while (!fin.eof())
{strcpy(g,"");
fin>>g;
if (strcmp(g,"\0")!=0) //условие наличия символа конца файла
add(g,"0",left);
}
fin.close();
}
//ввод с клавиатуры
else
{ cout<<rus("Ручной ввод. Для окончания ввода введите слово end")<<endl;
do
{ cout<<rus("Введите имя нового термина : ");
cin>>n;
if (strcmp(n,"end")!=0) add(n,"0",left);
}
while (strcmp(n,"end")!=0); //для оконцания ввода требуется ввести слово end
}
//формирование увазателя из файла с текстом
page=5; //количество слов на странице, требуется для определения размера страницы. можно задать любое целое положительное число
i=0;
while (!ftext.eof())
{ strcpy(g,"");
ftext>>g;
i=i+1;
f=0;
t=left;
{ while (t!=0)
{
if (strcmp(t->info.info,g)==0)
{sprintf(n,"%d",(i/page)+1); //функция превращающая число в строку (%d) возвращает число
add(g,n,left);
f=1;
}
if (f==1)
break;
t=t->next;
}
}
}

do
{
p=menu();
x=0;
switch(p)
{
case 1:
{
cout<<rus("Введите имя нового термина : ");
cin>>g;
add(g,"0",left);
}
break;

case 2:
{ cout<<rus("Введите термин : ");
cin>>g;
cout<<rus("Введите номер страницы: ");
cin>>n;
add(g,n,left);
}
break;

case 3:
{ cout<<rus("Введите имя термина : ");
cin>>g;
cout<<rus("Введите номер страницы: ");
cin>>n;
add(g,n,left);
}
break;

case 4:
{
print (left);
}
break;

case 5:
{ cout<<rus("Введите термин : ");
cin>>g;
find (g,left);
}
break;
case 6:
{
t=left;q=left;
if (left==0) //проверка на наличие элементов в списке
cout<<rus("Список пуст")<<endl;
else
{
while (q!=0) //переход по списку
{if (strcmp(buff,q->info.info)!=0) //если имена терминов разные, то
{
strcpy(buff,"");
strcpy(buff,q->info.info);
fout<<q->info.info<<" ";
t=q;
while (t!=0)
{
if ((strcmp(buff,t->info.info)==0)&&(strcmp(t->info.page,"0")!=0)) //проверка на нулевую страницу
fout<<t->info.page<<" ";
t=t->next;
}
cout<<endl;
}
q=q->next;
}
}
exit(0);
}
break;
}
getch();
clrscr();
}
while (true); //условие бесконечности цикла для вывода меню
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru