Копия СистемыПрограммирования
.pdfЛабораторная работа № 3
ПРИМЕНЕНИЕ АДРЕСОВ И УКАЗАТЕЛЕЙ ПРИ ВОЗВРАТЕ ИЗ ФУНКЦИЙ НЕСКОЛЬКИХ ЗНАЧЕНИЙ
Если необходимо из функции вернуть несколько значения, их помещают по заданным адресам.
Пример 1. Вычислить среднее арифметическое значение для наименьших и отдельно для наибольших элементов в каждом из трех массивов.
#include <stdio.h> #include <math.h> #include <conio.h>
int a[5] ={5,2,7,4,8}, b[5] ={3,4,5,6,6}, c[5] ={3,8,5,2,6};//Глобальные переменные
int mm(int d[5], int* mx) // Заголовок функции
{
int min, max, i; min = d[0]; max = d[0];
for (i=1; i<5; i++)
{
if (d[i]<min) min=d[i]; if (d[i]>max) max=d[i];
|
} |
|
|
printf("Минимальный элемент равен = %d\n",min); |
|
|
printf("Максимальный элемент равен = %d\n",max); |
|
|
*mx = max; |
|
|
return min; |
|
} |
// |
Конец блока функции |
void main() |
|
|
{ |
// |
Блок основной программы |
|
int n, mxA, mxB, mxC; |
|
|
double srMin, srMax; |
|
srMin=(double)(mm(a,&mxA)+mm(b,&mxB)+mm(c,&mxC))/3; // три обращения к функции
printf("srMin = %g\n",srMin); srMax=(double)(mxA+mxB+mxC)/3; printf("srMax = %g\n",srMax); getch();
}
11
Пример 2. Заполнить таблицу Пифагора и вычислить сумму ее элементов с использованием передачи в функцию указателя на указатель.
#include <iostream> using namespace std;
double zapoln(int **M, int m, int n); void print(int **M, int m, int n); double S=0;
int main()
{
int m = 10; //Количество строк в массиве int n = 10; //Количество столбцов в массиве int **A; //Двумерный массив
//Создание двумерного массива
A = new int*[m]; //Создание массива указателей for (int i=0; i<m; i++)
A[i] = new int[n];
double sum = zapoln(A, m, n); //Заполнение массива print(A, m, n); //Вывод массива
cout <<"Summ = " << sum << endl; return 0;
}
double zapoln(int **M, int m, int n)
{
for (int i=0; i<m; i++) for (int j=0; j<n; j++)
{
M[i][j] = (i+1)*(j+1); S+=M[i][j];
}
return S; //Возврат суммы элементов
}
void print(int **M, int m, int n)
{
for (int i=0; i<m; i++)
{
for (int j=0; j<n; j++)
12
{
cout.width(5); cout << M[i][j];
}
cout << endl;
}
}
Задание (программа 3_1)
Разработать программы из нескольких функций, возвращающих два и более значений, для следующих задач.
1.Составить подпрограмму для перемножения двух квадратных матриц,
спомощью которой вычислить вторую, третью и четвертую степени матрицы M [1..5,1..5]. Для каждой матрицы вычислить сумму и среднее арифметическое значение элементов.
2.Даны массивы A [1..6], B [1..6], C [1..6], вычислить суммы положительных и отрицательных элементов. Получить А*B, B*С, А*C.
3.Даны две матрицы целых чисел V [1..2,1..3], W [1..3,1..2]. Найти суммы элементов строк и столбцов в этих матрицах. Сравнить общие суммы элементов в соответствующих матрицах, вычисленные через суммы строк и суммы столбцов.
4.По заданным вещественным массивам A [1..6], B [1..6] и C [1..6] вычис-
лить
(max B) / min B +(max(C + B)) / min(B +C) |
при min A < max B, |
Y = |
случае. |
max(B +C) +max A / min A в противном |
5.Даны две матрицы целых чисел V [1..2,1..3], W [1..2,1..3]. Найти общие суммы элементов строк, из функции вернуть две суммы.
6.Даны массивы A [1..5], B [1..6]. Получить новые массивы путем сдвига элементов в массивах на два разряда вправо, освободившиеся слева элементы обнулить. Сдвиг элементов в массиве оформить подпрограммой, из подпрограммы вернуть выпавшие справа разряды.
7.Даны две целые квадратные матрицы четного порядка. Элементы массивов с четными номерами строки и столбца заменить нулем (стереть). Напечатать исходные и полученные массивы. Подсчитать количество четных и нечетных чисел в каждом.
8.Вычислить значение функции Z = x1+ex2, где x1, x2 – корни уравнения Aix2 + Bix + Ci= 0, где i = 1, 2,.., N. Коэффициенты уравнения заданы в массивах A [1..N], B [1..n], C [1..N]. Для вычисления корней использовать подпрограмму.
13
9.Даны две целые квадратные матрицы шестого порядка. Распечатать элементы главных диагоналей каждой из них и вычислить суммы элементов отдельно главных и побочных диагоналей.
10.Даны два одномерных массива А [1..6] и C [1..6]. Получить A2, С2, А*С. Подсчитать число четных и число нечетных чисел в полученных массивах. Перемножение массивов и подсчет выполнить в подпрограмме.
11.Даны массивы A [4][4], B [4][4]. Получить новые массивы путем сдвига элементов в массивах на два разряда вправо, освободившиеся слева элементы обнулить. Сдвиг элементов в массиве оформить подпрограммой, из подпрограммы вернуть суммы элементов выше главной диагонали и отдельно ниже.
12.Даны три одномерных массива вещественных чисел A [1..6], B [1..8] и
С[1..7]. Найти среднее геометрическое значение положительных элементов и номера ближайших к ним элементов для каждого массива.
13.Даны две матрицы целых чисел S [1..3,0..2], К [1..3,0..2], в каждой из которых имеется по два одинаковых числа. Распечатать их значения.
14.Даны массивы A [1..6], B [1..6], C [1..6]. Преобразовать их, каждому элементу массива присваивая значение соседнего с ним справа. Последнему элементу присвоить значение первого. Напечатать исходные, результирующие массивы и отдельно последние два элемента результирующего.
15.По заданным элементам вещественных матриц A, B и С вычислить
z = (max (bi )) / max (ai ) +(max (ci )) / max (b +c)i при min Ai < min Bimin (b +c)i +min (ci ) +min (ai ) при min Ai > min Bi.
16. По заданным вещественным массивам A [1..6], B [1..6] и С [1..6] вычис-
лить (min Ai) / max Ai + (max Ci) / min (Ci) + max (B + C)I / min (B + C)i.
17.Даны две целые квадратные матрицы четного порядка. Напечатать массивы, транспонированные матрицы, количество четных и число нечетных чисел
вкаждой.
18.Даны массивы A [1..6], B [1..8]. Выбрать из них положительные элементы и записать соответственно в массивы A [1..k] и B [1..k], где k < 6, n < 8; из отрицательных элементов сформировать массивы A2 [1..6-k], B2 [1..8-n]. Напечатать суммы и произведения элементов для каждого.
19.Даны квадратные матрицы A, С и B размером 4x4 каждая. Напечатать средние арифметические значения в них отдельно для положительных и отрицательных элементов.
20.Даны массивы целых чисел F [8], В [8]. Найти и напечатать значения и индексы минимальных элементов, сколько в каждом массиве таких же.
14
21.Даны три одномерных массива вещественных чисел A [1..6], B [1..8] и
С[1..7]. Найти среднее геометрическое значение положительных элементов и номера ближайших к ним элементов для каждого массива.
22.Даны две целые квадратные матрицы шестого порядка. Распечатать элементы главных и побочных диагоналей каждой из них, вычислить суммы элементов отдельно главных и побочных диагоналей.
|
Лабораторная работа № 4 |
|
СОЗДАНИЕ ПРОЕКТОВ ИЗ НЕСКОЛЬКИХФАЙЛОВ В ECLIPSE IDE С/С++ |
||
|
Инструкция по работе в Eclipse IDE С/С++ |
|
Главное окно (рабочее место) среды разработки программного обеспечения |
||
Eclipse IDE представлено на следующем рисунке. |
|
|
|
5 |
|
|
4 |
2 |
|
1 |
3 |
Рабочее место разделено на части (перспективы): |
|
|
1) |
обозреватель проекта, |
|
2) |
редактор исходного кода, |
|
3) |
обозреватель консоли, |
|
4) |
файл исходного кода, |
|
5) |
меню “Project”. |
|
|
15 |
|
Вобозревателе проекта (Project Explorer) создаются проекты. В окне редактирования вводится и редактируется исходный код. Eclipse IDE использует консоль для показа различных сообщений или выходной информации от консольных приложений.
Для создания проекта необходимо выполнить File > New > C Project. Также можно создать проект, используя контекстное меню по клику правой кнопкой мыши на Project Explorer, и выбрать New > C Project во всплывающем окне.
Вдиалоговом окне необходимо задать имя проекта и нажать кнопку «Finish». При успешном создании проекта он отобразится в Project Explorer.
Далее необходимо создать файл исходного кода C. Для чего нужно щелкнуть правой кнопкой мыши на проект в Project Explorer и выбрать New > Source file.
В появившемся диалоговом окне нужно ввести имя исходного файла и задать для него расширение .c. Файл появится в обозревателе проекта (поле 4). Далее в окно редактора исходного кода ввести текст программы.
Для компиляции программы необходимо выбрать в меню «Project» (поле 5) опцию «Build Project» или щелкнуть правой кнопкой мыши на проект в Project
16
Explorer и выбрать ту же опцию «Build Project». Если в проекте нет ошибок, то можно запустить приложение нажатием клавиш <Ctrl + F11>.
При модульном программировании проектируется структура главной программы, затем разрабатываются и программируются модули.
Пример. Найти соотношение между максимальными элементами для массивов А и В.
Выделим вычисление наибольшего элемента в подпрограмму, которую вынесем в отдельный модуль.
#include <stdio.h> #include <conio.h>
#include "r_pos.h" // подключение модуля из текущего каталога int i;
void main()
{
int a[8], b[8]; int s;
printf("Введите массив A из 8 чисел типа int \n"); for ( i=0; i<8; ++i )
scanf("%d", &a[i]);
printf("Введите массив B из 8 чисел типа int\n"); for (i=0; i<8; ++i)
scanf("%d",&b[i]); printf("Сообщение = ");
printf(" max(A)/max(B) = %6.3f \n", (float)max(a)/max(b)); getch();
}
// Интерфейсная часть модуля r_pos
typedef int * mass; int max(mass d); extern int i;
// Исполняемая часть модуля
int max( mass d )
{
int mx; mx = d[0];
for (i=1; i<8; ++i)
17
if (mx < d[i]) mx = d[i]; printf(" %d: ", mx);
return mx;
}
Задание (программа 4_1)
Разработать программы, скрыв подпрограммы в отдельном файле (модуле), при этом использовать передачу параметров в функции и глобальную переменную, на которую по возможности организовать ссылку из другого файла (модуля).
1.Для матриц целых чисел S [1..3,0..2], K [1..3,0..2], в которых имеется по два одинаковых числа, найти и напечатать их значения и индексы.
2.Даны две матрицы целых чисел M [1..3,0..1], К [1..3,0..2]. Найти средние арифметические значения для каждой из них и индексы ближайших к ним чисел.
3.Для массивов A [1..6], B [1..6], C [1..6], переставить элементы в них таким образом, чтобы слева подряд были записаны отрицательные, а справа положительные числа. Подсчитать количество положительных, отрицательных и нулевых элементов в каждом массиве.
4.Даны одномерные массивы A [1..6], B [1..8], C [1..10]. Записать их в виде матриц AA [1..3,1..2], BB [1..2,1..4], CC [1..5,1..2], найти наименьшие элементы
вновых и напечатать их номера.
5.Для заданных матриц целых чисел V (-1..2,0..3), W [1..3,0..2] сформировать одномерные массивы VV и WW, записывая элементы построчно. Напечатать индексы исходных матриц для максимальных значений и сами значения.
6.Дана матрица чисел H [1..5,1..6]. Переставить элементы в строках матрицы таким образом, чтобы они были расположены в порядке возрастания их модулей. Подсчитать, сколько в исходных матрицах положительных, отрицательных чисел и нулей.
7.В матрице чисел G [1..3,1..6] переставить элементы так, чтобы элементы каждого столбца матрицы были смещены циклически вправо. Перестановку элементов в столбце реализовать подпрограммой, напечатать три «выпавших» элемента.
8.Даны массивы A [1..8], B [1..8], C [1..8]. Упорядочить элементы в них в порядке убывания их модулей, напечатать наименьшее и наибольшее значения и их номера.
9.Для заданных массивов A [4][4], B [1][6], C [4][6] вычислить суммы положительных и отдельно отрицательных элементов, число нулей.
18
10.Даны две матрицы целых чисел V [1..2,1..3], W [1..2,1..3]. Найти общие суммы элементов столбцов, из функции вернуть три суммы.
11.По элементам двух массивов А [5][5] и C [5][5] получить A2, С2, А*С. Подсчитать число положительных, число отрицательных чисел и нулей в полученных массивах. Перемножение массивов и подсчет выполнить в подпрограмме.
12.Даны матрицы целых чисел S [0..3,0..2], K [0..3,0..2]. Найти и напечатать значения и индексы минимальных элементов.
13.Для матриц, состоящих из целых чисел S [3][3], С [3][3], B[3][3], найти и напечатать значения и индексы максимальных элементов.
14.Даны две матрицы целых чисел А [3][2], К [3][2]. Найти средние арифметические значения для каждой из них и индексы ближайших к ним чисел.
15.Для матриц F [4][4], С [4][4] найти и напечатать значения и индексы максимальных по модулю отрицательных элементов и отдельно положительных.
16.Даны одномерные массивы К [1..8], C [1..10]. Записать их в виде матриц
КК[1..2,1..4], CC [1..5,1..2], найти наибольшие элементы в каждой и напечатать их индексы.
17.Для трех одномерных массивов целых чисел A [1..9], B [1..8] и С [1..7] подсчитать количество неотрицательных элементов в каждом и найти по два ближайших к ним числа.
18.Даны матрицы целых чисел F [4][4], С [4][4]. Найти и напечатать значения и индексы минимальных по значению положительных элементов, отличных от нуля.
19.Для каждой из трех матриц вещественных чисел найти среднее геометрическое значение положительных элементов и индексы ближайших к ним элементов.
20.Даны квадратные матрицы A и B размером 5х5. Выбрать из них положительные и отрицательные элементы и записать соответственно в массивы Aпол, Аотр и Bпол, Вотр. Подсчитать количество чисел в каждом полученном массиве. Найти средние арифметические и средние геометрические значения элементов для каждого массива.
21.Для квадратных матриц A и B размером 5х5 напечатать средние арифметические значения и ближайшие к ним в каждой матрице.
22.Даны массивы целых чисел К [7], В [7], G [7]. Найти и напечатать значения и индексы максимальных элементов, сколько в каждом массиве элементов, совпадающих с максимальным.
19
Лабораторная работа № 5
ПРОГРАММИРОВАНИЕ С ВОЗВРАТОМ ИЗ ФУНКЦИИ СТРУКТУР
Структуры состоят из ряда полей, поэтому в одной функции можно вычислить несколько значений и поместить в разные поля структуры. Поскольку структура является единым объектом, то ее целиком можно возвратить из функции оператором return.
Пример. Вычислить сумму элементов, максимальное и минимальное значения в массиве с использованием возврата из функции структуры.
#include <stdio.h> typedef struct array_info
{
int max, min, sum;
}
ARRAY_INFO;
ARRAY_INFO GetArrayInfo(int*, int); ARRAY_INFO GetArrayInfo(int* array, int len)
{
ARRAY_INFO info = {array[0], array[0], array[0]}; int i = 1;
while(i < len)
{
if (array[i] > info.max) info.max = array[i]; if (array[i] < info.min) info.min = array[i]; info.sum += array[i];
i++;
}
return info;
}
int main()
{
int mass[6] = {1, 22, 3, -4, 5, 6}; int len = 6;
ARRAY_INFO s = GetArrayInfo(mass, len); printf("min=%d max=%d sum=%d",s.min, s.max, s.sum); return 0;
}
20