
ИТиУвТС / ОАИП; ИТиУТС; заочная ИИТ; контрольная; вариант 4; 1 семестр 2011;
.docСодержание
-
Задание №1. Линейный вычислительный процесс……………………..3
-
Задание №2. Реализация разветвляющихся алгоритмов……………….5
-
Задание №3. Реализация циклических алгоритмов…………………….8
-
Задание №4. Обработка одномерных массивов……………………...11
-
Задание №5. Обработка двухмерных динамических массивов………14
Функции пользователя
Задание №1. Линейный вычислительный процесс
Цель работы: изучить правила составления текстов программ, научиться реализовывать линейные алгоритмы. Написать и отладить программу линейного алгоритма вычисления функции
при
исходных значениях x
= 0.4104,
y = –0.875, z
= –0.47510-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.