Смекни!
smekni.com

Язык программирования С 3 (стр. 2 из 5)

{

address prev = current;

current = next;

return prev;

}

Остальные осмысленные операции, такие как сравнение (== и !=) не определены. Однако пользователь может определить эти операции.

Размер объекта структурного типа нельзя вычислить просто как сумму его членов. Причина этого состоит в том, что многие машины требуют, чтобы объекты определенных типов выравнивались в памяти только по некоторым зависящим от архитектуры границам (типичный пример: целое должно быть выравнено по границе слова) или просто гораздо более эффективно обрабатывают такие объекты, если они выравнены в машине. Это приводит к "дырам" в структуре. Например, (на моей машине) sizeof (address) равен 24, а не 22, как можно было ожидать.

Заметьте, что имя типа становится доступным сразу после того, как оно встретилось, а не только после того, как полностью просмотрено все описание. Например:

struct link{

link* previous;

link* successor;

}

Новые объекты структурного типа не могут быть описываться, пока все описание не просмотрено, поэтому

struct no_good {

no_good member;

};

является ошибочным (компилятор не может установить размер no_good). Чтобы дать возможность двум (или более) структурным типам ссылаться друг на друга, можно просто описать имя как имя структурного типа. Например:

struct list; // должна быть определена позднее

struct link {

link* pre;

link* suc;

link* member_of;

};

struct list {

link* head;

}

Без первого описания list описание link вызвало бы к синтаксическую

ошибку.


3. Способы описания функций

Для начало надо разобраться, что такое функция. Программа на языке Си становится большого размера, и появляется необходимость разбивать код на части. Вот такие части на языке Си и называется функциями. Функция может возвращать любые типы значений, а может ничего не возвращать, тогда в качестве возвращаемого значения функция будет тип void. Имя функция может быть любым, но чаще всего имя функция дается от предназначения. Язык С можно назвать структурированным, единицей которого является функция.

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

extern float pow ( float, int ); // pow () определена в другом месте

int main ()

{

for ( int i=0; i<10; i++ ) cout << pow ( 2, i ) << '&bsol;n';

}

Первая строка является описанием функции. Она задает pow как функцию с параметрами типа float и int, возвращающую значение типа float. Описание функции необходимо для ее вызова, ее определение находится в другом месте.

При вызове функции тип каждого фактического параметра сверяется с типом, указанным в описании функции, точно так же, как если бы инициализировалась переменная описанного типа. Это гарантирует надлежащую проверку и преобразования типов. Например, вызов функции pow(12.3,"abcd") транслятор сочтет ошибочным, поскольку "abcd" является строкой, а не параметром типа int. В вызове pow(2,i) транслятор преобразует целую константу (целое 2) в число с плавающей точкой (float), как того требует функция. Функция pow может быть определена следующим образом:

float pow ( float x, int n )

{

if(n<0)

error ( "ошибка: для pow () задан отрицательный показатель");

switch ( n )

{

case 0: return 1;

case 1: return x;

default: return x * pow ( x, n-1 );

}

}

Первая часть определения функции задает ее имя, тип возвращаемого значения (если оно есть), а также типы и имена формальных параметров (если они существуют).Значение возвращается из функции с помощью оператора return.

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

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

int pow ( int, int );

double pow ( double, double ); //

x = pow ( 2,10 );// вызов pow(int,int)

y = pow ( 2.0, 10.0 );// вызов pow(double,double)

Такое многократное использование имени называется перегрузкой имени функции или просто перегрузкой;

Параметры функции могут передаваться либо "по значению", либо "по ссылке". Рассмотрим определение функции, которая осуществляет взаимообмен

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

void swap ( int * p, int * q )

{

int t = * p;

* p = * q;

* q = t;

}

Унарная операция * называется косвенностью (или операцией разыменования), она выбирает значение объекта, на который настроен указатель. Функцию можно вызывать следующим образом:

void f ( int i, int j )

{ swap ( & i, & j ); }

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

void swap (int&r1,int&r2)

{ int t = r1;

r1 = r2;

r2 = t; }

void g (inti,intj)

{ swap (i,j);

}

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

В общем виде функцию можно представить так:

Тип имя_функции (список_параметров)

{

Инструкции

returne (возвращаемое значение функции)

}

3.Создание и обработка модулей

Модуль это набор ресурсов (функций, процедур, констант, перемменых, типов )разрабатываемых и хранимых независимо от используемых программ.

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

Модуль состоит из двух файлов:

1.Файл с расширением .h содержит функций, глобальные переменные и типы данных. Он обычно называется заголовочный файл.

2.Файл реализации, имеющий расширение ,с и содержащий определения функций и глобальных переменных.

4.Проект
ирование программ

Главное условие для создания крупных программ заключается а применение методов проектирования. Большое распространение при написание программ получили следующие три метода: нисходящий, восходящий и специальный.

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

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

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

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

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

5. Создание графического интерфейса

Для оформления графического интерфейса программы используется библиотека «CONIO.H». Она позволяет установить текст в нужном месте, поменять цвет, сделать рамки, и т.д.

Conio.h (от англ. Console input-output – консольный ввод-вывод) - заголовочный файл, используемый в старых компиляторах, работающих в операционных системах MS-DOS, для создания текстового интерфейса пользователя. Тем не менее, он не является частью языка программирования Си, стандартной библиотеки языка Си.

Функции для работы библиотеке Conio.h

int kbhit(void); Определяет, было ли нажатие клавиш клавиатуры/

int getch(void); Считывает с

имвол напрямую из консоли без использования буфера и echo-вывода

void window(int left, int top, int right, int bottom); Устанавливает текущее окно консоли по указанным координатам

void clreol(void); очищает текущую строку окна от позиции курсора до конца

void gotoxy(int x, int y); помещает курсор в указанные столбец и строку окна

void textbackground(int newcolor); устанавливает фоновый цвет окна.

void textcolor(int newcolor); Устанавливает указанный цвет вывода текста в окне.

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

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