Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Функции для работы с массивами




Оглавление

 

Оглавление.. 1

1. Введение.. 2

Постановка задачи.. 3

2.1 Условия. 3

2.2 Анализ графиков. 4

3. Разработка алгоритма на языке Си.. 5

3.1 Проектирование.. 5

Реализация программы.. 6

3.3.1 main.c.. 6

3.3.2 library.c.. 7

3.3.3 Таблица констант. 9

3.3.4 Таблица идентификаторов. 10

4.1 Тест 1. 10

5. Заключение.. 15

7. Приложение.. 16

7.1 Код С.. 16

7.11 main.c.. 16

7.12 library.c.. 19

7.13 include.h.. 24

 


 

Введение

 

Целью данной курсовой работы является получение практических навыков в разработке и реализации программы на языке программирования C.

 

В данной работе необходимо:

1. Проанализировав данную задачу, найти наиболее рациональный путь её реализации;

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

3. Реализовать задачу на языке С;

4. Проверить работоспособность программы;


 

Постановка задачи

 

В данной работе требуется написать программу, с помощью которой можно выполнять следующие операции:

1. Вычисление значений входного и выходного сигналов в n-равностоящих точках;

2. Вычисление и вывод на экран длительности заднего фронта выходного сигнала;

3. Вывод на экран таблицы со значениями входного и выходного сигналов;

4. Запись этих данных на диск;

5. Запись данных на диск, в виде пригодном для чтения программой wxMaxima;

Условия

Имеется электрическая цепь:

 
Uвх(t)  
Uвых(t)  

 


Входной сигнал:

 

 

Передаточная характеристика:

 

Верхняя граница входного сигнала U1 = 100 В

Нижняя граница входного сигнала U2 = 0

Начальное время tn = -5 с

Конечное время tk = 15 c

Отсчет времени t1 = 2 с

Отсчет сигнала 1 0 В

Отсчет сигнала 2 10 В

Верхняя граница выходного сигнала 0 В

Нижняя граница выходного сигнала 50 В

Анализ графиков

Входной сигнал:

Верхняя граница входного сигнала – U1

Нижняя граница входного сигнала – U2

 

 

Формулы выведены на основании уравнения прямой через две точки

 

Передаточная характеристика:

Верхняя граница выходного сигнала – U3

Нижняя граница выходного сигнала – U4

 

 

Формулы выведены на основании уравнения прямой через две точки

Разработка алгоритма на языке Си

Проектирование

Программа должна быть:

1. Удобной для пользователя;

2. Логичной и последовательной;

3. Легко читаемой;

4. Иметь возможность для модернизации;

 

В ходе проектирования мною было рассмотрено несколько вариантов решения данной задачи:

1. Использовать в проекте один файл, который будет содержать функцию main(), прототипы и реализацию вспомогательных функций, а также необходимы константы. Такой вариант не требует от пользователя обращения к другим файлам проекта. Но этот вариант увеличивает объем кода в одном файле, что мешает поиску нужного фрагмента кода, и соответственно затрудняет модернизацию;

2. Использовать в проекте 2 файла: в первом main(), во втором – функции реализации и константы. Такой вариант затрудняет читаемость функции main(), но облегчает модернизацию программы;

3. Третий вариант схож со вторым, но в нем все константы и прототипы выносятся в отдельный файл. Такой способ заметно облегчает доступ к константам и прототипам;

4. Четвертый вариант состоит в том, что функции реализации объединяются в группы по их назначению. В таком случае проект будет иметь следующие файлы: main.c – с функцией main(), fileIO.c – файл, содержащий функции файлового ввода-вывода, interface.c – файл, содержащий меню, arrays.c – файл, содержащий функции для работы с массивами. Заголовочный файл содержит прототипы функций и константы. Этот способ заметно облегчает модернизацию программы. Однако теперь становится сложнее найти ту или иную функцию в проекте.

 

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

 

Далее необходимо рассмотреть вид результатов. Рассмотрим два варианта:

1. Вывод чисел, полученных в результате вычислений

2. Вывод всех данных в виде таблицы с заголовком

 

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

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

 

Важной частью программы является меню, которое было разработано для удобства пользователя. После запуска программы пользователю будут предложено:

1. Сформировать и вывести массивы с начальными параметрами, заданными в курсовой работе

2. Сформировать и вывести массивы с параметрами, описанными в файле

3. Сформировать и вывести массивы с параметрами, вводимыми с клавиатуры пользователем

4. Рассчитать заднего фронта выходного сигнала

5. Сохранить результаты (таблицы) в.txt файл

6. Сохранить файлы для чтения программой wxMaxima

7. Показать информацию о программе

0. Выйти из программы

Реализация программы

Программа состоит из следующих модулей:

Main.c

Main.c - модуль содержит меню (функция choice()) с вызовами функций реализации. Главным элементом модуля является цикл while, с помощью которого реализуется цикличность выбора пунктов меню пользователем. До тех пор пока переменная choice не примет значение EXIT_CODE, программа будет предлагать пользователю выбрать какой-либо пункт меню. Выбор реализуется конструкцией switch:

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

Case 2: формирует массивы отсчетов времени, входного и выходного сигналов. Выводит на экран таблицу, содержащую значения этих массивов. Начальные параметры для формирования массивов берутся из файла, имя которого описано в константе F_INPUT. Если файла с таким именем не существует, то выведется ошибка. Параметры в файле записываются последовательно, на каждой строке по одному параметру. В файле указаны следующие параметры: n – количество точек, tn – начальное время, tk – конечное время, t1, t2, ui1, ui2, uimax, uimin, uomax, uomin – координаты точек.

 

