Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 05.12.2016
Сообщений: 55
1

Файлы. Создание последовательного файла

08.01.2018, 10:10. Показов 2274. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создать последовательный файл с записями указанной структуры Программа должна за однократный просмотр выбрать из файла записи, отвечающие заданию, обработать их и вывести итоговый результат в виде таблицы на экране дисплея. Необходимо, чтобы программа обрабатывала файл с любым именем, которое определяется в диалоге после запуска программы. В условиях вариантов обозначен тип компонентов записи: int - целочисленное значение, char - строковое значение, float - вещественное значение. Использование массивов для хранения всех элементов файла запрещено. В каждом файле должно быть не менее 15 записей.

Задание:Санаторий (char), количество отдыхающих (int), город (char), полная площадь полезных помещений (float), число обслуживающего персонала (int). Напечатать названия санаториев, принимающих не более 1000 человек и имеющих не менее 200 человек персонала. Найти город, в котором есть санаторий, обеспечивающий наибольший уровень комфортности: при наибольшем отношении (площадь/число отдыхающих) имеет наибольшее количество обслуживающего персонала (в исходном файле должно быть несколько санаториев, имеющих одинаковое отношение площадь/число отдыхающих).

Помогите сделать задание!
Хотя бы пример на такую тему. Не понятно как это делать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2018, 10:10
Ответы с готовыми решениями:

Файлы последовательного доступа
Программа должна быть разбита на несколько функций и обязательно содержать: 1. Функция...

Файлы последовательного доступа
Помогите решить задачу. 7. записать в файл out.txt последовательного доступа N действительных...

удалить пробелы из текста (файлы последовательного доступа)
нужно написать программу на си которая состоит из трех или более функций одна из которых ...

Файлы последовательного доступа: вывести информацию о книгах указанного автора
Создать файл последовательного доступа. Добавить к файлу несколько записей. Прочитать файл,...

14
nmcf
08.01.2018, 14:27
  #2

Не по теме:

Таких тем было много. С файлом и записями.

0
1 / 1 / 0
Регистрация: 05.12.2016
Сообщений: 55
08.01.2018, 14:38  [ТС] 3
Жаль, что нет.
0
21 / 21 / 20
Регистрация: 05.12.2017
Сообщений: 124
08.01.2018, 15:09 4
Я правильно понял, что:
1. Нужно самому заполнить структуру после запуска программы (первый санаторий, второй и т.д.) и записать её в файл;
2. Считать его и выполнить задание ?
В смысле, создать файл в папке и заполнить его в окне или в программе его создать и заполнить? Дурной вопрос, но, все же!
0
1 / 1 / 0
Регистрация: 05.12.2016
Сообщений: 55
08.01.2018, 15:41  [ТС] 5
Кликните здесь для просмотра всего текста
Задание состоит из трех заданий для каждого варианта. В задачах используются файлы. Необходимо составить три программы, которые должны в процессе выполнения требуемых преобразований сопровождать операции ввода и вывода поясняющими сообщениями.

Задание 1.
Создать последовательный файл с записями указанной структуры Программа должна за однократный просмотр выбрать из файла записи, отвечающие заданию, обработать их и вывести итоговый результат в виде таблицы на экране дисплея. Необходимо, чтобы программа обрабатывала файл с любым именем, которое определяется в диалоге после запуска программы. В условиях вариантов обозначен тип компонентов записи: int - целочисленное значение, char - строковое значение, float - вещественное значение. Использование массивов для хранения всех элементов файла запрещено. В каждом файле должно быть не менее 15 записей.

Санаторий (char), количество отдыхающих (int), город (char), полная площадь полезных помещений (float), число обслуживающего персонала (int). Напечатать названия санаториев, принимающих не более 1000 человек и имеющих не менее 200 человек персонала. Найти город, в котором есть санаторий, обеспечивающий наибольший уровень комфортности: при наибольшем отношении (площадь/число отдыхающих) имеет наибольшее количество обслуживающего персонала (в исходном файле должно быть несколько санаториев, имеющих одинаковое отношение площадь/число отдыхающих).

Задание 2.
Создать второй файл указанной структуры и заполнить данными. Структура и наполнение второго дополнительного файла указаны в задании варианта. Программа в процессе обработки этих файлов должна создать файл, в котором содержание его элементов и порядок их размещения в удобочитаемом табличном виде соответствует заданному варианту. Использование массивов в программе для хранения исходных или результирующих файлов запрещено. Необходимо обеспечить обработку и формирование файлов с произвольными именами, устанавливаемыми в диалоге.

Дополнительный файл содержит: название города (char), количество кинотеатров (int), количество парков отдыха (int). Напечатать список санаториев, принимающих не менее 500 человек, в которых можно пойти в парк отдыха и в кино. Список сформировать в порядке возрастания количества кинотеатров.


Вот такое задание. Честно говоря вообще не понимаю, что здесь нужно. Скорее всего программа сама создаёт файл, который мы именуем и заполняем.
0
21 / 21 / 20
Регистрация: 05.12.2017
Сообщений: 124
08.01.2018, 15:46 6
А это можно как-то уточнить? Я, в принципе, уже написал программу, но у меня проблема с передачей (а точнее, с присвоением) текста из одной переменной char в другую, состоящую в массиве структур.
0
1 / 1 / 0
Регистрация: 05.12.2016
Сообщений: 55
08.01.2018, 15:50  [ТС] 7
Связи с преподавателем у меня нет. Одногруппники кто как делают.
0
21 / 21 / 20
Регистрация: 05.12.2017
Сообщений: 124
08.01.2018, 16:01 8
Можешь в Paint хотя бы примерно нарисовать таблицу, которая должна получится в итоге?
Как я вижу, для той инфы, которую просят вывести на экран, просто не нужна таблица!
Вывод на экран будет примерно такой:
Санатории, где принимают меньше 1000 посетителей и где больше 200 работников персонала:
Санаторий 1, Санаторий 2, ...., Санаторий Х.

Город, где есть самый комфортный санаторий:
Москва
0
1 / 1 / 0
Регистрация: 05.12.2016
Сообщений: 55
08.01.2018, 16:09  [ТС] 9
Санатории, где принимают меньше 1000 посетителей и где больше 200 работников персонала:
Файлы. Создание последовательного файла
0
21 / 21 / 20
Регистрация: 05.12.2017
Сообщений: 124
08.01.2018, 16:42 10
В общем, вот что у меня получилось. Далее прошу помощи зала!
Проблема 1: программа читает файл с указанным названием, а не с любым.
Проблема 2: не получается занести символы из одной символьной переменной в другую, входящую в состав массива структур. "Равно" там не прокатывает. Выражение должно быть допустимым для изменения левосторонним значением.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include<iostream>
#include<fstream>
using namespace std;
 
struct database{ //структура, содержащая инфу о санатории
char Sanatorium2[40];
int VisitorsAmount2;
char City2[25];
float Square2;
int StaffAmount2;
float BestCondition;
};
 
char Sanatorium[40]; //буферные переменные, куда заносятся слова, считанные из файла
char VisitorsAmount_char[5];
char City[25];
char Square_char[8];
char StaffAmount_char[5];
 
