Варианты индивидуальных заданий



1.

Отсортировать строки файла, содержащие названий книг, в алфавитном порядке с использованием двух деков.

2.

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

3.

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

4.

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

5.

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

    на каждом шаге со стержня на стержень переносить только один диск;

    диск нельзя помещать на диск меньшего размера;

    для промежуточного хранения можно использовать стерженьВ.

Реализовать алгоритм, используя три стекавместо стержнейА,В,С.Информация о дисках хранится в исходном файле.

 

6.

Дан файл из вещественных чисел. Используя очередь,за один просмотр файла напечатать сначала все числа, меньшие a,затем все числа из интервала[a,b],и, наконец, все остальные числа, сохраняя исходный порядок в каждой группе.

7.

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

8.

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

9.

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

10.

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

11.

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

12.

Дан файл из целых чисел. Используя очередь,за один просмотр файла напечатать сначала все отрицательные числа, затем все положительные числа, сохраняя исходный порядок в каждой группе.

13.

Дан текстовый файл. Используястек,сформировать новый текстовый файл, содержащий строки исходного файла, записанные в обратном порядке: первая строка становится последней, вторая – предпоследней и т.д.

14.

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

15.

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

< ЛВ > ::= T | F | (N<ЛВ>) | (<ЛВ>A<ЛВ>) | (<ЛВ>X<ЛВ>) | (<ЛВ>O<ЛВ>),

где буквами обозначены логические константы и операции:

T – True, F – False, N – Not, A – And, X – Xor, O – Or.

16.

Дан текстовый файл. В текстовом файле записана формула следующего вида:

<Формула> ::= <Цифра> | M(<Формула>,<Формула>) | N(Формула>,<Формула>)

< Цифра > ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

где буквами обозначены функции:

M – определение максимума, N – определение минимума.

Используя стек, вычислить значение заданного выражения.

17.

Дан текстовый файл. Используя стек, проверить, является ли содержимое текстового файла правильной записью формулы вида:

< Формула > ::= < Терм > | < Терм > + < Формула > | < Терм > - < Формула >

< Терм > ::= < Имя > | (< Формула >)

< Имя > ::= x | y | z

18.

В текстовом файле хранится выражение, записанное в постфиксной форме. Используя стек, вычислить значение выражения.

Пример выражения: 2 3 5 + * 7 6 - * => 16

19.

В текстовом файле хранится выражение, записанное в инфиксной форме. Используя стек, перевести его в постфиксную форму и в таком виде записать в новый текстовый файл.

Пример выражения: a + b / c / d * e => a b c / d / e * +

20.

В текстовом файле хранится выражение, записанное в постфиксной форме. Используя стек, перевести его в инфиксную форму и в таком виде записать в новый текстовый файл.

Пример выражения: a b + c * d – f * => ((a + b) * c – d) * f

21.

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

Пример: исходный текст     Fyyf! B Kflt gj - gjgt lfkb y. T Рfh? Fpty.

Результат выделения палиндромов: Fyyf BKfltgjgjgtlfkb yTpfhFpty

 


Пример программы

Пример №1

//Демонстрация работы со стеком

//Многофайловый проект

//Основной файл STEK_MOD.CPP

//

#include<iostream.h>

#include"MODUL_ST.H"

#include<locale.h>

//main__Begin__________________________________________________________

int main()

{stek* head ;

 t_elem ch ;

 setlocale(LC_ALL,"Russian") ;

 head = init_stek() ;   //инициализируем стек

 view_stek(head) ;

 cout << "\n Вводите элементы стека сплошной строкой;"

 "\n в конце - точка:" << endl ;

 cin >> ch ;

 while(ch != '.')

{head = push_stek(ch, head) ;

cin >> ch ;

}

 cin.get() ;

 cout << " Исходное содержимое стека:" << endl ;

 if(!pu_stek(head)) view_stek(head) ;

else {cout << "Стек пуст. Нажмите Enter->" ; cin.get() ;

  return(0) ;

}

//Извлекаем первый элемент

 if(!pu_stek(head)) head = pop_stek(head, ch) ;

 else {cout << "Стек пуст. Нажмите Enter->" ; cin.get() ;

  return(0) ;

}

//Извлекли

 cout << "\n Извлекли: " << ch << endl ;

//Осталось в стеке

 cout << " Осталось:" << endl ;

 if(!pu_stek(head)) view_stek(head) ;

 else {cout << "Стек пуст. Нажмите Enter->" ; cin.get() ;

  return(0) ;

}

 cout << "\n Демонстрация закончена. Нажмите Enter->" ; cin.get() ;

 return(0) ;

}

