Вариант 2
ЗАДАНИЕ № Доп-1.
В двухмерном целочисленном массиве (размеры массива N, M и значения его элементов вводить с клавиатуры) найти указанное значение.
Массив в памяти разместить динамически (с использованием операций new и delete), ввод исходных данных и вывод полученных результатов выполнить в основной функции, а решение задачи оформить в виде отдельной функции пользователя. Не использовать глобальных переменных. Найти произведение элементов, расположенных на главной диагонали.
Текст программы:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
//---------------------------------------------------------------------------
int ProGlDiag(int, int**);
void main()
{
int n, m, i, j, **a, rez;
cout << "\t\tZadanie: Dop-1. Variant: 2" << endl;
cout << "(N=M)" <<endl;
cout << "Input N: ";
cin >> n;
cout << "Input M: ";
cin >> m;
while (n != m)
{
printf ("Nevernij razmer massiva\n\n");
cout << "Input N: ";
cin >> n;
cout << "Input M: ";
cin >> m;
}
a = new int*[n];
for(i=0; i<n; i++)
a[i] = new int[m];
cout << "\n\nInput A:" << endl;
for (i=0; i<n; i++)
for (j=0; j<m; j++)
{
cout << "\ta[" << i+1 << "][" << j+1 << "]=";
cin >> a[i][j];
}
cout << "\n\nMatrix A:" << endl;
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
cout << "\t" << a[i][j];
cout << endl;
}
rez = ProGlDiag(n, a);
cout << "\nProizvedenie elementov na glavnoj diagonali:" << endl;
cout << "\tRezultat = " << rez << endl;
delete []a; // Освобождение памяти
cout << "\n\n Delete !" << endl;
cout << " Press any key ... " << endl;
getch();
}
//---------------------------------------------------------------------------
int ProGlDiag(int c, int**x)
{
int i, p;
p=1;
for (i=0; i<c; i++)
p*=x[i][i];
return p;
}
Результат работы программы:
Задание № 3
Написать программу по созданию, добавлению (в начало, в конец), просмотру (с начала, с конца) и решению поставленной в лаб. работе № 2 задачи для двунаправленных линейных списков.
Удалить из созданного списка элементы с четными числами.
Текст программы:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
struct Spis {
int index;
Spis *next, *prev;
} *start, *last, *t;
void Create_Spis(Spis**, Spis**, int);
void Add_Spis(int, Spis**, Spis**, int);
void View_Spis(int, Spis*);
void Del_All(Spis**);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i, in = StrToInt(Edit1->Text);
if(start != NULL){
ShowMessage("Освободите Память!");
return;
}
Create_Spis(&start, &last, in);
Memo1->Lines->Add("Начало = " + IntToStr(start -> index));
Edit1->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int i, in = StrToInt(Edit1->Text), kod = RadioGroup1->ItemIndex;
String Str[2] = {"в начало ", "в конец "};
Add_Spis(kod, &start, &last, in);
if(kod == 0) t = start;
else t = last;
Memo1->Lines->Add("Добавили " + Str[kod] + IntToStr(t -> index));
Edit1->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if(!start){
ShowMessage("Список Пуст!");
return;
}
if(RadioGroup1->ItemIndex == 0) {
t = start;
Form1->Memo1->Lines->Add("-- С начала --");
}
else {
t = last;
Form1->Memo1->Lines->Add("--- С конца --");
}
View_Spis(RadioGroup1->ItemIndex, t);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Del_All(&start);
ShowMessage("Память освобождена!");
Memo1->Clear();
}
//---------------------------------------------------------------------------
//------------------- Создание первого элемента --------------------------------------------
void Create_Spis(Spis **b, Spis **e, int in) {
t = new Spis;
t -> index = in;
t -> next = t -> prev = NULL;
*b = *e = t;
}
//------------------- Добавление элемента в список ----------------------------------------
void Add_Spis(int kod, Spis **b, Spis **e, int in) {
t = new Spis;
t -> index = in;
if(kod == 0){
t -> prev = NULL;
t -> next = *b;
(*b) -> prev = t;
*b = t;
}
else {
t -> next = NULL;
t -> prev = *e;
(*e) -> next = t;
*e = t;
}
}
//--------------------- Просмотр элементов списка -----------------------------------------
void View_Spis(int kod, Spis *t) {
while(t != NULL) {
Form1->Memo1->Lines->Add(t->index);
if(kod == 0) t = t->next;
else t = t->prev;
}
}
//--------------------------- Функция освобождения памяти --------------------------------
void Del_All(Spis **p) {
while(*p != NULL) {
t = *p;
*p = (*p) -> next;
delete t;
}
}
//-------------------- Удаление из списка элементов с четными числами -------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
t = start;
Spis *key = NULL;
while(t != NULL) {
if ((t->index % 2)==0) {
key = t;
Memo1->Lines->Add("Удалить :" + IntToStr(key->index ));
if (key == start) {
start = start->next;
start->prev = NULL;
}
else {
if (key == last) {
last = last->prev;
last->next = NULL;
}
else {
(key->prev)->next = key->next;
(key->next)->prev = key->prev;
}
}
}
t = t->next;
}
delete key;
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo1->Clear();
}
//---------------------------------------------------------------------------
Результат работы программы: