МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
ГРАЖДАНСКОЙ АВИАЦИИ

Лабораторная работа №6 по дисциплине:
«Алгоритмические языки и программирование»
Разработка функций рекурсивных и без рекурсии, использующих
параметр – функцию и оператор return
Выполнил:
Студент группы ЭВМ 1-1
Приняла:
Цель работы:
Целью лабораторной работы является освоение:
1) правил объявления переменных структурных типов – структур, массивов структур, указателей на структуры;
2) правил обращения к элементам структур и элементам массива структур;
3) ввода и вывода значений элементов массива структур;
4) методов форматирования вывода данных в текстовый файл;
5) использования массива указателей, инициализированного набором строковых констант
Алгоритм

Программный код:
#include <conio. h>
#include <iostream. h>
#include <stdlib. h>
#include <string. h>
#include <iomanip. h>
#include <fstream. h>
struct marshrut
{
char name[15];
char strana[15];
double dlitelnostx;
double price;
char srok[12];
};
marshrut B[10];
char *sh[6]={
" Туристические маршруты агенства",
"╔══════════════╦══════════╦══════════════╦═══════════╦═════════════════════╗",
"║ Наименование ║ Страна ║ Длительность ║ Стоимость ║ Срок ║",
"║ маршрута ║ ║ тура ║ ║ (число, месяц, год) ║",
"╠══════════════╬══════════╬══════════════╬═══════════╬═════════════════════╣",
"╚══════════════╩══════════╩══════════════╩═══════════╩═════════════════════╝"
};
ifstream fin;
ofstream fout;
double s;
void filtr(char *Stroka)
{
char Source[255]="";
int X1=0, X2=strlen(Stroka)-1;
while (Stroka[X1++]==' ');
while (Stroka[X2--]==' ');
X1-=1; X2+=1;
for (int x= X1; x <= X2; x++) Source[x-X1]=Stroka[x];
Source[x-X1]='\0';
strcpy(Stroka, Source);
}
void psh()
{
for (int i=0; i<5; i++)
fout << sh[i] << endl;
}
int number(char *filename)
{
int n=0;
char T[255];
fin. open(filename);
if (!fin) {cout << "Ошибка при открытии файла данных"; exit(0);}
while (!fin. eof()) {fin. getline(T,255); n++;}
fin. close();
return n;
}
void vvod (marshrut B[10], int n, double &s, char *filename)
{
int i; s=0;
char T[80];
fin. open(filename);
if (!fin) {cout << "Ошибка открытия файла данных"; exit(0);}
for (i=0;i<n;i++)
{
fin. getline(B[i].name,14); filtr(B[i].name);
fin >> B[i].strana >> B[i].dlitelnostx >> B[i].price
>> B[i].srok;
fin. getline(T,255);
s+=B[i].price;
}
fin. close();
}
void vivod (marshrut B[10], int n)
{
int i;
for (i=0; i<n; i++)
fout <<'║'<<setw(14)<<B[i].name<<'║'<<setw(10)<<B[i].strana<<'║'
<<setw(14)<<B[i].dlitelnostx<<'║'<<setw(11)<<B[i].price<<'║'<<setw(21)
<<B[i].srok<<'║'<<endl;
fout <<sh[5]<<endl;
fout <<"Суммарная стоимость туров: "<< s;
}
void poisk(marshrut *p, int n)
{
char name[20];
fin. open("poisk. dat");
if(!fin) {cout << "Ошибка открытия файла данных для поиска";exit(0);}
fout << "\n\n Поиск по названию маршрута\n";
while (!fin. eof())
{
fin. getline(name,20);
if (!strcmp(name,""))
{
fout << "\nНет данных для поиска";
continue;
}
for (int i=0;i<n;i++) if (strcmp(p[i].name, name)==0)
{
fout << endl <<'║'<<setw(14)<<B[i].name<<'║'<<setw(10)<<B[i].strana<<'║'
<<setw(14)<<B[i].dlitelnostx<<'║'<<setw(11)<<B[i].price<<'║'<<setw(21)
<<B[i].srok<<'║'; goto m;
}
fout << "\nМаршрут "<< name<< " не найден";
m:
}
fin. close();
}
void main()
{
char filen[15];
clrscr();
cout << "Введите имя файла данных: ";
cin. getline(filen,80);
fout. open("res. cpp");
if(!fout){"Ошибка открытия файла результатов"; exit(0);}
int n=number(filen);
vvod(B, n,s, filen);
psh();
vivod(B, n);
poisk(B, n);
fout. close();
}
Файл данных:
London - 2 England8
Kremlin Russia 5 23
OVD Golovino Russia 3
Файл данных поиска:
OVD Golovino
Kremlin
Washington DC


