Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабРаб08.doc
Скачиваний:
21
Добавлен:
30.03.2015
Размер:
386.56 Кб
Скачать

Программирование на языке С++ и Вuilder C++

лабораторные работы

Омск 2008

Составители: Ольга Павловна Шафеева, канд.техн.наук, доцент,

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

1. Определить остаток от деления на восемь введенного числа х и написать восьмиричную цифру прописью.

2. По цифре, введенной с клавиатуры, напечатать название этой цифры.

3. С клавиатуры ввести число k (1..30). Определить, какому дню недели оно соответствует, если первое число - понедельник.

4. Ввести число и номер месяца. Напечатать дату прописью.

5. Идет k секунда суток. Вычислить, сколько прошло часов и полных минут к этому моменту, при этом согласовать со значением слова (час, часа, часов, минута, минуты, минут).

6. В зависимости от номера (N) типа фигуры, организовать ввод необходимых данных и вычислить при N = 1 - площадь круга, N = 2 - объем шара (4/3πR3), N=3 -объем цилиндра, N = 4 - площадь поверхности сферы 4πr2.

7. Ввести число N (0 ≤ N ≤ 15). Определить и напечатать шестнадцатеричную цифру, ему соответствующую.

8. Для целого числа К (1…99) напечатать фразу « Мне К лет », при определенных значениях К слово «лет» заменить словом «год» или «года».

9. В зависимости от номера (N) типа фигуры, организовать ввод необходимых данных и вычислить при N = 1 - площадь прямоугольника, при N=2 - площадь параллелограмма, при N = 3 - площадь трапеции 1/2(a+b)h. В последнем случае напечатать: является ли трапеция параллелограммом или ромбом.

10. Перевести число 0 ≤ х ≤ 31 в шестнадцатеричную систему счисления.

11. Напечатать прописью остаток от деления любого целого числа на пять.

12. По введенному номеру напечатать нужный цвет в радуге.

13. Спроектируйте программу, которая показывает, что, если сумма цифр двузначного числа кратна трем, то и само число делится на три без остатка.

14. Разработайте программу, которая доказывает, что квадрат двузначного числа k5 (последняя цифра - 5), равен k * (k + 1) * 100 + 25 (т.е. может быть получен умножением старшей цифры k на следующую по порядку и припиской «25»). Например, 35 * 11 = 3*4*100 + 25.

Для задания 2 номер варианта определяется остатком от деления индивидуалного варианта на число 12.

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

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

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

Для возврата значений из функции можно использовать два способа. Первый способ заключается в использовании глобальных переменных. Второй способ позволяет возвратить одно значение с помощью оператора 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. Даны массивы 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. Даны две целые квадратные матрицы шестого порядка. Вычислить суммы элементов выше главной диагонали и ниже нее. Определить, можно ли отражением относительно главной диагонали преобразовать одну в другую.