Министерство образования и науки Российской Федерации
Новосибирский Государственный Технический Университет
Кафедра прикладной математики
Лабораторная работа №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. Результаты работы программы
Программа работает правильно, что подтверждается результатами тестов.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.