Разработка программы "Автомобили и их владельцы"

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

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

Министерство образования и науки Российской Федерации

Новосибирский Государственный Технический Университет

 Кафедра прикладной математики

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

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

Факультет: ПМИ

Группа: ПМИ-71

Студент: Рябинкин С.А.

Преподаватель: Еланцева И.Л.

Новосибирск 2008 г

1.Условие задачи

В файле «Авто» дана информация об автомобилях: «номер а/м», «ФИО владельца», «марка а/м». Создать таблицу «Автовладельцы», с элементами такого же вида. Таблица должна быть

   в) Упорядочена по возрастанию «номер а/м»

Информация о разбившихся машинах дана в файле «Аварии».Элементы файла «Аварии»:«номер а/м» Информация в файле «Аварии» упорядочена по возрастанию номеров машин.

   а) Исключить из таблицы «Автовладельцы» информацию о разбившихся автомобилях.

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

Дано: «Авто» = «владелец» «Авто» |«владелец»

«владелец»= «номер а/м»  «ФИО владельца» «марка а/м» \n

 «номер а/м» - задано целым числом

 «ФИО владельца» - символьный≤30

«марка а/м» - символьный≤10

           «Аварии»= «номер а/м» «Аварии»| «номер а/м»

Результат: упорядоченная по возрастанию «номер а/м», исключая владельцев машины с номерами из файла «Аварии» таблица

                     Т={ «номер а/м»    «ФИО владельца» «марка а/м»}

Метод решения:

 Читаем таблицу из файла. Читаем первый элемент из файла.

                 ПОКА (!feof(f1))

                               Читаем элемент из файла nomer

                            ЕСЛИ

                                   (nomer<T.S[i].HOMEP)

                                 ТО

                                    Сдвигаем таблицу вверх

               ПОКА (!feof(f2))

                     Читаем элемент из файла nomav

                            ЕСЛИ

                                     nomav==T.S[i].HOMEP

                              ТО

                                Сдвигаем таблицу вниз

           Вывод таблицы

3.Структура основных входных и выходных данных.

Таблица будет упорядоченной, статической, вида:

struct avto{ int HOMEP; - Номер машины

                  char FIO[30];  -  ФИО владельца машины

            char MAPKA[10];  -  марка машины

};

struct table1{struct avto S[N];  -  элементы таблицы 

                        int n;                 - количество элементов в таблице

} T;

struct avariya{int HOMEP;    - Номер машины

};

struct table2{struct avariya Q[M];  - элементы таблицы

                        int m;                    - количество элементов в таблице

 } P;

4. Алгоритм решения задачи

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

#include <stdio.h>

#include <string.h>

#define N 20

#define M 20

struct avto{ int HOMEP;

                  char FIO[30];

            char MAPKA[10];

};

struct table1{struct avto S[N];

                        int n;} T;

struct avariya{int HOMEP;

};

struct table2{struct avariya Q[M];

                        int m; } P;

void main() {int nomer, nomav, f=0;

            FILE *f1, *f2;

            f1 = fopen("D:/Avto.txt", "r");

            if (f1 == 0) {printf("No open!\n");}

            f2 = fopen("D:/Avariya.txt", "r");

            if (f2 == 0) {printf("No open!\n");}

    fscanf(f1, "%i %s %s", &T.S[0].HOMEP, T.S[0].FIO, T.S[0].MAPKA);

    T.n=1;

    while (!feof(f1)) {

     fscanf(f1, "%i", &nomer);

            for(int i=0, f=0;i<T.n&&f!=1;i++) {

               if(nomer<T.S[i].HOMEP) {

                for(int j=T.n; j>=i;j--) {

                 T.S[j+1].HOMEP=T.S[j].HOMEP;

                  strcpy(T.S[j+1].FIO, T.S[j].FIO);

                   strcpy(T.S[j+1].MAPKA, T.S[j].MAPKA);

                 }

                 T.S[j+1].HOMEP=nomer;

                 fscanf(f1, "%s %s", T.S[j+1].FIO, T.S[j+1].MAPKA);

                  T.n=T.n+1;

          f=1;

                 }

        }

    if(f!=1)  {

       T.S[i].HOMEP=nomer;

                 fscanf(f1, "%s %s", T.S[i].FIO, T.S[i].MAPKA);

       T.n=T.n+1;

       }

      }

       fclose(f1);

    while (!feof(f2)) {

            fscanf(f2, "%i", &nomav);

            for(int f=0; f<T.n; f++) {

             if(nomav==T.S[f].HOMEP) {

               for(int k=f; k<T.n-1;k++) {

               T.S[k].HOMEP=T.S[k+1].HOMEP;

                strcpy(T.S[k].FIO, T.S[k+1].FIO);

                 strcpy(T.S[k].MAPKA, T.S[k+1].MAPKA);

                 }

             T.n=T.n-1;

    }

    }

    }

             for(int c=0;c<T.n; c++) {

                 printf ("\n%i %s %s", T.S[c].HOMEP, T.S[c].FIO, T.S[c].MAPKA);

        }

       fclose(f2);}

         6. Тесты.

Файл avto

файл avariya

Результат

Примечание

1

123 SidorovSidorSidorivich Lada

201 DemarchykKoctynIgorevich Hummerh3

303 PetrovIvanOlegovich Toyota

123

201 DemarchykKoctynIgorevich Hummerh3

303 PetrovIvanOlegovich Toyota

Файл avto упорядочен

2

123 SidorovSidorSidorivich Lada

201 DemarchykKoctynIgorevich Hummerh3

303 PetrovIvanOlegovich Toyota

123 SidorovSidorSidorivich Lada

201 DemarchykKoctynIgorevich Hummerh3

303 PetrovIvanOlegovich Toyota

Файл avaruya

пуст

3

234 IvanovIvanIvanovich Honda

345 PetrovPetrPetrovich ZAZ

123 SidorovSidorSidorivich Lada

201 DemarchykKoctynIgorevich Hummerh3

303 PetrovIvanOlegovich Toyota

789 PlaksinKostyanOlegovich Volga

123

789

201 DemarchykKoctynIgorevich Hummerh3

234 IvanovIvanIvanovich Honda

303 PetrovIvanOlegovich Toyota

345 PetrovPetrPetrovich ZAZ

Файл avto неупорядочен и файл avariya содержит несколько элементов

         7. Результаты работы программы

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

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

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