1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| npl |
Сообщение
#1
|
|
Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Реальное имя: http://npfiles.ru Репутация: -1 |
Даны названия N различных обществ (N заданное число), фигуристы которых участовали в соревновании. О каждом фигуристе известно: фамилия, название общества и 10 оценок за его выступление. Требуется для каждого спортивного общества определить фигуриста, показавшего наивысший результат, считая его единственным. Баллы, полученные фигуристом, подсчитываются следующим образом: максимальная и минимальная оценки отбрасываются, а из остальных формируется средняя. При вводе данных обеспечить уникальность наименований обществ и обязательную принадлежность фигуриста к одному из них.
|
![]() ![]() |
| andriano |
Сообщение
#2
|
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
"Пришел барин и всех рассудил." :D
[ ] Мне кажется, вряд ли здесь кто-то не понимает по-русски. Скорее дело в другом: нужен текст на Паскале, а самому переводить с русского на Паскаль не хочтся, - пусть лучше это сделает кто-то другой! Тем более, что исправлять явно указанный недостаток автор этой темы не захотел, решив, очевидно, что и так сойдет. Между тем программа, работающая с текстовыми файлами, должна быть нечувствительна к количеству пробелов, разделяющих слова, т.е. совершенно одинаково обрабатывать "Иванов Динамо" и " Иванов Динамо ". Приведеная же программа, очевидно, с текстовыми файлами работать не умеет, а умеет только с файлами опредедленной структуры. Теперь по поводу задачи в целом (заодно уважаемый volvo сможет сравнить со своим вариантом). - Предусмотреть типы данных для фигуриста (в исходном коде уже есть) и для спортивного общества (название, Ф.И.О. ОДНОГО спортсмена, его средний результат). - Описать переменную для спортсмена (уже есть), массив длины N для обществ (благо, в условии она задана. Можно потребовать, чтобы первой строкой в файле указывалось количество обществ: для учебных/олимпиадных задач - обычное дело. А можно и не требовать: вместо массива организовать список, выделяя память для каждого очередного элемента по мере их поступления) и целую переменную для длины заполненной части массива. - написать функции (декомпозиция - великая вещь!) для: а) разбора строки с заполнением полей "фигуриста": на входе - строка из файла, возвращает - подсчитанное среднее. Функция должна уметь разбирать файлы вроде: Иванов и.И. "Спартак" 1 2 3 4 5 6 7 8 9 10 Сидоров Иван Петрович "Крылья Советов" 3, 4, 5, 5, 7, 8, 9, 10, 11, 12 Мохаммед Ибн Али ПЕру де Оннорре "ООО Челси им. Абрамовича" 2;3;4;5;6;7;8;9;10;1 Смит Джон "Определитель Матрицы" 8.0,7.0, 9, 3., 4, 1.0, 7, 5,9,2 Петров-Водкин Кузьма С. "Спартак" 3,2 1,3,2 1,3 2,1 1,1 б) поиска и добавления обществ: на входе - строка-имя общества, на выходе - номер найденного общества в массиве. Должна просматривать уже сформированную часть массива обществ, если не нашла - завести новое, обнулив все поля. Порядок действия программы: 1. Открыть файл. 1а. При необходимости считать строку с количеством обществ и выделить память для массива. 2. Цикл до окончания файла: - читаем строку - разбираем ее - находим номер общества - если средний балл спортсмена найденного общества ниже, чем вновь считанного, заменяем все данные общества новым спортсменом 3. Закрыть файл. 4. Вывести в цикле на печать заполненный массив обществ. Кстати, размещать в общедоступном месте (например, на форуме) програму без комментаиев - mauvais ton. Должна быть минимум одна строка коментария на 5-7 строк кода. Должны быть откомментированы все процедуры и функции: назначение и список параметров. Должны быть откомментированы все новые типы и их поля, а также глобальные переменные. Естественно, не должно быть коментариев типа: r := sqrt(x*x + y*y); {присваиваем переменной r значение sqrt(x*x + y*y)} |
| Malice |
Сообщение
#3
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
Начнем тогда уж.. Внесу свою лепту для начала
type |
| andriano |
Сообщение
#4
|
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Начнем тогда уж.. Внесу свою лепту для начала OK. Несколько рекомендаций: ocenka: array[1..10] of integer; Насколько я помню, в фигурном катании оценки являются числом в общем случае нецелым. Рекомендую: ocenka: array[1..10] of single; procedure parse (s:string;var f:fig); Вообще-то переменная f одна на всю программу, при этом временная и глобальная. Поэтому вряд ли имеет смысл передавать ее в качестве формального параметра. Впрочем, это дело вкуса. А еще я рекомендовал сразу подсчитать средний балл и возвращать его как значение функции. function parse (s:string): single; Следующую строку: f.obsh:='"'+copy(s,1,pos ('"',s)-1)+'"';
можно немного упростить. f.obsh:='"'+copy(s,1,pos ('"',s));
Следующий код ориентирован на целые числа, кроме того, вместо: n:=n*10+ord (s[1])-$30; правильнее было бы написать: n:=n*10+ord (s[1])-ord('0');
В любом случае, рекомендую в этом месте скопировать во временную строку все символы до разделителя или конца строки, а потом преобразовать строку в число. Перед этим лучше всего сначала заменить все разделители на пробелы, а затем удалить все двойные пробелы. Ну и под конец, естественно, подсчитать средний балл. Сообщение отредактировано: andriano - |
npl Работа с файлами 9.12.2007 16:47
volvo ... и что? Хорошее задание, только зачем ты привел… 9.12.2007 17:41
npl Частично задача решена. А именно, я создаю типизир… 9.12.2007 17:48
andriano
Частично задача решена. А именно, я создаю типизи… 9.12.2007 18:28
npl Вот код
program obchestva_and_figuristyi;
uses cr… 9.12.2007 18:38
npl Народ, откликнитесь. 9.12.2007 21:20
andriano То, что ты сделал, возможно, подходит под определе… 9.12.2007 23:00
npl
То, что ты сделал, возможно, подходит под определ… 9.12.2007 23:05
andriano Если проверка задания будет выполнена по уму, то ф… 9.12.2007 23:20
npl Если ФИО меньше 10, то там оставшееся место заполн… 9.12.2007 23:22
andriano А есть ли описание формата файла?
Не может оказать… 9.12.2007 23:29
npl Я сам составлял файл. Задачу надо решать для конкр… 9.12.2007 23:32
andriano
Я сам составлял файл. Задачу надо решать для конк… 10.12.2007 0:09
npl Да забудьте про преобразование. Оставлю так, как е… 10.12.2007 0:12
andriano Самый простой способ - перебором.
PS. А алгоритм … 10.12.2007 0:15
npl Не получается найти максимальный элемент. Когда на… 10.12.2007 1:36
andriano Коль скоро для каждого фигуриста все равно вычисля… 10.12.2007 2:38
npl
Коль скоро для каждого фигуриста все равно вычисл… 10.12.2007 2:49
andriano А ты не заметил, что твоя программа не совсем соот… 11.12.2007 0:57
npl
А ты не заметил, что твоя программа не совсем соо… 11.12.2007 1:09
andriano Пальчиком ткни. 11.12.2007 1:32
npl obsh:string;
вот тут, может хватить мудить, если б… 11.12.2007 2:25
andriano Грубить не надо.
Помочь - могу, а писать код за те… 13.12.2007 0:46
npl "Спасибо", что не помогли, andriano. Но … 13.12.2007 3:33
Michael_Rybak "Спасибо" andriano от тебя заслуживает к… 13.12.2007 3:51
npl
"Спасибо" andriano от тебя заслуживает … 13.12.2007 3:55
Michael_Rybak
Аааа, т.е. когда ты задаешь вопрос, я должен не о… 13.12.2007 4:20
npl
Аааа, т.е. когда ты задаешь вопрос, я должен не о… 13.12.2007 17:11
Lapp Господа, прошу прекратить перебранку. Тему закрыв… 13.12.2007 18:24![]() ![]() |
|
Текстовая версия | 7.11.2025 21:23 |