Операнд_1 ? операнд_2 : операнд_3 8 глава




28. Из чисел a1, a2,..., an выбрать те, которые больше по модулю заданного числа c, и образовать из них новый массив, сохранив порядок следования элементов.

 

3. Составить программу с использованием динамических массивов для решения задачи на переупорядочивание элементов массива. В качестве алгоритма сортировки использовать метод быстрой сортировки массива. Номер варианта определяется по формуле , где - номер студента по списку преподавателя.

Индивидуальное задание №2. Вариант:

1. Массив содержит 2n чисел. Из суммы первых n его элементов вычесть сумму последних n элементов.

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

3. Даны два целочисленных массива одинакового размера. Получить третий массив того же размера, каждый элемент которого равен большему из соответствующих элементов данных массивов.

4. Задан массив С, содержащий m чисел. Составить программу формирования массивов А и В, включая в массив А четные по номеру элементы массива С в порядке их следования, а в массив В - нечетные.

5. Заданы два массива А и В, содержащие по n чисел. Составить программу формирования массива С, включая в него сначала все элементы массива А, затем все элементы массива В.

6. Числовой массив a1, a2, …an упорядочен по возрастанию. Известно, что число х принадлежит отрезку числовой оси, вмещающему заданный массив. Определить номер k, для которого ak-1< x <= ak.

7. Заменить отрицательные элементы в числовом массиве из n чисел (n>10) их квадратами, оставив остальные без изменения.

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

9. В массиве из 2n чисел найти сумму квадратов элементов с четными индексами и сумму кубов элементов с нечетными индексами.

10. Транспонировать массив, т.е. по а1, а2,..., аn сформировать аn, аn-1,..., a1.

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

12. Заменить отрицательные числа в массиве их квадратами, оставив остальные без изменения.

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

14. В массиве из 2n чисел найти сумму квадратов элементов с четными индексами и сумму кубов элементов с нечетными индексами.

15. Из чисел а1, а2,..., аn выбрать те, которые больше по модулю заданного числа с, и образовать из них новый массив, сохранив порядок следования элементов.

16. Из массива целых чисел составить три других, в первый из которых записать числа, кратные 5, во второй - числа, кратные 7, а в третий - остальные числа.

17. Задан массив из 100 целых случайных чисел, принадлежащих промежутку [0, 100]. Найти сумму тех элементов массива, которые больше 15, но меньше 45, а также вычислить количество этих элементов.

18. В линейном массиве заменить все элементы на число m (m - индекс максимального элемента).

19. Дан массив, состоящий как из положительных, так и отрицательных чисел. Нужно сначала записать положительные числа, а затем отрицательные в том же порядке, как они были расположены в исходном массиве. Если есть нули, записать их в последнюю очередь.

20. Найти сумму элементов данного массива. Разделить каждый элемент исходного массива на полученное значение.

21. Вычислить сумму и разность массивов одного размера.

22. Найти среднее арифметическое значение элементов заданного массива. Преобразовать исходный массив, вычитая из каждого элемента среднее значение.

23. Даны два массива одинакового размера. Рассматривая их как арифметические векторы, найти длины этих векторов и их скалярное произведение.

24. Заданы два массива разных размеров. Объединить их в один массив, включив второй массив между k-ым и (k + 1)-ым элементами первого (k задано).

25. Вычесть из положительных элементов данного массива элемент с номером k1 а к отрицательным элементам прибавить элемент с номером k2. Нулевые элементы заменить 1. Номера k1 и k2 вводятся с клавиатуры.

26. К четным элементам целочисленного массива прибавить данное число а, а из элементов с четными номерами вычесть данное число b.

27. Дан первый член геометрической прогрессии и ее знаменатель. Сформировать одномерный массив, элементами которого служат первые n членов этой прогрессии.

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

29. Дан массив четного размера. Поменять местами его половины следующим образом: первый элемент - с последним, второй - с предпоследним элементом и т.д.

Содержание отчета и его форма. Отчет по лабораторной работе должен состоять из:

1. Названия лабораторной работы.

2. Цели и содержания лабораторной работы.

3. Ответов на контрольные вопросы лабораторной работы.

4. Формулировки индивидуальных заданий и порядка их выполнения.

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

Вопросы для защиты работы

1. Что является указателем в языке C++?

2. Какие виды указателей существуют в языке C++?

3. Каким образом осуществляется инициализация указателя в языке C++?

4. Какие существуют способы инициализации указателя?

5. Время жизни динамических переменных.

6. С помощью какой языковой конструкции выделяется память под динамический массив в языке C++?

7. Какие операции можно выполнять с указателями?

8. Что является ссылкой в языке C++?

9. Формат объявления ссылки.

10. К чему приводит операция над ссылкой?

 

Пример выполнения лабораторной работы №5:

1. Индивидуальное задание №1:

1.1. Постановка задачи:

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

Задача: составить программу, выдающую индексы заданного элемента или сообщающую, что такого элемента в массиве нет.

1.2. UML-диаграмма:

1.3. Листинг программы:

// Лабораторная работа №5

// Индивидуальное задание №1

 

#include "stdafx.h"

#include <iostream>

#include "conio.h"

#include "math.h"

#include "windows.h"

 

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL, "Russian");

const int N = 1000;

int n, i, a;

float *C = new float[N];

bool flag = false;

 

cout<<"Лабораторная работа № 5\n";

 

cout<<"\n\nИндивидуальное задание № 1:\n";

cout<<"\nСоставить программу с использованием динамических\n";

cout<<"\nмассивов для решения задачи.\n";

cout<<"\n\nЗадача: составить программу, выдающую индексы заданного элемента\n";

cout<<"\nили сообщающую, что такого элемента в массиве нет.\n";

cout<<"\n\nРабота программы:\n";

 

A:

cout<<"\nВведите количество элементов: ";

cin >> n;

if(n <= 0 || n > N)

{

cout<<"\nНеверный размер массива!"<< "\n";

goto A;

}

cout<<"\nВведите элементы массива: \n\n";

for(i = 0; i < n; i++) cin >> C[i];

 

if(false)

{

B:

cout<<"\nТакого элемента в массиве нет!"<< "\n";

}

cout<<"\nВведите элемент массива, индексы которого хотите узнать: ";

cin >> a;

 

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

{

if (C[i] == a)

{

cout<<"\nИндекс заданного элемента: ";

cout << "[" << i << "]" << "\n";

flag = true;

}

else if((i+1) == n && flag == false)

goto B;

}

 

delete[] C;

getch();

return 0;

}

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

2. Индивидуальное задание №2:

2.1. Постановка задачи:

Составить программу с использованием динамических массивов для решения задачи на переупорядочивание элементов массива. В качестве алгоритма сортировки использовать метод быстрой сортировки массива. В одномерном массиве, состоящем из n вещественных элементов, вычислить:

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

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

Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.

2.2. UML-диаграмма:

2.3. Листинг программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <tchar.h>

 

using namespace std;

 

int sortirovka(float array[],int numberel)

{

int j=0;

float sum=0;

cout<<endl;

/********Алгоритм быстрой сортировки*******/

float middle,temp;

int *stackl=new int [numberel], *stackr=new int [numberel];

int sp,i,left,right;

sp=1;

stackl[1]=0; stackr[1]=numberel-1;

while(sp>0)

{

left=stackl[sp];

right=stackr[sp];

sp--;

while(left<right)

{

i=left;j=right;

middle=array[(left+right)/2];

while(i<j)

{

while(array[i]<middle) i++;

while(middle<array[j]) j--;

if (i<=j)

{

temp=array[i];

array[i]=array[j];

array[j]=temp;

i++;j--;

}

}

if (i<right)

{

sp++;

stackl[sp]=i;

stackr[sp]=right;

}

right=j;

}

}

 

cout <<"Результат быстрой сортировки: "<<endl;

for(i=0;i<numberel;i++) cout << array[i]<<" ";

cout<<endl;

delete [] stackl;

delete [] stackr;

/*******Сумма первых неотрицательных чисел******/

sum=0;

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

{

if (array[i]>0)

{

while (array[i]>0 && i<numberel)

{

sum+=array[i];

++i;

}

break;

}

}

cout<<"Сумма первых неотрицательных чисел = "<<sum<<endl;

j=0;

cout<<endl;

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

if (array[i]!=0) {array[j]=array[i]; ++j;}

for(int i=j;i<numberel;++i)

array[i]=0;

/*********Массив с нулями в конце************/

cout<<"Массив с нулями в конце: "<<endl;

cout<<endl;

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

{

cout<<array[i]<<"\t";

}

cout<<endl;

delete [] array;

return 0;

}

 

int _tmain(int argc, _TCHAR* argv[])

