Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ИТиУвТС / ОАИП; ИТиУТС; заочная ИИТ; контрольная; вариант 4; 1 семестр 2011;

.doc
Скачиваний:
15
Добавлен:
01.04.2014
Размер:
323.07 Кб
Скачать

Содержание

  1. Задание №1. Линейный вычислительный процесс……………………..3

  2. Задание №2. Реализация разветвляющихся алгоритмов……………….5

  3. Задание №3. Реализация циклических алгоритмов…………………….8

  4. Задание №4. Обработка одномерных массивов……………………...11

  5. Задание №5. Обработка двухмерных динамических массивов………14

Функции пользователя

Задание №1. Линейный вычислительный процесс

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

при исходных значениях x = 0.4104, y = –0.875, z = –0.47510-3

Листинг:

#include <iostream> //подключение библиотек

using namespace std;

#include <conio.h>

#include <math.h>

int main()

{

double x, y, z, a, b , rezult; //объявление переменных

cout << "\nVvedite x,y,z = " << endl;

cin >> x >> y >> z; //ввод значений переменных

a = pow(fabs(cos(x)-cos(y)),1+2*pow(sin(y),2)); //вычисление

b = 1+z+z*z/2+z*z*z/3+z*z*z*z/4;

rezult= a*b;

cout << "\n x = " << x << "\n y = " << y << "\n z = " << z

<< "\nRezultat = " << rezult << endl;

cout << "Press any key ... " << endl;

getch();

return 0;

}

Структурная схема алгоритма:

Экранная форма:

Задание №2. Реализация разветвляющихся алгоритмов

Цель работы: изучить операции сравнения, логические операции, операторы передачи управления if, switch, break. Написать и отладить программу вычисления значения rez в зависимости от поставленного условия.

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

rez =

#include <conio.h> //подключение библиотек

#include <math.h>

#include <iostream>

#include <iomanip>

using namespace std;

int main()

{

double r, m, rez; //объявление переменных

cout << "Input r, m" << endl;

cin >> r >> m; //ввод значений переменных

if ((fabs(r)>0.5)&&(fabs(r)<fabs(m)+0.5)) { /*вычисление

rez = (4*r+3*m)*pow(sin(m*m*m),2)/(r*r*r+m*m); выражения при

cout << " 0.5 <= fabs(r) < fabs(m)+ 0.5" << endl; условии № 1*/

} else if (fabs(r)>fabs(m)+0.5) { /*вычисление

rez = sqrt(fabs(r-m))*pow(cos(r*r),3); выражения при

cout << " fabs(r)>fabs(m)+0.5" << endl; условии № 2*/

} else cout << " r<0.5\t Error" << endl; /*сообщение о невыполнении ни

одного из условий*/

cout.unsetf(ios::showpos);

cout << "\n\t Rez = " << rez; //вывод результата

cout <<"\nPress any key ... " << endl;

getch();}

Структурная схема алгоритма:

Экранные формы:

Задание №3. Реализация циклических алгоритмов

Цель работы: изучить циклические операторы while, do-while, for, научиться реализовывать циклические алгоритмы. Составить и отладить программу.

Для каждого x, изменяющегося от a до b с шагом h, найти значения функции Y(x), суммы S(x) и |Y(x)–S(x)| и вывести в виде таблицы. Значения a, b, h и n вводятся с клавиатуры.

#include <conio.h>

#include <stdio.h>

#include <math.h>

double fact(int n) // описываем функцию вычисления факториала

{

int i, nfact;

nfact=1;

for (i=1; i<=n; i++) nfact=nfact*i;

return nfact;

}

int main()

{

double x, a, b, h, y, rez, s=0; int k, n;

puts("Input a,b,h,n");

scanf("%lf%lf%lf%d", &a, &b, &h, &n); //ввод данных

for(x = a; x<=b; x+=h) {y=cos(x); //производим вычисления

for(k=0; k<n; k++) {

rez=pow(-1,k)*(pow(x,2*k)/fact(2*k));

s+=rez;

}

printf("\n x= %8.2lf sum= %8.5lf fun= %8.5lf |Y(x) - S(x)| = %8.5lf ", x,s,y,fabs(y-s)); //вывод результата

}

puts("\nPress any key ... ");

getch();

}

Структурная схема алгоритма:

Экранная форма:

Задание №4. Обработка одномерных массивов

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

