Анализ задания
Для каждого перечня названий будет создан отдельный список с порядковым номером и именем элемента, таким образом, каждому названию будет присвоено число. В списке деталей каждой детали помимо номера будут присвоены дополнительные значения (вес, цена, запас на складе) и номер фирмы. Сведения о разных автомобилях представляют набор чисел, где каждое число относится к элементу нужного списка. Чтобы связать автомобили с деталями, нужно пройтись по файлу со сведениями, собрать нужный набор информации для каждого автомобиля (полный вес и стоимость автомобиля, а также количество машин, которые можно изготовить) и привязать его к соответствующей модели в списке автомобилей. Для решения 1, 2 и 3 вопросов этого будет достаточно. Чтобы ответить на 4 вопрос, во время прохождения по файлу со сведениями нужно сравнить конечный вес нового автомобиля с предыдущим весом и выделять самый легкий и тяжелый вес.
Контрольный пример
Автомобили: 1. Volvo 2. Toyota 3. BMV
|
Фирмы: 1. Autolite 2. Bosch 3. Dayso |
Детали: 1. pin, 0.03кг, 256 руб., 1 фирма, 30000 шт. 2. wheel, 20 кг, 3000 руб., 2 фирма, 2400 шт. 3. belt, 0.5 кг., 1500 руб., 3 фирма, 20000 шт. 4. spring, 0.06 кг., 300 руб., 1 фирма, 100 шт. 5. screw, 0.33 кг., 500 руб., 2 фирма, 3490 шт. |
Сведения об автомобилях: Для 1.Volvo 1 1 30 1 2 4 1 3 5 1 4 20 1 5 15 Для 2.Toyota 2 1 35 2 2 4 2 5 2 Для 3.BMV 3 1 4 3 3 25 |
РЕЗУЛЬТАТ: Номер: 1 Марка автомобиля: Volvo Вес: 89.55 кг Стоимость: 40680 рублей Возможное количество: 5
Номер: 2 Марка автомобиля: Toyota Вес: 81.71 кг Стоимость: 21960 рублей Возможное количество: 600
Номер: 3 Марка автомобиля: BMV Вес: 12.62 кг Стоимость: 38524 рублей Возможное количество: 800
Самая тяжелая модель: Volvo 89.55 кг Самая легкая модель: BMV 12.62 кг |
Пользовательские типы
Название |
Поля структуры |
Тип |
Назначение |
Struct StrL |
massiv |
char |
Массив символов |
len |
int |
Длина массива |
|
weight |
float |
Вес детали |
|
cena |
int |
Цена детали |
|
sklad |
int |
Запас летали на складе |
|
Struct ListNodeH |
podstroka |
StrL |
Подстрока |
*next |
ListNodeH |
Указатель на следующий эдемент горизонтального списка |
|
Struct ListNodeV |
f_H |
Formular |
Подстрока |
*next |
ListNodeH |
Указатель на следующий эдемент горизонтального списка |
|
ReadV |
bool |
Считывание горизонтального списка |
|
Print1 |
void |
Вывод горизонтального списка |
|
Struct FormularH |
*head |
ListNodeH |
Указатель на головной элемент |
*cur |
ListNodeH |
Указатель на текущий элемент |
|
*last |
ListNodeH |
Указатель на последний элемент |
|
*prev |
ListNodeH |
Указатель на предыдущий элемент |
|
Struct FormularV |
*head |
ListNodeV |
Указатель на головной элемент |
*cur |
ListNodeV |
Указатель на текущий элемент |
|
*last |
ListNodeV |
Указатель на последний элемент |
|
*prev |
ListNodeV |
Указатель на предыдущий элемент |
Формальная постановки задачи
Для выполнения задания необходимо создать три списка: автомобилей, фирм и деталей. Далее из информационного файла в отдельный список считываются данные для каждого автомобиля, а именно набор деталей. Первое число в строке - номер модели, далее через пробел написан номер детали. Рядом с номером детали через пробел написано количество, которое нужно для создания автомобиля.
В процессе прохождения по информационному списку в список автомобилей заносится информация об итоговом весе автомобиля, его стоимости и количестве машин, которые можно произвести.
Этапы трансляции
Особенности решения задачи на компьютере, ввод и вывод
Для реализации задачи использовалась библиотека iostream и fstream. Ввод входных файлов осуществляется из файлов cars.txt, details.txt, firms.txt, info.txt. В файлах записаны названия, номера и числа, которые считываются в списки. Для списков автомобилей и фирм в файле представлены строки с номерами и названиями. Для списка с деталями в файле даны строки с несколькими значениями типа int, название из буквенных символов char и значение типа float (вес).
Сведения в файле размещены эффективно, поэтому программа считывает заранее заданное число значений. На месте отрицательных чисел в выходном файле будет выведен сигнал об ошибке. Сбор сведений об автомобилях с промежуточными вычислениями производятся в файл protocol.txt. Вывод списков, итоговой информации обо всех автомобилях и командного меню производятся в файл result.txt.
