Главная » Просмотр файлов » Лабораторные работы МИРЭА 2014

Лабораторные работы МИРЭА 2014 (1017113), страница 5

Файл №1017113 Лабораторные работы МИРЭА 2014 (Лабораторные работы МИРЭА 2014) 5 страницаЛабораторные работы МИРЭА 2014 (1017113) страница 52017-07-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 5)

int *arr;

arr=new int[n+2]; //создание массива int

for(int i=0; i<n+2; i++){ //цикл для заполнения массива

arr1[i]=i; //заполнение массива целыми числами

cout<< arr [i];

}

system("pause");

delete arr;

}

Создание двумерного динамического массива

Имя двумерного динамического массива является указателем на указатель. Поэтому сначала выделятся память под указатели, а затем под соответствующие этим указателям строки. Освобождение выделенной памяти происходит в обратном порядке:

double **umas2; //объявление указателя на указатели

umas2 = new double*[n]; //создание массива указателей

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

umas2[i] = new double[m]; // не обязательно m=n

//код программы

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

delete [ ]umas2[i];

delete [ ]umas2;

umas2=NULL;

Пример выполнения работы

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

#include <iostream.h>

#include <windows.h>

int main(int argc, char* argv[])

{

int n = 0; //Количество строк

int m = 0; //Количество столёцов

SetConsoleOutputCP(1251);

cout << "Введите n: ";

cin >> n;

cout << " Введите m: ";

cin >> m;

//Создаем массив указателей

int** arr=new int*[n];

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

arr[i]=new int[m]; //указатели на строки

//Заполняем массив

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

{

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

{

cout<<"arr["<<i<<"]["<<j<<"]=";

cin>>arr[i][j];

}

}

//Поиск отрицательных чисел в столбце

cout << "В столбце:\n";

//в следующем цикле объявлены 2 переменные !

for (int i=0, index=-1; i<m; ++i)

{

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

if(arr[j][i]<0) index=j;

if (index !=- 1) cout<<i<<") "<<index<<endl;

}

cout << "В строке:\n";

for (int i = 0, index=-1; i<m; ++i)

{

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

if (arr[i][j]<0) index=j;

if (index != - 1) cout<<i<<") "<<index<<endl;

}

//Удаляем массив

//сначала удаляются указатели на столбцы

for (int i=0; i<n; ++i) delete [] arr[i];

//потом указатели на строки

delete [] arr;

_flushall(); //очистка всех буферов

char z;

cin>>z;

return 0;

}

Использование указателей в функциях и указатели на функции

Параметрами функций могут быть не только переменные базового типа, но и массивы. Как известно размер массива должен быть определен до его использования. Поэтому, в функциях используются массивы с явным заданием размера, либо с параметрами несущими информацию о размере. Следует запомнить, что если формальными параметрами функции являются массивы, то аргументы передаются в виде указателей, т.е. происходит, так называемая, передача по ссылке..

Рассмотрим задачу умножения двух векторов.

#include <iostream>

#include <windows.h>

using namespace std;

double multVect(int n,double x[],double y[]){

/*скалярное произведение*/

double z=0;

for(int i=0;i<n;i++) z=z+x[i]*y[i];

return z;

}

void main(){

SetConsoleOutputCP(1251);

double u[]={1.0, 2.0, 3.0}, v[]={4.0, 5.0, 6.0};

cout<<"Произведение векторов="<<multVect(3,u,v);

}

Иногда возвращаемое значение функции должно быть указателем. Рассмотрим программу на примере объединения массивов.

#include <iostream>

#include <windows.h>

using namespace std;

//объявляем и описываем фунцию

double *connectVect(int n, double* x, int m, double* y){

int i;

double *z=new double[n+m]; //выделяем память

for(i=0;i<n;i++) z[i]=x[i]; //заносим в память

for(i=n;i<n+m;i++) z[i]=y[i-n];

return z;

}

void main(){

SetConsoleOutputCP(1251);

double u[]={1.0, 2.0, 3.0}, v[]={4.0, 5.0, 6.0, 7.0, 8.0}, *w;

w=connectVect(3,u,5,v);

cout<<"Объединение массивов"<<endl;

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

cout<<w[i]<<endl;

system("pause");

}

Указатели функций

Любая функция представляет собой код с определенным именем. Для размещения функции компилятор языка С++ находит в памяти подходящий объем свободных ячеек с непрерывными адресами и записывает этот код в память последовательно занимая её свободные ячейки. Указателем на начало кода является имя функции, а его значением служит адрес первой ячейки, занимаемый кодом функции. Тип указателя определяется типом возвращаемого значения. Синтаксис объявления указателя на функцию должен быть таким

тип_функции (*имя_указателя) (список_спецификаций_параметров);

Например, указатель функции предназначенный для умножения двух целых чисел должен иметь вид:

int (*multiplay)(int, int);

Обратите внимание, что имя указателя записывается в круглых скобках, в противном случае компилятор поймет его как прототип функции с именем multiplay, которая возвращает значение указателя типа int.

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

