Настройка компонент 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<n;i++) a[i] = new double[n];        // Захват памяти под элементы

   b = new double[n];      

// Заполнение массивов А и В элементами из таблиц StringGrid1 и StringGrid2

     for(i=0; i<n;i++) {

                   for(j=0; j<n;j++) a[i][j]=StrToFloat(StringGrid1->Cells[j+1][i+1]);

                        b[i]=StrToFloat(StringGrid2->Cells[0][i+1]);

     }

// Умножение строки матрицы А на вектор В и вывод результата s в StringGrid3

     for(i=0; i<n;i++){

                        for(s=0, j=0; j<n;j++) s += a[i][j]*b[j];

                        StringGrid3->Cells[0][i+1] = FloatToStrF(s, ffFixed,8,2);

     }

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

delete []a;       

delete []b;

   ShowMessage("Память освобождена!");

Close();

}

Пример создания консольного приложения

Текст программы может иметь следующий вид:

                                            . . .

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<n;i++)

              a[i] = new double[n];                  // Захват памяти под элементы     

b = new double[n];                      

     puts("\n Input Massiv A:");

for(i=0; i<n;i++)

      for(j=0; j<n;j++) scanf("%lf", &a[i][j]);

puts("\n Input Massiv B:");

for( i=0; i<n;i++)  scanf("%lf", &b[i]);

puts("\n Massiv Y:");

for(i=0; i<n;i++){

     for(s=0, j=0; j<n;j++) s+=a[i][j]*b[j];

   printf(" %8.2lf ", s);

}

delete []a;       

delete []b;

puts("\n Delete !");

puts("\n Press any key ... ");

getch();

}

         

При вводе значений элементов массивов в одной строке через пробелы должен получиться следующий результат:


6.3. Индивидуальные задания

     Написать программу по обработке динамических массивов. Размеры массивов вводить с клавиатуры. При создании оконного приложения скалярный (простой) результат выводить в виде компоненты Label, а массивы вводить и выводить с помощью компонент StringGrid, в которых 0-й столбец и 0-ю строку использовать для отображения индексов массивов.

     1. Из матрицы размером N´M получить вектор B, присвоив его k-му элементу значение 0, если все элементы k-го столбца матрицы нулевые, иначе 1.

     2. Из матрицы размером N´M получить вектор B, присвоив его k-му элементу значение 1, если элементы k-й строки матрицы упорядочены по убыванию, иначе 0.

     3. Из матрицы размером N´M получить вектор B, присвоив его k-му элементу значение 1, если k-я строка матрицы симметрична, иначе значение 0.

     4. Задана матрица размером N´M. Определить количество «особых» элементов матрицы, считая элемент «особым», если он больше суммы остальных элементов своего столбца.

     5. Задана матрица размером N´M. Определить количество элементов матрицы, у которых слева находится элемент больше его, а справа – меньше.

     6. Задана матрица размером N´M. Определить количество различных значений матрицы, т.е. повторяющиеся элементы считать один раз.

     7. В матрице размером N´M упорядочить строки по возрастанию их первых элементов.

     8. В матрице размером N´M упорядочить строки по возрастанию суммы их элементов.

     9. В матрице размером N´M упорядочить строки по возрастанию их наибольших элементов.

     10. Определить, является ли квадратная матрица симметричной относительно побочной диагонали.

     11. Задана матрица размером N´M. Определить количество элементов матрицы, у которых слева находится элемент меньше его, а справа – больше.

     12. В квадратной матрице найти произведение элементов, лежащих выше побочной диагонали.

     13. В квадратной матрице найти максимальный среди элементов, лежащих ниже побочной диагонали.

     14. В матрице размером N´M поменять местами строку, содержащую элемент с наибольшим значением со строкой, содержащей элемент с наименьшим значением.

     15. Из матрицы размером n получить матрицу размером n-1 путем удаления строки и столбца, на пересечении которых расположен элемент с наибольшим по модулю значением.

     16. В матрице размером n найти сумму элементов, лежащих ниже главной диагонали, и произведение элементов, лежащих выше главной диагонали.




Дата: 2018-11-18, просмотров: 281.