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

Создание на языке С информационно-поискового справочника "Жидкокристаллические индикаторы". Общая структурная схема программы. Описание специальных алгоритмов. Метод вставок и выбора. Структура данных с указанием типов. Описание назначения функции.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 14.09.2015
Размер файла 71,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Введение

Цель данной курсовой работы по предмету «Информатика и Информационные технологии» состоит в том, чтобы разработать на языке Cинформационно-поисковый справочник «Жидкокристаллические индикаторы», который является систематизации знаний по программированию, полученных в течение лекционных и лабораторных занятий, а также работе с дополнительной литературой по созданию программ на языке программирования С.

Язык "C" - это универсальный язык программирования, для которого характерны экономичность выражения, современный поток управления и структуры данных, богатый набор операторов.

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

1. Создание информационно-поискового справочника

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

Информационно-поисковый справочник «Жидкокристаллические индикаторы».

В программе реализованы следующие функции:

1. Создание справочника в памяти (Ввод данных).

2. Вывод справочника на экран.

3. Сортировка методом выбора по названию ЖКИ по возрастанию.

4. Сортировка методом вставокпо цене ЖКИ по убыванию.

5. Сохранение справочника в бинарный файл.

6. Открытие справочника из бинарного файла.

7. Выход из программы.

справочник программа алгоритм

Таблица 1.1 - Характеристики ЖКИ

Название

Напряжение питания, В

Ток питания, А

Цвет

Цена, руб

LCD125C1

5

1.8

Красный

100

LCD125D1

10

1

Желтый

150.5

LCD125A1

12

1.8

Синий

90.1

LCD127CC1

11

1

Белый

123

LCD15CX1

10

1.8

Оранжевый

56.8

LCD151A3

6

1

Зеленый

1200

1.2 Структура данных с указанием типов

Структура -- это набор элементов, которые могут иметь различные типы.

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

structjki {//используемая структура с полями

char name[20];

char color[10];

int volt;

float price, tok;

};

structjkiarr[20];//массив структуры

1.3 Общая структурная схема программы

Рисунок 1.1

1.4 Описание специальных алгоритмов

1.4.1 Метод вставок

Сортировка вставками -- один из трех простейших алгоритмов сортировки. Сначала он сортирует два первых элемента массива. Затем алгоритм вставляет третий элемент в соответствующую порядку позицию по отношению к первым двум элементам. После этого он вставляет четвертый элемент в список из трех элементов. Этот процесс повторяется до тех пор, пока не будут вставлены все элементы. Например, при сортировке массива dcab каждый проход алгоритма будет выглядеть следующим образом:

Начало d c a b

Проход 1 c d a b

Проход 2 a c d b

Проход 3 a b c d

В отличие от пузырьковой сортировки и сортировки посредством выбора, количество сравнений в сортировке вставками зависит от изначальной упорядоченности списка. Если список уже отсортирован, количество сравнений равно n - 1; в противном случае его производительность является величиной порядка n2.

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

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

1.4.2 Метод выбора

Может быть как устойчивый, так и неустойчивый. На массиве из n элементов имеет время выполнения в худшем, среднем и лучшем случае И(n2), предполагая что сравнения делаются за постоянное время.

Шаги алгоритма:

1. находим номер минимального значения в текущем списке

2. производим обмен этого значения со значением первой неотсортированной позиции (обмен не нужен, если минимальный элемент уже находится на данной позиции)

3. теперь сортируем хвост списка, исключив из рассмотрения уже отсортированные элементы

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

1.5 Описание назначения функции

Файл «inputData.c» В данном файле содержится функция, которая осуществляет ввод данных. После её запуска входим в цикл while, в котором первым делом проверяется место в базе, если база заполнена, то на экран выводится соответствующее сообщение. В противном случае нам предлагается ввести данные, которые записываются в соответствующие поля нашей структуры. После этого нам предлагается продолжить ввести данные либо завершить ввод. При некорректном вводе программа сообщает об ошибке. Далее представлен листинг файла:

#include "main.h"

externintnum;

externstructjkiarr[20];