void main()
{
setlocale(LC_ALL,"Russian");
ifstream thread("Database.txt"); //файл должен иметь любое название, но как это сделать - не знаю
 
if (!thread)
        cout << "Файл не открыт!" << endl; //если не удалось открыть файл
else {
 
database *db_list = new database[40]; //создание массива структур
 
while (!thread.eof())
{
    /*char a; int N=0;
    while (thread >> a) //однократный просмотр файлa не позволяет создать динамический массив из N структур (а не из 40)
    {
        if (a == ';')
            N++;
    }*/
    cout<<"Санатории, где принимают меньше 1000 посетителей и где больше 200 работников персонала: "<<endl;
    cout<<"Название санатория "<<"Количество отдыхающих "<<"ПППП "<<"Число обслуживающего персонала "<<endl;
        for (int i=0; i<40; i++)
    {
    thread.getline(Sanatorium, 41,','); //занесение слов из файла в переменные, отделененные символом-разделителем
    thread.getline(VisitorsAmount_char, 6,','); //структура: (<переменная, куда заносится значение слова>, 
    thread.getline(City, 26,','); //кол-во символом, которое считывает функция пока не встретит разделитель, 'символ, которые показывает, что слово закончилось')
    thread.getline(Square_char, 9,',');
    thread.getline(StaffAmount_char, 6,';');
 
    int VisitorsAmount = atoi(VisitorsAmount_char); //преобразование символа в число
    float Square = atof(Square_char); 
    int StaffAmount = atoi(StaffAmount_char);
 
    if (VisitorsAmount <= 1000 || StaffAmount >= 200) //если под критерий санаториев попадает, записываем инфу в массив
    {
        db_list[i].Sanatorium2 = Sanatorium; //теперь массив будет хранить инфу НЕ о всех санаториях - значит, ограничения выполняются
        db_list[i].VisitorsAmount2 = VisitorsAmount;
        db_list[i].City2 = City;
        db_list[i].Square2 = Square;
        db_list[i].StaffAmount2 = StaffAmount;
        db_list[i].BestCondition = (db_list[i].Square2/db_list[i].VisitorsAmount2);
        cout<<Sanatorium<<" - "<<VisitorsAmount<<" - "<<Square<<" - "<<StaffAmount<<endl;
    }
    }
    int max_StaffAmount = 0; //переменная, отвечающая за наибольшее кол-во персонала
    int max_BestCondition = 0; //переменная, отвечающая за отношение площади к числе отдыхающих
    for (int i=0; i<40; i++)
    {
        if (max_BestCondition > db_list[i].BestCondition)
            max_BestCondition = db_list[i].BestCondition; //вычисляем наивысшие показатели среди санаториев
        if (max_StaffAmount > db_list[i].StaffAmount2)
            max_StaffAmount = db_list[i].StaffAmount2;
    }
    for (int i=0; i<40; i++) //если наивысшие показатели совпадают с показателями санатория - выводится город, где он расположен
    {
        if (max_BestCondition == db_list[i].BestCondition || max_StaffAmount == db_list[i].StaffAmount2)
            cout<<"Город, в котором находится самый кофротный санаторий: "<<db_list[i].City2<<endl;
    }
 
}
system("pause");
    }
}
1
1 / 1 / 0
Регистрация: 05.12.2016
Сообщений: 55
08.01.2018, 16:47  [ТС] 11
Главное, чтобы работало.
Помощь зала нужна!
0
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
08.01.2018, 17:08 12
http://www.cplusplus.com/reference/cstring/strcpy/ и http://www.cplusplus.com/reference/cstring/strcmp/ тебе в помощь
0
1 / 1 / 0
Регистрация: 05.12.2016
Сообщений: 55
08.01.2018, 17:19  [ТС] 13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include<iostream>
#include<fstream>
using namespace std;
 
struct database{ //структура, содержащая инфу о санатории
char Sanatorium2[40];
int VisitorsAmount2;
char City2[25];
float Square2;
int StaffAmount2;
float BestCondition;
};
 
char Sanatorium[40]; //буферные переменные, куда заносятся слова, считанные из файла
char VisitorsAmount_char[5];
char City[25];
char Square_char[8];
char StaffAmount_char[5];
 
