Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SanGu
0 / 0 / 0
Регистрация: 07.06.2012
Сообщений: 5
#1

Дан текстовый файл (файл для чтения во вложениях) с упрощённым каталогом выставки собак. - C++

08.06.2012, 15:21. Просмотров 414. Ответов 1
Метки нет (Все метки)

ЗАДАНИЕ ПО ЭКЗАМЕНУ ПО ПРОГРАММИРОВАНИЮ НА ЯЗЫКЕ С++ (можно писать и на С. не запрещается)
Всё по сабжу ниже.


Дан текстовый файл (файл для чтения во вложениях) с упрощённым каталогом выставки собак.

Структура текста следующая.

Собаки записаны по породам. внутри одной породы по классам. Запись каждой собаки состоит из номера участника, имени собаки, имён владельцев, названия населённого пункта, названия государства.

Каждая строка текста принадлежит одному из следующих видов:
  • Порода - строка начинается номером стандарта в скобках.
  • Название класса - строка, начинающаяся буквой.
  • Запись собаки - строка, которая начинается номером без скобок. Имя собаки стоит после номера, начинается буквой и заканчивается перед текстом "om:" и кончаются перед запятой. Название населённого пункта начинается после первой запятой и заканчивается перед следующей. Название государства начинается после последней запятой и кончается переводом строки.

ЗАДАНИЯ

Провести анализ текста. Максимальное количество баллов можно получить, написав для каждой подзадачи отдельные функции.

Результат анализа вывести в файл.

Имена файлов (исходного файла и файла с результатами задавать параметрами в коммандной строке.

Задание 1. (макс. 40 баллов)

Вывести список классов и количество собак каждого класса по породам.
Вывдо должени иметь вид:

Класс1: порода1(количество), порода2(количество),....
Класс2: порода1(количество), порода2(количество),....
...


За это задание можно получить и 45 баллов, если разрешить пользователю выбирать язык, эстонский или английский. Выводить нужно названия на ваыбранном языке. Эстонские названия находятся в строке до наклонной черты, английские после.

Задание 2. (макс. 30 баллов)


Вывести список государств с количеством выставляемых собак и список их имён в следующем виде:

Государство 1 (кол-во)
имя1
имя2
...

Государство 2 (кол-во)
имя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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <iostream>
#include <fstream>
#include <cstdlib>
 
using namespace std;
 
int decode(string line) {
string indicator = "om:";
size_t found;
int check_1 = 0; // Check whether we do have '/' symbol
int check_2 = 0; // Check whether we do have '(' symbol
int check_3 = 0; // Check whether we do have ')' symbol
int length = line.length();
for (int i=0; i<length; i++) {
if (line.at(i) == '/') check_1 = 1;
if (line.at(i) == '(') check_2 = 1;
if (line.at(i) == ')') check_3 = 1;
}
found = line.find(indicator);
if (found!=string::npos) {
return 1; // This string indicates dog entry
} else if (check_1 == 1 && check_2 == 0 && check_3 == 0) {
return 2; // This string indicates class entry
} else if (check_1 == 1 && check_2 == 1 && check_3 == 1) {
return 3; // This string indicates breed entry
} else {
return 0;
}
}
 
string translate(string multilang, int l) {
string delimieter = "/";
string est;
string eng;
size_t found;
int position;
found = multilang.find(delimieter);
if (found!=string::npos) {
position = int(found);
if (position > 1) {
est = multilang.substr(0, position);
eng = multilang.substr(position+2);
if (l == 1) return est;
if (l == 2) return eng;
}
}
}
 
int main(int argc, char* argv[]) {
char buffer[500];
int lang;
string lines[1000];
int dogs_total = 0;
int dogs_tmp = 0;
int dogs_in_class_tmp = 0;
int class_tmp = 0;
int breeds_total = 0;
int breeds_tmp = 0;
int class_total = 0;
int breeds[100]; // Maximum breed quantity
ifstream file;
if (argc>1) {
file.open(argv[1], ios::binary); // open file in binary mode
} else {
file.open("txt.txt", ios::binary); // open file in binary mode
 
 
}
if (!file.is_open()) {
cout << "Error opening file\n";
}
cout << "Enter 2 for English language. Pane 1 eesti keeles info saamiseks.\n";
cin >> lang;
if (!(lang == 1 || lang == 2)) {
lang = 2;
cout << "Your default language is English \n";
} else {
switch(lang) {
case 2:
cout << "Your choice: English \n";
break;
case 1:
cout << "Teie valik: Eesti keel \n";
break;
}
}
cout << endl << endl << "______________________" << endl;
int i=0;
while (!file.eof()) {
file.getline(buffer,500);
lines[i] = buffer;
i++;
}
for (int j=0; j<i; j++) {
if (decode(lines[j]) == 1) {
dogs_total++; // Calculating dogs total
}
}
for (int k=108; k>=0; k--) {
if (decode(lines[k]) == 3) {
cout << "----------------------" << endl;
cout << translate(lines[k], lang) << endl;
cout << "----------------------" << endl;
cout << (float)dogs_tmp/dogs_total << "%" << endl;
cout << "______________________" << endl << endl << endl;
dogs_tmp = 0;
class_tmp = 0;
breeds_total++;
}
if (decode(lines[k]) == 2) {
cout << translate(lines[k], lang) << endl;
cout << (float)dogs_in_class_tmp/dogs_total << "%" << endl << endl;
dogs_in_class_tmp = 0;
class_total++;
}
if (decode(lines[k]) == 1) {
dogs_in_class_tmp++;
dogs_tmp++;
}
 
}
 
}
Вложения
Тип файла: txt eksamC25.txt (6.2 Кб, 17 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2012, 15:21     Дан текстовый файл (файл для чтения во вложениях) с упрощённым каталогом выставки собак.
Посмотрите здесь:
Не открывается текстовый файл для чтения (использовал fstream.h) C++
C++ Дан текстовый файл F. Переписать в другой файл G все символы, отличные от букв и пробела
C++ Дан текстовый файл. Перепишите его в выходной файл, удалив все знаки препинания
C++ Дан текстовый файл. Перепишите его в выходной файл, удалив все знаки препинания
Дан текстовый файл f. Переписать текст в файл g, удалив все группы букв s (s передается параметром) C++
C++ Дан текстовый файл с изображениями целых чисел. В выходной файл поместить те из них, которые имеют четные млад
Дан текстовый файл с действительными числами. Найти сумму его элементов с четными номерами и записать в новый файл C++
Дан текстовый файл. Заменить окончание ing каждого слова, встречающегося в заданном предложении на ED и сохранить результат в новый файл. C++
C++ Дан символ 'C' (прописная латинская буква) и текстовый файл. Создать строковый файл, содержащий все слова из исходного файла, начинающиеся этой буквой
Дан текстовый файл f C++
C++ Дан текстовый файл
Дан текстовый файл. решить на С!! C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SanGu
0 / 0 / 0
Регистрация: 07.06.2012
Сообщений: 5
08.06.2012, 17:35  [ТС]     Дан текстовый файл (файл для чтения во вложениях) с упрощённым каталогом выставки собак. #2
Кто нибудь, чем нибудь может помочь?

Добавлено через 1 час 35 минут
Всем спасибо(никому всмысле), модераторы сносите тему.
Yandex
Объявления
08.06.2012, 17:35     Дан текстовый файл (файл для чтения во вложениях) с упрощённым каталогом выставки собак.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru