Главная страница
Навигация по странице:

  • Options

  • Button1Click

  • Button2Click

  • методичка. метода по ООП для практики. Лабораторная работа 1. Линейный вычислительный процесс 2 Общие теоретические сведения 2 Создание оконного приложения 6


    Скачать 1.1 Mb.
    НазваниеЛабораторная работа 1. Линейный вычислительный процесс 2 Общие теоретические сведения 2 Создание оконного приложения 6
    Анкорметодичка
    Дата11.01.2022
    Размер1.1 Mb.
    Формат файлаdoc
    Имя файламетода по ООП для практики.doc
    ТипЛабораторная работа
    #328342
    страница12 из 19
    1   ...   8   9   10   11   12   13   14   15   ...   19

    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; jCells[j+1][i+1]);

    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();

    }

    При вводе значений элементов массивов в одной строке через пробелы должен получиться следующий результат:
    1   ...   8   9   10   11   12   13   14   15   ...   19


    написать администратору сайта