int main()
{
setlocale(LC_ALL,"Russian");
ifstream thread("Database.txt"); //файл должен иметь любое название, но как это сделать - не знаю
 
if (!thread)
        cout << "Файл не открыт!" << endl; //если не удалось открыть файл
else {
 
database *db_list = new database[40]; //создание массива структур
 
while (!thread.eof())
{
    /*char a; int N=0;
    while (thread >> a) //однократный просмотр файлa не позволяет создать динамический массив из N структур (а не из 40)
    {
        if (a == ';')
            N++;
    }*/
    cout<<"Санатории, где принимают меньше 1000 посетителей и где больше 200 работников персонала: "<<endl;
    cout<<"Название санатория "<<"Количество отдыхающих "<<"ПППП "<<"Число обслуживающего персонала "<<endl;
        for (int i=0; i<40; i++)
    {
    thread.getline(Sanatorium, 41,','); //занесение слов из файла в переменные, отделененные символом-разделителем
    thread.getline(VisitorsAmount_char, 6,','); //структура: (<переменная, куда заносится значение слова>, 
    thread.getline(City, 26,','); //кол-во символом, которое считывает функция пока не встретит разделитель, 'символ, которые показывает, что слово закончилось')
    thread.getline(Square_char, 9,',');
    thread.getline(StaffAmount_char, 6,';');
 
    int VisitorsAmount = atoi(VisitorsAmount_char); //преобразование символа в число
    float Square = atof(Square_char); 
    int StaffAmount = atoi(StaffAmount_char);
 
    if (VisitorsAmount <= 1000 || StaffAmount >= 200) //если под критерий санаториев попадает, записываем инфу в массив
    {
        strcpy (db_list[i].Sanatorium2,Sanatorium);
          //теперь массив будет хранить инфу НЕ о всех санаториях - значит, ограничения выполняются
        db_list[i].VisitorsAmount2 = VisitorsAmount;
        strcpy (db_list[i].City2,City);
        db_list[i].Square2 = Square;
        db_list[i].StaffAmount2 = StaffAmount;
        db_list[i].BestCondition = (db_list[i].Square2/db_list[i].VisitorsAmount2);
        cout<<Sanatorium<<" - "<<VisitorsAmount<<" - "<<Square<<" - "<<StaffAmount<<endl;
    }
    }
    int max_StaffAmount = 0; //переменная, отвечающая за наибольшее кол-во персонала
    int max_BestCondition = 0; //переменная, отвечающая за отношение площади к числе отдыхающих
    for (int i=0; i<40; i++)
    {
        if (max_BestCondition > db_list[i].BestCondition)
            max_BestCondition = db_list[i].BestCondition; 
            //вычисляем наивысшие показатели среди санаториев
        if (max_StaffAmount > db_list[i].StaffAmount2)
            max_StaffAmount = db_list[i].StaffAmount2;
    }
    for (int i=0; i<40; i++) //если наивысшие показатели совпадают с показателями санатория - выводится город, где он расположен
    {
        if (max_BestCondition == db_list[i].BestCondition || max_StaffAmount == db_list[i].StaffAmount2)
            cout<<"Город, в котором находится самый кофротный санаторий: "<<db_list[i].City2<<endl;
    }
 
}
system("pause");
}    }
Вот так? Программа зациклилась
0
21 / 21 / 20
Регистрация: 05.12.2017
Сообщений: 124
08.01.2018, 17:58 14
Подтверждаю. Типичная ситуация, когда студент помогает студенту. И тут я не знаю, что делать((
Я пробовал обнулить переменные после инициализации с помощью memset, убирать цикл for в операции (!thread.eof()). Всюду эти НННННННННН с адресом 0x01215408.
Пример содержимого файла:
Sanatorium1,350,Omsk,1300.5,100;Sanatorium2,400,Irpen,860,100;Sanatorium3,1200,M oskva,2576.5,400;Sanatorium4,800,Torzhok,1760,320;
1
1 / 1 / 0
Регистрация: 05.12.2016
Сообщений: 55
08.01.2018, 18:04  [ТС] 15
Я так понял, что все 40 переменных забить надо. Возможно получится. Но чёрт - 40 переменных
0
08.01.2018, 18:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2018, 18:04
Помогаю со студенческими работами здесь

Типизированные файлы. Записать в файл последовательного доступа n натуральных чисел.
Записать в файл последовательного доступа n натуральных чисел: a1, a2,..., an (числа получить с...

Чтение данных из файла последовательного доступа
Доброго времени суток , столкнулся с такой проблемой. Информация: Данные в файле: 10228...

Работа с файлами. Создание и чтение файла последовательного доступа
Помогите с лабораторкой плиз. Разработать программу, которая реализует с файлом последовательного...

Файлы последовательного доступа.Сформировать второй файл, в котором количество из первого файла отрицательные числа
Дан файл действительных чисел. Сформировать второй файл, в котором количество из первого файла...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru