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

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

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

 
 Ответить  Открыть новую тему 
> Задача по файлам 2.0
Eskel
сообщение 25.12.2008 20:57
Сообщение #1


Новичок
*

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

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


type Person = record Name : string [10]; age : 1..200 end; List = file of person; Процедура Youngest(var spisok : list) Вашей программы печатает Name для всех людей файла spisok , возраст которых равен минимальному. Перед списком печатается этот возраст.

=>Не подскажите, как создать и забить запись в файл. Создать то я понял как, а с файлом не очень...
=> И как потом считать эту запись с файла на проверку возраста?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 26.12.2008 7:50
Сообщение #2


Гуру
*****

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

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


Цитата
забить запись в файл.

var
q: Person;
...
write(list,q);
...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 26.12.2008 8:40
Сообщение #3


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

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

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


Ozzя предельно немногословен.. smile.gif
type
  tAge=1..200;
  tPerson=record
    Name: string[10];
    Age: tAge;
  end;

var
  q: tPerson;
  f: file of tPerson;
...
  Assign(f,'spisok');
  ReWrite(f);
...
  write(f,q);
...
  Close(f);
...
  ReSet(f);
  MinAge:=High(tAge);
  while not EoF(f) do begin
    Read(f,q);
    if q.Age<MinAge then MinAge:=q.Age;
  end
  ReSet(f);
  WriteLn(MinAge);
  while not EoF(f) do begin
    Read(f,q);
    if q.Age=MinAge then WriteLn(q.Name);
  end
...

[/quote]


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Eskel
сообщение 26.12.2008 19:47
Сообщение #4


Новичок
*

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

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


спасибо, разобрался smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 3.01.2009 0:21
Сообщение #5


Гость






А можно с текстового файла в котром имена и даті, взять человека которій имеет определённую дату? тоисть надо взять даті и с ними работать. тхт файл уже есть. интересуєт возожно ли такое.
 К началу страницы 
+ Ответить 
Гость
сообщение 3.01.2009 0:25
Сообщение #6


Гость






вот типа написал, но что-то не то...


uses crt;
const n=10;
type  stud=record
      soname:string[15];
      year,month:integer
      end;
var F:text; St: string[35];
    c:stud;
begin clrscr;
assign(F, 'example.txt');
reset(F);
while not eof(F) do begin
readln(F, c.soname);
writeln(c.soname);
end;
readln(F);

while not eof(f) do
  with c do
  begin
 readln(f, c.month);
 if c.month=3 then
 writeln(c.soname:10, c.year:6);
 end;

writeln;
writeln('vivod s faila okon4en. to exit pres - Enter.');
readln;
end.

 К началу страницы 
+ Ответить 
Lapp
сообщение 3.01.2009 1:04
Сообщение #7


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

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

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


Цитата(Гость @ 3.01.2009 0:25) *
вот типа написал, но что-то не то...
Да, явно не то. Второй цикп даже не начнется, так как EoF уже достигнуто.

Можно, конечно. Но нужно знать, как устроен этот текстовый файл. Приведи пример.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 3.01.2009 1:27
Сообщение #8


Гость






в задании про файл больше ничего не сказано, но я его делал так

Цитата

Yurko 81 1
Pavlo 82 2
Sergey 83 3
Sashko 84 4
 К началу страницы 
+ Ответить 
Гость
сообщение 3.01.2009 1:37
Сообщение #9


Гость






вобщем интересует часть віделенная жирнім. Пишет "Неверный числовой формат" не пойму почему... mega_chok.gif
Цитата

uses crt;
const n=10;
type stud=record
soname:string[15];
year,month:integer
end;
var F:text; St: string[35];
c:stud;
begin clrscr;
assign(F, 'example.txt');
reset(F);
while not eof(F) do begin
readln(F, c.soname);
writeln(c.soname);
end;
readln(F);
close(f);

