Работа с файлами, Обработка текстового файла |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Работа с файлами, Обработка текстового файла |
andriano |
10.12.2007 21:32
Сообщение
#21
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Пальчиком ткни.
|
npl |
10.12.2007 22:25
Сообщение
#22
|
|||
Новичок Группа: Пользователи Сообщений: 21 Пол: Мужской Реальное имя: http://npfiles.ru Репутация: -1 |
obsh:string[10];
вот тут, может хватить мудить, если б вы andriano знали, давно бы уже написали нужный мне код
Сообщение отредактировано: Michael_Rybak - 12.12.2007 23:48 |
|||
andriano |
12.12.2007 20:46
Сообщение
#23
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Грубить не надо.
Помочь - могу, а писать код за тебя - не буду. Вот это называется типом данных: type А вот это - полем в типе "figurist", имеющим тип "string[10]": obsh:string[10]; Не следует поутать одно с другим. Вообще-то алгоритм написания программы на каком либо языке программирования примерно такой: - решить задачу ручками, отмечая про себя, какие действия при этом происходят, - записать алгоритм действий по-русски, - переписать на нужном языке программирования. При обработке текстовых файлов, как правило, удобно оказывается действовать в следующем порядке: - завести тип данных, хорошо описывающий входные данные, - завести тип данных, хорошо описывающий выходные данные, - считать входные данные в память, - в памяти обработать входняе данные с целью заполнить поля выходного типа. |
npl |
12.12.2007 23:33
Сообщение
#24
|
Новичок Группа: Пользователи Сообщений: 21 Пол: Мужской Реальное имя: http://npfiles.ru Репутация: -1 |
"Спасибо", что не помогли, andriano. Но к счастью в этом мире есть добрые люди.
|
Michael_Rybak |
12.12.2007 23:51
Сообщение
#25
|
Michael_Rybak Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
"Спасибо" andriano от тебя заслуживает как минимум за потраченное на тебя время. Смени тон.
|
npl |
12.12.2007 23:55
Сообщение
#26
|
Новичок Группа: Пользователи Сообщений: 21 Пол: Мужской Реальное имя: http://npfiles.ru Репутация: -1 |
"Спасибо" andriano от тебя заслуживает как минимум за потраченное на тебя время. Смени тон. Никто не заставлял его тратить на меня время. И вовсе я не грублю. Извините, если, что-то не так сказал, но нервы перед сессией накалены до предела. Добавлено через 15 мин. Огромное спасибо volvo!!! Сообщение отредактировано: npl - 13.12.2007 0:11 |
Michael_Rybak |
13.12.2007 0:20
Сообщение
#27
|
Michael_Rybak Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Цитата Никто не заставлял его тратить на меня время. Аааа, т.е. когда ты задаешь вопрос, я должен не отвечать, а сначала спросить тебя, заставляешь ты меня или нет? Т.к. если я отвечу не то, что ты бы ожидал услышать, то я в ответ получу "пустые разговоры" и "мудить". Какая прелесть. Цитата но нервы перед сессией накалены до предела. Сочувствую (без сарказма). И тем не менее. |
npl |
13.12.2007 13:11
Сообщение
#28
|
Новичок Группа: Пользователи Сообщений: 21 Пол: Мужской Реальное имя: http://npfiles.ru Репутация: -1 |
Аааа, т.е. когда ты задаешь вопрос, я должен не отвечать, а сначала спросить тебя, заставляешь ты меня или нет? Т.к. если я отвечу не то, что ты бы ожидал услышать, то я в ответ получу "пустые разговоры" и "мудить". Какая прелесть. Отвечать или нет - это личное дело каждого. А если уж решил ответить, то отвечать надо по существу, а не уходить от вопроса. |
Lapp |
13.12.2007 14:24
Сообщение
#29
|
|||
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
|||
andriano |
14.12.2007 9:40
Сообщение
#30
|
Гуру Группа: Пользователи Сообщений: 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 |
14.12.2007 11:27
Сообщение
#31
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
Начнем тогда уж.. Внесу свою лепту для начала
type |
andriano |
14.12.2007 18:17
Сообщение
#32
|
Гуру Группа: Пользователи Сообщений: 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 - 14.12.2007 18:19 |
Текстовая версия | 21.05.2024 15:51 |