bsuir.info
БГУИР: Дистанционное и заочное обучение
(файловый архив)
Вход (быстрый)
Регистрация
Категории каталога
Другое [236]
Форма входа
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Файловый архив
Файлы » ИТиУвТС » Другое

ОАиП, заочное ИИТ, 1 кр, 6 вариант
Подробности о скачивании 06.01.2012, 20:53
Задание №1

Создать программу вычисления указанной величины. Результат проверить при заданных исходных значениях.


При x = 16.5510-3, y = –2.75, z = 0.15   = –38.902.
–40.6307

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



Листинг:

#include <iostream>
using namespace std;
#include <conio.h>
#include <math.h>
int main()
{
double x, y, z, a, b , rez;
cout << "\n\t x,y,z = " << endl;
// Вводим исходные данные
cin >> x >> y >> z;
// Разбиваем наш пример на несколько частей; вычисляем первую часть
a = sqrt(10*(pow(x,1*1.0/3)+pow(x,y+2)));
// Вычисляем вторую часть
b = pow(asin(z),2)-fabs(x-y);
// Вычисляем ответ
rez = a*b;
cout << "\n x = " << x << "\n y = " << y << "\n z = " << z
// Выводим на экран
<< "\nRezult = " << rez << endl;
cout << "Press any key ... " << endl;
getch();
return 0;
}


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

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


Листинг:

#include <conio.h>
#include <math.h>
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double n1, n2, rez, nsum;
cout << "Input n1, n2" << endl;
// Вводим исходные дынные
cin >> n1 >> n2;
nsum=n1+n2;
// Находим ответ в соответствии с условиями
if ((nsum>=M_PI)&&(nsum<5.0)) {
rez = pow(sin(M_PI*n1+exp(n2)),2);
cout << " pi <= n1+n2 < 5" << endl;
} else if (nsum>=5.0) {
rez = pow(sin(M_PI*n2+n1),2);
cout << " n1+n2>=5 " << endl;
} else cout << "n1+n2<PI \t Net otveta" << endl;
cout.unsetf(ios::showpos);
// Вывовим ответ на экран
cout << "\n\t Rezult U = " << rez;
cout <<"\nPress any key ... " << endl;
getch();
}




Задание №3

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

