Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабор_работа №8 файлы.doc
Скачиваний:
7
Добавлен:
21.04.2015
Размер:
981.5 Кб
Скачать

2.4. Методы преобразования типов данных.

Преобразование данных из строкового в числовой тип может быть осуществлено с помощью одной из функций, описание которых содержится в библиотеке stdlib.h:

double atof( const char *string );

int atoi( const char *string );

Параметр этих функций string – это символьная строка, содержащая число в виде массива символов, а возвращаемое значение – число в формате double или int для функций atof() и atoi() соответственно.

Пример использования методов преобразования данных из строчного типа данных в числовой.

char s[] = "-2309.12"; // символьная строка, содержащая число

double x; // переменная вещественного типа

x = atof( s ); // преобразуем строку в вещественное число

Для конвертирования данных из числовых типов в текстовую строку возможно применять метод Format()классаCString, параметры которого идентичны параметрам функции вывода данныхprintf().

Пример использования методов преобразования данных из числового типа данных в строчный.

int k =123;

CString str;

str.Format("%i", k);

3. Пример выполнения лабораторной работы.

Задание:разработать программу, которая:

  • записывает в файл символьные строки;

  • считывает их из файла и выводит в элемент управления EditBoxпострочно.

1)В среде Microsoft Developer Studio (Visual C++)создаем проект на основе диалога. Для этого в пункте менюFile->Newвыбираем подпунктProjects(рис. 1).

Рисунок 1 – Пункт меню File->New

Далее выбираем тип приложения на основе диалога (рис. 2) и нажимаем на кнопку «Finish».

Рисунок 2 – Выбор типа нового проекта

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

а) б)

Рисунок 3 – Созданные ресурсы (а) и файлы (б) проекта

  1. После генерации всех файлов вам будет показана заготовка будущей программы (рис. 4) . Рядом будет отображена панель инструмента для создания интерфейса пользователя с программой. необходимо разместить необходимые элементы управления в окне приложения, при необходимости удалив уже имеющиеся по умолчанию кнопки и текстовый элемент.

3)Размещаем в окне приложения элемент управленияEditBoxдля вывода данных из файла и кнопку для вызова создаваемой функции для работы с файлами. Модифицируем надписи на кнопках в пункте «Properties», вызываемом нажатием правой кнопки мыши на поле элемента управления. Удаляем лишние элементы управления. Полученный в результате интерфейс пользователя представлен на рис. 5.

Рисунок 4 – Заготовка создаваемого приложения и

панель инструментов с элементами управления «Controls»

Рисунок 5 – Интерфейс пользователя

4)Для возможности вывода в элементEditBoxмногострочного текста и добавления полосы вертикальной прокрутки изменяем стили этого элемента управления, кликнув провой кнопкой мыши по полюEditBoxи выбрав пункт“Properties”(рис. 6).

Рисунок 6 – Стили элемента EditBox

5)Создаем заголовки функции для работы с файлами, вызываемой по нажатию на кнопку «Жми!», расположенную в окне создаваемого приложения. Для этого вызываем мастерClassWizard, выбрав соответствующий пункт меню при нажатии правой кнопкой мыши по полю окна приложения. Во вкладке Message Maps находим уникальный идентификатор кнопки диалога приложения и дважды нажимаем левой клавишей мыши по сообщениюBN_CLICKED, которое отвечает за одинарное нажатие на кнопку диалога с идентификатором IDC_BUTTON1 (рисунок 7). В появившемся новом окне будет показано имя функции, которая будет выполняться при нажатии на эту кнопку диалога, согласитесь с предложенным именем, нажав кнопку ОК, или измените его на другое.

Рисунок 7 – Объявление функции, вызываемой

по нажатию на кнопку в окне приложения

6)Для создания переменной для элемента управленияEditBox, перейдите во вторую вкладку «MemberVariables» мастераClassWizard. Кликните дважды по уникальному идентификатору элемента управленияEditBoxи укажите имя создаваемой переменной и ее тип в появившемся диалоге (рис. 8, 9).

Рисунок 8 – Добавление переменной

Рисунок 9 – Результат добавления переменной

7)Для редактирования программного кода функции, вызываемой по нажатию на кнопку, кликнем дважды по изображению кнопки в окне создаваемого приложения или в первой вкладке окна мастера Class Wizard необходимо дважды нажать левой клавишей мыши на название функции в нижней части окна, в данном случае OnButton1 (рис. 7).

Перед вами появится текст файла с заголовком функции следующего вида:

void CLara3Dlg::OnButton1()

