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


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

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

Содержание
Введение
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 мильонов к студенческой карме :

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

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