Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3_1 ВУМИ ЛабРабота 1.DOC
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
445.44 Кб
Скачать

Void * maloc (Тип-Данных Количество-Элементов);

Пример:

STR = (CHAR *) MALLOC (100);

В результате в «куче» выделяется память указанного размера, при этом функции возвращают адрес на начало выделенного участка. При сбое, либо если выделяемый размер был указан равным нулю, или размер был не определен, функции возвращают значение Null. Формат функции высвобождения памяти:

Void free (void * Указатель);

Пример: FREE (STR);

1.2. Пример программы обработки матрицы, удовлетворяющую всем основным требованиям лабораторной работы.

/* Программа обработки матрицы

Автор: Имярек ИО

Группа: 05-301

Организация: МАИ

Средства разработки: Turbo C++ верс.3.0

Разработана 31.12.2006 */

/* Задание:

В матрице А[][] найти строку с максимальным средним арифметическим ее элементов.

Сформировать матрицу D[][],

исключив из А[][] найденную строку.*/

#include <iostream.h>

#include <conio.h>

#include <stdio.h>

/**********Внешние переменные:*******/

int m, n, maxi;

// Размерность матрицы, Строка с максимальным элементом//

float **matrix, *s, *r, max;

//Двухмерная матрица, Сумматор строк, Mаксимyм//

/**********Функция ввода:************/

void vvod(void)

{

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

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

{

cout << "- Input A[" << j << "][" << i << "]:";

cin >> *(*(matrix + j) + i) ;

}

}

/***********Функция расчета:*********/

void form(void)

{

float p=0.0;

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

{

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

{

p+=*(*(matrix+j)+i);

}

*(s+j) = p/n;

p = 0.0;

if(*(s+j) > max)

{

max=*(s+j);

maxi = j;

}

}

return;

}

/************************************/

void main(void)

{

void vivod(int);

clrscr();

matrix = new float *[n]; //Выделение памяти под столбцы//

/*for (int j = 0; j < m; j++)

matrix[j] = new float[n]; //Выделение памяти под строки// */

cout << "Input size array A:" << endl;

cout << "- Count row M:" ;

cin >> m;

cout << "- Count column N:" ;

cin >> n;

cout << endl;

vvod();

form();

vivod(maxi);

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

getch();

return;

}

/***********************************/

void vivod(int k)

{

cout << endl;

cout << "Max row = " << maxi << endl << "Average = " << max << endl << endl;

cout << "New array D: " << endl;

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

{

if (j == k) continue;

else

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

cout << *(*(matrix+j)+i) << " ";

cout << endl;

}

cout << "Address array D[][]:" << endl;

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

{

if (j == k) continue;

else

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

cout << ((matrix+j)+i) << " ";

cout << endl;

}

return;

}

1.3. Краткое руководство по работе в среде Turbo C++.

Интегрированная среда программирования (ИСП) Turbo C++ версии 3.0 разработана Borland International, Inc. Для разработки, редактирования, компиляции , отладки и компоновки программ на языке С++. Для запуска ИСП Turbo C++ необходимо запустить исполняемый файл TC.EXE, размещаемый, как правило, в папке BIN. Поиск файла TC.EXE может быть выполнен любыми средствами операционной системы Windows™ или с помощью любой системы типа файла менеджера, например Total Commander (ТС (former Wincmd) is a file manager for Windows™ similar to the Windows Explorer).

ИСП Turbo C++ работает в среде ОС MS DOS или сеансе MS DOS, в виде отдельного приложения Windows™. Полный формат загрузки ИСП Turbo C++:

TC.EXE [Идендификатор-С-программы.срр] [:Имя проекта.prj] [Опции]

Если ИСП Turbo C++ загружается без исходного файла, то по умолчанию в редакторе размещается последняя версия С-программы, чей идентификатор хранится в рабочей области DESKTOP.

Если ИСП Turbo C++: загружается без исходного файла первый раз, то по умолчанию в редакторе размещается новая, то есть пустая С-программа под идентификатором NONAME00.CPP.

Пример фрагмента прикладного окна ИСП Turbo C++ помещен на рисунке 2.

Рис. 2. Фрагмента прикладного окна ИСП Turbo C++.

Основные технологические приемы:

  • Создать новый файл с С-программой:

[Главное-Меню] [Альтернатива FILE] [Команда NEW]

По умолчанию создаётся файл с именем NONAME0j.CPP.

  • Сохранить на диске последнюю версию С-программы:

