IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Работа с файлами, Обработка текстового файла
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: http://npfiles.ru

Репутация: -  -1  +


Даны названия N различных обществ (N заданное число), фигуристы которых участовали в соревновании. О каждом фигуристе известно: фамилия, название общества и 10 оценок за его выступление. Требуется для каждого спортивного общества определить фигуриста, показавшего наивысший результат, считая его единственным. Баллы, полученные фигуристом, подсчитываются следующим образом: максимальная и минимальная оценки отбрасываются, а из остальных формируется средняя. При вводе данных обеспечить уникальность наименований обществ и обязательную принадлежность фигуриста к одному из них.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






... и что? Хорошее задание, только зачем ты привел его? Чтоб тебе все сделали и выложили "на тарелочке"? Иди в Поиск, там есть задачи про хоккейные и футбольные команды, группы студентов с оценками на экзамене, разбирайся, как они сделаны, начинай делать свое задание, что будет непонятно - приходи, спрашивай...

А так просто вываливать задание безо всяких попыток решить (и показать остальным, что ты пытался, но у тебя не получилось) - это по меньшей мере обрекать тему на забвение...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: http://npfiles.ru

Репутация: -  -1  +


Частично задача решена. А именно, я создаю типизированный файл, куда помещаю фамилии, названия обществ и оценки.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(npl @ 9.12.2007 13:48) *

Частично задача решена. А именно, я создаю типизированный файл, куда помещаю фамилии, названия обществ и оценки.

Интересно также узнать, ЗАЧЕМ ты это делаешь. По условию, вроде, этого не требуется.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: http://npfiles.ru

Репутация: -  -1  +


Вот код

program obchestva_and_figuristyi;
uses crt;
type
figurist=record
fio:string[10];
obsh:string[10];
ocenka:array[1..10] of integer;
end;
var
f:file of figurist;
ftxt:text;
i,cod:integer;
z:figurist;
st:string;
max,min:integer;
s,sr:real;
begin
clrscr;
assign(ftxt,'figur1.txt');
reset(ftxt);
assign(f,'figur.dat');
rewrite(f);
while not eof(ftxt) do
begin
readln(ftxt,st);
z.fio:=copy(st,1,pos(' ',st));
z.obsh:=copy(st,12,pos(' ',st));
delete(st,1,22);
for i:=1 to 10 do
begin
val(st[1],z.ocenka[i],cod);
delete(st,1,2);
end;
write(f,z);
end;
close(ftxt);
close(f);
reset(f);
while not eof(f) do
begin
read(f,z);
write(z.fio,' ',z.obsh,' ');
for i:=1 to 10 do
write(z.ocenka[i]);
writeln;
max:=z.ocenka[1];
for i:=2 to 10 do
begin
if z.ocenka[i]>max then
max:=z.ocenka[i];
end;
write(max,' ');
min:=z.ocenka[1];
for i:=2 to 10 do
begin
if z.ocenka[i]<min then
min:=z.ocenka[i];
end;
write(min,' ');
s:=0;
for i:=1 to 10 do
s:=s+z.ocenka[i];
write(s:2:1,' ');
sr:=(s-max-min)/8;
writeln(sr:2:2);
end;
close(f);
end.


Пока я определил максимальную, минимальную оценку, отбросил их и нашёл среднюю.

Добавлено через 5 мин.
Думаю, что делать дальше. Создать ещё один типизированный файл, туда поместить фамилии фигуристов, названия обществ и их средние оценки. И дальше работать с этим файлом, чтобы для каждого общества найти фигуриста с максимальным результатом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: http://npfiles.ru

Репутация: -  -1  +


Народ, откликнитесь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


