Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Larkin Лабораторная работа2.docx
Скачиваний:
2
Добавлен:
09.11.2019
Размер:
619.79 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

Кафедра ЭАФУ

Отчет по

лабораторной работе №2

Матричные исчисления с использованием функций пользователя.

Вариант №25

Выполнил студент группы 0А14

Ларькин Дмитрий Александрович

Проверил преподаватель

Обходский Артем Викторович

Томск-2012

Цель работы

Научиться разбивать решаемую задачу на подзадачи и реализовывать вычислительные процедуры в виде программ на языке СИ с использованием функций пользователя.

Задание

  1. Ознакомиться с учебно-методическими указаниями к лабораторной работе №2 (электронная копия – в файле Лаб_№2.doс, размещенному по адресу L:\Методички\ Каф24\Информатика_140800\2_семестр\Методические указания).

  2. Составить алгоритм решения задачи согласно своего варианта.

  3. Составить блок-схему алгоритма программы.

  4. Набрать текст программы на языке СИ при помощи текстового редактора.

  5. Сформировать файл с исходными данными.

  6. Провести трансляцию и компоновку программы.

  7. Решить контрольный пример.

  8. Составить отчет по лабораторной работе.

Вариант 25

Заданы матрицы А, В, С максимальной размерности (20, 20). Вычислить матрицу D=AT *C*(C-1 +BT ) *B.

Предусмотреть возможность ввода матриц А, В, С - меньшей размерности. Ввод размерности матриц организовать с терминала. Ввод матриц организовать из файла. В программе предусмотреть проверку размерности исходных матриц на возможность вычисления матрицы D.

Результат вычислений вывести в файл. В программе использовать функции пользователя.

Теоретическая часть Работа с файлами

Файл для нас – это часть памяти для хранения информации, обычно на диске, со своим именем. Язык Си "рассматривает" файл как структуру данных. Эта структура содержится в системном файле stdio.h. Краткое наименование шаблона файла – FILE, которая и будет использоваться далее.

Описание файла:

FILE *переменная;

при этом слово FILE пишется только заглавными буквами.

Открытие файла: функция

переменная = fopen("имя_файла","par");

}

здесь par - параметр, указывающий на то, как должен использоваться файл. Параметр может быть:

"r" – файл нужно считать;

"w" – файл нужно записать; только маленькими буквами!!!

"a" – файл нужно дополнить.

Закрытие файла: функция

fclose(переменная);

Закрытие всех открытых файлов: функция

fcloseall();

Вывод в файл: функция

Функции в c

Функция – самостоятельная единица программы, спроектированная для реализации конкретной задачи. Функции в языке Си играют ту же роль, какую играют функции, подпрограммы и процедуры в других языках. Вызов функции приводит к выполнению некоторых действий. Например, при обращении к функции printf() осуществляется вывод данных на экран. Другие же функции позволяют получать некоторую величину, используемую затем в программе. В общем функции могут выполнять действия и получать значения величин, используемых в программе.

Для чего надо пользоваться функциями? Во-первых, они избавляют нас от повторного программирования. Если конкретную задачу необходимо выполнить в программе несколько раз, можно написать соответствующую функцию только один раз, а затем вызывать её всегда, когда это требуется. Во-вторых, можно применять одну функцию в различных программах, просто включая файл с её текстом с помощью команды препроцессора #include (например, #include "my_f.cpp") в создаваемый файл или другим способом (например, используя такое средство, как "проект" Borland C++). Даже в том случае, если некоторая задача выполняется только в одно й программе, лучше оформить её решение в виде функции, поскольку функции повышают модульность программы и, следовательно, облегчают её чтение, внесение изменений и коррекцию ошибок.

На начальной стадии разработки можно считать функцию "чёрным ящиком", которому необходимо задать поступающую информацию (вход) и полученные результаты (выход). Все, что происходит внутри черного ящика, не касается разработчика до тех пор, пока не нужно писать программу, реализующую эту функцию. например, при использовании библиотечных функций необходимо иметь информацию о входных и выходных параметрах, а о конкретной реализации такой функции речь вообще не идёт.

Определение пользовательской функции

Типичное определение функции имеет следующий вид:

тип имя (список аргументов) // – заголовок функции

{

тело функции

}

Наличие списка аргументов не является обязательным, однако при его наличии каждый аргумент должен быть описан соответствующим образом. Тип функции определяется типом возвращаемого ею значения. Не обязательно описывать тип функции, если она возвращает результат целого типа; если функция ничего не возвращает с помощью оператора return, то желательно описать её тип как void; по умолчанию тип функции принимается как int. Переменные, отличные от аргументов, описываются внутри тела функции, которое заключается в фигурные скобки.

При написании своей функции следуйте тем же правилам, что и при написании main(): вначале указывается заголовок функции, затем идёт открывающая фигурная скобка, приводится описание используемых переменных, даются операторы, определяющие работу функции, и, наконец, закрывающая фигурная скобка. Обратите внимание, что за заголовком функции не следует символ "точка с запятой"; его отсутствие служит указанием компилятору, что здесь определяется функция, а не используется.

Пример

void readvektor(double x[], int n, char nam)

{

int i;

printf (”Введите %d элементов массива %c:\n”, n, nam);

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

{

scanf (”%lf”,&x[i]);

}

}

/*

сама функция вызывалась в main():

readvektor(a, 10, ’A’);

readvektor(b, 20, ’B’);

readvektor(c, 30, ’C’);

*/

Данная функция предназначена для ввода данных в одномерный массив. Здесь выводится приглашение для ввода некоторого количества элементов массива (это число передается сюда при вызове), имя которого также в виде символа передается из внешней функции. Затем организован собственно ввод с клавиатуры элементов массива. Так как размер массива заранее неизвестен, то конкретная размерность не указывается (для одномерных массивов!). Выходным параметром служит сам массив.

В том случае, когда результатом выполнения функции является одна величина простого типа, для возврата этого результата можно воспользоваться оператором return (см. Пример 2 из п. 9.2.2). В этом случае функция должны иметь тот же тип, что и значение, которое она возвращают в качестве результата. Его структура выглядит следующим образом: