- •Министерство образования и науки российской федерации
- •Основные операторы языка программирования
- •If (выражение) оператор1; else оператор2;
- •2. Определение и использование массивов
- •8. Рекомендуемая технология работы с проектом
- •9.1 Общие положения
- •9.2 Автоматический компонент tForm (форма)
- •9.4 Компонент tLabel
- •12. Преобразование типов
- •13. Организация ввода данных в приложениях Windows
- •13.1 Использование компонент с редактируемым полем
- •13.2 Использование специальных диалоговых окон
- •14. Примеры решения задач
- •14.1 Пример программирования итерационных задач
- •14.2 Пример решения задачи поиска в неупорядоченной последовательности
- •1)Вывод данных в файл
- •2) Ввод данных из файла
- •3) Обмен структурными объектами
- •14.6 Пример создания приложения в визуальной среде (калькулятор)
- •14.7 Пример создания приложения с размещением рисунков на форме
- •14.8 Пример создания приложения с основным и контекстным меню на форме
- •14.9 Создание многомодульного приложения. Вывод графических объектов
- •Визуальное программирование с использованием массивов
- •14.11 Визуальное программирование с использованием структур
- •4.1. Файл Unit1.H
- •4.2. Файл Unit1.Cpp
- •1) Определение элементов связанного списка
- •2) Удаление элемента х из списка
13.2 Использование специальных диалоговых окон
а) Вывод сообщений
Примеры:
1) ShowMessage(“Строка сообщения”);
2) ShowMessagePos(“Строка сообщения”,50,100);
В последнем примере заданы координаты х и у верхнего левого угла окна сообщения.
б) Ввод строки
AnsiStringInputBox(“Название окна”, “Название того, что вводится в поле редактирования”, “Начальное значение строки редактирования”);
Функция возвращает строку типа AnsiString, значение которой введено в поле редактирования.
Пример:
AnsiStringst=InputBox(“Ввод исходных параметров”, “Введите значениеa”,” ”);
14. Примеры решения задач
14.1 Пример программирования итерационных задач
Задача.Составить фрагмент программы вычисления выражения
Вывод итерационной формулы:
=
sk = sk-1
Обозначим sk (sk-1) черезs1. Тогда получим следующий фрагмент программы:
s = 1; k = 1;
do{ s1 = - s1 * pow(x,3) / ((3*k-2)*(3*k-1)*3*k);
s += s1; k++; }
while(s1 > 0.0001);
14.2 Пример решения задачи поиска в неупорядоченной последовательности
Задача.Дан массива,размерностьюn. Найти минимальный элемент и определить его индекс.
Фрагмент программы:
inta[10] = {6,9,10,3,2,1,0,5,7,8}; // определение массива и его инициализация
int min = a[0]; int imin, i;
for(i = 1; i<10; i++) if(a[i]<min) {min = a[i]; imin = i;}
cout << min << “ “ << imin;
Создание динамической матрицы
Фрагмент программы:
cin >> n;
inti, **p=newint*[n]; // создание динамического массива указателей
for(i=0;i<n;i++)p[i] =newint[n]; // инициализация массива указателей адресами
// динамических строк
/* Использование массива */
for(i=0;i<n;i++)delete[]p[i]; // удаление динамических строк
delete[]p; // удаление массива указателей
Программирование обмена с файлами в стиле Си
Примеры:
1)Вывод данных в файл
#include<ofstream.h>
voidmain(){
ofstreamfile(“Temp.txt”); // создание (открытие) файла с заданным именем и
// объекта-потока с именем file
charbuff[] = “Текстовый массив”;
int vx = 100; float pi = 3.14159;
file << buff << endl << vx << endl << pi << endl;
}
2) Ввод данных из файла
#include <ifstream.h>
void main(){
ifstreamfile(“Temp.txt”); // открытие файла с заданным именем и
// создание объекта-потока с именем file
char buff[100];
int vx; float pi;
file.getline(buff, sizeof(buff));
file >> vx >> pi;
}
3) Обмен структурными объектами
#include <stdio.h>
stud studAP11[10]; int pn=0;
FILE *fp1;
void cleare()
{ for(int i=0;i<pn;i++){
Form1->StringGrid1->Cells[0][i+1]=0;
Form1->StringGrid1->Cells[1][i+1]=" ";
Form1->StringGrid1->Cells[2][i+1]=0;
Form1->StringGrid1->Cells[3][i+1]=" ";
}
}
void __fastcall TForm1::SaveClick(TObject *Sender)
{ fp1=fopen("Fname.txt","w+");
fwrite(&studAP11,sizeof(stud),pn,fp1);
fclose(fp1);
}
void __fastcall TForm1::ReadClick(TObject *Sender)
{ fp1=fopen("Fname.txt","r");
fread(&studAP11,sizeof(stud),pn,fp1);
fclose(fp1);
cleare();
for(int i=0;i<pn;i++){
StringGrid1->Cells[1][i+1]=studAP11[i].Fam;
StringGrid1->Cells[2][i+1]=IntToStr(studAP11[i].GR);
StringGrid1->Cells[3][i+1]=studAP11[i].Sp; }
}
Операции с файлами с помощью компонентов
Работа с текстовыми файлами может осуществляться с помощью методов LoadFromFile и SaveToFile, имеющихся у классов Tstrings и TStringList. Эти классы описывают списки строк и обладают множеством методов, позволяющих манипулировать строками.
Если вы хотите в своем приложении прочитать содержимое некоторого текстового файла, обработать текст и сохранить его в файле, вы можете сделать это следующим образом. Объявите и создайте две глобальные переменные: список типа TStringList, в котором будет храниться текст файла, и строковую переменную типа AnsiString, в которой можете сформировать имя файла. Например:
TStringList *List = new TStringList;
AnsiString SFile = “Test.txt";
He забудьте только, что если требуемый файл расположен не в текущем каталоге и вам надо указать путь к файлу, то обратные слэши в записи пути должны быть сдвоенные. Например, если вам требуется файл "c:\MyTest\Test.txt", то вы должны записать его как "c:\\MyTest\\Test.txt".
В момент, когда вы хотите загрузить в свой список файл, надо выполнить оператор
List->LoadFromFile(SFile);
Впрочем, ограничиться таким оператором можно, если есть уверенность, что требуемый файл существует. В противном случае код надо несколько усложнить, чтобы можно было перехватить сгенерированное исключение. Например:
try{ List->LoadFromFile(SFile); }
catch(...){ShowMessage("Файл V" + SFile + "\" не найден"); }
Если файл нормально загрузился в список List, вы можете работать с его текстом. Текст расположен в свойстве списка Strings[int Index], в котором каждая строка имеет тип AnsiString. Индексы начинаются с нуля. Для нашего примера List—>Strings[O] — это первая строка, List—>Strings[l] — вторая и т.д.
Для списков типа TStringList предусмотрено множество методов. При обработке отдельных строк вы можете использовать операции и методы, предусмотренные для строк типа AnsiString.
Если вы хотите сохранить файл после проведенного редактирования, можно выполнить оператор
List->SaveToFile(SFile);
где SFile содержит прежнее или новое имя файла.
При открытии и сохранении файла вы можете воспользоваться стандартными диалогами Windows, вызываемыми через соответствующие компоненты С++Вuilder.
Если вы открываете файл для того, чтобы пользователь мог его просмотреть, что-то в нем отредактировать и сохранить, вы можете обойтись без описанного выше объекта типа TStringList. Для этих целей проще воспользоваться многострочными окнами редактирования типов ТМеmо или TRichEdit. В последнем случае вы можете работать не только с обычными текстовыми файлами, но и с файлами в обогащенном формате RTF. Свойства Lines этих компонентов имеют тип TStrings, что позволяет применять к ним непосредственно методы LoadFromFile и SaveToFile. Например:
Memol->Lines->LoadFromFile(SFile);
RichEditl->Lines->LoadFromFile(SFile);
Через компоненты C++Builder можно работать не только с текстовыми файлами, но и с файлами изображений и мультимедиа.