Реферат по предмету "Информатика, программирование"


Удаление комментариев из текста программ

Удаление комментариев из текста программ

Содержание
Введение
1. Постановка задачи
2. Основные особенности среды Visual C++
2.1 Описание алгоритма
2.2 Описание программы
3. Инструкции пользователя
Заключение
Литература
Приложение

Введение
Эволюция языков программирования с момента появления первых электронныхкомпьютеров, построенных для выполнения расчётов траектории движения артиллерийскихснарядов во время второй мировой войны, была довольно драматической. Раньшепрограммисты работали с самыми примитивными компьютерными командами,представлявшими собой часть машинного языка. Эти команды состояли из длинныхстрок единиц и нулей. Вскоре были изобретены ассемблеры, которые моглиотображать машинные команды в мнемоническом представлении, более понятном длячеловека (например, команды ADDили MOV).
Со временем появились такие языки высокого уровня, как BASIC и COBOL. Благодаря этим языкам появилась возможностьпрограммировать, используя логические конструкции из слов и предложений,например integer I = 100. Эти команды переводились в машинный язык то естькомпилировались. Одно из основных преимуществкомпилируемых языков программирования, состоит в том, что полученные программымогут выполняться на компьютерах без компиляции. При работе же синтерпретируемыми языками для выполнения готовой программы нужно обязательноиметь соответствующую программу-интерпретатор.
Следующей шагом в программировании стало появление визуальных средпрограммирования таких, как Visual C++, позволяющих использовать визуальныекомпоненты, не описывая их самому, а брать их из библиотеки стандартныхэлементов. Это позволяет ускорить написание программ, облегчая тем самымработу программиста. А также позволяет использовать все возможностипрограммирования под Windows,используя при этом относительно не сложные алгоритмы и функции. В связи с вышеизложенным нами было выбрана для разработки проекта среда Visual C++ 6.0

1. Постановка задачи
В данном курсовом проекте необходимо разработать программу сиспользованием функций библиотеки MFC:
–   Удалениекомментариев из текстов программ;
–   Автоматическийвыбор языка, на котором написана программа;
–   Сохранениерезультата в файл.

2. Основные особенности среды Visual C++
Среда Visual C++ – это сложный механизм, обеспечивающий высокоэффективнуюработу программиста. Создание прикладных программ, или приложений выполняется винтегрированной среде разработки IDE (Integrated Development Environment). IDE служит для организации взаимодействия с программистоми включает ряд окон, содержащих различные управляющие элементы. С помощьюсредств интегрированной среды разработчик может проектировать интерфейснуючасть приложения, а также писать программный код и связывать его с управляющимиэлементами. При этом вся работа по созданию приложения, включая отладку,происходит в IDE.
Интегрированная среда разработки Visual C++ представляет собой многооконную систему. Видинтегрированной среды разработки (интерфейс) может различаться в зависимости отнастроек. Кроме стандартных окон, на экране могут присутствовать и другие окна,отображаемые при вызове соответствующих средств, например, Image Editor (Редактор изображений). Окна Visual C++ (но не главное) можно перемещать, убирать с экрана, атакже изменять их размеры. Одной изпоследних версий стал Microsoft Visual C++ 6.0. Visual C++ 6.0, вобрав в себя всё самое лучшее от предыдущих версий,предоставляет ряд новых возможностей. Так, например, стал более удобным исовременным интерфейс среды программирования, создаваемые Visual C++ программы учитывают архитектуру современных процессоров,существенно расширены возможности отладчика.
Visual C++ 6.0 можетработать в среде операционных систем от Windows 95 до Windows2000 и Windows XP. Особенных требований к компьютеру система не предъявляет,за исключением того, что процессор должен быть типа Pentium, оперативной памяти – не менее 32 Мбайт и достаточноеколичество свободной дисковой памяти (порядка 200 Мбайт).

2.1 Описание алгоритма
Согласно условию курсового проекта был разработан алгоритмудаления комментариев из текстов программ. Суть алгоритма заключается в том,что при нажатии кнопки «Удалитькомментарии» происходит открытие файла, указанного в верхнем текстовомокне, определение языка, на котором написана программа, удаление из негокомментариев и запись в файл, указанный в нижнем текстовом окне.
Удаление комментариев возможно из текстов программ, написанных наследующих языках: C и С++, Pascal, Basic и Assembler.
2.2 Описание программы
Данное приложение состоит из трех классов: CKursApp, CKursDlg и CSelectLangDlg. Все основные функции содержатся вовтором классе, т.к. именно он отвечает за поведение диалогового окна. Работапрограммы основана на двух функциях: RemoveOneLineComments и RemoveMultiLineComments. Реализация второй является довольно простой. В неепередаются три параметра: исходный текст, символ открывающего комментария исимвол закрывающего комментария. В тексте осуществляется поиск открывающихкомментариев и парных им закрывающих, содержимое между ними удаляется.
Удаление однострочных комментариев более сложное из-за того, что вотдельных языках, например в Бейсике, строки могут переноситься и однострочныйкомментарий становится подобным многострочному. В функцию передаются четырепараметра: исходный текст, символ комментария, параметр, определяющий наличиепереносов и сам символ переноса. Работа функции заключается в следующем.Исходный текст разбивается на строки, которые заносятся в массив. Затемпроизводится поиск символа комментария. Если он найден, проверяется, есть ли вданной строке перенос. Строка или ее часть после комментария удаляется. Приналичии переноса удаляется также и следующая строка.
Определение языка производится по расширению. Если расширение неизвестно,у пользователя запрашивается тип файла. Затем производится удалениекомментариев и в случае успешного завершения выдается сообщение.
Результаты сохраняются в указанном файле.

3. Инструкция пользователя
Запуск программы осуществляется при открытии файла kurs.exe, который находится на дискете. При этом на экранепоявиться окно, в левой верхней части которого будет видна надпись «Удалениекомментариев из текста программы » – это имя программы. Для работынеобходимо указать исходный и конечный файлы, введя их пути в текстовые окнаили выбрав их в диалоге выбора. Если файл имеет неизвестное программе расширение,необходимо дополнительно выбрать язык в диалоге, который автоматическипоявляется после выбора файла. Затем необходимо нажать кнопку «Удалитькомментарии». Если текст программы не содержит некорректно расставленныхкомментариев, выдается сообщение об успешном выполнении операции.
Системные требования: Pentium100, 16 MB RAM, Windows95/98/2000 NT/XP.

Заключение
В ходе выполнения данного курсового проекта были разработана программа наязыке высокого программирования Visual C++. Также изученыграфические возможности данного языка.
Систематизированыи закреплены практические навыки использования ЭВМ, программного обеспечения,существующих средств обслуживания системных программистов, а такжетеоретические знания по основным разделам курса «Программирование».Основное внимание уделено изучению современных операционных систем, способовпроектирования приложений, объектно-ориентированному и системномупрограммированию.
При выполнении курсового проекта произведено знакомство с реферативнымижурналами и другими информационными источниками по объектно-ориентированному исистемному программированию с целью анализа состояния решаемой задачи.
Получены практические навыки работы в среде Visual C++ и в графической среде разработки.

Литература
1. Петзольд Ч. Программирование под Windows 95. В двухкнигах: BHV – Санкт — Петербург, 2007, silt.
2. Ричард С.Линкер, Том Арчер. Программированиедля Windows 7. Библия разработчика. «Диалектика » – Москва, 2009.-864 с.:ил.- Парал. тит. англ. Уч.пос.
3. Джесс Либерти. С++ за 21 день.«Вильямс» — Москва, 2000.-816 с.: ил. .- Парал.тит. англ.

