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

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

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

 
 Ответить  Открыть новую тему 
> Запись в текстовый фаил
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

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

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


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

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



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


Гость






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

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

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

WriteResults(output);


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


Новичок
*

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

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


Цитата(volvo)

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

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

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




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

WriteResults(output);






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

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


Новичок
*

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

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


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

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

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

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


Гость






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

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

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

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

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


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


Новичок
*

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

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


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


Новичок
*

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

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


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

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


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


Новичок
*

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

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


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

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


Новичок
*

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

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


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

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

нет


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


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


Новичок
*

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

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


а в чем же тогда преимущества типизированного файла?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

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

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


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


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


Гость






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

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

 





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