методичка. метода по ООП для практики. Лабораторная работа 1. Линейный вычислительный процесс 2 Общие теоретические сведения 2 Создание оконного приложения 6
Скачать 1.1 Mb.
|
6.2. Пример выполнения заданияРассчитать значения вектора , где А – квадратная матрица размером NN, а Y и B – одномерные массивы размером N. Элементы вектора Y определяются по формуле . 6.2.1. Пример создания оконного приложенияЗначение N вводить из Edit, А и B – из компонент StringGrid. Результат вывести в компоненту StringGrid. Панель диалога и результаты выполнения программы приведена на рис. 6.1. Рис. 6.1 Настройка компонент StringGridДля компоненты StringGrid1 значения ColCount и RowCount установите равными, например, 3 – три столбца и три строки, а FixedCols и FixedRows – 1. Так как компоненты StringGrid2 и StringGrid3 имеют только один столбец, то у них ColCount = 1, RowCount = 3, а FixedCols = 0 и FixedRows = 1. В свойстве Options строку goEditing для компонент StringGrid1 и StringGrid2 установите в положение true. Для изменения размера n используется функция-обработчик EditChange, полученная двойным щелчком по компоненте Edit. Текст программы может иметь следующий вид: . . . //---------------------- Глобальные переменные ------------------- int n = 3; double **a, *b; // Декларации указателей //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Edit1->Text=IntToStr(n); StringGrid1->ColCount = n+1; StringGrid1->RowCount = n+1; StringGrid2->RowCount = n+1; StringGrid3->RowCount = n+1; // Ввод в левую верхнюю ячейку таблицы названия массивов StringGrid1->Cells[0][0] = "Матрица A"; StringGrid2->Cells[0][0] = "Массив B"; StringGrid3->Cells[0][0] = "Массив Y"; for(int i=1; i<=n;i++){ StringGrid1->Cells[0][i]="i="+IntToStr(i); StringGrid1->Cells[i][0]="j="+IntToStr(i); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1Change(TObject *Sender) { int i; n=StrToInt(Edit1->Text); StringGrid1->ColCount = n+1; StringGrid1->RowCount = n+1; StringGrid2->RowCount = n+1; StringGrid3->RowCount = n+1; for(i=1; i<=n;i++){ StringGrid1->Cells[0][i]="i="+IntToStr(i); StringGrid1->Cells[i][0]="j="+IntToStr(i); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { double s; int i,j; a = new double*[n]; // Захват памяти под указатели for(i=0; i b = new double[n]; // Заполнение массивов А и В элементами из таблиц StringGrid1 и StringGrid2 for(i=0; i for(j=0; j b[i]=StrToFloat(StringGrid2->Cells[0][i+1]); } // Умножение строки матрицы А на вектор В и вывод результата s в StringGrid3 for(i=0; i for(s=0, j=0; j StringGrid3->Cells[0][i+1] = FloatToStrF(s, ffFixed,8,2); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { delete []a; delete []b; ShowMessage("Память освобождена!"); Close(); } 4.3.2. Пример создания консольного приложенияТекст программы может иметь следующий вид: . . . void main() { double **a, *b, s; int i, j, n; printf(" Input size N : "); scanf("%d",&n); a = new double*[n]; // Захват памяти под указатели for(i=0; i a[i] = new double[n]; // Захват памяти под элементы b = new double[n]; puts("\n Input Massiv A:"); for(i=0; i for(j=0; j puts("\n Input Massiv B:"); for( i=0; i puts("\n Massiv Y:"); for(i=0; i for(s=0, j=0; j printf(" %8.2lf ", s); } delete []a; delete []b; puts("\n Delete !"); puts("\n Press any key ... "); getch(); } При вводе значений элементов массивов в одной строке через пробелы должен получиться следующий результат: |