То, что ты сделал, возможно, подходит под определение "бессмысленная работа с типизированным файлом", но никак не "работа с текстовым файлом".
Бессмысленная потому, что все эти манипуляции не нужны. Все операции целесообразно делать непосредственно в оперативной памяти, введя массив типа figurist и целую переменную, индицирующую длину заполненной части этого массива.
Что же касается темы, то вероятнее всего, имеется в виду чтение и разбор входного текстового файла с фигурисами, а также вывод результата работы в текстовый же файл.
Пока что на том этапе, что ты опубликовал, у тебя содержится несколько непоняток и минимум одна ошибка.
Непонятки заключены в том, почему ты считаешь, что Ф.И.О. способны всегда поместиться в 10 символов, а также длниа названия спортивного общества не может превышать этой величины?
Ошибка - в том, что ты перед чтением оценки зачем-то удаляешь из строки 22 симвлоа. Почему именно 22? Это такая мировая константа?

Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: http://npfiles.ru

Репутация: -  -1  +


Цитата(andriano @ 9.12.2007 19:00) *

То, что ты сделал, возможно, подходит под определение "бессмысленная работа с типизированным файлом", но никак не "работа с текстовым файлом".
Бессмысленная потому, что все эти манипуляции не нужны. Все операции целесообразно делать непосредственно в оперативной памяти, введя массив типа figurist и целую переменную, индицирующую длину заполненной части этого массива.
Что же касается темы, то вероятнее всего, имеется в виду чтение и разбор входного текстового файла с фигурисами, а также вывод результата работы в текстовый же файл.
Пока что на том этапе, что ты опубликовал, у тебя содержится несколько непоняток и минимум одна ошибка.
Непонятки заключены в том, почему ты считаешь, что Ф.И.О. способны всегда поместиться в 10 символов, а также длниа названия спортивного общества не может превышать этой величины?
Ошибка - в том, что ты перед чтением оценки зачем-то удаляешь из строки 22 симвлоа. Почему именно 22? Это такая мировая константа?

Результат не нужно выводить в текстовый файл. Ф.И.О. в 10 символов, потому что в текстовом файле, который есть Ф.И.О. не превышает 10 символов. А дальше идёт название общества. Она тоже не больше 10. 10+пробел+10+пробел=22. Минимальные, максимальные он находит правильно. Среднее тоже.

Добавлено через 4 мин.
Лучше подскажите, как из средних для каждого общества найти фигуриста с максиальным результатом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Если проверка задания будет выполнена по уму, то файл с фигуристами тебе будет предложен другой. Есть ли уверенность, что твоя программа с ним справится?
"Не больше" и "равно" - далеко не одно и то же. Если, скажем, фамилия - Иванов, а название общества - Динамо, то есть ли уверенность, что удалять все равно надо 22 символа? Тот факт, что при существующем файле максимальное и минимальное находит правильно, еще не говорит о том, что так будет всегда.

Ты считал средние не для каждого общества, а для каждого фигуриста. Теперь надо соотнести фигуристов с конкретными обществами и для каждого общества найти максимальное среди средних для входящих в него фигуристов.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: http://npfiles.ru

Репутация: -  -1  +


Если ФИО меньше 10, то там оставшееся место заполнено пробелом.

Добавлено через 5 мин.
Вот содержание исходного текстового файла
http://npfiles.ru/files/figur1.txt

Добавлено через 1 мин.
Цитата(andriano @ 9.12.2007 19:20) *

Ты считал средние не для каждого общества, а для каждого фигуриста. Теперь надо соотнести фигуристов с конкретными обществами и для каждого общества найти максимальное среди средних для входящих в него фигуристов.

И как это сделать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


А есть ли описание формата файла?
Не может оказаться, что в другом файле будет заполняться пробелами до 12-го символа, а в третьем - все разной длины и с единственным пробелом-разделителем?
Для того, чтобы решать задачу, надо точно знать условие.
В текстовых файлах нет определенной структуры, поэтому обычно нет никакого выравнивания проблами по длине, а при необходимости используются разделители: пробел, символ табуляции, запятая, конец строки...
Ты сам составлял файл или его тебе дал преподаватель?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: http://npfiles.ru

Репутация: -  -1  +


Я сам составлял файл. Задачу надо решать для конкретного своего файла.

Добавлено через 13 мин.
andriano, может уже предложите конкретные решения, а не пустые слова?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(npl @ 9.12.2007 19:32) *

Я сам составлял файл. Задачу надо решать для конкретного своего файла.
Я бы на месте преподавателя захотел посмотреть, как программа будет работать на других файлах.
(наверное, из меня вышел бы очень вредный преп. sad.gif
Цитата

Добавлено через 13 мин.
andriano, может уже предложите конкретные решения, а не пустые слова?
Вообще-то я даю именно КОНКРЕТНЫЕ советы по решению.
Если подробнее, то я могу порекомендовать следующий алгоритм разбора строки:
1. Удаляем пробелы в начале.
2. Находим позицию разделителя L.
3. Если L = 0, выводим сообщение об ошибке, иначе продолжаем работу.
4. Копируем в поле имени L-1 символов.
5. Удаляем L символов в начале строки.
6. Удаляем пробелы в начале.
7. Находим позицию разделителя L.
8. Если L = 0, выводим сообщение об ошибке, иначе продолжаем работу.
9. Копируем в поле названия команды L-1 символов.
10. Удаляем L символов в начале строки.
11. Цикл длиной 9.
12. Удаляем пробелы в начале.
13. Находим позицию разделителя L.
14. Если L = 0, выводим сообщение об ошибке, иначе продолжаем работу.
15. Копируем во временную строку L-1 символов.
16. Пытаемся преобразовать эту строку в число.
17. Если преобразование не удалось - выводим сообщение об ошибке, иначе - продолжаем работу.
18. Удаляем L символов в начале строки.
19. Конец цикла.
20. Удаляем пробелы в начале.
21. Пытаемся преобразовать оставшуюся часть строки в число.
22. Если преобразование не удалось - выводим сообщение об ошибке, иначе - продолжаем работу.

В качестве ваианта:
11. Дописываем разделитель в конец строки.
11а. Цикл длиной 10.
строки 20-22 - не нужны.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: http://npfiles.ru

Репутация: -  -1  +


Да забудьте про преобразование. Оставлю так, как есть. Как найти фигуриста с максимальным результатом для каждого общества?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Самый простой способ - перебором.

PS. А алгоритм разбора строки я бы порекомендовал подправить.

Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: http://npfiles.ru

Репутация: -  -1  +


Не получается найти максимальный элемент. Когда находится максимальный среди 10 оценок, там всё просто. А как сделать среди средних? Дайте конкретный пример.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Коль скоро для каждого фигуриста все равно вычисляется средняя оценка, то имеет смысл предусмотреть в структуре поле для ее хранения.
Ну и потом, естественно, перебирать эти поля в поисках максимума.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: http://npfiles.ru

Репутация: -  -1  +


Цитата(andriano @ 9.12.2007 22:38) *

Коль скоро для каждого фигуриста все равно вычисляется средняя оценка, то имеет смысл предусмотреть в структуре поле для ее хранения.
Ну и потом, естественно, перебирать эти поля в поисках максимума.

И как их перебирать. У меня не работает. Приведите свой код.

Сообщение отредактировано: npl -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


А ты не заметил, что твоя программа не совсем соответствует условию задачи?
В условии требуется анализировать общества (и именно их количество указано), а у тебя предусмотрен тип данных для описания фигуриста и нет типа данных для общества.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: http://npfiles.ru

Репутация: -  -1  +


Цитата(andriano @ 10.12.2007 20:57) *

А ты не заметил, что твоя программа не совсем соответствует условию задачи?
В условии требуется анализировать общества (и именно их количество указано), а у тебя предусмотрен тип данных для описания фигуриста и нет типа данных для общества.

Есть у меня тип данных для общества.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.12.2024 21:13
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name