voidinputData(){

int i, k, n, a, index, letter;

while(1){

if(num == 20){

printf("\nFull base of data\n");

break;

}

printf("\nCount of records?");

scanf("%d", &num);

while(getchar() != '\n');

for(i = 0; i <num; i++){

index = 0;

while(1){

printf("Name jki №%d?", i + 1);

while ((letter = getchar( )) != '\n')

arr[i].name[index++] = letter;

arr[i].name[index] = '\0';

if(strlen(arr[i].name) == 0){

printf("Incorrect data!\n");

continue;

}

break;

}

index = 0;

while(1){

printf("Color jki №%d?", i + 1);

while ((letter = getchar( )) != '\n')

arr[i].color[index++] = letter;

arr[i].color[index] = '\0';

if(strlen(arr[i].color) == 0){

printf("Incorrect data!\n");

continue;

}

break;

}

while(1){

printf("Volt jki №%d?", i + 1);

if((scanf("%d", &arr[i].volt)) != 1 || arr[i].volt <

0){

while(getchar() != '\n');

printf("Incorrect data!\n");

continue;

}

else{

while(getchar() != '\n');

}

break;

}

while(1){

printf("Tokjki №%d?", i + 1);

if((scanf("%f", &arr[i].tok)) != 1 || arr[i].tok< 0){

while(getchar() != '\n');

printf("Incorrect data!\n");

continue;

}

else{

while(getchar() != '\n');

}

break;

}

while(1){

printf("Price jki №%d?", i + 1);

if((scanf("%f", &arr[i].price)) != 1 || arr[i].price <

0){

while(getchar() != '\n');

printf("Incorrect data!\n");

continue;

}

else{

while(getchar() != '\n');

}

break;

}

printf("=\n");

}

break;

}

return;

}

Файл «outputData.c». Здесь содержится функция, которая выводит весь справочник на экран. Листинге файла:

#include "main.h"

externintnum;

externstructjkiarr[20];

voidoutputData(){

int i;

printf("=\n");

for(i = 0; i <num; i++){

printf("№=%d\n", i + 1);

printf("Name: %s\n", arr[i].name);

printf("Color: %s\n", arr[i].color);

printf("Volt: %d\n", arr[i].volt);

printf("Tok: %.f\n", arr[i].tok);

printf("Price: %.f\n", arr[i].price);

printf("=\n");

}

}

Файл «searchData.c». В данном файле содержится функция поиска записи в справочнике по названию. Листинг файла:

#include "main.h"

externstructjkiarr[20];

externintnum;

voidsearchData(){

int i;

char ss2[20];

if(num> 1){

while(1){

printf("Name for search?\n");

fgets(ss2, 20, stdin);

if(ss2[0] == '\0'){

printf("Incorrect data!\n");

continue;

}

else{

break;

}

}

for(i = 0; i <num; i++){

if(strcmp(ss2, arr[i].name) == 0){

printf("№=%d\n", i + 1);

printf("Name: %s\n", arr[i].name);

printf("Color: %s\n", arr[i].color);

printf("Volt: %3d\n", arr[i].volt);

printf("Tok: %f\n", arr[i].tok);

printf("Price: %f\n", arr[i].price);

}

}

}

else{

getchar();

printf("No data!\n");

}

return;

}

Файл «sortDataByName.c». Содержит сортировку по названию. Листинг файла:

#include"main.h"

externstructjkiarr[20];

externintnum;

voidsortDataByName(){

int i, j;

structjkitmp;

for (i = 0; i <num - 1; i++) {

int min = i;

for (j = i + 1; j <num; j++)

if((strcmp(arr[j].name, arr[min].name)) < 0)

min = j;

if (min != i) {

tmp = arr[min];

arr[min] = arr[i];

arr[i] = tmp;

}

}

printf("\nDone!\n");

return;

}

Файл «sortDataByPrice.c». Сортировка по цене. Листинг файла:

#include"main.h"

externstructjkiarr[20];

externintnum;

voidsortDataByPrice(){

structjkitempArr;

int i, a;

for(i = 0; i < num-1; i++)

for(a = 0; a < num-1; a++){

if(arr[a + 1].price >arr[a].price){

tempArr = arr[a];

arr[a] = arr[a+1];

arr[a+1] = tempArr;

}

}

printf("\nDone!\n");

return;

}

Файл «loadData.c». Данная функция производит загрузку ранее сохраненного на диске справочника в оперативную память компьютера. После запуска функции предлагается ввести название загружаемого файла. Листинг файла:

#include "main.h"

externintnum;

externstructjkiarr[20];

voidloadData(){

int a=0, q, i;

char e, k[15];

FILE *f;

while(1){

printf("File name?");

fgets(k, 15, stdin);

for(i = 0; k[i] != '\n'; i++)

continue;

k[i] = '\0';

if((f=fopen(k, "r+b")) == NULL){

printf("Error open file!\n");

getchar();

return;

}

else{

break;

}

}

fread(&num, sizeof(int), 1, f);

for(q = 0; q <num; q++)

fread(&arr[q], sizeof(structjki), 1, f);

fclose(f);

printf("Done!\n");

}