Работу программы проверить для a = 0,1; b = 1,0; h = 0,1; значение параметра 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, s, y, rez; 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) {
s = 1; y=(1+2*pow(x,2))*exp(pow(x,2));
for(k = 1; k<=n; k++) {
rez=((2*k+1)/fact(k))*pow(x,2*k);
s+=rez; }
// Выводим результаты вычислений
printf("\n x= %1.1f 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) и значения его элементов вводить с клавиатуры) вычислить сумму элементов массива, расположенных между первым и вторым отрицательными элементами.
Структурная схема алгоритма:


Листинг:

#include <conio.h>
#include <iostream>
#include <iomanip>
#include <stdio.h>
using namespace std;
int main()
{
int a[20], n, i, pos1, pos2, s = 0;
// Вводим N <=20
cout << "\t Input 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++; while (a[i] >= 0) i++; pos2=i-1;
for(i = pos1; i <= pos2; i++) s+=a[i];
// Выводим полученный результат
cout << "\n Summa ot pos " << pos1 << " do pos " << pos2+2 << " 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[n-1][m-1]; mas[n-1][m-1]=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();
}

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

Дополнительное задание №6. Обработка структур с использо-ванием файлов

Написать программу обработки файла типа запись, содержащую сле-дующие пункты меню: «Создание», «Просмотр», «Коррекция» (добавление новых данных или редактирование старых), «Решение индивидуального задания».
Каждая запись должна содержать следующую информацию о студен-тах:
– фамилия и инициалы;
– год рождения;
– номер группы;
– оценки за семестр: по физике, математике, информатике, химии;
– средний балл.
Организовать ввод исходных данных, средний балл рассчитать по введен-ным оценкам.
Содержимое всего файла и результаты решения индивидувльного за-дания записать в текстовый файл.
Распечатать анкетные данные студентов интересующей вас группы. Фамилии студентов начинаются с букв В, Г и Д.


Листинг:
#include <stdio.h>
#include <io.h>
#include <string.h>
#include <conio.h>
#include <iostream>
#include <iomanip>
using namespace std;
struct T_BD{
char FIO[50];
double g_r;
char group[10];
double o_f;
double o_m;
double o_i;
double o_h;
double s_b;
} BD;
int size = sizeof(T_BD);
FILE *Fz, *Ft;
char File_Zap[] = "zapisi.dat";
char File_Rez[] = "rezult.txt";
void Out(T_BD);

int main()
{
int kod, i=0, j, kod2, x=0, pos; char qgroup[10];

Ft = fopen(File_Rez, "w");
while(true) {
ouch: puts("\n\n Create: 1 \n Edit: 2 \n View: 3 \n My Task: 4 \n EXIT: 0");
scanf("%d", &kod);
switch(kod)
{
case 1:
if ((Fz=fopen(File_Zap,"wb"))==NULL) {
puts("\n Create ERROR!");
return 0;
}
fclose(Fz);
printf ("\n Create New File %s !\n", File_Zap);
break;
case 2:
puts ("\n Add: 1 \n Correct: 2 \n Back: 0");
scanf("%d", &kod2);
switch(kod2)
{
case 1:
Fz= fopen(File_Zap,"ab");
printf("\n F.I.O.: ");
fflush(stdin);
gets(BD.FIO);
printf("\n The year of birth: ");
scanf("%lf", &BD.g_r);
printf("\n Group: ");
cin>>BD.group;
printf("\n Phisics: ");
scanf("%lf", &BD.o_f);
printf("\n Math: ");
scanf("%lf", &BD.o_m);
printf("\n IT knowledge: ");
scanf("%lf", &BD.o_i);
printf("\n Chemistry: ");
scanf("%lf", &BD.o_h);
BD.s_b=(BD.o_f+BD.o_m+BD.o_i+BD.o_h)/4;
fwrite(&BD, 1,size, Fz);
fclose(Fz);
break;
case 2:
puts("\nInput number of unit: "); scanf("%d",&pos); pos--;
Fz= fopen(File_Zap,"r+b");
fseek(Fz, pos*size, SEEK_SET);
fread(&BD,1,size,Fz);
printf("\n F.I.O.: ");
fflush(stdin);
gets(BD.FIO);
printf("\n The year of birth: ");
scanf("%lf", &BD.g_r);
printf("\n Group: ");
cin>>BD.group;
printf("\n Phisics: ");
scanf("%lf", &BD.o_f);
printf("\n Math: ");
scanf("%lf", &BD.o_m);
printf("\n IT knowledge: ");
scanf("%lf", &BD.o_i);
printf("\n Chemistry: ");
scanf("%lf", &BD.o_h);
BD.s_b=(BD.o_f+BD.o_m+BD.o_i+BD.o_h)/4;
fseek(Fz, pos*size, SEEK_SET);
fwrite(&BD, 1, size, Fz);
fclose(Fz);
break;
case 3: goto ouch; break;
} break;
case 3:
if ((Fz=fopen(File_Zap,"rb"))==NULL) {
puts("\n Open ERROR!");
return 0;
}
// Вывод на экран
printf ("\n\t--------- Informations ---------");
// Запись такой же информации в текстовый файл Ft
fprintf (Ft, "\n\t--------- Informations ---------");
while(1) {
if(!fread(&BD,size,1,Fz)) break;
Out(BD);
}
fclose(Fz);
break;
case 4:
Fz = fopen(File_Zap,"rb");
if ((Fz=fopen(File_Zap,"rb"))==NULL) {
puts("\n Open ERROR!");
return 0;
}
j=0;
while(1) {
if(!fread(&BD,size,1,Fz)) break;
j++;
}
fclose(Fz);
Fz = fopen(File_Zap,"rb");
if ((Fz=fopen(File_Zap,"r"))==NULL) {
puts("\n Open ERROR!");
return 0;
}
cout << "\n Input group:"; cin >> qgroup;
cout <<"\n----- T A S K -----\n";
for(i=0;i<j;i++) {fread(&BD,size,1,Fz);
if (stricmp(BD.group, qgroup)==0) { x++;
if (BD.FIO[0] == 'V') Out(BD);
if (BD.FIO[0] == 'G') Out(BD);
if (BD.FIO[0] == 'D') Out(BD); }
} if (x==0) {puts("No unit's");}

fclose(Fz);
break;
case 0:
fclose(Ft);
return 0;
}
}
}
//----------------- Функция вывода одной записи на экран и в файл --------------------
void Out(T_BD z)
{
printf(" \n %s, %1.0lf, %s, %1.0lf, %1.0lf, %1.0lf, %1.0lf, %1.1lf", z.FIO,z.g_r, z.group, z.o_f, z.o_m, z.o_i, z.o_h, z.s_b);
fprintf(Ft, "%s, %1.0lf, %s, %1.0lf, %1.0lf, %1.0lf, %1.0lf, %1.1lf", z.FIO,z.g_r, z.group, z.o_f, z.o_m, z.o_i, z.o_h, z.s_b);
}


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

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

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

1. Страуструп, Б. Язык программирования C++ / Б. Страуструп: 2-е изд.: В 2 т. – Киев: ДиаСофт, 1993.
2. Шилд, Г. Программирование на Borland С++ / Г. Шилд. – Минск : ПОПУРРИ, 1999.
Категория: Другое | Добавил: p1ggy
Просмотров: 1876 | Загрузок: 40
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]