В одномерном целочисленном массиве (размер массива (не больше 20) и значения его элементов вводить с клавиатуры) вычислить cумму элементов массива, расположенных между первым и последним положительными элементами.

Листинг:

#include <conio.h>

#include <iostream>

#include <iomanip>

#include <stdio.h>

using namespace std;

int main()

{

int a[20], n, i, pos1, pos2, s = 0;

cout << "\t Vvedite N (<=20) "; //ввод N <=20

cin >> n;

cout <<"\n\t Massiv A" << endl;

for(i = 0; i < n; i++) { //ввод элементы массива

cout << "\t a[ " << i+1 << " ] = ";

cin >> a[i];

}

cout <<"\n a[n]=" << endl;

for(i = 0; i < n; i++) printf(" %d ", a[i]); //вывод элементы массива

i=0; while (a[i] <= 0) i++; //поиск первого положительного элемента

pos1=i+1; i++;

for(i = pos1; i < n; i++) {if(a[i]>0) pos2=i; } /*поиск последнего

for(i = pos1; i < pos2; i++) s+=a[i]; положительного элемента*/

cout << "\n Summa ot pos " << pos1 << " do pos " << pos2+1 << " ravna : " << s;

cout << "\n Press any key ... " << endl;

getch();

}

Структурная схема алгоритма:

Экранная форма:

Задание №5. Обработка двухмерных динамических массивов. Функции пользователя

Цель работы: изучить понятие «указатель», правила создания и приемы обработки динамических массивов на примере двухмерного массива. Познакомиться с механизмом составления и организации взаимодействия пользова­тельских функций, составить и отладить программу.

В двухмерном целочисленном массиве (размеры массива N, M и значения его элементов вводить с клавиатуры) найти указанное значение.

Массив в памяти разместить динамически (с использованием операций new и delete), ввод исходных данных и вывод полученных результатов выполнить в основной функции, а решение задачи оформить в виде отдельной функции пользователя. Не использовать глобальных переменных.

Найти минимальный элемент и поменять его с первым элементом.

Листинг:

#include <iostream>

using namespace std;

#include <conio.h>

int Fun_Mas_Change(int n, int m, int **mas) /* описание функции

{ обработки массива*/

int i, j, min=mas[0][0], p1=0, p2=0;

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

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

if(mas[i][j] < min){

min=mas[i][j];

p1=i; p2=j;

}

mas[p1][p2]=mas[0][0]; mas[0][0]=min;

cout <<"\n Matrix (after changes) :" << endl;

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

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

cout << "\t" << mas[i][j];

cout << endl;

}

}

int main ()

{

int **a, i, j, n, m;

cout << "\t Input N, M : "; //ввод размерности массива

cin >> n >> m;

a = new int*[n]; //резервирование памяти под массив

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

a[i] = new int[m];

cout <<"\n Input Massiv" << endl;

for(i=0; i<n; i++) //ввод массива

for(j=0; j<m; j++){

cout << "\t mas[" << i+1 << "][" << j+1 << "] = ";

cin >> a[i][j];

}

cout <<"\n Matrix :" << endl;

for(i=0; i<n; i++) { //вывод исходного массива

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

cout << "\t" << a[i][j];

cout << endl;

}

Fun_Mas_Change(n, m, a); //выполнение функции обработки массива

delete []a;

cout << "\n\t Delete !" << endl;

cout << " Press any key ... " << endl;

getch();

}

Структурная схема алгоритма:

Экранная форма:

Основная литература

1. Батура М.П., Бусько В.Л., Корбит А.Г., Кривоносова Т.М. Основы алгоритмизации и программирования. Язык Си : учеб. пособие. – Минск : БГУИР, 2007.

2. Бусько В.Л., Карцев В.Т., Кривоносова Т.М., Навроцкий А.А. Основы программирования в среде С++ Builder: лаб.практикум по курсу «Основы алгоритмизации и программирования» для студ. 1 – 2-го курсов БГУИР. В 2 ч. Ч.1 . – Минск: БГУИР, 2007.

Дополнительная литература

1. Страуструп, Б. Язык программирования C++ / Б. Страуструп: 2-е изд.: В 2 т. – Киев: ДиаСофт, 1993.

2. Шилд, Г. Программирование на Borland С++ / Г. Шилд. – Минск : ПОПУРРИ, 1999.

18