Файл «saveData.c». Данная функция осуществляет запись справочника в файл. Листинг файла:

#include"main.h"

externstructjkiarr[20];

externintnum;

voidsaveData(){

char k[15];

int i = 0;

FILE *f;

printf("File name?");

fgets(k, 15, stdin);

for(i = 0; k[i] != '\n'; i++)

continue;

k[i] = '\0';

if((f = fopen(k, "wb")) == NULL){

printf("Error open file!\n");

return;

}

fwrite(&num, sizeof(int), 1, f);

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

fwrite(&arr[i], sizeof(structjki), 1, f);

fclose(f);

printf("Done!\n");

return;

}

Файл «main.c». В самом начале программы происходит вход в бесконечный цикл, который завершится только, если будет выбран 8 пункт меню (выход из программы). В начале каждого бесконечного цикла, предлагается выбрать пункт меню, путём ввода с клавиатуры его порядкового номера. Каждая ветвь соответствует пункту меню с порядковым номером n, и в ней выполняется соответствующая функция. Листинг файла:

#include <main.h>

intnum = 0;

structjkiarr[20];

int main(intargc, char *argv[])

{

setlocale(LC_ALL, "Rus");

int a;

while(1){

printf("1. Input data\n");

printf("2. Output data\n");

printf("3. Sort by name\n");

printf("4. Sort by price\n");

printf("5. Search by name\n");

printf("6. Save as\n");

printf("7. Open file\n");

printf("8. Exit\n");

printf("\nNumber?");

scanf("%d", &a);

if(getchar() == '\n'){

switch(a){

case 1:

inputData();

break;

case 2:

if(num == 0){

printf("\nNo data!\n");

continue;

}

outputData();

break;

case 3:

if(num == 0){

printf("\nNo data!\n");

continue;

}

sortDataByName();

break;

case 4:

if(num == 0){

printf("\nNo data!\n");

continue;

}

sortDataByPrice();

break;

case 5:

if(num == 0){

printf("\nNo data!\n");

continue;

}

searchData();

break;

case 6:

if(num == 0){

printf("\nNo data!\n");

continue;

}

saveData();

break;

case 7:

loadData();

break;

case 8:

return 0;

default:

printf("\nIncorrect number!\n");

continue;

}

else{

printf("Incorrect number!");

while(getchar() != '\n');

}

return 0;

}

Файл «main.h». Заголовочный файл. В нем содержатся все подключаемые библиотеки, прототипы функций, объявления структуры. Листинг файла:

#include <stdio.h>

#include <string.h>

#include <locale.h>

voidinputData();

voidoutputData();

voidsearchData();

voidsortDataByName();

voidsortDataByPrice();

voidsaveData();

voidloadData();

structjki {

char name[20];

char color[10];

int volt;

float price, tok;

};

1.6 Результаты работы программы

Рисунок 1.2 - Главное меню

Рисунок 1.3 - Ввод данных

Рисунок 1.4 - Вывод данных

Рисунок 1.5 - Сортировка данных

Рисунок 1.6 - Запись данных в файл

Рисунок 1.7 - Чтение данных из файла

Заключение

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

Т.к. язык C- довольно удобный инструмент для получения быстрых и компактных программ, использующих эффективно доступные ресурсы машины, он налаживает определённые требования на разработчика: в отличие от «классических» языков инженерного программирования (Фортран и т.д.), язык С способен на базовом уровне выполнять только простейшие операции, характерные для большинства процессорных платформ (собственно с помощью чего достигается его эффективность). Вследствие этого инженер-программист, использующий для решения вычислительной проблемы язык C, должен обладать чёткой культурой программирования и ясно понимать процессы, происходящие в машине, при выполнении составленной им программы.

Список используемой литературы

1. Герберт Шилдт / Полный справочник С.- М. 2006. - 504 с.

2. Цырлин, М.И. Основные требования к оформлению пояснительных записок курсовых и дипломных проектов (работ): учеб.-метод. пособие / М.И. Цырлин. - Гомель: БелГУТ, 2007. ? 31 с.

3. С. Прата /Язык программирования С.-М. Издательство «Диасофт», 2002. - 896 с.

4. О.П. Гораев, Ю.П. Лыч. Текстовый процессор МSWORD. Практикум по компьютерным технологиям. БелГУТ, 2003. -- 68 стр.

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.