assign(F, 'example.txt');
reset(F);
while not eof(f) do
begin
readln(f, c.month);
if c.month=3 then
writeln(c.soname:10, c.year:6);
end;


writeln;
writeln('vivod s faila okon4en. to exit pres - Enter.');
readln;
end.


 К началу страницы 
+ Ответить 
Lapp
сообщение 3.01.2009 1:54
Сообщение #10


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

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

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


Цитата(Гость @ 3.01.2009 1:37) *
Пишет "Неверный числовой формат" не пойму почему...
Предельно ясно, почему smile.gif. Ты открываешь файл заново и считываешь фамилию как число.
Нужно все делать в одном цикле.
while not eof(F) do with c do begin
  readln(F, soname, year, month);
  writeln(soname);
end;

А когда ищешь:
while not eof(F) do with c do begin
  readln(F, soname, year, month);
  if month=3 then writeln('Found: ', soname:10, year:6);
end;


М
Для программ используй теги CODE, а не цитаты.



PS
фамилия - это surname


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 3.01.2009 13:39
Сообщение #11


Гость






YAHOOO !!!!! Всё заработало!!! Спасиба что показали мне мои ошибки.
 К началу страницы 
+ Ответить 
Гость
сообщение 7.01.2009 1:50
Сообщение #12


Гость






 
type  stud=record
      surname:string[15];
      year,month,day:integer;
      x:string
      end;
var F:text;
    c:stud;
begin clrscr;
assign(F, 'example.txt');
reset(F);
while not eof(F) do with c do begin
  readln(F, surname, year, month, day, x);
  writeln(surname, x);
end;
close(f);


Всё ж правильно, но последнюю переменную "х" не видит.
Или віьбивает ошибку 106 (не числовой формат), или просто не віьводит! Что не так? Подскажите пожалуйста...
 К началу страницы 
+ Ответить 
Lapp
сообщение 7.01.2009 3:44
Сообщение #13


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

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

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


Цитата(Гость @ 7.01.2009 1:50) *
Всё ж правильно,
- увы, нет sad.gif.
Мой недогляд. Нельзя смешивать в одном списке оператора Read (ReadLn) строки и числа. Единственное исключение из этого правила - когда строковая переменная последняя. Если же строковая переменная стоит, скажем, первой, то в нее считывается вся строка из файла. И это естественно - пробел является разделителем чисел, но не строк. Строка должна заканчиваться концом строки (извини за тавтологию smile.gif).
Поэтому нужно:
1. переделать чтение - вместо одного чтения сделать два:
ReadLn(F, surname);
ReadLn(F, year, month, day, x);

2. переделать формат файла данных:
Иванов
1234 5 25 дворник
Петрова Дуня
2345 6 31 неплохо поет и танцует

Но на мой взгляд лучше все же переменную x тоже в отдельную строку вынести (добавив, соответственно, еще один ReadLn)

И это само по себе правильно и хорошо, так как исчезает проблема пробелов в строках - теперь можно в поле surname вводить несколько слов. Но если ты захочешь добавить, скажем, имя и отчество - снова развести их на разных строках и добавь ReadLn'ы.

Еще раз извиняюсь за дезу..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 7.01.2009 3:52
Сообщение #14


Гость






я в файле данніьх пробовал каждую переменную с новой строчки писать, и не получалось. Ладно, сейчас буду пробовать как тіь написал. Спасибо за подсказку. smile.gif



М
Лень загружаться или пароль забыл? Если не создает угрозу личной безопасности, то лучше все же заходить по-человечески. Уважай тех, кто с тобой говорит.
Lapp

 К началу страницы 
+ Ответить 
Гость
сообщение 7.01.2009 4:09
Сообщение #15


Гость






Я всё понял. Всё получаеться теперь))) Ещё раз спасибо)
 К началу страницы 
+ Ответить 
Юрко
сообщение 7.01.2009 4:18
Сообщение #16





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

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


Лень біьло регестрироваться. Вот, я здесь теперь. Совисть заиграла.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 

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