Скачиваний:
20
Добавлен:
25.12.2018
Размер:
267.78 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

      1. Федеральное государственное автономное образовательное учреждение высшего образования

«Санкт-Петербургский государственный университет аэрокосмического приборостроения»

КАФЕДРА № 2

Преподаватель

доцент, к.т.н. Куртяник Д.В.

Отчёт

по лабораторной работе №9

по дисциплине Информатика

на тему: « Динамические массивы»

Работу выполнил

студент гр. 4616 Павлов А.В.

Санкт-Петербург

Цель лабораторной работы: изучение структурной организации динамических массивов и способов доступа к их элементам с использованием указателей; совершенствование навыков процедурного программирования на языке C/С++ при решении задач обработки динамических массивов.

Задание на программирование: используя технологию процедурного программирования, разработать программу обработки одномерных и двумерных (матриц) динамических массивов в соответствии с индивидуальным заданием.

Порядок выполнения работы:

1) Получить у преподавателя индивидуальное задание и выполнить постановку задачи: сформулировать условие, определить входные и выходные данные, их ограничения.

2) Разработать математическую модель: описать с помощью формул и рисунков структуру массивов и процесс их преобразования.

3) Построить схему алгоритма решения задачи.

4) Составить программу на языке C/С++.

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

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

6) Проверить и продемонстрировать преподавателю работу программы на полном наборе тестов, в том числе с ошибочными входными данными. Входные и выходные массивы должны выводиться в одном и том же формате.

7) Использовать стандартные потоковые объекты ввода/вывода cin и cout.

8) Оформить отчет о лабораторной работе в составе: постановка задачи, математическая модель, схема алгоритма решения, текст программы, контрольные примеры.

1-3)

Вариант 9

10.

1) Дан массив a0, a1, a2,…, an-1. Определить количество и произведение значений элементов массива, лежащих между элементами с максимальным по абсолютной величине значением и с минимальным по абсолютной величине значением.

2) В заданной квадратной матрице размера 2n*2n поменять местами значения элементов строк с одинаковыми номерами областей 1 и 2 (см. рисунок).

Текст программы для 1 задания

#include <iostream>

#include <conio.h>

using namespace std;

void inputmas(int * ,int);

int summa(int * ,int ,int );

int main(){

setlocale( LC_ALL,"Russian" );

int razmernost, *massiv; //динамический массив

int max,min,imax=0,imin=0;

cout<<"Дан массив a0, a1, a2,…, an-1. Определить количество и произведение значений элементов массива, лежащих между элементами с максимальным по абсолютной величине значением и с минимальным по абсолютной величине значением."<<endl;

cout<<"\nВведите рамерность массива: ";

cin>>razmernost;

massiv=new int[razmernost]; //создания динамического массива

inputmas(massiv,razmernost);

//Вывод массива

cout<<"\n\n\nМассив:";

for(int i=0;i<razmernost;i++){

cout<<" "<<*(massiv+i);

}

max=*massiv;

min=*massiv;

//поиск максимального и минимального элемента

for(int i=1;i<razmernost;i++){

if((max*max)<(*(massiv+i)**(massiv+i))){max=*(massiv+i);imax=i;}

if((min*min)>(*(massiv+i)**(massiv+i))){min=*(massiv+i);imin=i;}

}

if(imax<imin){imin+=imax;imax=imin-imax;imin-=imax;}

cout<<"\n\nМаксимальный по абсолютной величине элемент в массиве: "<<max<<"\nМинимальный по абсолютной величине элемент в массиве: "<<min<<endl;

//вывод

cout<<"\nКоличество элементов, лежащих между элементами с максимальным по абсолютной величине значением и с минимальным по абсолютной величине значением: "<<(imax-imin-1)<<"\n\nпроизведение значений элементов массива, лежащих между элементами с максимальным по абсолютной величине значением и с минимальным по абсолютной величине значением: "<<summa(massiv,imin,imax)<<endl;

delete []massiv;

getch();

return 0;

}

//Ввод элементов массива

void inputmas(int *massiv,int razmernost){

cout<<"\nВведите в одной строке элементы массива, состоящего из "<<razmernost<<" целых чисел,\nи нажмите <ENTER>"<<endl;

//ввод изначального массива

for(int i=0;i<razmernost;i++){

cout<<"Введите "<<(i+1)<<" элемент массива: ";

cin>>*(massiv+i);

}

}

//Сумма элементов

int summa(int *massiv,int imin,int imax){

int sum=1;

//подсчет суммы элементов и их количества

for(int i=imin+1;i<imax;i++)sum*=*(massiv+i);

return sum;

}

Текст программы 2

#include <iostream>

#include <conio.h>

#include <iostream>

#include <cstdlib>

using namespace std;

typedef int telem ; //определение типа элементов массива

typedef telem *tstr ; //определение типа "указатель на telem"

typedef tstr *tmatr; //определение типа "указатель на указатель на telem"

void inputmatr(tmatr , int ) ;

void perestanivka(tmatr , int);

void outputmatr(tmatr ,int) ;

int main(){

setlocale( LC_ALL,"Russian" ) ;

int razmernost;

//динамический массив

cout<<"Введите размерность динамического двумерного массива: ";

cin>>razmernost;

tmatr massiv=new tstr [(razmernost*2)]; //выделение динамической памяти под массив

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

for(int i=0;i<razmernost*2;i++) //цикл выделения памяти под каждую строку

*(massiv+i)=new telem [(razmernost*2)]; //каждому элементу массива указателей

//на строки присваивается адрес начала

//области памяти, выделяемой под строку

//ввод элементов матрицы

inputmatr(massiv,razmernost) ;

//вывод элементов матрицы

cout<<"\nИзначальный массив:"<<endl;

outputmatr(massiv,razmernost);

//сортировка массива

perestanivka(massiv,razmernost);

//вывод элементов матрицы

cout<<"\n\nОтсортированный массив:"<<endl;

outputmatr(massiv,razmernost);

getch();

return 0;

}

//Ввод элементов в массив

void inputmatr(tmatr massiv, int razmernost)

{

for(int i=0;i<razmernost*2;i++){

for(int j=0;j<razmernost*2;j++){

//автоматическое заполнение

*(*(massiv+j)+i)=rand()%10;

//заполнение в ручную

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

}

}

}

//Сортировка массива

void perestanivka(tmatr massiv, int razmernost)

{

int bufer;

for(int i=0;i<razmernost;i++){

for(int j=0;j<razmernost-i;j++){

bufer=*(*(massiv+j+i)+i);

*(*(massiv+j+i)+i)=*(*(massiv+j+razmernost)+i);

*(*(massiv+j+razmernost)+i)=bufer;

}

}

}

//Вывод массива

void outputmatr(tmatr massiv, int razmernost)

{

for(int i=0;i<razmernost*2;i++){

for(int j=0;j<razmernost*2;j++){

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

}

cout<<endl;

}

}

Примеры.

Соседние файлы в предмете Основы программирования и алгоритмизации