close

Вход

Забыли?

вход по аккаунту

?

Курс

код для вставкиСкачать
 Министерство образования и науки Украины
ОДЕССКИЙ НАЦИОНАЛЬНЫЙ ПОЛИТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ
Кафедра компьютеризованных систем управления и автоматики
КУРСОВОЙ ПРОЕКТ
по дисциплине "Алгоритмические языки и программирование (ПРОГРАММИРОВАНИЕ НА СИ)
Вар.8
Руководитель В.П. Шилов Исполнитель ст. гр. АТ-51 А.И.Чудновец
" "__________2006 г.
Зач. книжка №
_____________ _____________
Личная подпись Личная подпись
1.1.Аннотация Эта программа предназначена для формирования списков приборов выпускаемых каким-либо заводом. При написании этой программы использовались такие структуры языка СИ, как файлы, записи, множества. Особенность данной программы заключается в том, что она позволяет редактировать созданные списки, а так же осуществлять поиск приборов по списку.
1.2.Условие задачи
Составить список приборов, рассчитанных на напряжение, потребляющих токи І и имеющих гарантийный срок Г1. Характеристики приборов(1, 4, 5, 7, 8)
1.3.Введение Язык СИ был выбран потому, что он очень прост для изучения и освоения, пригоден для широкого спектра приложений, разработки очень больших и сложных программ. Язык СИ содержит удобные средства для представления данных, позволяет записывать достаточно сложные алгоритмы в компактной и элегантной форме. Синтаксис языка несложен. Программы записываются в свободном формате, что позволяет их сделать наглядными и удобными для изучения.
Описание наиболее сложных конструкций языка
Структура, или запись, - это объединение одного или более объектов (переменных, массивов, указателей, других записей и т.д.) разного типа. Как и массив, структура представляет собой совокупность данных отличием от массива является то, что структура представляет совокупность данных объединенных в один блок. Отличием является такие и то, что к элементам структуры необходимо обращаться по имени и различные элементы структуры не обязательно должны принадлежать одному типу.
Объявление структуры осуществляется с помощью ключевого слова struct, за которым идет ее тип и далее список элементов, заключенных в фигурные скобки:
struct тип {тип элемента 1 имя элемента 1;
· · · · · · · · · тип элемента n имя элемента n; };
Именем элемента может быть любой идентификатор.
Пример объявление структуры:
Struct date {int day;
int month;
int year;};
Следом за фигурной скобкой, заканчивающей список элементов, могут записываться переменные данного типа, например: struct date {int day;
int month;
int year;} a, b, c;
При этом выделяется соответствующая память для переменных a, b, c. Описание без последующего списка не выделяет никакой памяти; оно просто объявляет структуру.
Веденное имя типа позже можно использовать для объявления записи, например struct date days. При необходимости элементы структуры можно инициализировать(это применимо для статического и внешнего классов хранения памяти структур).
Указатели.
Как известно, память IBM РС делиться на 8-битовые байты. Каждый байт пронумерован; нумерация начинается с нуля. Номер байта называется адресом; об адресе говорят, что он указывает на определенный байт. Таким образом, указатель является просто адресом байта памяти компьютера.
Указатели могут обеспечить простые способы ссылок на массивы, структуры или блоки данных. Для таких ссылок достаточно иметь простой элемент данных: указатель. Язык СИ позволяет определить объект, который будет содержать указатель на объемы простого или структурированного типов данных. Для определения указателя используются символом * в определении или объявлении объекта.
Приведем несколько примеров:
int * iptr; // определяет указатель на целое значение
char * cp; // определяет указатель на символ
float * flaes; // определяет указатель на значение с плавающей точкой.
Идентификатор iptr будет указывать на объекты типа int, ср - на объекты типа float (при этом символ * не включается в имя переменной).
Первый шаг в применении указателя - присвоить ему значение адреса. Один из способов получение адреса состоит в применении унарной операции взятие адреса к какой-либо переменной и присваивании ее результата переменному указателю.
Пример:
// использование операции взятия адреса & main ()
{
int x, * px; // x будет содержать целое значение рх будет
содержать указатель на целое значение
x=2;
px = &x; // рх теперь содержит адрес переменной х
}
Выражение &x означает "адрес объекта х".
Таким образом, переменной рх будет присвоено значение указателя на х (т.е. адрес объекта х).
Другой способ занесения адреса в переменный указатель состоит в присваивании указателю значения известной константы.
Одним из наиболее распространенным приложением указателей является манипулирование структурами. Предложением, что имеется объявление структуры вида:
struct pribor {
char name [15]; // наименование прибора char date [9]; // дата сделки
int kol; // количество
float price; // цена
};
Указатель на объект этого типа определяется с помощью признака указателя *, а адрес объекта такой структуры может быть получен с помощью операции взятия адреса &.
В приведенном ниже примере определены структуры stock_data типа pribor и указатель stck, который показывает на структуры этого типа. Кроме того, указателю присваивается начальный адрес структуры stock_data.
// Указатели на структуры
struct pribor stock_data; // определить структуру
struct pribor * stck_ptr; // определить указатель на структуру этого типа
stck_ptr = & stock_data; // присвоить указателю адрес.
Указатель stck_ptr теперь содержит адрес первого байта структуры stock_data.
Одним из способов доступа к элементам структуры является использование операции "точка". Элемент kol (количество) в структуре stock_data задается выражением:
stock_data . kol
Чтобы получить доступ к этому же элементу с помощью указателя на структуру, нужно использовать операцию ссылки на структуру ->.
При наличии определенного выше переменного указателя stck_ptr ссылка на количество может иметь вид:
stck_ptr -> kol
Если элемент структуры сам является указателем на структуру, потребуется несколько уровней ссылок, например
str_ptr1 -> str_ptr2 -> member
Операции -> применяются слева направо, поэтому последнюю запись следует читать следующим образом: используя str_ptr1, взять элемент str_ptr2 и использовать его для ивлечения значения элемента member.
Если элемент структуры является указателем, то для извлечения из памяти того значения, на которое он показывает, можно воспользоваться операцией косвенной адресации *:
* str_ptr -> mem_ptr.
Это выражение эквивалентно
* (str_ptr1 - mem_ptr).
Еще несколько примеров обращения к данным, которые являются элементами структуры.
scanf (" % S ", pribor . name); // ввод в память зазвания прибора
scanf (" % f ", (pribor . price)); // ввод цены
printf (" % f ", pribor -> price); // ввод цены прибора
Операция косвенной адресации * может быть применена к указателю на структуру для присваивания этого содержимого одной структуры другой структуре того же типа, например:
main ()
{
struct pribor new_struct, old struct; // две структуры
struct * nptr = & new_struct; // указатель на new_struct
struct * optr = & old_struct; // указатель на old_struct
*nptr = * optr; // скопировать old_struct в new_struct.
1.4.Листинг программы
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct Izmer
{
int Minpr;
int Maxpr;
int Pogr;
};
struct Pribor
{
char name[10];
float cost;
int garant;
int volt;
int tok;
int frab;
struct Izmer unit;
};
void vvod(struct Pribor prib[]);
void result(struct Pribor prib[]);
int main()
{
int key;
struct Pribor izd[10];
do
{
puts("\n Menu polzovately ");
puts("1, vvod dannih");
puts("2, prosmotr rezyltata");
puts("3, vihod iz programmi");
scanf("%d", &key);
switch (key)
{
case 1:
vvod(izd);
break;
case 2:
result(izd);
break;
case 3:
puts("konets programmi");
break;
default:
puts("\n Nepravilniy vvod!");
puts("Povtorite");
}
} while (key != 3);
getch();
return 0;
}
void vvod(struct Pribor prib[])
{
FILE *fp;
int i;
clrscr();
if ((fp = fopen("pribor.txt", "w")) == NULL)
{
puts("newozmojno otkrit file");
getch();
exit(1);
}
for(i=0; i<=3; i++)
{
puts ("vvedite nazvanie pribora");
scanf("%s", &prib[i].name);
fprintf(fp, "%s", prib[i].name);
fputs(" ", fp);
puts ("\nvvedite tseny pribora");
scanf("%f", &prib[i].cost);
fprintf(fp, "%f", prib[i].cost);
fputs(" ", fp);
puts ("\nvvedite srok garantii");
scanf("%d", &prib[i].garant);
fprintf(fp, "%d", prib[i].garant);
fputs(" ", fp);
puts ("\nvvedite rabochee napryajenie");
scanf("%d", &prib[i].volt);
fprintf(fp, "%d", prib[i].volt);
fputs(" ", fp);
puts ("\nvvedite potreblyayemiy tok");
scanf("%d", &prib[i].tok);
fprintf(fp, "%d", prib[i].tok);
fputs(" ", fp);
puts ("\nvvedite rabochyu chastoty");
scanf("%d", &prib[i].frab);
fprintf(fp, "%d", prib[i].frab);
fputs(" ", fp);
puts ("\nvvedite nijniy predel izmereniya");
scanf("%d", &prib[i].unit.Minpr);
fprintf(fp, "%d", prib[i].unit.Minpr);
fputs(" ", fp);
puts ("\nvvedite verhniy predel izmereniya");
scanf("%d", &prib[i].unit.Maxpr);
fprintf(fp, "%d", prib[i].unit.Maxpr);
fputs(" ", fp);
puts ("\nvvedite pogreshnost pribora");
scanf("%d", &prib[i].unit.Pogr);
fprintf(fp, "%d", prib[i].unit.Pogr);
fputs("\n", fp);
}
clrscr();
fclose(fp);
}
void result(struct Pribor prib[])
{
int i;
clrscr();
puts ("\n------------------------------------------------------------------------------");
puts ("| pribor | tsena | Garant | Napr | tok | chastota | Minpr | Maxpr | Pogr |");
puts ("--------------------------------------------------------------------------------");
for(i=0; i<=3; i++)
{
printf(" %s ", prib[i].name);
printf(" %f ", prib[i].cost);
printf(" %d ", prib[i].garant);
printf(" %d ", prib[i].volt);
printf(" %d ", prib[i].tok);
printf(" %d ", prib[i].frab);
printf(" %d ", prib[i].unit.Minpr);
printf(" %d ", prib[i].unit.Maxpr);
printf(" %d \n", prib[i].unit.Pogr);
puts ("Press any key");
getch();
}
clrscr();
}
1.5.Результаты
---------------------------------------------------------------------------------------------
| pribor | tsena | Garant | Napr | tok | chastota | Minpr | Maxpr | Pogr |
----------------------------------------------------------------------------------------------
Pr1 200 3 220 60 50 0 50 1.5
Pr2 100 4 220 100 60 0 100 1.0
Pr3 150 5 300 55 1000 0 200 2.0
Pr4 120 2 220 100 100 0 300 1.0
1.6.Выводы В результате выполнения программы были получены ожидаемые результаты. Программа сформировала списки приборов согласно условию задачи.
Список литературы
1. Скаляров В.А Програмирование и лингвистическое обеспечение персоональных ЭВМ - Минск: Высш. Шк., 1992.
2. Зазина В.Н. Методика преподавания темы "Графики элементарных функций на уроках информатики". Ст. из журнала "Информатика и образование", 1996, № 5 3. Златопольский Д.М. Сборник задач по программированию для школьников. Ст. из газеты "Информатика", 2000, № 4, 5,6, 7, 9, 10, 13, 14, 15, 18, 19 4. Окулов С.М. Основы программирования. Ст. из газеты "информатика", 2000, № 42, 43, 45, 46, 47, 2001, № 6, 7, 8, 10, 11. 5. Валединский В. Информатика. Начала программирования. Рабочая тетрадь для 10 - 11 классов. М.: НПО, "Школа", 1997. - 96 с. 6. Практический курс программирования на Бейсике. / учеб. Пособие по выполнению лаборат.работ/ сост. Булакин Н.Г. Абакан: АГПИ, 1990. - 64 с
Документ
Категория
Рефераты
Просмотров
20
Размер файла
152 Кб
Теги
курс
1/--страниц
Пожаловаться на содержимое документа