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

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

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

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


Гуру
*****

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

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


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


Новичок
*

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

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


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

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



Сообщение отредактировано: Michael_Rybak -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Новичок
*

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

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


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


Michael_Rybak
*****

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

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


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


Новичок
*

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

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


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

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

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

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

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


Michael_Rybak
*****

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

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


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

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

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

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


Новичок
*

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

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


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

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

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


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

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

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


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

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

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

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

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



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

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

 





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