Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОНТРОЛЬНАЯ РАБОТА № 2. Вариант 2.doc
Скачиваний:
13
Добавлен:
01.04.2014
Размер:
182.78 Кб
Скачать

Вариант 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();

}

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

Результат работы программы: