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

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

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

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

08.06.2012, 15:21. Просмотров 424. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дан текстовый файл (файл для чтения во вложениях) с упрощённым каталогом выставки собак. (C++):

Дан текстовый файл, содержащий целые числа. Определить в каждой четной строке максимальное число и записать результаты в новый текстовый файл - C++
Дан текстовый файл, содержащий целые числа. Определить в каждой четной строке максимальное число и записать результаты в новый текстовый...

Не открывается текстовый файл для чтения (использовал fstream.h) - C++
#include &lt;fstream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; void main() { ifstream...

дан текстовый файл.определить количество нечетных чисел и записать их в др текст файл - C++
Очень Простая задача

Дан текстовый файл. Перепишите его в выходной файл, удалив все знаки препинания - C++
Не работает , выдает ошибку...Можно решение с комментариями!!?) #include &lt;iostream&gt; #include &lt;fstream&gt; using std::ifstream; ...

Дан исходный текстовый файл. Записать его строки в выходной файл в перевёрнутом виде - C++
грозят отчислением, нужно решить

дан входной текстовый файл. Вывести в выходной файл строку с максимальным количеством слов - C++
Дан входной текстовый файл (одна строка – одно предложение). Вывести в выходной файл строку (строки) с максимальным количеством слов.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
SanGu
0 / 0 / 0
Регистрация: 07.06.2012
Сообщений: 5
08.06.2012, 17:35  [ТС] #2
Кто нибудь, чем нибудь может помочь?

Добавлено через 1 час 35 минут
Всем спасибо(никому всмысле), модераторы сносите тему.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2012, 17:35
Привет! Вот еще темы с ответами:

Дан текстовый файл. Перепишите его в выходной файл, удалив все знаки препинания - C++
Дан текстовый файл. Перепишите его в выходной файл, удалив все знаки препинания

Дан текстовый файл F. Переписать в другой файл G все символы, отличные от букв и пробела - C++
Дан текстовый файл F. Переписать в другой файл G все символы, отличные от букв и пробела.

Дан текстовый файл f. Переписать текст в файл g, удалив все группы букв s (s передается параметром) - C++
В общем нужно из строки удалить подстроку, которая задается с клавиатуры

Что не так? Дан текстовый файл F. Переписать в другой файл G все строки, содержащие цифры. - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using std::cin; using std::cout; using std::endl; int main (int argc, char**...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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