Приложение
ФайлkursDlg.cpp
// kursDlg.cpp: implementation file
//
#include «stdafx.h»
#include «kurs.h»
#include «kursDlg.h»
#include «SelectLangDlg.h»
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
#define LANG_CPP 1
#define LANG_PASCAL 2
#define LANG_BASIC 3
#define LANG_ASM 4
/////////////////////////////////////////////////////////////////////////////
// CKursDlg dialog
CKursDlg::CKursDlg(CWnd* pParent/*=NULL*/)
: CDialog(CKursDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CKursDlg)
// NOTE: the ClassWizard will addmember initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does notrequire a subsequent DestroyIcon in Win32
m_hIcon =AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidCKursDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CKursDlg)
// NOTE: the ClassWizard will add DDXand DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CKursDlg, CDialog)
//{{AFX_MSG_MAP(CKursDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BTNSOURCE,OnBtnsource)
ON_BN_CLICKED(IDC_BTNMAKE, OnBtnmake)
ON_BN_CLICKED(IDC_BTNDEST, OnBtndest)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CKursDlg message handlers
BOOL CKursDlg::OnInitDialog()
{
CDialog::OnInitDialog();
/ Set the icon for this dialog. Theframework does this automatically
// when the application's main windowis not a dialog
SetIcon(m_hIcon, TRUE);// Set bigicon
SetIcon(m_hIcon, FALSE);// Set smallicon
m_lang = LANG_CPP;
m_name = "";
// TODO: Add extra initializationhere
return TRUE; // return TRUE unlessyou set the focus to a control
}
void CKursDlg::OnSysCommand(UINT nID,LPARAM lParam)
{
CDialog::OnSysCommand(nID, lParam);
}
// If you add a minimize button toyour dialog, you will need the code below
// to draw the icon. For MFCapplications using the document/view model,
// this is automatically done for youby the framework.
void CKursDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device contextfor painting
SendMessage(WM_ICONERASEBKGND,(WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon =GetSystemMetrics(SM_CXICON);
int cyIcon =GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() — cxIcon + 1) /2;
int y = (rect.Height() — cyIcon + 1)/ 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtainthe cursor to display while the user drags
// the minimized window.
HCURSOR CKursDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CKursDlg::OnBtnsource()
{
CFileDialog dlg(TRUE, NULL, NULL, 0,
«C++ and C files (*.cpp; *.c;*.h; *.hpp)|*.cpp;*.c;*.h;*.hpp|Pascal files (*.pas)|*.pas|Basic files(*.bas)|*.bas|Assembler files (*.asm)|*.asm|All files|*.*||», this);
CString lang;
CSelectLangDlg select;
if(dlg.DoModal() == IDOK)
{
m_name = dlg.GetPathName();
SetDlgItemText(IDC_SOURCE, m_name);
int point_pos =m_name.ReverseFind('.');
if(point_pos == -1)
{
if(select.DoModal())
m_lang = select.m_language + 1;
else
m_lang = LANG_CPP;
}
else
{
lang =m_name.Right(m_name.GetLength() — point_pos — 1);
if((lang == «c») || (lang== «cpp») || (lang == «h») || (lang == «hpp»))
m_lang = LANG_CPP;
else if(lang == «pas»)
m_lang = LANG_PASCAL;
else if(lang == «bas»)
m_lang = LANG_BASIC;
else if(lang == «asm»)
m_lang = LANG_ASM;
else
{
if(select.DoModal())
m_lang = select.m_language + 1;
else
m_lang = LANG_CPP;
}
}
point_pos = m_name.ReverseFind('\\');
m_dest = m_name.Left(point_pos);
m_dest += "\\output.";
m_dest += lang;
SetDlgItemText(IDC_DEST, m_dest);
}
}
void CKursDlg::OnBtnmake()
{
GetDlgItemText(IDC_SOURCE, m_name);
GetDlgItemText(IDC_DEST, m_dest);
CFile source(m_name, CFile::modeRead| CFile::shareDenyRead | CFile::shareDenyWrite | CFile::normal);
CString text;
char buffer;
UINT i;
for(i = 0; i
{
source.Read(&buffer, 1);
text += buffer;
}
text.GetBuffer(0)[source.GetLength()]= 0;
switch(m_lang)
{
case LANG_CPP:
{
RemoveOneLineComments(text,"//", FALSE, "");
if(RemoveMultiLineComments(text,"/*", "*/") == -1)
{
AfxMessageBox(«Неправильные многострочные коментарии», MB_ICONERROR);
return;
}
break;
}
case LANG_PASCAL:
{
RemoveOneLineComments(text,"//", FALSE, "");
if(RemoveMultiLineComments(text,"{", "}") == -1)
{
AfxMessageBox(«Неправильныемногострочные коментарии», MB_ICONERROR);
return;
}
break;
}
case LANG_BASIC:
{
RemoveOneLineComments(text,"'", TRUE, "_");
RemoveOneLineComments(text, «REM», TRUE, "_");
RemoveOneLineComments(text, «rem», TRUE, "_");
RemoveOneLineComments(text, «Rem», TRUE, "_");
break;
}
case LANG_ASM:
{
RemoveOneLineComments(text,";", FALSE, "");
break;
}
}
source.Close();
CFile dest(m_dest, CFile::modeCreate| CFile::modeReadWrite | CFile::normal);
dest.Write(text.GetBuffer(0),text.GetLength());
AfxMessageBox(«Комментарии удалены», MB_ICONINFORMATION);
}
intCKursDlg::RemoveOneLineComments(CString& text, CString comment, BOOLbHasLineWraps, CString wrap)
{
CArraylinelist;
CString line, full = text;
char *buffer = full.LockBuffer();
char *token = strtok(buffer,"\r\n");
while(token)
{
linelist.Add(CString(token));
token = strtok(NULL,"\r\n");
}
full.UnlockBuffer();
int i, find, count;
BOOL bWrap = FALSE;
for(i = 0; i
{
if(linelist[i].Find(comment, 0) == 0)
{
if(bHasLineWraps)
{
if(linelist[i].Find(wrap, 0) ==linelist[i].GetLength() — wrap.GetLength())
bWrap = TRUE;
}
linelist.RemoveAt(i);
i--;
continue;
}
else if((find =linelist[i].Find(comment, 0)) > 0)
{
if(bHasLineWraps)
{
if(linelist[i].Find(wrap, 0) ==linelist[i].GetLength() — wrap.GetLength())
bWrap = TRUE;
}
count = linelist[i].GetLength() — find;
linelist[i].Delete(find, count);
continue;
}
if(bHasLineWraps && bWrap)
{
if(linelist[i].Find(wrap, 0) ==linelist[i].GetLength() — wrap.GetLength())
bWrap = TRUE;
else
bWrap = FALSE;
linelist.RemoveAt(i);
i--;
}
}
text = "";
for(i = 0; i
{
text += linelist[i];
text += "\r\n";
}
linelist.RemoveAll();
return 0;
}
intCKursDlg::RemoveMultiLineComments(CString &text, CString opencomment,CString closecomment)
{
int open, close;
while((open = text.Find(opencomment,0)) != -1)
{
if((close = text.Find(closecomment,open)) != -1)
{
text.Delete(open, close — open +closecomment.GetLength());
}
else
return -1;
}
return 0;
}
void CKursDlg::OnBtndest()
{
CFileDialog dlg(FALSE, NULL, NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
«C++ and C files (*.cpp; *.c;*.h; *.hpp)|*.cpp;*.c;*.h;*.hpp|Pascal files (*.pas)|*.pas|Basic files(*.bas)|*.bas|Assembler files (*.asm)|*.asm|All files|*.*||», this);
if(dlg.DoModal() == IDOK)
{
m_dest = dlg.GetPathName();
SetDlgItemText(IDC_DEST, m_dest);
}
}
Файл SelectLangDlg;
// SelectLangDlg.cpp: implementationfile
//
#include «stdafx.h»
#include «kurs.h»
#include «SelectLangDlg.h»
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSelectLangDlg dialog
CSelectLangDlg::CSelectLangDlg(CWnd*pParent /*=NULL*/)
: CDialog(CSelectLangDlg::IDD,pParent)
{
//{{AFX_DATA_INIT(CSelectLangDlg)
m_language = 0;
//}}AFX_DATA_INIT
}
voidCSelectLangDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSelectLangDlg)
DDX_Radio(pDX, IDC_CPP, m_language);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSelectLangDlg,CDialog)
//{{AFX_MSG_MAP(CSelectLangDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSelectLangDlg message handlers
void CSelectLangDlg::OnOK()
{
UpdateData();
CDialog::OnOK();
}
BOOL CSelectLangDlg::OnInitDialog()
{
CDialog::OnInitDialog();
return TRUE; // return TRUE unlessyou set the focus to a control
 // EXCEPTION: OCX Property Pagesshould return FALSE
}


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Marketing To Tweens Essay Research Paper Marketing
Реферат Тесты по Металлургии
Реферат Гипотеза, логическое строение гипотезы
Реферат Національно-культурне відродження на західноукраїнських землях в кінці ХVІІІ на початку ХХ ст.
Реферат Macbeth And Supernatural Essay Research Paper Macbeths
Реферат Tell Tale Heart Critical Analysis Essay Research
Реферат Поняття зобов язання в римському цивільному праві і його види
Реферат Анализ деятельности ДООО "МашСтрой" и разработка предложений по улучшению его работы
Реферат John Paul Stevens Bio Essay Research Paper
Реферат Краткое содержание Двадцать тысяч лье под водой Жюль Верн
Реферат Корабельный устав ВМФ, Строевой устав ВС РФ, Дисциплинарный устав ВС РФ, Устав гарнизонной и караульной служб ВС РФ, Устав внутренней службы ВС РФ - полные электронные версии
Реферат Соблюдение мер личной и пожарной безопасноcти сотрудниками уголовно-исполнительной службы при выполнении
Реферат Искусство Китая и Японии
Реферат Elie Wiesel A Survivor Of The Holocaust
Реферат Выходные каскады в режиме "В"