Программирование с возвратом из функций нескольких значений 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Программирование с возвратом из функций нескольких значений



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

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

Пример 1. Написать программу, функция в которой будет вычислять квадрат и куб аргумента. (Одно значение будем возвращать из функции оператором return, другое будет записываться по указателю int*.)

# include <stdio.h>                                              

# include <iostream.h> // для потоковых функций ввода/вывода

int fun(int, int*);                        // прототип функции

Void main()

{

int a, kub, qv;

cin>>a;                                 // ввод из потока

qv=fun(a,&kub); //исходное число, адрес ячейки,

куда поместить второе значение

cout<<"для числа " << a<< "\t квадрат=" <<qv<<"\t куб=" <<kub; // вывод

}

int fun(int k, int* p)

{

*p=k*k*k; // значение куба помещаем по адресу *p

 return k*k;

}

 

Пример2. Ввести три массива A[1..3], B[1..4], C[1..5] (подпрограммой). Вычислить средние арифметические и геометрические значения в каждом из них.

Для решения задачи pазpаботана СА (pис.11), состоящая из ос­новной программы (а) и двух подпрограмм: одной - для ввода элементов массива (б), другой - для определения среднего арифметического и среднего геометрического значений в массиве (в), а также следующая пpогpамма для реализации алгоритма:

#include <stdio.h>

#include <math.h>

#include <conio.h>


int vvod(int d[])

{

     int i, k;

     printf("Vvedite chislo elementov ");

     scanf("%d",&k);

     printf("Vvedite massiv is %d elementov \n", k);

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

              scanf("%d", &d[i]);

     return k;

}

float sr(int k, int f[], double *g)

{

     int i;

     long int s, p;

     s = 0; p = 1;

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

     {

              s += f[i];          // s = s + f[i];

              p *= f[i];           // p = p * f[i];

     }

     *g = pow((double)p, 1.0/k);

     return ((float)s)/k;

}

Void main ()

{

int ka, kb, kc; double ga, gb, gc;

int a[5], b[5], c[5];

clrscr();

ka=vvod(a);

       printf("srA = %5.2f \t ", sr(ka,a,&ga));

       printf(" srGA = %5.2f \n", ga);

kb=vvod(b);

       printf("srA = %5.2f \t ",sr(kb,b, &gb));

       printf("srGB = %5.2f \n", gb);

kc=vvod(c);

       printf("srA = %5.2f \t ",sr(kc,c, &gc));

       printf("srGC = %5.2f \n", gc);

getch();

}

Задание 1 (программа 9_1)

Написать и отладить программу для задачи из лабораторной работы 7 с выделением алгоритма обработки или формирования массива. Организовать вызов процедуры с параметрами-массивами для двух наборов исходных данных. (Для ускорения отладки массив можно задать константой).

Задание 2 (программа 9_2)

1. Даны массивы A [1..6], B [1..6], C [1..6], вычислить суммы положительных и отрицательных элементов. Получить А*B, B*С, А*C. Вычисление произведения массивов оформить подпрограммой.

2. Даны массивы A [1..5], B [1..6]. Получить новые массивы путем сдвига элементов в массивах  на два разряда вправо, освободившиеся слева элементы обнулить. Сдвиг элементов в массиве оформить подпрограммой, из подпрограммы вернуть выпавшие справа разряды.

3. Даны два одномерных массива А [1..6] и C [1..6]. Получить A2, С2, А*С. Подсчитать число четных и число нечетных чисел в полученных массивах. Перемножение массивов и подсчет выполнить в подпрограмме.

4. Даны матрицы целых чисел S[1..3,0..2], K[1..3,0..2], в которых имеется по два одинаковых числа. Найти и напечатать их значения и индексы.

5. Вычислить значение функции Z = x1+ex2, где x1, x2 - корни уравнения Aix2+Bix+Ci = 0, где i = 1,2,..,N. Коэффициенты уравнения заданы в массивах A [1..N], B [1..n], C [1..N]. Для вычисления корней использовать подпрограмму.

6. Составить подпрограмму для переменных двух квадратных матриц, с помощью которой вычислить вторую, третью и четвертую степени матрицы M [1..5,1..5]. Для каждой матрицы вычислить сумму и среднее арифметическое значение элементов.

7. Даны массивы A [1..6], B [1..6], C [1..6]. Преобразовать их, каждому элемен-ту массива, присваивая значение, соседнего с ним справа. Последнему элементу присвоить значение первого. Напечатать исходные, результирующие массивы и отдельно последние два элемента результирующего.

8. По заданным вещественным массивам A[1..6], B[1..6] и С[1..6] вычислить (minAi)/maxAi + (maxCi)/min(Ci) + max(B+C)I / min(B+C)i.

9. Даны массивы A [1..6], B[1..8]. Выбрать из них положительные элементы и записать соответственно в массивы A [1..k] и B [1..k], где k<6, n<8; из отрицательных элементов сформировать массивы A2 [1..6-k],B2 [1..8-n]. Напечатать суммы и произведения элементов для каждого.

10. Даны массивы A [1..6], B [1..6], C [1..6]. Переставить элементы в них таким образом, чтобы слева подряд были записаны отрицательные, а справа положительные, подсчитать количество положительных и число отрицательных в каждом массиве.

11. Даны две целые квадратные матрицы четного порядка. Элементы массивов с четными номерами строки и столбца заменить нулем (стереть). Напечатать исходные и полученные массивы, количество четных и число нечетных чисел в каждом.

12. Даны одномерные массивы A[1..6], B[1..8], C[1..10]. Записать их в виде матриц AA [1..3,1..2], BB [1..2,2..4], CC [1..5,1..2], найти наименьшие элементы в каждой и напечатать их номера.

13. Даны две целые квадратные матрицы шестого порядка. Распечатать элементы главных диагоналей каждой из них и вычислить суммы элементов отдельно главной и побочной  диагоналей.

14. По заданным 10 элементам вещественных массивам A, B и С вычислить

 

15. Даны матрицы целых чисел V (-1..2,0..3), W [1..3,0..2]. Сформировать из них одномерные массивы VV и WW, записывая элементы построчно. Напечатать индексы исходных мартиц для максимальных значений.

16. Дана матрица чисел H [1..5,1..6]. Переставить элементы в строкам матрицы таким образом, чтобы они были расположены в порядке возрастания их модулей.  Подсчитать сколько в исходных матрицах положительных и отрицательных чисел.

17. Дана матрица чисел G [1..2,1..6]. Переставить элементы в матрице так, чтобы элементы каждого столбца матрицы были смещены циклически вправо. Перестановку элементов в столбце реализовать подпрограммой, напечатать два «выпавших» элемента.

18. Даны массивы A [1..6], B [1..6], C [1..6]. Упорядочить элементы в них в порядке убывания их модулей, напечатать наименьшее и наибольшее значения.

19. Даны две матрицы целых чисел V [1..2,1..3], W [1..2,1..3]. Найти общие суммы элементов строк, из функции вернуть две суммы.

20. Даны две целые квадратные матрицы шестого порядка. Вычислить суммы элементов выше главной диагонали и ниже нее. Определить, можно ли отражением относительно главной диагонали преобразовать одну в другую.

Лабораторная работа 10



Поделиться:


Последнее изменение этой страницы: 2021-07-18; просмотров: 118; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.221.53.209 (0.01 с.)