МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
КУЙБЫШЕВСКИЙ ФИЛИАЛ
Курсовой проект По дисциплине: Программирование
На тему: « Разработка линейного однонаправленного списка»
Выполнил студент
группы ВТК-281
Киселёв С.А.
.
_______________
(подпись, дата)
Проверил:
Бычков М.И.
Куйбышев 2010
Задание:
Разработать программу реализующая следующие элементы списка:
Вставка, удаление, вывод на экран, чтение из файла, удаление последнего элемента и удаление всех элементов списка, осуществляет выход из программы.
Структурное и функциональное описание программы:
//-------------------------------Подключение библиотек--------------------------
#include <iostream> // Стандартные потоки ввода-вывода:
// ios,istream,ostream,iostream
#include <conio>
#include <windows>
#include <stdio>
#include <stdlib>
#include <fstream> // Файловые потоки ввода-вывода:
//------------------------Русификатор------------------------------------------------
void rus(char *str)
{
char buf[100];
CharToOem(str,buf);
cout<<buf;
return;
}
//------------------------Вывод на экран меню и запись значения--------------
int menu()
{int n;
rus(" Меню ");cout<<"n";
rus(" ");cout<<"n";
rus(" 1 - Вставка ");cout<<"n";
rus(" 2 - Удаление ");cout<<"n";
rus(" 3 - Вывод на экран ");cout<<"n";
rus(" 4 - Сохранение ");cout<<"n";
rus(" 5 - Чтение");cout<<"n";
rus(" 6 - Удаление всего списка");cout<<"n";
rus(" 0 - Выход ");cout<<"n";
rus("==============================");cout<<"n";
rus(" Введите пункт меню ");cout<<"n";
cin>>n; return n;} // ввод с клавиатуры
//-----------------------------------------------------------------------------------
struct node{char x[15]; node *next;};
node *un=NULL; //создаём указатели на начало списка
node *uk=un; //создаём указатель на конец списка
node *r,*pre; //ещё 2 указателя
int count;
//--------------------------------Удаление всего списка-------------------------
void dellist(node *p) // функция удаления
{
while(p){delete p; p=p->next;
}
uk=un;
}
//----------------------------------Удаление------------------------------------
void delet(node*p)
{
node *h=p;
if(p==uk)
{
uk=p->next;delete h;
}
else
{
node *f=p->next;
p->next=(p->next)->next;
delete f;
}
}
//-----------------------------------Сохранение---------------------------------
void save(node *p)
{
ofstream out("a.txt");
while(p)
{ out<<p->x<<"n";
p=p->next;
}
rus("СОХРАНЕНО!!!"); cout<<"n";
}
//-------------------------Print------------------------------------------------
void show(node *z){while(z){cout<<z->x<<"_____"<<z<<"n";z=z->next;}}
//--------------------------Запись в структуру------------------------
node* insert(node *p)
{
node *q=new node;
rus("Введите значение n");
textcolor(RED);
rus ("!!!не более 15 символов!!!nn");
gotoxy(1.5,wherey());
cin>>q->x; q->next=p;
return q;
}
//--------------------------Запись в структуру----------------------------------
node* insert(node *p, char* str)
{
node *q=new node;
strcpy(q->x, str); //функция копирования
q->next=p;
return q; // функция возвращения переменной
}
int GetCountEl(node *p)
{
int n = 0;
while(p) //цикл с предусловием
{
n++;
p=p->next;
}
return n;
}
char* getEl(const int &num)
{
if(num < count) // структура (вид – ветвление)
{
node *p = uk;
for(int i=0; i<num; i++)
p = p->next;
return p->x;
}
else return 0; // иначе возвращается 0
}
void exchange(const int &dpos, const int &spos)
{
if((dpos<count)&&(spos<count))
{
int i;
char* temp;
temp = new char[15];
node *dest = uk;
node *source = uk;
for(i=0;i<dpos;i++) dest = dest->next;
for(i=0;i<spos;i++) source = source->next;
strcpy(temp, source->x);
strcpy(source->x, dest->x);
strcpy(dest->x, temp);
}
}
//--------------Загрузка--------------------------
loading()
{
char *str;
str = new char[15];
ifstream inf("a.txt");
if (!inf)
{
rus("Ошибка при открытии файла!nnn");
} else
{
while (!inf.eof())
{
inf.getline(str,15); //введенная из файла строка
if (strcmp("",str)) uk = insert(uk, str);
}
rus("Данные успешно загружены!nnn");
}
}
//-------------------------Главная функция-----------------------------------
int main()
{ int n=1;
while(n){char x[15];
n=menu();
switch(n) // оператор выбора
{
case 1:clrscr();
cin>>x; uk=insert(uk,x);break;
case 2:clrscr();delet(uk);break;
case 3:clrscr();show(uk);break;
case 4:clrscr();save(uk);break;
case 5:clrscr();loading();break;
case 6:clrscr();dellist(uk);break;
case 0:clrscr();exit(0);
}
}
getch();
}
Схема
Вывод: эта программа выполняет ввод данных с клавиатуры, сохранение в файл и чтение из него; удаление элементов или всего списка, осуществляет просмотр и выход из программы, то есть она выделяет динамическую память для ввода данных с клавиатуры, сохраняет данные в файл. Можно загрузить данные из файла. Редактирует список с помощью удаления элемента списка, а так же возможно удалить список полностью и начать заполнение списка заново.
Другие работы по теме:
Риск в задачах линейного программирования
Лабораторная работа №3 Риск в задачах линейного программирования. Задание Предприятие выпускает 2 вида продукции в объмах Н1 и Н2. Известен случайный вектор ограничений -
Контрольная работа по статитстике
Министерство образования и науки Республики Казахстан Карагандинский Металлургический институт Факультет экономики и строительства Кафедра Экономической теории
Трехфазные цепи
Схемы соединений трехфазных цепей: звезда и треугольник. Рассмотрение соединения звездазвезда, звездатреугольник с нулевым проводом (без нулевого), симметричный и несимметричный режим. Аварийные режимы в трехфазных цепях (обрыв линейного провода, фазы).
Технология и организация перевозок 2
Белорусский национальный технический университет Автотракторный факультет Кафедра «Экономика и управление на транспорте» Курсовой проект по дисциплине: «Технология производства на автомобильном транспорте».
Риск в задачах линейного программирования
Лабораторная работа №3 Риск в задачах линейного программирования. Задание: Предприятие выпускает 2 вида продукции в объмах Н1 и Н2. Известен случайный вектор ограничений -
Решение задачи линейного программирования
Рассмотрим задачу линейного программирования Теорема . Если множество планов задачи (1) не пусто и целевая функция сверху ограничена на этом множестве, то задача (1) имеет решение.
Задачи по Математике 3
Задача 1 Решить графическим методом задачу линейного программирования А) найти область допустимых значений многоугольник решений Б) найти оптимумы целевой функции F=2x1 + x2 max min 2X1 + X2 ≥ 4 2X1 - X2 ≤ 0 0 ≤ X1 < 2 0 ≤ X2 < 8 Решение:
Собственные вектора и собственные значения линейного оператора
РЕФЕРАТ "Собственные вектора и собственные значения линейного оператора" Понятие собственные векторы и собственные значения Перед тем как определить понятие собственные вектора, покажем его на наглядном примере. На рисунке 1, красным цветом обозначен собственный вектор. Он, в отличие от синего, при деформации не изменил направление и длину, поэтому является собственным вектором, соответствующим собственному значению λ = 1.
Собственные вектора и собственные значения линейного оператора
Понятие собственных векторов и собственных значений, их свойства и характеристики, порядок нахождения собственных векторов оператора. Критерии определения независимости и ортогональности собственных векторов. Факторы и теоремы положительных матриц.
Математические методы методы
Общая задача линейного программирования Общей задачей линейного программирования называется задача, которая состоит в определении максимального или минимального значения функции
Сейм Карпатской Украины
(укр. Сойм Карпатської України) ( ) — законодательный орган автономного Закарпатья, избранный 12 февраля 1939 года в составе 32 членов (29 украинцев и трое от национальных меньшинств) из единого списка Украинского Национального Объединения.
Кобер, Алиса
Алиса Кобер , англ. Alice Kober (1906—1950) — американский историк, археолог, классический филолог. Известна тем, что проделала всю «черновую» работу по дешифровке наиболее поздней версии критского письма — Линейного письма Б. Собрала картотеку из примерно 186000 карточек, на которых она выписывала различные варианты написания знаков критского письма, а также сравнивала слова с предположительно общими корнями, но различными окончаниями.
S P 500
Логарифмический график индекса S&P 500 с 1950 по январь 2008 гг. S&P 500 (русск. Эс энд Пи 500) — фондовый индекс, в корзину которого включено 500 избранных акционерных компаний США, имеющих наибольшую капитализацию. Список принадлежит компании Standard & Poor's и ею же составляется.
Создание и обработка динамического списка
Пензенский технологический институт (завод-втуз) Факультет ФСВТ Кафедра Вмис Пояснительная записка к курсовой работе по дисциплине: «Алгоритмические языки и программирование»
Отчет по лабораторной работе №1
МОСКОВСКИЙ ИНСТИТУТ РАДИОТЕХНИКИ, ЭЛЕКТРОНИКИ И АВТОМАТИКИ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ) Отчет по лабораторной работе №1 Программирование на языках В/У
Агрегаты фактов
Списки. Database. Приемы работы с динамической базой фактов. Структуры.
Регрессионные зависимости
Вычисление значений регрессионно-авторегрессионной зависимости заданного выражения линейного программирования. Графическое представление математической модели в виде уравнения регрессии. Принципи оптимизации производственных и коммерческих операций.
Графический метод решения задач линейного программирования
Расчет производства необходимого количества продукции для получения максимальной прибыли предприятия. Математическая модель для решения задач линейного программирования. Построение ограничений и целевых функций. Исследование чувствительности модели.
Информационная система расчетов по договорам
Состав проекта Delphi, этапы его проектирования и назначение. Статические данные и структуры. Логическая структура данных проекта. Внесение данных в файлы, их поиск и сортировка. Формирование руководства пользователя, его структура и содержание.
Мультисписки
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ ХЕРСОНСЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ КАФЕДРА ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ Контрольна робота з дисципліни:
Задач линейного программирования
Цель работы: изучить теорию и методы решения задач линейного программирования; пробрести навыки построения моделей линейного программирования и решения задач линейного программирования на ЭВМ.
Построение и анализ на чувствительность моделей задач линейного программирования
Лабораторная работа №1 ПОСТРОЕНИЕ И АНАЛИЗ НА ЧУВСТВИТЕЛЬНОСТЬ МОДЕЛЕЙ ЗАДАЧ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ Цель работы: научиться определять оптимальный план производства (приобретения) продукции с учетом ограниченного обеспечения ресурсами различного вида; освоить методику и технологию поиска оптимального решения задач линейного программирования (ЗЛП) с помощью ЭВМ; приобрести практический опыт проведения анализа оптимального решения ЗЛП на чувствительность.