[Главное-Меню] [Альтернатива FILE] [Команда SAVE] / [F2]

При первом сохранении файл рекомендуется переименовать. Вместо имени NONAME0j.CPP ввести несистемное имя, например Lab_1.CPP.

  • Компилирование С-программы:

[Главное-Меню] [Альтернатива COMPILE] [Команда COMPILE] / [ALT+F9]

Если выявлены ошибки(ERROR) или предупреждения(WARNING) в среде ИСП Turbo C++ появится дополнительное, новое окно MESSAGE, с их перечнем и расшифровкой с указанием номеров строк в С-программе, где они были обнаружены. Текущей станет строка с первой ошибкой. Рекомендуется устранить все ошибки и предупреждения, но дальнейшая отладка программы возможно и с предупреждениями (см. рис. 3).

Рис. 3. Фрагмент окна MESSAGE ИСП Turbo C++.

  • Компоновка С-программы и получение исполняемого файла:

[Главное-Меню] [Альтернатива RUN] [Команда RUN] / [CTRL+F9]

Альтернатива главного меню RUN предоставляет возможность пошаговой, до курса, выполнение программы с параллельной её трассировкой.

В альтернативе OPTIONS можно найти и изменить опции компилятора(COMPILER), компоновщика(LINKER), места размещения библиотечных файлов, файлов включения, папки размещения объектных и исполняемых файлов отлаживаемой программы (DIRECTORIES) (см. рис. 4).

Завершить работы ИСП Turbo C++:

[Главное-Меню] [Альтернатива FILE] [Команда QUIT] / [ALT+X]

Для работы с русским алфавитом следует не забыть загрузить руссификатор, например, keyrus.com или pk.com.

Рис. 4. Окно уточнение нахождения библиотечных компонент DIRECTORIES.

Просмотр результатов выполнения программы в среде Turbo C++:

[Главное меню Turbo C++] -> [Window] -> [User Screen – Alt+F5

Литература.

  1. Архангельский А.Я., Программирование в C++ Builder 6, М.: Издательство Бином, 2003, 1152 с.

  2. Бобровский С., Самоучитель программирования на языке С++ в системе Borland C++ Builder 4.0, М.: Decc InforCom Press, - 1999, 186 с

  3. Ирэ Пол. Объектно-ориентированное программирование с использованием С++ пер с англ., Киев: Diasoft Ltd, 1995 - 480 с.

  4. Керниган Б. Ритчи Д.. Язык программирования Си. Задачи по языку Си. М.: Финансы и статистика, 1985 - 279 с.

  5. Киммел П., Builder 5, СПб.: BHV – СПб, 1997, 976 с.

Приложение 1.

Варианты заданий на выполнение лабораторных работ №1 и 5.

Вариан-та №

Условие задания

Исходные данные

1.

В матрице A=(aij)mxn найти строку с максимальным средним арифметическим отрицательных элементов, сформировать матицу D, исключив из A найденную строку и заменив все нулевые элементы на средние арифметические значения строк с этими нулевыми элементами

1,2 35,6 -7,35 -3,2 0

5,2 -1,6 14,3 –7,3 2

А= 4,2 –1,7 –10,9 0 -6

-5 -11,2 7,9 -12 -3

0 -5,8 -8,8 4,5 2,4

2.

В матрице B=(bij)mxn найти S-сумму элементов строки и столбца, содержащих max Bij. Сформировать матрицу F:

B, если S > 0

F= удалив из матрицы B строку с максимальным

элементом

5,8 35,6 -7,5 7,2

23,2 -7,8 14,3 –7,3

B= 4,2 7,8 30,6 1,7

7,9 -11,2 7,9 1,8

12 -6,8 3,8 4,5

3.

Дана матрица A=(aij)mxn. Сформировать матрицу B=(bij) mxn , где bij = ( aijaij) * aij . Найти max bij по j-строкам. В матрице B=(bij) mxn поменять первую строку со строкой, содержащей макимальное значение суммы ее элементов.

8,2 5,4 -7,3 2,2 -9

5,2 -3,6 14,3 12,3 2

А= 4,2 –4,6 8,1 4,6 -6

4,6 -1,2 7,9 -12 -5

4,4 -5,8 –8,8 4,5 2,4

4.

Д ана матрица B=(bij)mxn. Подсчитать количество положительных POL и количество отрицательных OTR элементов. Сформировать матрицу C=(cij) mxn:

cij = bij * ( POLOTR ) , если POL > OTR

bij / 2 , если POL <= OTR

4,8 -35,6 -7,5 77,67

-3,2 -57,8 14,3 –67,3

B= -6,2 47,6 30,6 51,87

43,9 -13,2 17,9 41,8

1,2 -6,8 33,8 4,65

5.

Дана матрица A=(aij)mxn. Сформировать вектор P:

P = (p1, p2, ,…, pn), где pi = min aij по j

0,2 35,6 -7,35 -4,2 5,7

15,7 -1,6 14,3 –7,3 2,6

А= 4,2 33,7 10,9 6,7 6,6

5,7 -11,2 7,4 -12 7,3

22 65,8 12,8 -4,5 -2,4

6.

Дана матрица С=(сij)nxn. Вычислить:

Q = max Cii , Si = Cij по строкам i

Сформировать вектор X:

X = (x1, x2, ,…, xn), где Xi =Q * Si

4,5 -25,6 -7,5 7,2

43,2 -17,8 84,3 –7,3

C= 24,2 -57,8 50,6 55,7

37,9 -11,2 7,9 71,8

5,8 -6,8 73,8 74,5

7.

Сформировать матрицу A=(aij)nxn, элементы которой определяются формулой:

aij = cos (i + j ) * x

Из матрицы A=(aij)nxn получить матрицу B=(bij)nxn , переставляя в каждой строке наибольший по абсолютной величине (первый, если их несколько) с элементом, стоящим на главной диагонали.

x = / 10

8.

Дана матрица A=(aij)mxn и матрица B=(bij)mxn. Сформировать матрицу C=(cij) mxn:

Cij = aijbij

Найти в матрице C=(cij) mxn строку с максимальным средним арифметическим значением ее элементов.

1,2 35,6 -3,2 0

5,2 -1,6 –7,3 2

А= 4,2 –1,7 B= 0 -6

-5 -11,2 -12 -3

0 -5,8 4,5 2,4

9.

Найти среднее арифметическое строк и столбцов элементов матрицы B=(bij)mxn. Если максимальное среднее арифметическое строк больше максимального среднего арифметического столбцов – обменять элементы первой строки с последней, в противном случае – элементы первого столбца с элементами последнего столбца.

8,8 -15,3 -7,5 6,7

-6,2 -17,4 4,3 –7,3

B= -6,8 7,6 0,6 1,7

23,9 -13,2 7,4 1,8

6,2 -6,8 3,3 4,5

10.

В каждой строке матрицы A=(aij)mxn найти максимальный и минимальный элементы. Сформировать матрицу B=(bij)mxn, переставляя в каждой строке матрицы A=(aij)mxn максимальный элемент с минимальным.

0,2 15,4 -5,3 -2,2 9,9

5,2 -3,6 4,3 12,3 2,4

А= 3,2 –14,6 8,1 14,6 –6,8

6,6 -1,2 7,9 -12 -5

0,4 -15,8 18,8 4,5 2,4

11.

В матрице A=(aij)mxn найти R = min aij. Сформировать матрицу B=(bij)(m-1)x(n-1), исключив из матрицы А строку и столбец, на пересечении которых стоит элемент R.

8,2 5,6 -7,6 -3,2 10

5,8 -3,6 4,3 –7,3 12

А= 1,2 –1,7 10,9 2,7 -6

-5 -11,2 17,9 -12 -3

12.

Дана матрица B=(bij)mxn. Найти R = max bij. Сформировать матрицу C=(cij) mxn:

c ij = bij , если bij <>0

R , если bij =0

5,8 -5,4 -4,5 2,7

-4,2 7,4 4,3 0

B= 3,8 7,6 0,6 1,6

-3,9 0 -2,4 -3,8

9,1 -4,8 0 6,5

13.

Дана матрица A=(aij)mxn. Сформировать матрицу B=(bij) mxn, в которой ее элементы bij рассчитываются по формуле:

bij = ajk * akj, сумма по k

Из матрицы B=(bij) mxn получить вектор Y = (y1, y2, ,…, yn), где yi = bij суммирование по столбцам.

1,2 -5,6 2,4 -4,2 5

5,7 -1,6 -4,2 –7,3 2

А= -4,2 -3,7 -0,3 6,3 -9,1

8,4 -1,2 -1,4 -12 4,3

2 -5,8 -2,8 -4,5 2

14.

Транспонировать матрицу С=(сij)nxn. В полученной матрице B=(bij) nxn найти:

P = ПП bij

и

S =  bij

4,5 5,6 -7,5 7,2

13,2 -7,8 -4,3 –7,3

C= -4,2 -7,8 0,6 0

37,9 -1,2 7,9 1,8

5,8 6,8 3,8 4,5

15.

Дана матрица A=(aij)mxn. Сформировать матрицу B=(bij) mxn , исключив из матрицы A столбцы, содержащие элементы равные 1. Сформировать вектор D=(d1, d2 ,…, dn) из номеров столбцов, матрицы A, содержащих элементы равные 1.

1 5,1 -3,6 -3,2 15

0,8 -2,6 4,3 –7,3 1

А= 1,1 –1,7 0,99 2,7 -6

-5 -1,2 0,9 -12 -3

16.

Дана матрица A=(aij)mxn. Сформировать матрицу B=(bij) mxn путём деления всех элементов матрицы A на элемент, наибольший по абсолютной величине. Нати норму новой матрицы N, где

N = max | bik |, где K меняется от 1 до n. Сумма по i.

2,2 2,3 -1,3 2,2 -9

-5,2 0 1,3 4,3 2,7

А= 8,4 –4,6 4,1 4,6 –6

1,6 1,2 7,2 -12 5,1

9,1 -5,8 –8,1 0 1,1

17.

Дана матрица A=(aij)mxn. Найти минимальные элементы среди отрицательных элементов строк с четными номерами матрицы A. Из них сформировать одномерный массив R=(r1, r2 ,…, rn)/

-8,2 1,2 -7,3 -2,2 -5

-5,1 -3,6 14,3 12,3 2

А= -4,2 –4,6 8,1 4,6 -7

-2,6 -1,2 7,9 -12 -4

-1,4 -7,8 –2,8 -0,5 4

18.

Дана матрица A=(aij)mxn. Сформировать матрицу B=(bij) mxn , исключив из матрицы A k-й столбец и s-ю строку. Найти сумму всех элементов матрицы B=(bij) mxn.

22 5,4 -3,3 -0,2 0

5,2 -3,6 4,3 11,3 4,1

А= 1,2 –4,1 1,1 14,6 –6,8

6,6 -1,2 3,1 0 -5

0,4 -13,4 11,8 4,5 2

19.

Дана матрица B=(bij)mxn. Упорядочить элементы каждой строки матрицы B=(bij)mxn по убыванию их значений. Нулевые элементы, заменить на сумму всех элементов строки, в которой они расположены.

3,8 -1,3 -7,2 0,99

-2,2 -7,4 4,3 –7,3

B= -0,8 2,6 0,6 1,01

3,3 -3,2 7,3 0,01

11,2 -6,8 3,3 -0,01

20.

Упорядочить элементы столбцов с нечетными номерами по убыванию элементов матрицы C=(cij) mxn. Все отрицательные элементы заменить на нуль.

4,5 15,1 -4,4 3,2

-3,2 0,1 -4,22,4

C= -4,2 -0,8 0,6 0

7,1 1,2 9,91 1,8

5,6 11,3 1,1 2,5

21.

Дана матрица A=(aij)mxm и вектор P = (p1, p2, ,…, pm). Сформировать вектор Y = (y1, y2, ,…, ym), в котором элементы yi:

yi = aik * pk, где сумма подсчитывается по k от 1 до m

Первую строку матрицы A=(aij)mxm заменить вектором Y.

1,2 35,6 4 1,2

5,2 -1,6 0,5 7,1

А= 4,2 –1,7 1,1 P= 8

-5 -11,2 4 -12

0 -5,8 3,7 2,2

22.

Транспонировать матрицу С=(сij)nxn. Проверить, явлется ли она симметричной, если да, то переменной Q присвоить значение 1, в противном случе – 0.

0,2 1 -4,4

1 0,1 1

C= -4,4 1 0,2

23.

Вычислить сумму S элементов матрицы A=(aij)mxn без учета элементов главной и побочной диагонали. Сформировать матрицу B=(bij)mxn, заменив элементы главной и побочной диагонали матрицы A=(aij)mxn произведением каждого из этих элементов на сумму S.

0,24 11,4 -7,7 1,2

3,01 -3,6 -4,3 -2,3

А= 3,02 –15,6 -8,1 -4,6

6,60 51,2 -7,9 -42

0,44 -15,8 -1,1 5,5

7

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]