{

int metod=0;

int n=13,max,j=0;

cout<<"Способ заполнения массива: "<<endl;

cout<<"\t1-Вручную\n";

cout<<"\t2-Случайное заполнение\n";

cin>>metod;

if (metod==1)

{

cout<<"Введите число элементов ";

cin>>n;

float *m=new float [n],sum;

cout<<endl;

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

{

++j;

cout<<"Введите "<<j<<" элемент массива: ";

cin>>m[i];

}

sortirovka(m,n);

}

if (metod==2)

{

cout<<"генерация массива"<<endl;

float *l=new float [n];

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

l[j]=rand() %13;

 

cout<<"Полученный массив"<<endl;

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

cout<<l[j]<<"\t";

cout<<endl;

sortirovka(l,n);

}

return 0;

}

 

 

 

 

Лабораторная работа №6.
Двумерные массивы в языке C++

Цель работы и содержание: закрепление знаний о двумерных массивах, составление программ с двумерными массивами.

 

Ход работы

Основные сведения о двумерных массивах в языке С++. Двумерный массив представляется в C++ как массив, состоящий из массивов. Для этого при описании в квадратных скобках указывается вторая размерность. Если массив определяется с помощью операторов описания, то обе его размерности долж­ны быть константами или константными выражениями, поскольку инструкции по выделению памяти формируются компилятором до выполнения программы. На­пример:

 

int a[3][5]; //Целочисл. матрица из 3 строк и 5 столбцов

 

Массив хранится по строкам в непрерывной области памяти:

а00 а01 а02 а03 а04 а10 а11 а12 а13 а14 а20 а21 а22 а23 а24

/- - - 0-я строка - - - / - - - 1-я строка - - - - - / - - - 2-я строка - - - /

Строки массива ничем не отделены одна от другой. В памяти сначала располагается одномерный массив а[0], представляющий собой нулевую строку массива а, затем - массив а[1], представляющий собой первую строку массива а, и т. д. Количество элементов в каждом из этих массивов равно длине строки, то есть количеству столбцов в матрице. При просмотре массива от начала в первую очередь изменяется правый индекс (номер столбца).

Для доступа к отдельному элементу массива применяется конструкция вида а [ i ] [ j ], где 1 (номер строки) и j (номер столбца) - выражения целочисленного типа. Каж­дый индекс может изменяться от 0 до значения соответствующей размерности, уменьшенной на единицу.

Первый индекс всегда воспринимается как номер строки, второй - как номер столбца, не­зависимо от имени переменной.

Можно обратиться к элементу массива и другими способами: *(*(а + i) + j) или *(a[i] + j). Они приведены для лучшего понимания механизма индексации, по­скольку здесь в явном виде записаны те же действия, которые генерируются ком­пилятором при обычном обращении к массиву. Рассмотрим их подробнее.

Допустим, требуется обратиться к элементу, расположенному на пересечении вто­рой строки и третьего столбца - а[2][3]. Как и для одномерных массивов, имя массива а представляет собой константный указатель на начало массива. В дан­ном случае это массив, состоящий из трех массивов. Сначала требуется обратить­ся ко второй строке массива, то есть одномерному массиву а [2]. Для этого надо прибавить к адресу начала массива смещение, равное номеру строки, и выполнить разадресацию: *(а + 2). При сложении указателя с константой учи­тывается длина адресуемого элемента, поэтому на самом деле прибавляется число 2, умноженное на длину элемента, то есть 2 * (5 * sizeof(int)), поскольку элемен­том является строка, состоящая из 5 элементов типа int.

Далее требуется обратиться к третьему элементу полученного массива. Для полу­чения его адреса опять применяется сложение указателя с константой 3 (на самом деле прибавляется 3 * sizeof(int)), а затем применяется операция разыменова­ния для получения значения элемента: *(*(а + 2) + 3).

При описании массива можно задать начальные значения его элементов. Их запи­сывают в фигурных скобках. Элементы массива инициализируются в порядке их расположения в памяти. Например, оператор

int а[3][5] = {1, 2, 1, 3, 5, 2, 3, 4, 5, 1, 1, 3, 2, 6, 1};

определяет матрицу со следующими значениями элементов:

1 2 1 3 5

2 3 4 5 1

1 3 2 6 1

Если количество значений в фигурных скобках превышает количество элементов в массиве, при компиляции будет выдано сообщение об ошибке. Если значений меньше, оставшиеся элементы массива инициализируются значением по умолча­нию (для основных типов это 0). Можно задавать начальные значения не для всех элементов массива. Для этого список значений констант для каждой строки за­ключается в дополнительные фигурные скобки. Вот, например, как заполнить еди­ницами нулевой и первый столбцы приведенного выше массива:

int а[3][5] = {{1, 1}, {1, 1}, {1, 1}};

Остальные элементы массива обнуляются.

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

int а[][5] = {{1, 1, 7, 7, 7}, {1, 1, 0}, {1, 1, 2, 2, 2}};



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-21 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: