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

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

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

 
 Ответить  Открыть новую тему 
> Запись в текстовый фаил
Spaun
сообщение 10.06.2008 21:28
Сообщение #1


Новичок
*

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

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


Здравствуйте есть программа и для нее надо организовать запись результатов работы программы в текстовый фаил. Не могли бы кто нибудь подсказать как осуществить сие действие.
Вот код:

program nomer4;
uses crt;
type
sport=record
sur:string;
name:string;
nomber:integer;
ass:byte;
res:integer;
end;
var
mas:array[1..100] of sport;
x,y:real;
n,i,maxI,minI:integer;
g:text;
procedure spisok(x:real);
begin
writeln('Самый лучший и худший из результатов :');
writeln;
writeln;
writeln('-------------------------------------------');
writeln('Фамилия|',' Имя |','Номер школы|','Класс|','Результат|');
writeln('-------------------------------------------');
maxI := 1;
minI := 1;
for i:=2 to n do begin
if mas[i].res > mas[maxI].res then maxI:=i;
if mas[i].res < mas[minI].res then minI:=i;
end;
begin
writeln(mas[maxI].sur:7,'|',mas[maxI].name:7,'|',mas[maxI].nomber:11,'|',mas[maxI].ass:5,'|',mas[maxI].res:9,'|');
writeln(mas[minI].sur:7,'|',mas[minI].name:7,'|',mas[minI].nomber:11,'|',mas[minI].ass:5,'|',mas[minI].res:9,'|');
end;

writeln('--------------------------------------------');
end;
BEGIN
assign (g, 'C:\123.txt');
rewrite (g);
clrscr;
writeln('Введите количество спортсменов');
readln(n);
for i:=1 to n do
begin
writeln('Введите фамилию');readln(mas[i].sur);
writeln('Введите имя');readln(mas[i].name);
writeln('Введите номер школы');readln(mas[i].nomber);
writeln('Введите класс');readln(mas[i].ass);
writeln('Введите результат');readln(mas[i].res);
writeln('___________________________________________________________________');
end;
clrscr;
writeln('-------------------------------------------');
writeln('Фамилия|',' Имя |','Номер школы|','Класс|','Результат|');
writeln('-------------------------------------------');
for i:=1 to n do
begin
writeln(mas[i].sur:7,'|',mas[i].name:7,'|',mas[i].nomber:11,'|',mas[i].ass:5,'|',mas[i].res:9,'|');
end;
writeln('-------------------------------------------');
writeln;
writeln;
writeln;
spisok(x);
close(g)
end.


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Alеx J'Root
сообщение 11.06.2008 20:31
Сообщение #2


Новичок
*

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

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


Где-то я это уже видел ))

Если хочешь занести в файл, то везде где ты выводишь на экран инфу с помощью writeln('Инфа'), заменяешь на writeln(g,'Инфа');



--------------------
P.S. это лично моё мнение :)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.06.2008 20:47
Сообщение #3


Гость






Угу... И написать все дважды, да? Первый раз - для вывода на экран, а второй - в файл...

Все проще гораздо: выносишь все действия по выводу информации (и ТОЛЬКО выводу, все подсчеты и вычисления делаются заранее, и никакого отношения к этой процедуре иметь не должны) в отдельную процедуру:
procedure WriteResults(var f: text);
begin
{ __Всё__ выводим в файл f }
end;

, и при необходимости напечатать те же данные на экране -

WriteResults(output);


Сообщение отредактировано: volvo - 11.06.2008 20:48
 К началу страницы 
+ Ответить 
Spaun
сообщение 12.06.2008 10:17
Сообщение #4


Новичок
*

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

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


Цитата(volvo)

Угу... И написать все дважды, да? Первый раз - для вывода на экран, а второй - в файл...

Все проще гораздо: выносишь все действия по выводу информации (и ТОЛЬКО выводу, все подсчеты и вычисления делаются заранее, и никакого отношения к этой процедуре иметь не должны) в отдельную процедуру:

procedure WriteResults(var f: text);
begin
{ __Всё__ выводим в файл f }
end;




, и при необходимости напечатать те же данные на экране -

WriteResults(output);






Да но как тогда сделать чтобы чтобы обращение в процедуру было все время за разными данными, или просто сделать несколько процедур, да и еще не объяснишь как с помощью
Цитата(volvo)
WriteResults(output); 
сделать вывод данных на экран, а то понять не могу как оно должно работать.

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


Новичок
*

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

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


подскажите пожалуйста как организовать добавление данных и результатов поиска в существующий файл.
буду очень благодарен..
есть в принципе вариант вместо
 ...
rewrite (g);
...

поставить
 append (g);

единственное что от этого измениться так это то чту будет до запись в фаил и то неизвестно как а вот по поводу поиска... незнаю.. mad.gif

Сообщение отредактировано: Spaun - 12.06.2008 10:58
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.06.2008 10:56
Сообщение #6


Гость






Цитата
Да но как тогда сделать чтобы чтобы обращение в процедуру было все время за разными данными
У тебя в программе нет разных данных, вычисляется только мин/макс, поэтому было предложено такое решение. Если тебе надо вычислять каждый раз разные вещи - об этом надо было говорить сразу. Уточняй, что именно может понадобиться выводить в файл...

Цитата
понять не могу как оно должно работать.
С экраном (она же консоль) можно работать точно так же, как с обычным текстовым файлом... Для этого нужно либо самому связать файл с устройством CON:
Assign(f, 'CON'); Rewrite(f);
... { Здесь - вывод в файл (в смысле, на экран) }
Close(f);

либо воспользоваться стандартным паскалевским файлом output, который уже связан с этим устройством...

Цитата
единственное что от этого измениться так это то чту будет дозапись в фаил и то неизвестно
wacko.gif Что неизвестно? Что будет добавление? Используешь Append, значит, информация будет добавляться...

Сообщение отредактировано: volvo - 12.06.2008 13:10
 К началу страницы 
+ Ответить 
Alеx J'Root
сообщение 12.06.2008 12:57
Сообщение #7


Новичок
*

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

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


Поиск по фамилии:

Procedure Search;
Var
i:integer;
sur:string;
fl:boolean;
Begin
Assign(g,'C:\123.txt');
Reset(g);
writeln('Введите фамилию для поиска: ');
readln(sur);
fl:=false;
For i:=1 to n do
begin
read(g,mas[i].sur);
If sur=mas[i].sur then
begin
writeln('Фамилия: ', mas[i].sur);
writeln('Имя: ', mas[i].name);
writeln('Номер школы: ', mas[i].nomber);
writeln('Класс: ', mas[i].ass);
writeln('Результат: ', mas[i].res);
writeln('___________________________________________________________________');
fl:=true;
end;
end;
If not fl then
writeln('Записи с такой фамилией нет!');
readln;
end;


Сообщение отредактировано: Alеx J'Root - 12.06.2008 14:28


--------------------
P.S. это лично моё мнение :)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Spaun
сообщение 12.06.2008 14:24
Сообщение #8


Новичок
*

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

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


В таком случае не могли бы вы мне помочь организовать типизированный фаил... unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Alеx J'Root
сообщение 12.06.2008 14:30
Сообщение #9


Новичок
*

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

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


Это процедура поиска работает и с текстовым файлом. smile.gif Хотя я её не тестил писал прямо тут, но должно работать.

А добаление.. просто тебе нужно открыть файл через Append(g) и записывать дальше.


--------------------
P.S. это лично моё мнение :)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Spaun
сообщение 12.06.2008 14:34
Сообщение #10


Новичок
*

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

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


Цитата(Alеx J'Root)
А добаление.. просто тебе нужно открыть файл через Append(g) и записывать дальше.

спасибо конечно, с этим я уже разобрался но меня стал интересовать вопрос если эту же программу сделать через "типизированный фаил" то менять можно будет любое значение и поиск упроститься...?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Alеx J'Root
сообщение 12.06.2008 14:38
Сообщение #11


Новичок
*

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

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


Цитата
менять можно будет любое значение

Не понял blink.gif Например, найти запись в файле и помять ей результат???
Цитата
поиск упроститься

нет


P.S. это лично моё мнение smile.gif


--------------------
P.S. это лично моё мнение :)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Spaun
сообщение 12.06.2008 14:47
Сообщение #12


Новичок
*

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

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


а в чем же тогда преимущества типизированного файла?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Alеx J'Root
сообщение 12.06.2008 15:35
Сообщение #13


Новичок
*

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

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


Он использует меньше памяти, когда работаешь с числами, т.к. на каждое число 2 байта, а в текстовом на каждую цифру по 1-ому + пробелы. А когда работаешь с текстом, то всё зависит от задачи. А вообще почитай книжки smile.gif


--------------------
P.S. это лично моё мнение :)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.06.2008 15:50
Сообщение #14


Гость






Цитата
а в чем же тогда преимущества типизированного файла?
Изменение любой записи без необходимости переписывания всех остальных (т.е., прямой, а НЕ последовательный доступ) - достаточное преимущество?
 К началу страницы 
+ Ответить 

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

 



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