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

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

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

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


Гуру
*****

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

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


Пальчиком ткни.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
npl
сообщение 10.12.2007 22:25
Сообщение #22


Новичок
*

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

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


obsh:string[10];
вот тут, может хватить мудить, если б вы andriano знали, давно бы уже написали нужный мне код norespect.gif

 ! 
За речью следи.



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


Гуру
*****

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

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


Грубить не надо.
Помочь - могу, а писать код за тебя - не буду.

Вот это называется типом данных:
type
figurist=record
fio:string[10];
obsh:string[10];
ocenka:array[1..10] of integer;
end;

А вот это - полем в типе "figurist", имеющим тип "string[10]":
obsh:string[10];

Не следует поутать одно с другим.

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

При обработке текстовых файлов, как правило, удобно оказывается действовать в следующем порядке:
- завести тип данных, хорошо описывающий входные данные,
- завести тип данных, хорошо описывающий выходные данные,
- считать входные данные в память,
- в памяти обработать входняе данные с целью заполнить поля выходного типа.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
npl
сообщение 12.12.2007 23:33
Сообщение #24


Новичок
*

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

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


"Спасибо", что не помогли, andriano. Но к счастью в этом мире есть добрые люди.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 12.12.2007 23:51
Сообщение #25


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

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


"Спасибо" andriano от тебя заслуживает как минимум за потраченное на тебя время. Смени тон.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
npl
сообщение 12.12.2007 23:55
Сообщение #26


Новичок
*

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

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


Цитата(Michael_Rybak @ 12.12.2007 23:51) *

"Спасибо" andriano от тебя заслуживает как минимум за потраченное на тебя время. Смени тон.

Никто не заставлял его тратить на меня время. И вовсе я не грублю. Извините, если, что-то не так сказал, но нервы перед сессией накалены до предела.

Добавлено через 15 мин.
Огромное спасибо volvo!!!

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


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

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


Цитата
Никто не заставлял его тратить на меня время.

Аааа, т.е. когда ты задаешь вопрос, я должен не отвечать, а сначала спросить тебя, заставляешь ты меня или нет? Т.к. если я отвечу не то, что ты бы ожидал услышать, то я в ответ получу "пустые разговоры" и "мудить". Какая прелесть.

Цитата
но нервы перед сессией накалены до предела.

Сочувствую (без сарказма). И тем не менее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
npl
сообщение 13.12.2007 13:11
Сообщение #28


Новичок
*

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

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


Цитата(Michael_Rybak @ 13.12.2007 0:20) *

Аааа, т.е. когда ты задаешь вопрос, я должен не отвечать, а сначала спросить тебя, заставляешь ты меня или нет? Т.к. если я отвечу не то, что ты бы ожидал услышать, то я в ответ получу "пустые разговоры" и "мудить". Какая прелесть.

Отвечать или нет - это личное дело каждого. А если уж решил ответить, то отвечать надо по существу, а не уходить от вопроса.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 13.12.2007 14:24
Сообщение #29


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


М
Господа, прошу прекратить перебранку. Тему закрывать не хочу, потому что она, по-видимому, еще нужна автору (если нет - скажи).

npl, прошу тебя понять, что замечания отвечавших тебе направлены на улучшение твоей программы, хотя ты этого можешь не понимать в настоящий момент.

andriano, прошу тебя быть более конкретным в ответах. Постарайся отвечать не только правильно, но и так, чтоб тебя поняли - чтобы поняли, что ты говоришь по существу.

К всем: побольше дружелюбия. А грубость прошу исключить совсем.

В дальнейшем прошу говорить только по теме
Спасибо.



--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
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)}
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 14.12.2007 11:27
Сообщение #31


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

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


Начнем тогда уж.. Внесу свою лепту для начала smile.gif

type
fig=record
fio:string;
obsh:string;
ocenka: array[1..10] of integer;
end;
...
procedure parse (s:string;var f:fig);
var i,n:integer;
begin
f.fio:=copy(s,1,pos ('"',s)-1);
delete(s,1,length(f.fio)+1);
f.obsh:='"'+copy(s,1,pos ('"',s)-1)+'"';
delete(s,1,length(f.obsh)-1);
for i:=1 to 10 do begin
while (not(s[1] in ['0'..'9'])) and (s>'') do delete (s,1,1);
n:=0;
while (s[1] in ['0'..'9']) and (s>'') do begin
n:=n*10+ord (s[1])-$30;
delete (s,1,1);
end;
f.ocenka[i]:=n;
end;
end;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 14.12.2007 18:17
Сообщение #32


Гуру
*****

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

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


Цитата(Malice @ 14.12.2007 11:27) *

Начнем тогда уж.. Внесу свою лепту для начала smile.gif

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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 9.05.2024 12:40
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"