//main__End____________________________________________________________

 

//Заголовочный файл MODUL_ST.H

//Определение типов

typedef char t_elem ; //тип информационной части элемента стека

struct stek       //тип элемента стека

{t_elem data ;        //поле данных

stek* link ;        //поле адреса

} ;

//Объявления (прототипы) функций

stek* init_stek() ;          //инициализация стека

int pu_stek(stek*) ;               //проверка стека на пустоту

stek* push_stek(t_elem, stek*) ; //добавление элемента в стек

stek* pop_stek(stek*, t_elem&) ;    //извлечение элемента из стека

void view_stek(stek*) ;       //вывод содержимого стека

//Исходный файл модуля работы со стеком MODUL_ST.CPP

//Содержит определения функций для работы со стеком

//

#include <iostream.h>

#include "MODUL_ST.H"

 

//view_stek__Begin________________________________________________________

//Просмотр содержимого стека

void view_stek(stek* head)

{stek* tec = head ;

 while(!pu_stek(tec))

{cout << tec->data ;

tec = tec->link ;

}

 return ;

}

//view_stek__End__________________________________________________________

 

//push_stek__Begin________________________________________________________

//Занесение нового элемента в стек

stek* push_stek(t_elem ch, stek* head)

{stek* nov = new(stek) ; //выделяем память под элемент стека

 nov->data = ch ;  //заполняем поля

 nov->link = head ;

 head = nov ;      //указатель на начало стека

 return(head) ;

}

//push_stek__End__________________________________________________________

 

//pop_stek__Begin_________________________________________________________

//Извлечение элемента из стека

stek* pop_stek(stek* head, t_elem& ch)

{stek* tec = head->link ;

 ch = head->data ; //копируем информационную часть головного элемента

 delete(head) ; //освобождаем память

 return(tec) ;

}

//pop_stek__End___________________________________________________________

 

//init_stek__Begin________________________________________________________

//Инициализация стека

stek* init_stek()

{return(NULL) ; //в исходном состоянии стек пуст

}

//init_stek__End__________________________________________________________

 

//pu_stek__Begin__________________________________________________________

//Проверка стека на пустоту

int pu_stek(stek* head)

{return(head == NULL) ; //стек пуст - 0

                    //стек не пуст - не 0

}

//pu_stek__End____________________________________________________________

 

 

Пример №2

//Демонстрация работы с очередью Многофайловый проект

//Основной файл OCHER_MO.CPP

#include<iostream.h>

#include"mod_oche.h"

#include<locale.h>

//main__Begin_____________________________________________________________

int main()

{ocher* o_beg,

* o_end ;

 t_elem ch ;

 setlocale(LC_ALL,"Russian") ;

 init_ocher(&o_beg, &o_end) ; //инициализируем очередь

 cout << "\n Вводите элементы очереди сплошной строкой;"

 "\n в конце - точка:" << endl ;

 cin >> ch ;

 while(ch != '.')

{add_ocher(ch, &o_beg, &o_end) ;

cin >> ch ;

}

 cin.get() ;

 cout << " Исходное содержимое очереди:" << endl ;

 if(!pu_ocher(o_beg)) view_ocher(o_beg) ;

 else {cout << " Очередь пуста. Нажмите Enter->" ; cin.get() ;

  return(0) ;

}

//Извлекаем первый элемент

 if(!pu_ocher(o_beg)) o_beg = del_ocher(o_beg, ch) ;

 else {cout << " Очередь пуста. Нажмите Enter->" ; cin.get() ;

  return(0) ;

  }

//Извлекли

 cout << "\n Извлекли: " << ch << endl ;

//Осталось в очереди

 cout << " Осталось:" << endl ;

 if(!pu_ocher(o_beg))

view_ocher(o_beg) ;

 else {cout << " Очередь пуста. Нажмите Enter->" ; cin.get() ;

  return(0) ;

}

 cout << "\n Демонстрация закончена. Нажмите Enter->" ; cin.get() ;

 return(0) ;

}

