Вход

Вариант 2

Рекомендуемая категория для самостоятельной подготовки:
Курсовая работа*
Код 147073
Дата создания 2009
Страниц 17
Источников 3
Мы сможем обработать ваш заказ (!) 13 мая в 12:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
1 690руб.
КУПИТЬ

Содержание

Введение
1.Постановка задачи
2.Описание программной модели
3.Результаты тестирования программы
Заключение
Литература

Фрагмент работы для ознакомления

clear();
for(i = startNamesIdx; i < finishNamesIdx; i++)
{
for(j = 0; j < m_centralTableOfNames.size(); j++)
{
if(strcmp(m_localNameTable[i].m_name.c_str(), m_centralTableOfNames[j].m_identName.c_str()) == NULL)
break;
}
if(j == m_centralTableOfNames.size())
return 0;
if(m_centralTableOfNames[j].m_flag == 1)
{
centralTableOfNamesPrev.push_back(m_centralTableOfNames[j]);
}
m_centralTableOfNames[j].m_flag = 1;
m_centralTableOfNames[j].m_procName = procName;

for(j = 0; j < pseudVec1.size(); j++)
{
if(strcmp(pseudVec1[j].c_str(), m_localNameTable[i].m_name.c_str()) == NULL)
{
pseudVec1.erase(pseudVec1.begin() + j);
pseudVec2.erase(pseudVec2.begin() + j);
j--;
}
}
}
// print local names table
RunProcedureDynamicOutput(procName, &pseudVec1, &pseudVec2);
m_returnAddressStack.push_back(m_IP + 1);

m_IP = m_blocNameTable[blockNameID].m_rangeInCodeTable.m_firstID;
const char *command = m_codeTable[m_IP].c_str();
while(strcmp(command, "return") != NULL && strcmp(command, "stop") != NULL)
{
string procName1;
IdentefierVector paramsVec1;
TranclateCommand(command, &procName1, &paramsVec1);
//check on using of undescribed name
if(paramsVec1.size() > 0)
{
for(i = 0; i < paramsVec1.size(); i++)
{
for(j = startNamesIdx; j < finishNamesIdx; j++)
{
if(strcmp(paramsVec1[i].c_str(), m_localNameTable[j].m_name.c_str()) == 0)
break;
}
if(j == finishNamesIdx)
{
printf("Using of undefined parameter %s in program %s\nProcessing is terminated\n", paramsVec1[i].c_str(), procName);
fprintf(m_pRunResFile, "Èñïîëüçîâàíèå íåèçâåñòíîãî ïàðàìåòðà %s â ïðîãðàììå %s\n", paramsVec1[i].c_str(), procName);
return -2;
}
}
}
int res = RunProcedureDynamic(procName1.c_str(), &paramsVec1);
if(res < 0)
return res;
RunProcedureDynamicOutput(procName, &pseudVec1, &pseudVec2);
command = m_codeTable[m_IP].c_str();
}
if(strcmp(command, "stop") != NULL)
{
m_IP = m_returnAddressStack.back();
m_returnAddressStack.pop_back();
}
// restore central names table
for(i = startNamesIdx; i < finishNamesIdx; i++)
{
for(j = 0; j < m_centralTableOfNames.size(); j++)
{
if(strcmp(m_localNameTable[i].m_name.c_str(), m_centralTableOfNames[j].m_identName.c_str()) == NULL)
break;
}
if(j == m_centralTableOfNames.size())
return 0;
m_centralTableOfNames[j].m_flag = 0;
m_centralTableOfNames[j].m_procName = "";
}
for(i = 0; i < centralTableOfNamesPrev.size(); i++)
{
for(j = 0; j < m_centralTableOfNames.size(); j++)
{
if(strcmp(centralTableOfNamesPrev[i].m_identName.c_str(), m_centralTableOfNames[j].m_identName.c_str()) == NULL)
break;
}
if(j == m_centralTableOfNames.size())
return 0;
m_centralTableOfNames[j].m_flag = 1;
m_centralTableOfNames[j].m_procName = centralTableOfNamesPrev[i].m_procName;
}
return 1;
}
void Modelling::RunProgaram()
{
if(!m_pFile || !m_pCompResFile || !m_pRunResFile)
return;
for(int i = 0; i < m_blocNameTable.size(); i++)
{
if(strcmp(m_blocNameTable[i].m_name.c_str(), m_progName) == NULL)
break;
}
if(i == m_blocNameTable.size())
{
return;
}
m_IP = m_blocNameTable[i].m_rangeInCodeTable.m_firstID;
IdentefierVector paramsVec;
if(m_scopeType == 1)
{
RunProcedureStatic(m_progName, &paramsVec);
}
else if(m_scopeType == 2)
{
RunProcedureDynamic(m_progName, &paramsVec);
}
}
void Modelling::RunProcedureStaticOutput(const char* procName,
const std::vector<std::string>* pseudVec1,
const std::vector<std::string>* pseudVec2)
{
int i;
// print display
fprintf(m_pRunResFile, "Âûïîëíåíèå áëîêà %s\n\n", procName);
for(i = 0; i < m_display.size(); i++)
{
fprintf(m_pRunResFile, "Ññûëêà íà äàííûå áëîêà %s\n", m_display[i].m_procName.c_str());
}
// print pseudonyms
fprintf(m_pRunResFile, "\nÑïèñîê ïñåâäîíèìîâ\n");
if(pseudVec1->size() == 0)
fprintf(m_pRunResFile, "-\n");
for(i = 0; i < pseudVec1->size(); i++)
{
fprintf(m_pRunResFile, "%s, %s\n", (*pseudVec1)[i].c_str(), (*pseudVec2)[i].c_str());
}
fprintf(m_pRunResFile, "\n\n");
}
int Modelling::RunProcedureStatic(const char* procName, const std::vector<std::string>* paramsVec)
{
int blockNameID;
for(blockNameID = 0; blockNameID < m_blocNameTable.size(); blockNameID++)
{
if(strcmp(m_blocNameTable[blockNameID].m_name.c_str(), procName) == NULL)
break;
}
if(blockNameID == m_blocNameTable.size())
{
printf("Using of undefined program name %s\nProcessing is terminated\n", procName);
fprintf(m_pRunResFile, "Îáíàðóæåíî èñïîëüçîâàíèå íåèçâåñòíîé ïðîãðàììû %s\n", procName);
return -2;
}
int startNamesIdx = m_blocNameTable[blockNameID].m_rangeInLocalNames.m_firstID;
int finishNamesIdx = startNamesIdx + m_blocNameTable[blockNameID].m_rangeInLocalNames.m_numRows;
int i, j;
// build pseudonyms vectors
IdentefierVector pseudVec1;
IdentefierVector pseudVec2;
for(i = finishNamesIdx - 1, j = 0; i >= startNamesIdx && j < paramsVec->size(); i--)
{
if(m_localNameTable[i].m_identType == itParamV)
{
pseudVec1.push_back((*paramsVec)[j]);
pseudVec2.push_back(m_localNameTable[i].m_name);
j++;
}
if(m_localNameTable[i].m_identType == itParam)
{
j++;
}
}
// search procName in SC
for(i = m_display.size() - 1; i >= 0; i--)
{
for(j = m_display[i].m_RefSC.m_firstID; j < m_display[i].m_RefSC.m_firstID + m_display[i].m_RefSC.m_numRows; j++)
{
if(strcmp(m_staticChain[j].m_identName.c_str(), procName) == NULL)
{
break;
}
}
if(j != m_display[i].m_RefSC.m_firstID + m_display[i].m_RefSC.m_numRows)
{
break;
}
}
if(strcmp(procName, m_progName) != NULL)
{
if(i == -1)
{
printf("Using of unknown program name %s\nProcessing is terminated\n", procName);
fprintf(m_pRunResFile, "Îáíàðóæåíî èñïîëüçîâàíèå íåèçâåñòíîé ïðîãðàììû %s\n", procName);
return -2;
}
else if(m_staticChain[j].m_identType != itProc)
{
printf("%s is not procedure name\nProcessing is terminated\n", procName);
fprintf(m_pRunResFile, "%s íå ÿâëÿåòñÿ èìåíåì ïðîãðàììû\n", procName);
return -2;
}
}
// update display
std::vector<DisplayRec> displayPrev;
displayPrev.clear();
if(i > -1)
{
displayPrev.assign(m_display.begin() + i + 1, m_display.end());
m_display.resize(i + 1);
}
DisplayRec addedDispRec;
addedDispRec.m_RefSC.m_firstID = m_staticChain.size();
addedDispRec.m_RefSC.m_numRows = finishNamesIdx - startNamesIdx;
addedDispRec.m_procName = procName;
m_display.push_back(addedDispRec);

StaticChainRec addedSCRec;
for(i = startNamesIdx; i < finishNamesIdx; i++)
{
addedSCRec.m_identName = m_localNameTable[i].m_name;
addedSCRec.m_identType = m_localNameTable[i].m_identType;
m_staticChain.push_back(addedSCRec);

// remove false pseudonyms
for(j = 0; j < pseudVec1.size(); j++)
{
if(strcmp(pseudVec1[j].c_str(), m_localNameTable[i].m_name.c_str()) == NULL)
{
pseudVec1.erase(pseudVec1.begin() + j);
pseudVec2.erase(pseudVec2.begin() + j);
j--;
}
}
}
// print local names table
RunProcedureStaticOutput(procName, &pseudVec1, &pseudVec2);
m_returnAddressStack.push_back(m_IP + 1);

m_IP = m_blocNameTable[blockNameID].m_rangeInCodeTable.m_firstID;
const char *command = m_codeTable[m_IP].c_str();
while(strcmp(command, "return") != NULL && strcmp(command, "stop") != NULL)
{
string procName1;
IdentefierVector paramsVec1;
TranclateCommand(command, &procName1, &paramsVec1);
//check on using of undescribed name
if(paramsVec1.size() > 0)
{
int k;
for(i = 0; i < paramsVec1.size(); i++)
{
for(j = 0; j < m_display.size(); j++)
{
for(k = m_display[j].m_RefSC.m_firstID; k < m_display[j].m_RefSC.m_firstID + m_display[j].m_RefSC.m_numRows; k++)
{
if(strcmp(paramsVec1[i].c_str(), m_staticChain[k].m_identName.c_str()) == 0)
break;
}
if(k != m_display[j].m_RefSC.m_firstID + m_display[j].m_RefSC.m_numRows)
{
break;
}
}
if(j == m_display.size())
{
printf("Using of undefined parameter %s in program %s\nProcessing is terminated\n", paramsVec1[i].c_str(), procName);
fprintf(m_pRunResFile, "Èñïîëüçîâàíèå íåèçâåñòíîãî ïàðàìåòðà %s â ïðîãðàììå %s\n", paramsVec1[i].c_str(), procName);
return -2;
}
}
}
RunProcedureStatic(procName1.c_str(), &paramsVec1);
RunProcedureStaticOutput(procName, &pseudVec1, &pseudVec2);
command = m_codeTable[m_IP].c_str();
}
if(strcmp(command, "stop") != NULL)
{
m_IP = m_returnAddressStack.back();
m_returnAddressStack.pop_back();
}
// restore display
m_staticChain.resize(m_display.back().m_RefSC.m_firstID);
m_display.pop_back();
for(i = 0; i < displayPrev.size(); i++)
{
m_display.push_back(displayPrev[i]);
}
return 1;
}

Список литературы [ всего 3]

1.Пратт Т. Языки программирования: разработка и реализация. - М.: Мир. 1979. -580с.
2.Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие. - М.: «Нолидж», 1997. - 616с.
3.Б. Страуструп. Язык программирования С++. – М.: «Бином», 2001, 1114с.
Очень похожие работы
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.00457
© Рефератбанк, 2002 - 2024