- •Предисловие
- •Правила выполнения лабораторных работ
- •Обеспеченность занятия (средства обучения):
- •Порядок выполнения отчета по лабораторной работе
- •Лабораторная работа № 1 «Разработка линейных алгоритмов»
- •Образовательные результаты, заявленные во фгос третьего поколения:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •Контрольные вопросы
- •Лабораторная работа № 3-4 «Использование оператора цикла с параметром»
- •Образовательные результаты, заявленные во фгос третьего поколения:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •Контрольные вопросы
- •Лабораторная работа № 5 «Табулирование функций»
- •Образовательные результаты, заявленные во фгос третьего поколения:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •Контрольные вопросы:
- •Лабораторная работа № 11-12 «Разработка технического задания с использованием ms Word»
- •Образовательные результаты, заявленные во фгос третьего поколения:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •1 Общие сведения
- •1.1. Полное наименование системы и ее условное обозначение
- •1.3. Термины и определения
- •3.1.4. Безопасность системы
- •3.1.5. Требования по эргономике и технической эстетике
- •3.1.6. Требования к производительности системы
- •3.2. Общие требования к функциям системы
- •3.2.1. Общие требования к способам обработки и хранения информации
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •Контрольные вопросы:
- •Лабораторная работа № 15-16 «Использование многомерных массивов»
- •Образовательные результаты, заявленные во фгос третьего поколения:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •Контрольные вопросы:
- •Лабораторная работа № 17 «Использование оператора выбора switch-case-default»
- •Образовательные результаты, заявленные во фгос третьего поколения:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •Контрольные вопросы:
- •Лабораторная работа № 21 «Разработка программного кода методом половинного деления»
- •Образовательные результаты, заявленные во фгос третьего поколения:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •9: Разложение на множители
- •10: Палиндром
- •11: Вывести нечетные числа последовательности
- •Контрольные вопросы:
- •Лабораторная работа № 26-27 «Обработка структурных данных»
- •Образовательные результаты, заявленные во фгос третьего поколения:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •Контрольные вопросы:
- •Лабораторная работа № 28-29 «Использование файловых потоков»
- •Образовательные результаты, заявленные во фгос третьего поколения:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •Контрольные вопросы:
- •Лабораторная работа № 30-31 «Использование строк при разработке программного кода»
- •Образовательные результаты, заявленные во фгос третьего поколения:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •Контрольные вопросы:
- •Лабораторная работа № 32-33 «Использование динамических массивов структур»
- •Список представляет собой таблицу
- •Задания для лабораторной работы:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Список представляет собой таблицу
- •Задания для лабораторной работы:
- •Контрольные вопросы:
- •Лабораторная работа № 36-37 «Использование классов динамических массивов структур»
- •Образовательные результаты, заявленные во фгос третьего поколения:
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Список представляет собой таблицу
- •Краткие теоретические и учебно-методические материалы по теме лабораторной работы
- •Задания для лабораторной работы:
- •Контрольные вопросы:
Список представляет собой таблицу
№ |
Фамилия и инициалы |
Курс |
Группа |
1 |
Иванов А.А. |
1 |
ИСТ – 101 |
2 |
Сидоров Б.Б. |
1 |
АСУ – 120 |
. |
… |
… |
… |
|
|
|
|
Каждая строка содержит информацию об одном студенте. Таблица содержит n строк. Требуется написать программу, которая печатает перечень групп, имеющих задолжников с указанием их количества в группе.
# include <iostream.h>
# include <fstream.h>
# include <string.h>
# include <iomanip.h>
# include <stdlib.h>
# include <conio.h>
struct student
{
char name[30];
int kurs;
char gr[7];
};
struct group
{
char gr[7];
int ng;
};
class dmassiv // класс динамический массив структур
{
private:
student *pst; // указатель на исходную таблицу задолжников
int n; // n – число строк в исходной таблице
group *pz; // указатель на перечень групп, имеющих задолжников
int k; // к – число групп в перечне
public:
dmassiv() { n=0; pst=NULL; k=0; pz=NULL;} // конструктор
~dmassiv(); // деструктор
void inputstudentfile (); // ввод массива задолжников из файла
void outputstudent (); // вывод массива задолжников на экран
void outputgroup (); // вывод перечня групп задолжников на экран
void outputgroupfile (); // вывод перечня групп задолжников в файл
void perechengroup (); // формирование перечня групп задолжников
void add (); // добавление записи в массив задолжников
void deletename (); // удаление записи из массива задолжников
};
// Ввод исходного массива задолжников из файла
void dmassiv::inputstudentfile ()
{
ifstream fin;
char file[10];
char iniz[7]; // рабочая переменная для инициалов
student t; // рабочая переменная для подсчета записей в файле
int i;
// очистка рабочих областей (массива задолжников и перечня)
if(pst!=NULL) { delete[] pst; n=0; pst=NULL;}
if(pz!=NULL) { delete[] pz; k=0; pz=NULL;}
cout << ”Имя файла:” ;
cin >> file;
fin.open(file);
if( fin==NULL) {cout<<”Файл не открыт.\n”; exit(1);}
// подсчет записей в файле
n=0;
do {
fin >> t.name >> iniz >> t.kurs >> t.gr ;
n++;
}while (fin.good());
n--;
fin.close();
// выделение памяти для динамического массива
pst= new student [n];
if( pst==NULL ) { cout<<”Нет динамической памяти.”; getch(); exit(1);}
// ввод массива задолжников из файла
fin.open(file);
if( fin==NULL) {cout<<”Файл не открыт.\n”; exit(1);}
for (i=0; i<n; i++)
{
fin >> pst[i].name >> iniz >> pst[i].kurs >> pst[i].gr ;
strcat( pst[i].name, “ “); // добавление инициалов через
strcat( pst[i].name, iniz); // пробел к фамилии
}
fin.close();
}
// Вывод массива задолжников на экран
void dmassiv::outputstudent ()
{
cout << ” Исходный массив структур. \n” ;
cout<< “Фамилия и инициалы Курс Группа \n”;
for (i=0; i<n; i++)
cout << setw(16)<< pst[i].name << setw(7)<< pst[i].kurs << setw(8) << pst[i].gr << endl ;
}
// Формирование перечня групп, имеющих задолжников
void dmassiv::perechengroup ()
{
int i,j,fl;
// выделение памяти для динамического массива (перечня)
pz= new group [n];
if( pz==NULL ) { cout<<”Нет динамической памяти.”; getch(); exit(1);}
// очистка рабочей области (перечня)
if(pz!=NULL) { delete[] pz; k=0; pz=NULL;}
// формирование перечня групп
for ( i=0; i<n; i++)
{
fl=1;
for ( j=0; j<k; j++)
if (strcmp( pst[i].gr, pz[j].gr) == 0) { fl=1; pz[j].ng++; }
if (fl==1) { strcpy( pz[k].gr, pst[i].gr); pz[k].ng =1; k++; }
}
}
// Вывод перечня групп, имеющих задолжников, на экран
void massiv::outputgroup ()
{
cout << ” Перечень групп, имеющих задолжников. \n” ;
cout<< “ Группа Кол-во \n”;
for (i=0; i<k; i++)
cout << setw(8)<< pz[i].gr << setw(8)<< pz[i].ng << << endl ;
}
// Вывод перечня групп, имеющих задолжников, в файл
void dmassiv::outputgroupfile ()
{
оfstream fout;
char file[10];
int i;
cout << ”Имя файла:” ;
cin >> file;
fout.open(file);
if( !fout.good()) {cout<<”Файл не открыт.\n”; exit(1);}
for (i=0; i<k; i++)
fout << setw(8)<< pz[i].gr << setw(8)<< pz[i].ng << << endl ;
fout.close();
}
// Добавление записи в массив задолжников
void dmassiv::add ()
{
int i;
student t, // рабочая переменная для информации о добавляемом
*p; // указатель для сохранения адреса исходного массива
char iniz[7]; // рабочая переменная для инициалов
// ввод информации о добавляемом
cout << “Введите фамилию: ”;
cin >> t.name >> iniz;
strcat( t.name, “ “); // добавление инициалов через
strcat( t.name, iniz); // пробел к фамилии
cout << “Курс: ”;
cin >> t.kurs;
cout << “Группа: ”;
cin >> t.gr;
p=pst; // сохранение адреса исходного массива
// выделение памяти для массива и добавление введенной записи в него
pst= new student [n+1];
if( pst==NULL ) { cout<<”Нет динамической памяти.”; getch(); exit(1);}
for (i=0; i<n; i++)
pst[i]=p[i];
pst[n]=t; // добавление записи в массив
n++;
delete[] p; // удаление предыдущего массива
}
// Удаление записи по фамилии и группе из массива задолжников
void dmassiv::deletename ()
{
int i,j;
student t; // рабочая переменная для информации об удаляемом
char iniz[7]; // рабочая переменная для инициалов
// ввод фамилии и группы удаляемого
cout << “Введите фамилию: ”;
cin >> t.name >> iniz;
strcat( t.name, “ “); // добавление инициалов через
strcat( t.name, iniz); // пробел к фамилии
cout << “Группа: ”;
cin >> t.gr;
// поиск и удаление записи
for ( i=0; i<n; i++)
if( strcmp(t.name, pst[i].name)==0 && strcmp(t.gr, pst[i].gr)==0) break;
if(i==n) {cout<<t.name<” не найден. \n“; getch(); exit(1);}
else { for ( j=i+1; j<n; j++)
pst[j-1]=pst[j];
n--;
}
}
// Определение деструктора
dmassiv::~dmassiv()
{
// очистка рабочих областей (массива задолжников и перечня)
if(pst!=NULL) { delete[] pst; n=0; pst=NULL;}
if(pz!=NULL) { delete[] pz; k=0; pz=NULL;}
}
/*основная функция программы */
void main()
{
dmassiv a; // Объект класса dmassiv
int j;
while (1)
{
clrscr();
cout << “1. Ввод таблицы из файла. \n”;
cout << “2. Вывод таблицы на экран. \n”;
cout << “3. Добавление записи в таблицу. \n”;
cout << “4. Удаление записи из таблицы. \n”;
cout << “5. Формирование перечня групп. \n”;
cout << “6. Вывод перечня групп на экран. \n”;
cout << “7. Вывод перечня групп в файл. \n”;
cout << “8. Выход из программы. \n”;
cout << “\n Ваш выбор (1-8) :”;
cin >> j;
switch(j)
{
case 1: a.inputstudentfile(); break;
case 2: a.outputstudent(); getch(); break;
case 3: a.add(); break;
case 4: a.deletename(); break;
case 5: a.perechengroup(); break;
case 6: a.outputgroup(); getch(); break;
case 7: a.outputgroupfile(); break;
case 8: cout << “Завершение рабоы.”; getch(); return;
default: cout << “ Ошибка в выборе пункта меню. Повторите.”; getch();
}}}
Задания для лабораторной работы:
Варианты заданий соответствуют заданиям лабораторной работы № 32-33. Для их решения необходимо использовать классы динамического массива структур, предусмотрев выполнение дополнительно операций добавления и удаления записей в исходном массиве. Для демонстрации методов класса требуется реализовать программу меню.
Контрольные вопросы:
1. Для какого класса существует конструктор?
2. Что такое деструктор?
3. Приведите пример выделения памяти для динамического массива.
4. Назовите основные характеристики деструктора.
5. К чему разрешает уровнь доступа private?
Лабораторная работа № 38-39
«Использование списков»
Цель работы: знакомство и получение навыков работы со списками.
Образовательные результаты, заявленные во ФГОС третьего поколения:
Студент должен
уметь:
-осуществлять разработку кода программного модуля на современных языках программирования;
- оформлять документацию на программные средства;
- использовать инструментальные средства для автоматизации оформления документации;
знать:
- основные этапы разработки программного обеспечения;
- основные принципы технологии структурного и объектно-ориентированного программирования;
- методы и средства разработки технической документации.
