Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Письмак_ЗВІТ_з_практики.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.49 Mб
Скачать

4.5.3. Результати виконання програми

Рис.43. Вікно програми в роботі

4.6 Обробка двомірних динамічних масивів

4.6.1. Постановка задачі та алгоритм вирішення.

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

В матриці розміром N×M впорядкувати рядки за зростанням суми їх елементів.

4.6.2. Лістинг програми

#include <vcl.h>

#pragma hdrstop

#include "Unit6.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int n, m,i,j; //n, m - розміри масиву

double ** a,*b; // Декларації вказівників

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

void __fastcall TForm1::FormCreate(TObject *Sender)

{

n=StrToInt(Edit1->Text);

m=StrToInt(Edit2->Text);

StringGrid1->ColCount = n+1; StringGrid1->RowCount = m+1;

StringGrid2->ColCount = n+1; StringGrid2->RowCount = m+1;

StringGrid3->RowCount = m+1;

StringGrid1->Cells[0][0] = "Початкова ";

StringGrid2->Cells[0][0] = "Отримана";

StringGrid3->Cells[0][0] = "Масив суми елементів рядків";

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

StringGrid1->Cells[i][0]="j="+IntToStr(i);

StringGrid2->Cells[i][0]="j="+IntToStr(i);

}

for(j=1; j<=m;j++){

StringGrid1->Cells[0][j]="i="+IntToStr(j);

StringGrid2->Cells[0][j]="i="+IntToStr(j);

}

}

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

void __fastcall TForm1::Edit1Change(TObject *Sender)

{

n=StrToInt(Edit1->Text);

m=StrToInt(Edit2->Text);

StringGrid1->ColCount = n+1; StringGrid1->RowCount = m+1;

StringGrid2->ColCount = n+1; StringGrid2->RowCount = m+1;

StringGrid3->RowCount = m+1;

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

StringGrid1->Cells[i][0]="j="+IntToStr(i);

StringGrid2->Cells[i][0]="j="+IntToStr(i);

for(j=1; j<=m;j++){

StringGrid1->Cells[0][j]="i="+IntToStr(j);

StringGrid2->Cells[0][j]="i="+IntToStr(j);

StringGrid1->Cells[i][j]="";

StringGrid3->Cells[i][j]="";

}

}

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

double sum=0,p=0;

a = new double *[n];

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

a [i] = new double [m];

b = new double[m];

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

for(j=0; j<m;j++){

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

}

for(j=0; j<m; j++){

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

sum=sum+a[i][j];

}

b[j]=sum;

sum=0;

}

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

StringGrid3->Cells[0][i+1] = FloatToStr(b[i]);

for (int k=0;k<m;k++)

for (j=0;j<m-1;j++)

if(b[j]>b[j+1]){

p=b[j];

b[j]=b[j+1];

b[j+1]=p;

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

p=a[i][j];

a[i][j]=a[i][j+1];

a[i][j+1]=p;

}

}

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

for(j=0; j<m;j++)

{

StringGrid2->Cells[i+1][j+1] = FloatToStr(a[i][j]);

}

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

delete [] a[i];

delete [] a;

}

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{

delete []a;

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

Close();

}

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

void __fastcall TForm1::Button3Click(TObject *Sender)

{

a = new double * [n];

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

a [i] = new double [m];

randomize();

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

for(j=0; j<m;j++){

a[i][j]=random(20)-10;

}

}

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

for(j=0; j<m;j++){

StringGrid1->Cells[i+1][j+1] = FloatToStr(a[i][j]);

}

}

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

delete [] a[i];

delete [] a;

}

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

4.6.3. Результати виконання програми

Рис.44. Вікно програми в роботі

4.7 ВИКОРИСТАННЯ РЯДКІВ

4.7.1. Постановка задачі та алгоритм вирішення.

Дано рядок, що складається зі слів, розділених пробілами. Розбити вихідний рядок на дві підрядка, причому перший довжиною k символів, якщо на k-у позицію потрапляє слово, то його слід віднести до другої рядку. Значення k вводиться з клавіатури.

4.7.2. Лістинг програми

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

#include <vcl.h>

#pragma hdrstop

#pragma argsused

#include <string>

#include <tchar.h>

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <iostream>

using namespace std;

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

void main()

{

int n, i, nst, len=0,k,j,g, len1=0;

char st[81],st1[81],st2[81],st3[81];

puts(" Vvedite stroku ");

gets(st);

len = strlen(st);

puts("k: ");

scanf("%d", &k);

strncpy(st1, st, k);

for (k; st[k]!=' '; k--)

len1=k-1;

strncpy(st2, st, len1);

printf("Dlinna=%d", len1);

cout <<"\n" <<st2;

cout <<"\n";

int d = len1;

for (len1; len1 < len; len1++) {

if (st[d] != ' ') {

cout<<st[len1];

}

else cout<<st[len1+1];

}

puts("\nPress any key ... ");

getch();

}