![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Natalia |
![]() ![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Женский Репутация: ![]() ![]() ![]() |
Доброго времени суток! Помогите разобраться с задачей. Всё, что поняла, реализовала в программе.
Задача такая: Составьте программу, реализующую телефонную книгу. Каждая запись в книге включает фамилию, инициалы и три телефона (один домашний и два рабочих). Программа должна обеспечивать ввод и сохранение записей, вывод телефонов по введённой фамилии, а также вывод всех фамилий с указанием инициалов по введённому телефонному номеру. Но у меня не выходит. ![]() Код program Telefonnaya_kniga; uses crt; const n=10; type book=record first_name:string[20]; inis:string[5]; telrab1:shortInt; telrab2:shortint; teldom:shortint; end; Tel_Book=array[1..n] of book; Ffile=file of Tel_Book; {файл для хранения базы} var f:Ffile; b:Tel_Book; t,k,tel:shortint; i:byte; s:string; begin assign(f,'tel_book.txt'); writeln('Ввод данных-0; поиск-1; сохранение-2; возврат в меню-".."'); readln(t); if t=0 then begin append(f); writeln('Ввод данных в телефонную книгу:'); while t<>'..' do with b[i] do begin write('Фамилия: '); readln(first_name); write('Инициалы: '); readln(inis); writeln('Домашний телефон: '); readln(teldom); writeln('Рабочий телефон 1: '); readln(telrab1); writeln('Рабочий телефон 2: '); readln(telrab2); writeln; end; write(f,b); close(f); end; if t=1 then begin reset(f); while k<>'..' do writeln('Поиск:') writeln('по фамилии-0'); writeln('по телефону-1'); readln(k); if k=0 then begin writeln('Введите фамилию'); readln(s); for i:=1 to n do if s=b.first_name then writeln(b.first_name,b.inis,b.teldom,b.telrab1,b,telrab2); end; end; if k=1 then begin writeln('Введите телефон'); readln(tel); for i:=1 to n do if tel=b.teldom then writeln(b.first_name,b.inis,b.teldom,b.telrab1,b,telrab2); if tel=b.telrab1 then writeln(b.first_name,b.inis,b.teldom,b.telrab1,b,telrab2); if tel=b.telrab2 then writeln(b.first_name,b.inis,b.teldom,b.telrab1,b,telrab2); end; end; close(f); end; readln; end. И ещё вопрос: какой функцией воспользоваться, чтобы определить количество байтов, записанных в файл? FileSize - мне не помог. Нужна ли тут процедура FilePos? |
![]() ![]() |
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Но у меня не выходит. Слишком общо.. Что именно не выходит? Ошибок у тебя немало. Во-первых, нетекстовый файл нельзя открывать процедурой Append. Так что либо используй ReWrite, либо работай с текстовым файлом (последнее на мой взгляд, предпочтительнее). Определишься с этим - приходи.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Natalia |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Женский Репутация: ![]() ![]() ![]() |
Основную проблему с append я знаю... У меня задание сохранять и загружать из типизированного файла. Я бы использовала rewrite, но, как я понимаю, это перезапись файла, а мне необходимо открывать файл с телефонной книгой и добавлять записи. Как-то напрямик в книжке не было сказано, что нельзя использовать append с типизированным файлом. Зменила значок '..' на цифру 3 и заменила append на rewrite. А как тогда поля записи правильно отобразить? Через точку неверно (s=b.first_name), хотя в книге приводтся два примера: через точку и with.
Сообщение отредактировано: Natalia - 20.12.2006 17:07 |
мисс_граффити |
![]()
Сообщение
#4
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
хммм....
Цитата В отличие от текстовых типизированные файлы допускают операции как записи, так и чтения независимо от того, какой процедурой файл открыт так что смело открывай reset -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Natalia |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Женский Репутация: ![]() ![]() ![]() |
Поковырялась с файлом. Вот что вышло. По-крайней мере он выполняется.
Код program Telefonnaya_kniga; uses crt; const n=10; type book=record first_name:string[20]; inis:string[5]; telrab1:shortInt; telrab2:shortint; teldom:shortint; end; Tel_Book=array[1..n] of book; Ffile=file of Tel_Book; {файл для хранения базы} var f:Ffile; b:Tel_Book; t,k,tel:shortint; i:byte; s:string; begin assign(f,'tel_book.txt'); reset(f); writeln('Ввод данных-0; поиск-1; сохранение-2; возврат в меню-"3"'); readln(t); if t=0 then begin writeln('Ввод данных в телефонную книгу:'); while t<>3 do with b[i] do begin write('Фамилия: '); readln(first_name); write('Инициалы: '); readln(inis); writeln('Домашний телефон: '); readln(teldom); writeln('Рабочий телефон 1: '); readln(telrab1); writeln('Рабочий телефон 2: '); readln(telrab2); writeln; end; write(f,b); end; if t=1 then begin while k<>3 do begin writeln('Поиск:'); writeln('по фамилии-0'); writeln('по телефону-1'); readln(k); if k=0 then begin writeln('Введите фамилию'); readln(s); with b[i] do begin for i:=1 to n do if s=first_name then writeln(first_name,inis,teldom,telrab1,telrab2); end; end; end; if k=1 then begin writeln('Введите телефон'); readln(tel); with b[i] do begin for i:=1 to n do begin if tel=teldom then writeln(first_name,inis,teldom,telrab1,telrab2); if tel=telrab1 then writeln(first_name,inis,teldom,telrab1,telrab2); if tel=telrab2 then writeln(first_name,inis,teldom,telrab1,telrab2); end; end; end; end; close(f); readln; end. Какой функцией воспользоваться, чтобы определить количество байтов, записанных в файл? FileSize - мне не помог. Нужна ли тут процедура FilePos? |
мисс_граффити |
![]()
Сообщение
#6
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
размер в байтах=filesize(твоего файла)*sizeof(элемент файла)
-------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Natalia |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Женский Репутация: ![]() ![]() ![]() |
Подскажите, пожалуйста, в чём дело. Немного переделала программу. Она запускается, но почему-то выводит только одну фразу "Ввод данных-0; поиск-1; возврат в меню-3". Почему она ничего другого не выполняет?
Код program Telefonnaya_kniga; uses crt; const n=50; type book=record first_name:string[20]; inis:string[5]; telrab1:shortInt; telrab2:shortint; teldom:shortint; end; Tel_Book=array[1..n] of book; Ffile=file of Tel_Book; {файл для хранения базы} var f:Ffile; b:Tel_Book; t,k,tel:shortint; i:byte; s:string; begin assign(f,'tel_book.txt'); reset(f); while t<>3 do writeln('Ввод данных-0; поиск-1; возврат в меню-3'); readln(t); if t=0 then begin writeln('Ввод данных в телефонную книгу:'); with b[i] do begin write('Фамилия: '); readln(first_name); write('Инициалы: '); readln(inis); writeln('Домашний телефон: '); readln(teldom); writeln('Рабочий телефон 1: '); readln(telrab1); writeln('Рабочий телефон 2: '); readln(telrab2); writeln; end; write(f,b); end; if t=1 then begin writeln('Поиск:'); writeln('по фамилии-0'); writeln('по телефону-1'); readln(k); if k=0 then begin writeln('Введите фамилию'); readln(s); with b[i] do begin for i:=1 to n do if s=first_name then writeln(first_name,inis,teldom,telrab1,telrab2) else writeln('Такой фамилии нет'); end; end; if k=1 then begin writeln('Введите телефон'); readln(tel); with b[i] do begin for i:=1 to n do begin if tel=teldom then writeln(first_name,inis,teldom,telrab1,telrab2) else writeln('Такого телефона нет'); if tel=telrab1 then writeln(first_name,inis,teldom,telrab1,telrab2) else writeln('Такого телефона нет'); if tel=telrab2 then writeln(first_name,inis,teldom,telrab1,telrab2) else writeln('Такого телефона нет'); end; end; end; end; close(f); readln; end. |
Natalia |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Женский Репутация: ![]() ![]() ![]() |
размер в байтах=filesize(твоего файла)*sizeof(элемент файла) Спасибо за подсказку)) Но у меня проблемка такая, pascal напрочь отказывается найти файл (файл нетипизированный по заданию). Вроде, поместила файл в ту директорию, даже пробовала указывать путь... Вот эта программа, пока только сделанная не до конца. Код uses crt; uses crt; var f:file; s:char; rzm:word; name:string; a:integer; begin clrscr; write('Введите имя файла '); readln(name); assign(f,name); reset(f,1); rzm:=filesize(f); a:=rzm*sizeof(char); writeln('Размер файла',a); close(f); end. Сообщение отредактировано: Natalia - 20.12.2006 21:59 |
мисс_граффити |
![]()
Сообщение
#9
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
var f:file; а речь вроде шла про работу с типизированными... -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Natalia |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Женский Репутация: ![]() ![]() ![]() |
var f:file; а речь вроде шла про работу с типизированными... с типизированным я знаю, как определить)) У меня задание с нетипизированным)) Значит, мне сначала надо определить тип содержимого файла, а затем определять количество байтов? Подскажи, пожалуйста, в чём дело по телефонной книге. Немного переделала программу (она выложена выше). Она запускается, но почему-то выводит только одну фразу "Ввод данных-0; поиск-1; возврат в меню-3". Почему она ничего другого не выполняет? Сообщение отредактировано: Natalia - 20.12.2006 22:34 |
Bokul |
![]()
Сообщение
#11
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Держи универсальную функцию нахождения размера файла.
![]()
-------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Цитата Почему она ничего другого не выполняет? А что, в этом цикле где-то меняется значение T? while t<>3 do Ты наверное забыла весь цикл взять в Begin/End |
Гость |
![]()
Сообщение
#13
|
Гость ![]() |
Держи универсальную функцию нахождения размера файла. ![]()
Э-э-э... Это наверное хорошая функция... Но мы такого модуля ещё не проходили)) Попробую поэкспериментировать, спасибо)) |
Natalia |
![]()
Сообщение
#14
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Женский Репутация: ![]() ![]() ![]() |
А что, в этом цикле где-то меняется значение T? while t<>3 do Ты наверное забыла весь цикл взять в Begin/End Точно! Спасибо, а то не могла понять, почему получались лишние endы). Объясните ещё, пожалуйста, смысл ошибки: "0-выход за границы диапазона изменения индекса 1..50" ![]() |
мисс_граффити |
![]()
Сообщение
#15
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
а почему у тебя вложенные циклы по одной переменной?
так нельзя -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Natalia |
![]()
Сообщение
#16
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Женский Репутация: ![]() ![]() ![]() |
а почему у тебя вложенные циклы по одной переменной? так нельзя Пока не знаю, как сделать по-другому. И не могу уже думать... У меня так: пока не равно трём идёт цикл, в котором при t=0 - ввод данных, а при t=1 идёт поиск (поиск по двум критериям - фамилии и телефонам). Если же t=3, то переход должен быть в начало выбора: ввода или поиска. Знаю, что там напортачила, но пока не соображу, как переделать. |
мисс_граффити |
![]()
Сообщение
#17
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Я в твоем форматировании запуталась.
они, оказывается, не вложенные, а независимые... но что тогда значит это: with b[i] do -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
Цитата Я в твоем форматировании запуталась. ![]() Полезные программы и утилиты |
Bokul |
![]()
Сообщение
#19
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Цитата Кстати, есть очень хорошая утилита - для переформатирования текстов программ, написанных на Паскале, с соблюдением отступов (из комплекта FPC) - иногда просто незаменима, если код довольно большой и плохо форматированный (или вообще без отступов): И как с ней работать? -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
volvo |
![]()
Сообщение
#20
|
Гость ![]() |
Запустить из консоли не пробовал? Она показывает Хелп... Чтобы все сделать по умолчанию -
Цитата(Console) PTOP myfile.pas myfile2.pas где myfile.pas - название НЕформатированного файла... |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 22:41 |