//main__End_______________________________________________________________

 

//Модуль работы с очередью

//Заголовочный файл MOD_OCHE.H

//Объявления типов

typedef char t_elem ; //тип информационной части элемента очереди

struct ocher       //тип элемента очереди

{t_elem data ; //поле данных

ocher* link ; //поле адреса

} ;

//Объявления (прототипы) функций для работы с очередью

void init_ocher(ocher**, ocher**) ; //инициализация очереди

int pu_ocher(ocher*) ;             //проверка очереди на пустоту

void view_ocher(ocher*) ;       //вывод содержимого очереди

void add_ocher(t_elem, ocher**, ocher**) ; //добавление элемента

ocher* del_ocher(ocher*, t_elem&) ; //удаление элемента из очереди

//_______________________________________________________________________

//Исходный файл mod_oche.cpp

//

#include<iostream.h>

#include"mod_oche.h"

#include<locale.h>

//view_ocher__Begin_______________________________________________________

//Просмотр содержимого очереди

void view_ocher(ocher* o_beg)

{ocher* tec = o_beg ;

 while(!pu_ocher(tec))

{cout << tec->data ;

tec = tec->link ;

}

 return ;

}

//view_ocher__End_________________________________________________________

 

//add_ocher__Begin________________________________________________________

//Занесение нового элемента в очередь

void add_ocher(t_elem ch, ocher** o_beg, ocher** o_end)

{ocher* nov = new(ocher) ; //выделяем память под элемент очереди

 nov->data = ch ;  //заполняем поля

 nov->link = NULL ;

 if(pu_ocher(*o_beg)) *o_beg = nov ; //если очередь пуста меняем адрес головы

 else (*o_end)->link = nov ;      //подсоединяем новый элемент

 *o_end = nov ;        //указатель на последний элемент очереди

 return ;

}

//add_ocher__End__________________________________________________________

 

//del_ocher__Begin________________________________________________________

//Извлечение элемента из очереди

ocher* del_ocher(ocher* o_beg, t_elem& ch)

{ocher* tec = o_beg->link ; //меняем адрес головы

 ch = o_beg->data ; //копируем информационную часть головного элемента

 delete(o_beg) ; //освобождаем память

 return(tec) ; //возвращаем новый адрес головы

}

//del_ocher__End__________________________________________________________

 

//init_ocher__Begin_______________________________________________________

//Инициализация очереди

void init_ocher(ocher** o_beg, ocher** o_end)

{*o_beg = NULL ; //в исходном состоянии очередь пуста

 *o_end = NULL ;

 return ;

}

//init_ocher__End_________________________________________________________

 

//pu_ocher__Begin_________________________________________________________

//Проверка очереди на пустоту

int pu_ocher(ocher* o_beg)

{return(o_beg == NULL) ; //очередь пуста - 0

                   //очередь не пуста - не 0

}

//pu_ocher__End___________________________________________________________

 


Лабораторная работа №16

Классы

 

Цель лабораторной работы: изучение структуры, свойств и видов объектов; изучение способов доступа к полям и правил вызова методов объектов; получение навыков объектно-ориентированного программирования на языке C++.

 

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

- с использованием статического объекта;

- с использованием динамического объекта.

 

Порядок выполнения работы:

 

1) Получить у преподавателя индивидуальное задание.

2) Разработать иерархию и структуру объектов, связанных на принципах наследования, в соответствии с индивидуальным заданием. Дерево наследования должно содержать не менее трех уровней.

3) Описать типы объектов и методы обработки их полей.

4) Составить две программы на языке C++, реализующие движение графического объекта по заданной траектории: в виде динамического объекта и в виде статического объекта описанного типа.

5) Проверить и продемонстрировать преподавателю работу программ.

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

 


Дата добавления: 2018-04-05; просмотров: 1345; Мы поможем в написании вашей работы!

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






Мы поможем в написании ваших работ!