Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование в среде Visual C++ 6. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
  10.5
 
GetSeconds Считывает количество секунд
GetTotalYours () Считывает суммарное количество часов
GetTotalMinutes () Считывает суммарное количество минут
GetTotalSecomds () Считывает суммарное количество секунд
10.4. Символьные строки
Исходный язык  вообще непредусматривает програм- мирование работы стекстовыми массивами. Правда, в этом языке введён тип переменных char, где элементы этого типа представляет собой код определённого символа. Вэтом слу­чае одномерный массив этого типа можно считать строкой символов, есть даже константы под названием  . Но действия с такими символьными строками как с объектами практически не выполняются. Можно такой объект вывести наэкран монитора или записать вкакой-ли­бо файл или извлечь его оттуда. Пожалуй, это все возможные действия. Остальные операции можно производить только над отдельными символами. Поэтому бытует мнение, что ограниченность работы состроками символов является не­достатком языка  посравнению сPASCAL иBASIC.
При дальнейшем развитии вязыке ++ был введён тип пе­ременной String. Каждому объекту этого типа отводится 256 байт памяти, где можно разместить до255 символов (послед­ний символ в строке должен быть ‘\0’, который компилятор ставит автоматически). Это удобнее, чем было ранее, ноново­го практически ничего недобавило, хотя появилась возмож­ность создания класса этого типа иввести некоторые опера­ции. Нодля этого программист должен ещё постараться.
— 101 —
В среду Visual C++ уже внедрён новый класс CString, кото-
рый посвоим возможностям неуступает ранее упомянутым языкам PASCAL и BASIC. Втаблице 10.6 приведены опера- ции— функции этого класса. Формирование объекта класса CString выполняется стандартным способом, например:
CString str=”Это текстовая строка”; где str— объект класса (любой доступный идентификатор). Чтобы вызвать любую функцию, нужно сослаться наобъ-
ект класса, например:
str.MakeLower (); Все символы встроке str окажутся только строчными.
Кроме того, некоторые арифметические операции пере­гружены навыполнение их состроками. Так, при выполне­нии операции:
CString str= “Привет” +str1;
объект str будет представлять строку, где к символьной константе “Привет” добавятся справа символы объекта str1. Оператор:
str.Compare (str1);
сравнит два объекта str иstr1 посимвольно. Этуже опера­цию совершит иоператор:
if (str==str1)
 10.6
  CString
 
Compare () Сравнивает две строки сучётом регистра символов
CompareNoCase () Сравнивает две строки без учёта регистра символов
Empty () Очищает строку
Find () Находит подстроку
Format () Преобразует данные других типов встроку
— 102 —
  10.6
 
GetAt () Считывает символ данной позиции встроке
GetBuer () Возвращает указатель насодержание строки
GetLength () Определяет количество символов встроке IsEmpty () Возвращает True, если встроке нет символов
Le () Возвращает левый отуказателя сегмент
MakeLower () Преобразует все символы встрочные
MakeEwverse () Меняет порядок символов наобратный
MakeUpper () Преобразует все символы напрописные
Mid () Возвращает фрагмент между двумя позициями
Rigth () Возвращает правый отуказателя сегмент
SetAt () Устанавливает символ взаданную позицию
TrimLe () Удаляет пробелы между символами
TrimRRigth () Удаляет хвостовые пробелы изстроки
Как видно, оператор сравнения == тоже перегружен сучё-
том действия над символьными строками.
Если будут необходимы другие функции над символьны­ми строками, нужно создать новый класс, родительским ко­торого является класс CString, итуда добавить новые члены­функции, которые разработать придётся уже самим.
— 103 —

Первый опыт создания приложения в среде программи-
рования Visual C++6 исведения о различных методах про- граммирования тех или иных составляющих программного продукта позволит читателю уже самостоятельно составлять свои программы для решения своих задач. При возникнове­нии затруднений всегда можно обратиться крассмотренной выше задаче ивоспользоваться уже предложенными спосо­бами решения проблем. Естественно, нужно начинать про­граммировать сболее простых задач, набирая определённый опыт программирования. Однако полученных сведений уже достаточно для программирования более сложных задач, не­жели представленная вэтой публикации.
Однако со временем может появиться желание разноо­бразить интерфейс Вашей задачи. Здесь придётся обратиться уже непосредственно кисточнику [3]. Так, в10 главе описа­ны возможности использования таких интерфейсных эле­ментов, как линейный индикатор, линейный регулятор, ин­крементный регулятор, изображения расширенных списков изображения, втом числе идерево, дата, календарь идругие, широко используемые всистеме Windows.
Дальнейшим развитием Visual C++ является появление систем автоматического программирования Visual Studio
2008, Visual Studio 2010 [4] идр. Нопрограммные продукты Microso начинают отступать отранее применяемого прин-
ципа, что программные продукты, составленные вболее ран-
— 104 —
них версиях, будут работать всредах более поздних. Вновых выше упомянутых продуктах серьёзным способом изменил­ся интерфейс ивнутреннее формирование файловых систем. Изменения коснулись ибиблиотеки функций. Так что эти си­стемы придётся осваивать заново, но приобретённый опыт программирования всреде Visual C++ 6 позволит достаточно легко освоить иновые среды автоматического программиро­вания.
— 105 —

