Примеры написания программ

Порядок написания программы

ОБРАБОТка двумерных числовых массивов

(на примере матриц)

Цель работы

1. Научиться:

–объявлять матрицу в программе статически и динамически;

– вводить матрицу или объявлять с инициализацией;

– писать стандартный цикл обработки матрицы;

–обращаться к элементам матрицы по имени и через адрес.

2. Составить, выполнить и протестировать указанную задачу с помощью компьютера.

 

 

1. Выделить память под матрицу статически или динамически.

2. Ввести матрицу с клавиатуры или заполнить случайными числами.

3. Провести указанную обработку матрицы.

4. Вывести на экран матрицу в матричном виде.

5. Вывести результат обработки.

6. Освободить динамическую память (если она выделялась).

 

 

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

Этапы решения задачи:

- объявить матрицу;

-заполнить матрицу числами с клавиатуры;

-вывести матрицу в матричном виде;

-вычислить количество положительных элементов произвольного столбца матрицы;

-вывести результат.

.

 

Примечание. Вызов функции Rus перед строками-константами с русским текстом осуществляйте самостоятельно.

 

1 вариант решения – обращение к элементу массива идет через имя элемента массива, память выделяется статически, массив заполняется с клавиатуры.

 

Программа будет строиться в виде проекта.

Текст функции mainбудет выглядеть так:

//содержимое файла main.cpp

#include<iostream> //подключение системных средств для

using namespace std; //возможности использовать потоки ввода-вывода

#include<iomanip> //для форматированного вывода матрицы

#include "Rus.h" //прототип функции русификации

#define STR 3 //задаем количество строк в массиве

#define STLB 4 //задаем количество столбцов в массиве

#define NSTLB 2 //задаем номер анализируемого столбца

int main(void)

{

int matr[STR][STLB]; //объявляем массив

int kol=0; //переменная под количество

int i, j, J;

//заполнения двумерного массива числами с клавиатуры;

cout<<"\nВведите массив";

for(i=0; i<STR; i++) //перебор элементов массива построчно

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

cin>>matr[i][j]);

 

//вывода двумерного массива;

cout<<"\nИсходный массив: ";

for(i=0; i<STR; i++) //перебор элементов массива построчно

{

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

cout<<setw(8)<< matr[i][j]); //выводим элемент массива

cout<<endl; //переводим курсор на след строку

}

//вычисление количества положительных элементов произвольного //столбца матрицы;

J= NSTLB-1; //номер столбца превращаем в индекс

for(i=0; i<n; i++) // перебор строк одного столбца с индексом J

if matr[i][ J]>0) // если элемент массива положительный

kol++; //количество увеличиваем на 1

 

cout<< "\nКоличество равно" << kol<<endl;

return 0;

}

2 вариант решения – обращение к элементу массива идет через адрес элемента массива, память выделяется динамически, заполняется массив с клавиатуры.

 

#include<iostream> //подключение системных средств для

using namespace std; //возможности использовать потоки ввода-вывода

#include<iostream> //для форматированного вывода матрицы

#include "Rus.h" //прототип функции русификации

#define STR 3 //задаем количество строк в массиве

#define STLB 4 //задаем количество столбцов в массиве

#define NSTLB 2 //задаем номер анализируемого столбца

int main(void)

{

int *matr=new int[STR*STLB];//объявляем массив

int kol=0; //переменная под количество

int i, j, J;

int *p=matr; //адрес первого элемента в матрице.

//заполнения двумерного массива числами с клавиатуры;

cout<<"\nВведите массив";

for(i=0; i<STR; i++) //перебор элементов массива

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

cin>>*( p+i*STLB+j);

 

//вывода двумерного массива;

cout<<"\nИсходный массив: ";

for(i=0; i<STR; i++) //перебор элементов массива

{

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

cout<<setw(8)<< *(p+i*STLB+j); //выводим элемент массива

cout<<endl; //переводим курсор на след строку

}

 

//вычисления количества положительных элементов произвольного //столбца матрицы;

J=NSTLB-1; //номер столбца превращаем в индекс

for(i=0; i<n; i++) // перебор строк одного столбца с индексом J

if(*(p+i*STLB+J)>0) // если элемент массива положительный

kol++; //количество увеличиваем на1

 

cout<< "\nКоличество равно "<< kol<<endl;

return 0;

}

Контрольные вопросы и задания

 

1. Дать определение двумерного числового массива.

2. Как объявить двумерный числовой массив статически?

3. Как объявить двумерный числовой массив динамически?

4. Напишите цикл обработки двумерного числового массива построчно.

5. Напишите цикл обработки двумерного числового массива по столбцам.

6. Напишите цикл обработки одной строки двумерного числового массива.

7. Как обратиться к элементу массива по имени?

8. Как обратиться к элементу массива по адресу?

9. Объявите двумерный числовой массив статически, динамически и обратитесь к элементам массива по имени, по адресу при каждом выделении памяти.

10. Для наилучшего освоения темы выполните варианты 1, 12, 15.

 

Задание

 

Решить задачу, написав два варианта программы:

1. выделить память под массив статически и заполнить случайными числами;

2. выделить память динамически и заполнить его с клавиатуры.

 

Вариант 1. Дан двумерный числовой массив. Вывести массив в матричной форме. Вычислить количество элементов массива, значение которых попало в интервал [a,b].

 

Вариант 2.Дан двумерный числовой массив. Вывести массив в матричной форме. Вычислить произведение ненулевых элементов массива в каждом столбце матрицы.

 

Вариант 3.Дан двумерный числовой массив. Вывести массив в матричной форме. Вычислить среднее арифметическое в каждой строке матрицы.

 

Вариант 4.Дан двумерный целочисленный массив. Вывести массив в матричной форме. Вычислить количество элементов, кратных числу k в столбце с номером m.

 

Вариант 5.Дан двумерный числовой массив. Вывести массив в матричной форме. Является ли убывающей последовательностью строка с номером n.

 

Вариант 6.Дан двумерный числовой массив. Вывести массив в матричной форме. Вычислить минимум среди положительных элементов матрицы.

 

Вариант 7.Дан двумерный числовой массив. Вывести массив в матричной форме. Определить, содержится ли число 5 в каждом столбце матрицы.

 

Вариант 8.Дан двумерный числовой массив. Вывести массив в матричной форме. Определить, равен ли первый и последний элемент в каждой строке матрицы.

 

Вариант 9.Дан двумерный целочисленный массив. Вывести массив в матричной форме. Вычислить минимум в столбце с номером m.

 

Вариант 10.Дан двумерный числовой массив. Вывести массив в матричной форме. Определить, равны ли между собой значения в строке с номером n.

 

Вариант 11.Дан двумерный числовой массив. Вывести массив в матричной форме. Вычислить количество положительных чисел в каждом столбце массива. Результаты поместить в одномерный массив.

 

Вариант 12.Дан двумерный числовой массив. Вывести массив в матричной форме. Вычислить произведение чисел в каждой строке массива. Результаты поместить в одномерный массив.

 

Вариант 13. Дан двумерный числовой массив. Вывести массив в матричной форме. Уменьшить значение каждого элемента массива на а.

 

Вариант 14.Дана квадратная матрица. Вывести массив в матричной форме. Заменить элементы главной диагонали нулем.

 

Вариант 15.Дана квадратная матрица. Вывести массив в матричной форме. Вычислить сумму элементов матрицы, расположенных выше главной диагонали.

Лабораторная работа 10