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

ГРАЖДАНСКОЙ АВИАЦИИ

Лабораторная работа №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