Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
RPZ.docx
Скачиваний:
6
Добавлен:
01.05.2025
Размер:
552 Кб
Скачать
☆

Описание основных функций

Схема описания: прототип, описание параметров, алгоритм, определение, пример вызова.

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

Для всех функций принят следующий порядок описания:

прототип функции;

пример вызова функции и описание параметров;

код (определение) функции.

Функция ListData – вывод массива данных

Прототип функции:

void ListData(Uchet a[], int);

Вызов функции:

void ListData(Tc a[], int n);

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

Определение функции:

void ListData(Tc a[], int n)

{

int i;

printf(Rus("СПИСОК ДЕТАЛЕЙ\n"));

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

{

printf("%4d %24s ", a[i].numr, Rus(a[i].name));

printf("%s %4i\n", Rus(a[i].tech), a[i].kol);

}

Функция выводит в цикле каждую запись массива.

Функция DispData – вывод одной записи

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

Прототип функции:

void DispData(Tc a[], int n);

Вызов функции:

void DispData(Tc a[], int n)

{

int i=0;

while (a[i].numr!=n && i<nRecs) i++;

if (i<nRecs)

{

printf("%4d %24s ", a[i].numr, Rus(a[i].name));

printf("%s %4i\n", Rus(a[i].tech), a[i].kol);

}

Else

printf("%s",Rus("номер отсутствует в списке"));

}

Функция FindRecProduct – поиск в массиве по наименованию продукта

Прототип функции:

Tc FindRecName(Tc x[], char *str);

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

Вызов функции:

FindRecName(Tc x[], char *str);

Параметр s – строка символов, которая ищется в поле nazn.

Определение функции:

Tc FindRecName(Tc x[], char *str) /* поиск */

{

int i=0, res=0;

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

{

if (strstr(Rus(x[i].tech), str)!=NULL)

{

res=1;

printf("%4d %24s ", x[i].numr, Rus(x[i].name));

printf("%s %4i\n", Rus(x[i].tech),x[i].kol);

}

}

if (res==0)

printf("\n%s",Rus("Название отсутствует в списке"));

}

Функция выполняет последовательный просмотр элементов массива и сравнивает содержимое поля nazn с заданной строкой. Если в поле nazn имеется подстрока, совпадающая с заданной, то запись выводится на экран.

Функция Assign – присвоение значения элементу массива

Так как элементами массива airport являются структуры, содержащие строковые поля, то использовать оператор присвоения типа a[i]=a[j] нельзя. Поэтому в программе создана вспомогательная функция, которая выполняет присваивание с использованием для строковых полей функции strcpy.

Прототип функции:

Tc Assign(Tc x)

Вызов функции:

tmp=Assign(x[i]);

Определение функции:

Tc Assign(Tc x)

{

Tc z;

z.numr=x.numr; strcpy(z.name, x.name);

strcpy(z.tech, x.tech); z.kol=x.kol;

return z;

}

Функция Swap – обмен содержимым двух записей

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

Прототип функции:

void Swap(Tc *x, Tc *y);

Пример вызова функции:

Swap(&x[j],&x[j+1]);

Функция выполняет обмен с использованием промежуточной переменной tmp.

Функцию можно определить несколькими способами. Для присваивания элементам массива новых значений можно использовать функцию Assign. В этом случае функции Assign передаются указатели на элементы массива. Однако можно выполнить обмен и напрямую.

Ниже приводится определение функции:

void Swap(Tc *x, Tc *y)

{

Tc tmp;

tmp=Assign(*x); *x=Assign(*y); *y=Assign(tmp);

x->numr=y->numr; strcpy(x->name, y->name);

strcpy(x->tech, y->tech); x->kol=y->kol;

y->numr=tmp.numr; strcpy(y->name, tmp.name);

strcpy(y->tech, tmp.tech); y->kol=tmp.kol;

}