Case 3: формирует массивы отсчетов времени, входного и выходного сигналов. Выводит на экран таблицу, содержащую значения этих массивов. Начальные параметры для формирования массивов пользователь вводит с клавиатуры. Последовательно, один за другим пользователю предлагается ввести следующие параметры: n – количество точек, tn – начальное время, tk – конечное время, t1, t2, ui1, ui2, uimax, uimin, uomax, uomin – координаты точек

Case 4: рассчитывает длительность заднего фронта выходного сигнала. После выбора этого пункта пользователю предлагается ввести значение точности, с которой необходимо вычислить фронт.

Case 5: сохраняет сформированные массивы в.txt файл (в виде таблицы)

Пример фрагмента файла full.txt:

 

SAVE TIME Fri Jun 08 20:56:38 2012

 

n = 200

tn = -5.000

tk = 15.000

t1 = 2.000

ui1 = 0.000

ui2 = 10.000

uimax = 100.000

uimin = 0.000

uomax = 50.000

uomin = 0.000

 

step | time | u_in | u_out

1 | -5.000 | 0.0000 | 0.0000

2 | -4.899 | 1.4357 | 7.1787

3 | -4.799 | 2.8715 | 14.3575

4 | -4.698 | 4.3072 | 21.5362

5 | -4.598 | 5.7430 | 28.7150

6 | -4.497 | 7.1787 | 35.8937

7 | -4.397 | 8.6145 | 43.0725

8 | -4.296 | 10.0502 | 50.0000

9 | -4.196 | 11.4860 | 50.0000

10 | -4.095 | 12.9217 | 50.0000

 

Case 6: сохраняет сформированные массивы по отдельности в три.txt файла (это делается для последующего чтения этих файлов программой wxMaxima)

Case 7: выводит краткую информацию о программе

Default: срабатывает при условии, если введено неверное значение

 

Library.c

library.c – модуль содержит все функции реализации.

Функции интерфейса:

int menu(void);

Назначение: функция вызывает меню и ожидает пользовательского ввода. Как только значение введено функция его возвращает

Интерфейс: функция не имеет принимаемых значений. Функция возвращает значение типа int (это значение далее используется в конструкции switch – case)

Результат: Результатом выполнения функции является меню на экране и введенное пользователем значение в точке вызова функции.

void display(float*, float*, float*, parametrs);

Назначение: функция выводит на экран значения трех массивов в виде таблицы с заголовком.

Интерфейс: функция принимает последовательно три указателя на тип float, и структуру parameters. Возвращаемых значений функция не имеет

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

void info(void);

Назначение: функция выводит на экран информацию о программе

Интерфейс: функция не имеет входных параметров и ничего не возвращает

Результат: Результатом выполнения этой функции является краткая информация на экране

 

Функции для работы с массивами

void create(float*, float*, float*, parametrs);

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

Интерфейс: функция принимает три указателя на тип float, и структуру parameters. Возвращаемых значений функция не имеет.

Эта функция описана для удобства. Эта функция вызывает функции times(), uins() и uouts() (описаны ниже). Но гораздо удобнее вызвать одну функцию, чем три.

float step(float, float, int);

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

Интерфейс: функция принимает 2 значения типа float (это начальное и конечное значения времени) и одно значение типа int (количество точек). Возвращает функция значение типа float

Результат: В результате работы этой функции в точке вызова окажется значение шага при заданных параметрах

Эта функция также описана для удобства

void times(float*, parametrs);

Назначение: функция формирует массив отсчетов времени

Интерфейс: функция принимает указатель на тип float и структуру parameters. Возвращаемых значений нет. Поскольку функция принимает указатель, то после ее выполнения массив, адрес которого был передан функции, будет заполнен.

Результат: результатом выполнения этой функции является сформированный массив, содержащий отсчеты времени от начального до конечного с заданным шагом.

void uins(float*, float*, parametrs);

Назначение: функция формирует массив значений входного сигнала. Значения входного сигнала в этом массиве будут соответствовать входному сигналу в моменты времени, описанные в массиве отсчетов времени. Заполнение осуществляется с помощью формул, выведенных в пункте 2.2. «Анализ графиков»

Интерфейс: функция принимает два указателя на тип float, и структуру parameters. Возвращаемых значений функция не имеет. Поскольку функция принимает указатель, то после ее выполнения массив, адрес которого был передан функции, будет заполнен.

Результат: результатом выполнения этой функции является сформированный массив, содержащий значения входного сигнала.

void uouts(float*, float*, parametrs);

Назначение: функция формирует массив значений выходного сигнала. Значения выходного сигнала в этом массиве будут соответствовать выходному сигналу в моменты времени, описанные в массиве отсчетов времени. Заполнение осуществляется с помощью формул, выведенных в пункте 2.2. «Анализ графиков»

Интерфейс: функция принимает два указателя на тип float, и структуру parameters. Возвращаемых значений функция не имеет. Поскольку функция принимает указатель, то после ее выполнения массив, адрес которого был передан функции, будет заполнен.

Результат: результатом выполнения этой функции является сформированный массив, содержащий значения выходного сигнала.

float front(float, parametrs);

Назначение: функция высчитывает длительность заднего фронта сигнала с заданной точностью

Интерфейс: функция принимает одну переменную типа float (значение точности), и структуру parameters. Возвращает функция значение типа float (саму длительность заднего фронта)

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

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...