Листинги элементов исходной программы Diur
 1
-  CDiurDoc
public:
double a1, a2, x0, xk, y0;
int n, nm;
 2
-  CDialogEdit
 3
-  CDiurView
protected:
double a1, a2, x0, xk, y0, xy [2] [40], h, xn, yn, fn, k1, k2, k3, k4, dxx, dyy;
int n, i, xx, yy;
char s [40];
— 106 —
 4
 PreCreateWindow  CMainFrame
BOOL CMainFrame:: PreCreateWindow (CREATESTRUCT&
cs)
{ if (! CFrameWnd:: PreCreateWindow (cs)) return FALSE; // TODO: Modify the Window class or styles here by
modifying
// the CREATESTRUCT cs cs.cx=1000; cs.cy=800; cs.x=00; cs.y=00; return TRUE; }
 5
 OnNewDocument  CDiurDoc
BOOL CDiurDoc:: OnNewDocument () { if (! CDocument:: OnNewDocument ()) return FALSE; a1=a2=y0=xk=1.0; x0=0.0; n=10; nm=1; // TODO: add reinitialization code here // (SDI documents will reuse this document) return TRUE; }
— 107 —
 6
 OnDialog1  CDiurDoc
void CDiurDoc:: OnDialog1 ()
{
// TODO: Add your command handler code here
CDialogEdit dig;
nm=1;
while (dig.DoModal () ==IDOK)
{
switch (dig.m_com)
{
case 0:
a1=atof (dig.m_A1);
break;
case 1:
a2=atof (dig.m_A2);
break;
case 2:
x0=atof (dig.m_X0);
break;
case 3:
xk=atof (dig.m_XK);
break;
case 4:
y0=atof (dig.m_Y0);
break;
case 5:
n=atoi (dig.m_N);
}
UpdateAllViews (NULL);
}
— 108 —
 7
 OnPusk  CDiurDoc
void CDiurDoc:: OnPusk () { // TODO: Add your command handler code here nm=0; UpdateAllViews (NULL); }
 8
    CDiurDoc
#include “stdafx.h” #include “Diur.h” #include “DiurDoc.h” #include “DialogEdit.h”
 9
 OnDraw  CDiurView
void CDiurView:: OnDraw (CDC*pDC) { CDiurDoc* pDoc = GetDocument (); ASSERT_VALID (pDoc); pDC->TextOut (50,20,»Интегрирование дифференци-
ального уравнения методом Рунге-Кутта»);
CPen pen (PS_SOLID,3, RGB (0,0,0)); CPen* oldPen=pDC->SelectObject (&pen); pDC->MoveTo (50,45); pDC->LineTo (540,45); pDC->SelectObject (oldPen); pDC->TextOut (50,60,”y’=a1*y*y*exp (x) +a2*y”); a1=pDoc->a1;
— 109 —
a2=pDoc->a2;
x0=pDoc->x0;
xk=pDoc->xk;
y0=pDoc->y0;
n=pDoc->n;
sprintf (s,”a1=%4.2f,”, a1);
pDC->TextOut (50,80, s);
sprintf (s,”a2=%4.2f,”, a2);
pDC->TextOut (120,80, s);
sprintf (s,”%4.2f <=x<=%4.2f,”, x0, xk);
pDC->TextOut (50,100, s);
sprintf (s,”y0=%4.2f,”, y0);
pDC->TextOut (180,100, s);
sprintf (s,”n=%d.”, n);
pDC->TextOut (250,100, s);
if (pDoc->nm==0)
{
for (i=0; i<45; i++)
xy [0] [i] =xy [1] [i] =0.0;
pDC->MoveTo (900,5);
pDC->LineTo (900,450);
pDC->MoveTo (800,45);
pDC->LineTo (990,45);
pDC->TextOut (850,20,”x”);
pDC->TextOut (930,20,”y”);
xy [0] [0] =x0;
xy [1] [0] =y0;
h= (xk-x0) /n;
for (i=0; i<n; i++)
{
xn=xy [0] [i];
— 110 —
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]