Читайте также:
|
|
11. В массивах А[n], G[n], F[n] содержатся оценки учащихся по алгебре, геометрии и физике соответственно. Определить среднюю оценку по алгебре и количество учащихся, не имеющих ни одной «двойки».
12. Из массива целых чисел составить три других, в первый из которых записать числа, кратные 5, во второй - числа, кратные 7, а в третий - остальные числа.
13. Дана последовательность из 100 различных чисел. Составить программу нахождения суммы чисел этой последовательности, расположенных между максимальным и минимальным числами (в сумму включить и оба эти числа)
14. Задан одномерный числовой массив. Вычислить сумму произведений всех пар соседних чисел
15. Определить в одномерном числовом массиве число соседств из двух чисел разного знака.
16. Проверить, имеется ли в данном одномерном числовом массиве хотя бы одна пара чисел, совпадающих по величине.
17. Проверить, имеется ли в одномерном числовом массиве хотя бы одна пара соседних чисел, являющихся противоположными.
18. Дан числовой массив a1, a2, …an. Вывести на печать массив b1, b2,… bn, в котором bi= a1, b2= a1+a2, b3= a1+a2+a3 и т.д.
19. В заданном массиве найти максимальный элемент. Элементы, стоящие после максимального элемента заменить нулями.
20. Из чисел a1, a2, …., an выбрать те, которые меньше заданного числа с, и образовать из них новый массив, сохранив порядок следования элементов.
21. В массиве {aj}, j = 1, 2, …10 есть хотя бы один отрицательный элемент. Вычислить произведение элементов массива до первого отрицательного.
22. В массиве {aj}, j = 1, 2, …8 есть хотя бы один нуль. Вычислить произведение массива до первого нуля
23. В массиве {aj}, j = 1, 2, …8 есть хотя бы один отрицательный элемент. Вычислить сумму элементов массива до первого отрицательного элемента.
24. В массиве {aj}, j = 1, 2, …8 есть хотя бы один ноль. Вычислить сумму элементов массива до первого нуля.
25. В массиве {aj}, j = 1, 2, …10 есть положительные и отрицательные элементы. Вычислить произведение положительных элементов.
26. В массиве {aj}, j = 1, 2, …10 подсчитать количество элементов, больших 3
27. Найти сумму первых чисел последовательности a1, a2, …., an, произведение которых не превосходит заданного числа M.
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Горошко А.А., БАС-051\n";
cout<<"\nВариант № 6\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;
}
2.4. Результаты работы программы:
Лабораторная работа №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-10-26; просмотров: 271 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Операнд_1 ? операнд_2 : операнд_3 7 страница | | | Пример 6.1. Среднее арифметическое и количество положительных элементов |