Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Пример выполнения работы. Объект списка- сотрудник (поля: ФИО, дата приема на работу, должность, базовый оклад)




Условие задачи:

Объект списка- сотрудник (поля: ФИО, дата приема на работу, должность, базовый оклад). Сортировка по полю «оклад» методом прямого выбора.

Для решения задачи в среде Microsoft Visual Studio 2013 было создано стандартное консольное приложение (проект типа Win32 Console Application) с установленным свойством «пустой проект» (Empty project). В проект добавлен файл с расширением .cpp, исходный код которого приведен ниже.

Листинг программы с комментариями:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

struct Sotr // Сотрудник

{

char fio[64]; // ФИО

char date[16]; // Дата рождения

char dolg[32]; // Должность

double okl; // Оклад

};

 

struct List // Список

{

Sotr sotr; // Инф поле

List *pNext; // Указательна следующий элемент

};

 

// Функция добавления элемента в начало списка

void addFirst(List *& pF, // Указатель на начало списка

List* p) // Указатель на добавляемый элемент

{

p->pNext = pF;

pF = p;

}

// Удаление элемента из начала списка

List * delFirst(List *&pF) // Функция возвращает указатель на удаляемый элемент

{

if (pF == 0) return 0;

List *p = pF;

pF = pF->pNext;

return p;

 

}

// Добавление элемента перед заданным

bool add(List *&pF, List * pZad, List *p)

{

// Функция возвращает true при нормальном завершении и false в случае ошибки

if (pZad == pF) // Элемент будет первым

{

p->pNext = pF;

pF = p;

return true;

}

 

List *pPred = pF; // Указатель на предыдущий элемент перед pZad

while (pPred->pNext!= pZad && pPred->pNext)

pPred = pPred->pNext;

if (pPred->pNext == 0) return false; // Элемента pZad нет в списке

p->pNext = pZad;

pPred->pNext = p;

return true;

}

// Удаление любого элемента p из списка

List * del(List*& pF, List *p) // Функция возвращает указатель на удаленный элемент

{

if (pF == 0) return 0;

if (pF == p) // Удаляем первый элемент

{

pF = pF->pNext;

return p;

}

else

{

List *pPred = pF; // Указатель на предыдущий элемент перед p

while (pPred->pNext!= p && pPred->pNext)

pPred = pPred->pNext;

if (pPred->pNext == 0) return 0; // Элемента p нет в списке

pPred->pNext = p->pNext;

return p;

}

while (delFirst(pF)); // Очистка списка

}

 

int main(int argc, char* argv[])

{

List *pF = 0; // Список пуст

List *p;

// Ввод списка

char Ch; // Переменная для ввода условия продолжения ввода

do

{

p = (List *)malloc(sizeof(List)); // Выделяем память под элемент

printf("\nFIO: ");

fflush(stdin); gets_s(p->sotr.fio);

printf("Date: ");

fflush(stdin); gets_s(p->sotr.date);

printf("Dolg: ");

fflush(stdin); gets_s(p->sotr.dolg);

printf("Okl=");

fflush(stdin); scanf_s("%lf", &p->sotr.okl);

addFirst(pF, p); // Добавляем элемент в начало списка

printf("For continue press Y or y else any key! ");

Ch = _getche(); // Чтение кода клавиши с печатью символа

} while (Ch == 'Y' || Ch == 'y');

// Вывод спика

for (List *pi = pF; pi; pi = pi->pNext) // Просмотр списка

printf("\n%s %s %s oklad=%.2f", pi->sotr.fio, pi->sotr.date,

pi->sotr.dolg, pi->sotr.okl);

 

// Сортировка списка

for (List *pi = pF; pi->pNext;)

{

// Ищем минимальный элемент в списке

double min = pi->sotr.okl;

List *pmin = pi;

for (List *pj = pi->pNext; pj; pj = pj->pNext)

if (pj->sotr.okl<min)

{

min = pj->sotr.okl;

pmin = pj;

}

if (pi!= pmin) // Минимальный элемент делаем первым, он будет перед pi

{

del(pF, pmin);

add(pF, pi, pmin);

}

else pi = pi->pNext;

}

// Печать списка после сортировки

printf("\nSrting:");

for (List *pi = pF; pi; pi = pi->pNext) // Просмотр списка

printf("\n%s %s %s oklad=%.2f", pi->sotr.fio, pi->sotr.date,

pi->sotr.dolg, pi->sotr.okl);

printf("\nFor exit press any key ");

system("pause"); // Останавливаем программу, ждем нажатия любой клавиши

return 0;

}

 





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 771 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Логика может привести Вас от пункта А к пункту Б, а воображение — куда угодно © Альберт Эйнштейн
==> читать все изречения...

2285 - | 2212 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.