{

// TODO: Add your control notification handler code here = добавьте здесь свой код

}

Согласно заданию добавляем программный код в тело функции, вызываемой по нажатию кнопки работы с файлами. Эта функция расположена в файле с именем «имя_проектаDlg.cpp», т.е. в данном примере в файле с именем «lara3Dlg.cpp» (рис. 10).

void CLara3Dlg::OnButton1()

{

CString Text = "string1\nstring2\nstring3";

CFileDialog DlgSaveAs(FALSE,(LPCSTR)"txt",NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,(LPCSTR)" Text Files (*.txt) |*.txt||");

// отображение стандартной панели выбора файла SaveAs

if(DlgSaveAs.DoModal()==IDOK)

{

CStdioFile File1(DlgSaveAs.GetPathName(),CFile::modeCreate|CFile::modeWrite);

// создание объекта и открытие файла для записи

File1.WriteString(Text);// запись в файл строки

File1.Close();

}

CFileDialog DlgOpen(TRUE,(LPCSTR)"txt",NULL,OFN_HIDEREADONLY,(LPCSTR)" Text Files (*.txt) |*.txt||");

if(DlgOpen.DoModal()==IDOK)

{

// создание объекта и открытие файла для записи

CStdioFile File2(DlgOpen.GetPathName(),CFile::modeRead);

if (File2!=NULL)

{CString s;

while(File2.ReadString(s)) //считывание строки из файла

{m_str+=s; // добавление считанной строки к содержимому переменной, связанной с элементомEditBox

m_str+=CString("\r\n"); // добавление перехода на новую строку

}

m_str+=CString("\r\n");// добавление перехода на новую строку после вывода всего содержимого файла

File2.Close();

UpdateData(0);// обновление данных в элементахEditBox

}

}

}

Рисунок 10 – Программный код функции, вызываемой при нажатии на кнопку работы с файлами

8)Работа программы.

После запуска программы пользователь нажимает на кнопку «Жми!» и в новом окне, отображаемом с помощью объекта класса CFileDialog, выбирает файл для записи данных в файл, далее пользователю будет предложено выбрать файл для считывания данных из файла (рис. 11).

Рисунок 11 – Диалог открытия файла

Результаты, выводимые программой в элемент управления EditBox, при однократном и многократном выполнении программного кода функции, вызываемой при нажатии на кнопку «Жми!», приведены на рисунках 12 и 13 соответственно. Если выводимый текст по высоте превышает размер элемента управленияEditBox, то будет активизирован элемент вертикальной прокруткиscrollbar(рис. 13).

Рисунок 12 – Результат работы программы после однократного вызова функции работы с файлами

Рисунок 13 – Результат работы программы после многократного вызова функции работы с файлами

  1. Задание.

  • Считать из файлаnчисел, гдеnзадает пользователь в элементе управленияEditBox, расположенном в окне разрабатываемой программы. Если количество элементов массива в файле меньше, чемn, то необходимо вывести сообщение с помощью функцииAfxMessageBox(), о том, что будут обработаны все элементы файла, и отобразить их количество.

  • Осуществить вывод элементовсчитанного массива в элемент управленияEditBox, в свойствах которого необходимо задать отображение элементаscrollbar(полосы прокрутки) по вертикали и возможность вывода многострочного текста.

  • Осуществить обработку данных из считанного массива согласно полученному варианту задания. Записать полученный результат в новый файл.

  • Для открытия и сохранения файла нужно использовать объект класса CFileDialog, а для чтения и записи данных в файл – объекты классаCFileилиCStdioFile.

  • Если исходный массив чисел создан в текстовом файле, например, в текстовом редакторе «Блокнот», после считывания данных потребуется использовать методы преобразования символьных строк в числовой тип с помощью функций библиотеки stdlib.h. Для удобства первой записью в файле с массивом чисел может быть расположено число, обозначающее количество чисел в массиве в этом файле. Следовательно в файле будет записано на одно число больше, чем размерность массива.

  1. Варианты заданий.

  1. Определить, упорядочен ли числовой массив по возрастанию.

  2. Найти максимальный элемент массива среди четных элементов.

  3. Найти нечетные элементы, значения которых кратны 7.

  4. Найти сумму элементов массива, значения которых принадлежат диапазону[50,100].

  5. Найти среднее арифметическое отрицательных элементов массива.

  6. Найти количество четных элементов массива.

  7. Определить, упорядочен ли числовой массив по убыванию.

  8. Найти нечетные элементы массива, расположенные на позициях с нечетными индексами.