
ВОЕННАЯ АКАДЕМИЯ РЕСПУБЛИКИ БЕЛАРУСЬ Кафедра информационно-вычислительных систем
КУРСОВАЯ РАБОТА по учебной дисциплине «КОНСТРУИРОВАНИЕ ПРОГРАММ» ТЕМА РАБОТЫ: «РАЗРАБОТКА АЛГОРИТМА И ПРОГРАММЫ ПО РАСЧЕТУ ЭЛЕМЕНТОВ ДИНАМИЧЕСКОГО МАССИВА»
РУКОВОДИТЕЛЬ
ИСПОЛНИТЕЛЬ курсант 413 учебной группы
МИНСК 2013 |
СОДЕРЖАНИЕ
Введение 3
Постановка задачи 4
Схема алгоритма программы 5
Разработки СИ-программы 7
Исходный текст СИ-программы 9
Результат вычислений 11
Заключение 12
Литература 13
ВВЕДЕНИЕ
Первый коммерческий транслятор нового языка, получившего название C++ появился в 1983 году. Он представлял собой препроцессор, транслировавший программу в код на С. Однако фактическим рождением языка можно считать выход в 1985 году книги Страуструпа . Именно с этого момента C++ начинает набирать всемирную популярность.
Главное нововведение C++ - механизм классов, дающий возможность определять и использовать новые типы данных. Программист описывает внутреннее представление объекта класса и набор функций-методов для доступа к этому представлению. Одной из заветных целей при создании C++ было стремление увеличить процент повторного использования уже написанного кода. Концепция классов предлагала для этого механизм наследования. Наследование позволяет создавать новые (производные) классы с расширенным представлением и модифицированными методами, не затрагивая при этом скомпилированный код исходных (базовых) классов. Вместе с тем наследование обеспечивает один из механизмов реализации полиморфизма - базовой концепции объектно-ориентированного программирования, согласно которой, для выполнения однотипной обработки разных типов данных может использоваться один и тот же код. Собственно, полиморфизм - тоже один из методов обеспечения повторного использования кода.
Введение классов не исчерпывает всех новаций языка C++. В нем реализованы полноценный механизм структурной обработки исключений, отсутствие которого в С значительно затрудняло написание надежных программ, механизм шаблонов - изощренный механизм макрогенерации, глубоко встроенный в язык, открывающий еще один путь к повторной используемости кода, и многое другое.
Таким образом, генеральная линия развития языка была направлена на расширение его возможностей путем введения новых высокоуровневых конструкций при сохранении сколь возможно полной совместимости с ANSI С. Конечно, борьба за повышение уровня языка шла и на втором фронте - те же классы позволяют при грамотном подходе упрятывать низкоуровневые операции, так что программист фактически перестает непосредственно работать с памятью и системно-зависимыми сущностями. Однако язык не содержит механизмов, вынуждающих разработчика правильно структурировать программу, а авторы не выпустили никаких систематических рекомендаций по использованию его довольно изощренных конструкций. Не позаботились они своевременно и о создании стандартной библиотеки классов, реализующей наиболее часто встречающиеся структуры данных.
Постановка задачи
Задача 23.
Составить программу формирования двумерных динамических массивов-матриц А и В размерностью m x n. Размерность массивов-матриц X и Y (m=6, n=7) ввести с клавиатуры.
Значение элементов массивов-матриц xij и yij определить с помощью выражений:
xij=F1(i;j)
yij=F2(i;j)
F1(i;j) и F2(i;j) оформить в виде функции в соответствии с выражениями:
,
при
i=0 ,1,…,m; j=0, 1, …, n
,
при
i=0 ,1,…,m; j=0, 1, …, n
Сформировать двумерный массив-матрицу Z, каждый элемент которого определить суммой соответствующих элементов исходных массивов-матриц X и Y.
Определить сумму элементов, лежащих на главной и побочной диагоналях массива-матрицы Y.
Сформировать массив-матрицу N на основе массива-матрицы Z, поменяв в нем местами соответствующие элементы первого и седьмого столбцов.
Вывести на экран и в файл полученные массивы в виде матриц и значение суммы.
Разработка си-программы
Считываем данные:
printf("Enter m n\n");
scanf("%d %d",&m, &n);
printf("\n");
Создаём динамические массивы:
double **x= new double*[m];
for(int i=0;i<m;i++)
x[i]=new double[n];
double **y= new double*[m];
for(int i=0;i<m;i++)
y[i]=new double[n];
double **z =new double*[m];
for(int i=0;i<m;i++)
z[i]=new double[n];
double **tn= new double*[m];
for(int i=0;i<m;i++)
tn[i]=new double[n];
Вычисляем элементы массивов X и Y в функциях f1, f2:
void f1(double**x,int m,int n)
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
x[i][j]=double(3*(i+4)*(j+1))/double(2*(i+1)+5*(j+2));
}
void f2(double**y,int m,int n)
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
y[i][j]=double(4*(i+7))/double(i*j+2);
}
Вычисляем массив Z и присваиваем элементам массива tn элементы массива Z:
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
z[i][j]=x[i][j]+y[i][j];
tn[i][j]=z[i][j];}
Находим значение элементов главной и побочной диагоналей массива Y:
for(int i=0;i<m;i++)
Diag=Diag+y[i][i]+y[i][n-i-1];
Меняем местами столбцы в массиве tn:
for(int i=0;i<m;i++)
{
q=tn[i][0];
tn[i][0]=tn[i][0];
tn[0][5]=q;}
Производим вывод в файл и на экран:
FILE *f;
f=fopen("file.txt","w");
fprintf(f,"x=\n");
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
fprintf(f,"%.4f ",x[i][j]);
fprintf(f,"\n");
}
fprintf(f,"y=\n");
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
fprintf(f,"%.4f ",y[i][j]);
fprintf(f,"\n");
}
fprintf(f,"z=\n");
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
fprintf(f,"%.4f ",z[i][j]);
fprintf(f,"\n");
}
fprintf(f,"n=\n");
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
fprintf(f,"%0.2f ",tn[i][j]);
fprintf(f,"\n");
}
fprintf(f,"\n%f",Diag);
fclose(f);
printf("x=\n");
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
printf("%.4f ",x[i][j]);
printf("\n");
}
printf("y=\n");
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
printf("%.4f ",y[i][j]);
printf("\n");
}
printf("z=\n");
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
printf("%.4f ",z[i][j]);
printf("\n");
}
printf("n=\n");
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
printf("%.4f ",tn[i][j]);
printf("\n");
}
printf("\n%f",Diag);