Работа с таблицей "Туризм", сортировка городов для одной страны методом Шелла (Лабораторная работа № 6)

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Содержание работы

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

НГТУ

КАФЕДРА ПРИКЛАДНОЙ МАТЕМАТИКИ И ИНФОРМАТИКИ

ЛАБОРАТОРНАЯ РАБОТА №6

по дисциплине "Структуры данных и алгоритмы"

ФПМИ

ПМ-62

Выполнила: Грибач Д.

Проверила: Шапошникова Т.А.

НОВОСИБИРСК, 2007

1.  Задание

В таблице "Туризм", отсортировать города для одной страны методом Шелла. Выводить путевки, стоимость, которых не превышает заданной.

2.  Анализ задачи

    Дано:

Т = {ci | ci € C, i = 1,n}, C = {ci = (si ; G) | si € S, i = 1,n}, G = {(g; a; t)j | g € Q, a € N, t € W, j = 1,m, }, e € N , где S – множество стран, Q – множество городов, W –  множество транспортных средств, а – стоимость поездки, e – предельная стоимость поездки.             

          Результат:

                         E € T, g1<g2<…<gm, a ≤ e.                 

     3. Метод решения

Необходимо отсортировать таблицу методом Шелла по ключу – название города. Сравнить для каждого города стоимость путевки с заданной. Метод Шелла: сравнивать элементы gi и gi+h, где h = m/2, затем шаг уменьшается вполовину, пока не станет равным 1.

4.  Текст программы

#include <stdlib.h>

#include <conio.h>

#include <stdio.h>

#include <string.h>

const N=20;

struct city

{

     char name[21];

     int coast;

     char trsp[21];

};

struct country

{

     char name[21];

     city el[N];

    int k;

};

struct table

{

     country elem[N];

     int n;

};

void sort(table *t)

{

  int m,h=t->elem[0].k/2;

  while (h>=1) {

  for (m=0; m<t->elem[0].k-h; m++)

  if (strcmp(t->elem[0].el[m].name,t->elem[0].el[m+h].name)>0)

  {

  struct city tab = t->elem[0].el[m];

  t->elem[0].el[m]=t->elem[0].el[m+h];

  t->elem[0].el[m+h]=tab;

  int s=m;

  while ((s>h) && (strcmp(t->elem[0].el[s].name,t->elem[0].el[s-h].name) <0))

  {

    tab = t->elem[0].el[s];

    t->elem[0].el[s]=t->elem[0].el[s-h];

    t->elem[0].el[s-h]=tab;

    s--;

  }

  }

  h/=2;

}

}

void readf(table *h)

{

     FILE *in;

    if ((in = fopen("input.txt", "r")) == NULL)

               {

                fprintf(stderr, "Cannot open input file.\n");

                getch();

                exit(0);

               }

               char s[21];

               int l=0,k=0;

               fscanf(in,"%s%d",s,&l);

               h->n=1;

               strcpy(h->elem[h->n-1].name,s);

               h->elem[h->n-1].k=l;

               for (k=0;k<l;k++)

               fscanf(in,"%s%d%s",h->elem[h->n-1].el[k].name,&(h->elem[h->n-1].el[k].coast),h->elem[h->n-1].el[k].trsp);

    while (!feof(in))

     {

               fscanf(in,"%s%d",s,&l);

               h->n++;

               int i=0;

               int k=0;

               while ((strcmp(s,h->elem[k].name)>0)&&(k<h->n-1))

               {

                         k++;

               }

               if (k<h->n)

                         for (i=h->n-1;i>k;i--)

                                    h->elem[i]=h->elem[i-1];

               strcpy(h->elem[k].name,s);

               h->elem[k].k=l;

               for (k=0;k<l;k++)

               fscanf(in,"%s%d%s",h->elem[i].el[k].name,&(h->elem[i].el[k].coast),h->elem[i].el[k].trsp);

     }

}

void prnt(table *h)

{

 int c;

printf ("Enter coast: ");

scanf ("%d", &c);

printf("\n%s\n",h->elem[0].name);

for (int j=0;c>=h->elem[0].el[j].coast;j++)

    {

     printf("%s %d %s\n",h->elem[0].el[j].name,h->elem[0].el[j].coast,h->elem[0].el[j].trsp);

     printf("\n");

    }

void main()

{

     table t;

     t.n=0;

        clrscr ();

     readf(&t);

     sort(&t);

     prnt(&t);

     getch();

}

5.  Тесты

input:

стоимость:

результат:

Russia 4

Novosibirsk 30 plane

Moscow 10 foot

Saratov 70 bus

Sochi 120 car

50

Moscow 10 foot

Novosibirsk 30 plane

120

Sochi 120 car

Moscow 10 foot

Novosibirsk 30 plane

Saratov 70 bus

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.