#include <iostream>

#include <windows.h>

using namespace std;

/*объявление функции*/

double multVect(int n,double x[],double y[]){

double z=0;

for(int i=0;i<n;i++) z=z+x[i]*y[i];

return z;

}

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

void main(){

SetConsoleOutputCP(1251);

double u[]={1.0, 2.0, 3.0}, v[]={4.0, 5.0, 6.0};

double (*ptrFun)(int, double[], double[]); /*объявление указателя с именем ptrFun */

ptrFun=multVect; /*в новый указатель записывается адрес функции */

cout<<"Произведение векторов=" <<ptrFun(3,u,v)<<endl;

cout<<"Произведение векторов=" <<(ptrFun)(3,u,v)<<endl; /* При вызове функции через указатель его имя можно взять в скобки */

}

Задания для самостоятельной работы

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

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

Вторая задача предполагает создание динамического массива. Код программы может быть записан без применения функций.

Вариант 1

  1. В одномерном массиве

  • Найдите количество элементов, находящихся в диапазоне между двумя заданными числами.

  • Упорядочьте элементы массива по убыванию модулей элементов.

  • Найдите сумму элементов массива, расположенных после первого положительного элемента.

  • Из данного массива и другого массива того же типа, но другой размерности сформируйте общий массив и найдите его минимальный элемент.

2. Задана матрица размером NxM. Получить массив B, присвоив его k-му элементу значение 0, если все элементы k-го столбца матрицы нулевые, и значение 1 − в противном случае.

Вариант 2

  1. В одномерном массиве

  • Вычислите количество элементов массива, равных 0.

  • Упорядочьте элементы массива по возрастанию их модулей.

  • Найдите сумму элементов массива, расположенных после минимального элемента.

  • Из данного массива и другого массива того же типа, но другой размерности сформируйте общий массив и отсортируйте его по убыванию.

2. Задана матрица размером NxM. Получить массив B, присвоив его k-му элементу значение 1, если элементы k-й строки матрицы упорядочены по убыванию, и значение 0 − в противном случае.

Вариант 3

1. В одномерном массиве

  • Найдите количество элементов, больших заданного числа.

  • Измените порядок следования элементов в массиве так, чтобы сначала располагались все отрицательные элементы, затем положительные, а потом нули.

  • Найдите произведение элементов массива, расположенных после максимального по модулю элемента.

  • Из данного массива и другого массива того же типа, но другой размерности сформируйте общий массив и найдите его максимальный элемент.

2. Задана матрица размером NxM. Получить массив B, присвоив его k-му элементу значение 1, если k-я строка матрицы симметрична, и значение 0 – в противном случае.

Вариант 4

1. В одномерном массиве

  • Найдите минимальный и максимальный элементы массива и поменяйте их местами.

  • Измените порядок следования элементов в массиве на противоположный.

  • Определите среднее арифметическое всех значений элементов массива.

  • Из данного массива и другого массива того же типа, но другой размерности сформируйте общий массив и отсортируйте его по возрастанию.

2. Задана матрица размером NxM. Определить количество «особых» элементов матрицы, считая элемент «особым», если он больше суммы остальных элементов своего столбца.

Вариант 5

1. В одномерном массиве

  • Найдите номер минимального по модулю элемента массива.

  • Преобразуйте массив, переставив все нулевые элементы в конец массива.

  • Найдите сумму модулей элементов массива, расположенных после первого отрицательного числа.

  • Из данного массива и другого массива того же типа, но другой размерности сформируйте общий массив и найдите его минимальный по модулю элемент.

2. Задана матрица размером NxM. Определить количество «особых» элементов матрицы, считая элемент «особым», если в строке слева от него находятся элементы, меньшие его, а справа – большие.

Вариант 6

1. В одномерном массиве

  • Вычислите произведение положительных элементов массива.

  • Упорядочьте по возрастанию отдельно элементы массива, стоящие на четных местах, и элементы массива, стоящие на нечетных местах.

  • Вычислите сумму элементов массива, расположенных до минимального.

  • Из данного массива и другого массива того же типа, но другой размерности сформируйте общий массив и найдите его максимальный по модулю элемент.

2. Задана символьная матрица размером NxM. Определить количество различных элементов матрицы (т.е. повторяющиеся элементы считать один раз).

Вариант 7

1. В одномерном массиве

  • Вычислите произведение отрицательных элементов массива.

  • Замените все отрицательные элементы их квадратами и упорядочьте элементы массива по возрастанию.

  • Вычислите произведение минимального и максимального элементов массива.

  • Из данного массива и другого массива того же типа, но другой размерности сформируйте общий массив и вычислите сумму отрицательных элементов.

2. Дана матрица размером NxM. Упорядочить ее строки по возрастанию их первых элементов.

Вариант 8

Характеристики

Тип файла
Документ
Размер
3,06 Mb
Тип материала
Высшее учебное заведение

Список файлов лабораторной работы

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6384
Авторов
на СтудИзбе
308
Средний доход
с одного платного файла
Обучение Подробнее