![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Zigfried |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
Структура записи:
-ФИО(40 знаков) -Адрес: -Улица(20 знаков) -Номер дома -Квартира -Номер телефона(10 знаков) -Баланс Задание:Найти телефонную сеть(первые 3 цифры номера),имеющую наибольшее число абонентов. Помогите пожалуйста с решением.Заранее спасибо. |
мисс_граффити |
![]()
Сообщение
#2
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Zigfried, с чем конкретно проблема? что пробовал, что не получается?
-------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Zigfried |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
я не знаю как из текстового файла сделать список из записей
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Для этого надо как минимум знать, что из себя представляет тот текстовый файл, с которым ты хочешь работать. Если там данные о каждой записи хранятся в строку, с каким-либо (определенным заранее) разделителем между полями - то вот так:
Заполнение полей записи из файла читать данные в переменную типа "запись", а уж как эти записи объединить в список - тут на форуме было не десятки, а сотни раз. Точно так же, как и список целых, если что... Разницы, что именно хранится в списке, просто нет. Процедуры добавления элементов к списку совершенно одинаковые для любого типа данных. Если же информация записана в txt-файл в другом виде - говори, в каком именно. |
Zigfried |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
ну если не обговаривается это у меня в условии то наверно в строке)
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Я догадки предпочитаю оставлять женщинам с картами Таро или с кофейной гущей. Если у тебя не сказано - это значит только то, что у тебя не сказано, и требует уточнения.
Цитата наверно в строке В таком случае, наверно тебе подойдет метод ссылку на который я тебе дал. |
Zigfried |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
Уточнил у преподавателя данные записаны в строку через пробел
|
Lapp |
![]()
Сообщение
#8
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Уточнил у преподавателя данные записаны в строку через пробел Zigfried, ты просто приведи, как пример, фрагмент файла - и все станет всем ясно.. Код Иванов Петр Сидорович Ленина 25 321 1234567890 15.44 Смит Мэри Джоновна Вашингтона 1234 1 2345678901 123.45 ... Так? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Zigfried |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
да
|
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата да В таком случае, в чем проблема использовать вышеприведенный метод? Или ты, извини, хочешь получить готовый код, сам поменять двоеточие на пробел (и добавить функцию strReal, которая как близнец похожа на strInt) - не в состоянии? Объясни, ПРОБЛЕМА в чем? В нежелании делать что-то самостоятельно? В нежелании пользоваться готовыми наработками? В чем?P.S. Зачем нам весь этот хлам, все старые сообщения? Давайте удалим все это к едрене фене, и будем всё заново решать с чистого листа? Это как рацпредложение к админам. |
Lapp |
![]()
Сообщение
#11
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
смотри, вот тебе ТВОЯ примерная структура записи, вкупе с элементом списка..
type
tPage = record
FIO: string[30];
Ul: string[20];
Dom,Kv: integer;
Tel: string[10];
Bal: single
end;
tElem = record
Page: tPage;
Next: ^tElem
end;
var
First,Last: ^tElem;
Читай файл построчно в цикле до EoF(f) и раскладывай по полям записи (как в той ссылке). При этом не забывай выделять память под каждый новый элемент. Попробуй это реализовать и покажи, что получается. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Zigfried |
![]()
Сообщение
#12
|
Новичок ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
ok
|
Zigfried |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
type
tPage = record
FIO: string[30];
Ul: string[20];
Dom,Kv: integer;
Tel: string[10];
Bal:single
end;
tlist=^tElem;
tElem = record
Page: tPage;
Next:tlist
end;
var
Spis:tlist;
z:tPage;
x:text;
procedure list_init(var m:tlist);
begin
new(m);
m^.next:=nil
end;
procedure list_read(var z:tPage);
begin
readln(x,z.FIO);
readln(x,z.Ul);
readln(x,z.Dom);
readln(x,z.Kv);
readln(x,z.Tel);
readln(x,z.Bal);
if not eof(x) then readln(x)
end;
function sort(z1,z2:tPage):boolean;
begin
sort:=((z1.FIO<z2.FIO) or (z1.FIO=z2.FIO))
end;
procedure list_add(var m:tlist; z:tPage);
var
p,q:tlist;
begin
q:=m;
while (q^.next<>nil) and sort(q^.next^.Page,z) do
q:=q^.next;
new(p);
p^.Page:=z;
p^.next:=q^.next;
q^.next:=p
end;
procedure list_create(var x:text;var m:tlist);
begin
assign(x,'input.txt');
reset(x);
list_init(m);
while not eof(x) do
begin
list_read(z);
list_add(m,z)
end
end;
procedure list_print(m:tlist);
begin
if m=nil then writeln('konec spiska')
else
begin
writeln(m^.Page.FIO);
writeln(m^.Page.Ul);
writeln(m^.Page.Dom);
writeln(m^.Page.Kv);
writeln(m^.Page.Tel);
writeln(m^.Page.Bal);
writeln;
list_print(m^.next)
end
end;
begin
list_create(x,spis);
Writeln('spisok:');
list_print(spis^.next)
end.
Вот что получилось(начальный этап). Выдаёт ошибку. |
мисс_граффити |
![]()
Сообщение
#14
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Вот что получилось(начальный этап). Выдаёт ошибку. Какую и на каких данных? Лучше прикрепи свой текстовый файлик с данными. Компилируется вроде нормально. -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Zigfried |
![]()
Сообщение
#15
|
Новичок ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
а сортировка в данной задаче правильно выполнена не подскажите?
|
Zigfried |
![]()
Сообщение
#16
|
Новичок ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
и пожалуйста помогите с процедурой нахождения телефонной сети с наибольшим числом абонентов
|
Zigfried |
![]()
Сообщение
#17
|
Новичок ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
program lyalikov21;
{Найти телефонную сеть(первые 3 цифры номера),имеющую наибольшее число абонентов}
{$APPTYPE CONSOLE}
uses
SysUtils;
type
tPage = record
FIO: string[30];
Ul: string[20];
Dom,Kv: integer;
Tel: string[10];
Bal:single
end;
tlist=^tElem;
tElem = record
Page: tPage;
Next:tlist
end;
var
Spis:tlist;
z:tPage;
x:text;
procedure list_init(var m:tlist);
{Инициализация списка с заглавным звеном}
begin
new(m);
m^.next:=nil
end;
procedure list_read(var z:tPage);
{чтение из файла записи}
begin
readln(x,z.FIO);
readln(x,z.Ul);
readln(x,z.Dom);
readln(x,z.Kv);
readln(x,z.Tel);
readln(x,z.Bal);
if not eof(x) then readln(x)
end;
function more(z1,z2:tPage):boolean;
{Сортировка записи по имени каталога и телефону}
var
t:boolean;
begin
if z1.Tel<z2.Tel then t:=true
else
if z1.Tel=z2.Tel then
if z1.FIO<z2.FIO then t:=true
else
if z1.FIO=z2.FIO then t:=true
else t:=false
else t:=false;
more:=t
end;
procedure list_add(var m:tlist; z:tPage);
{Добавление записи в список, c учетом сортировки}
var
p,q:tlist;
begin
q:=m;
while (q^.next<>nil) and more(q^.next^.Page,z) do
q:=q^.next;
new(p);
p^.Page:=z;
p^.next:=q^.next;
q^.next:=p
end;
procedure list_create(var x:text;var m:tlist);
{Формирование списка из файла}
begin
assign(x,'input.txt');
reset(x);
list_init(m);
while not eof(x) do
begin
list_read(z);
list_add(m,z)
end
end;
procedure list_print(m:tlist);
{Печать списка}
begin
if m=nil then writeln('konec spiska')
else
begin
writeln(m^.Page.FIO);
writeln(m^.Page.Ul);
writeln(m^.Page.Dom);
writeln(m^.Page.Kv);
writeln(m^.Page.Tel);
writeln(m^.Page.Bal:3:2);
writeln;
list_print(m^.next)
end
end;
procedure poisk(m:tlist);
var q:tlist;
max,k,i:integer;
maxop:string[3];
begin
q:=m;
max:=0;
while q<>nil do
begin
k:=1;
while q^.Next^.Page.Tel=q^.Page.Tel do
begin
k:=k+1;
q:=q^.Next
end;
if k>max then
begin
max:=k;
for i:=1 to 3 do
maxop[i]:=q^.page.tel[i]
end;
q:=q^.Next
end;
dispose(q);
for i:=1 to 3 do
writeln('max operator',maxop[i]);
writeln('vstrechaetsya', max,'raz');
readln;
readln
end;
begin
{ TODO -oUser -cConsole Main : Insert code here }
list_create(x,spis);
Writeln('spisok:');
list_print(spis^.next);
poisk(spis);
readln;
readln
end.
Пожалуйста подскажите где ошибка в этой задаче? Сообщение отредактировано: Zigfried - 25.11.2010 11:00 Прикрепленные файлы ![]() |
TarasBer |
![]()
Сообщение
#18
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Перед копированием текста из дельфы выбирай русскую раскладку. Иначе винда не поймёт, какая там кодировка.
Поправь сообщение. -------------------- |
мисс_граффити |
![]()
Сообщение
#19
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
ну для начала - неплохо бы добавить проверку, что файл (из которого ты пытаешься загрузить данные) действительно существует.
прикрепи файл, на котором проверяешь... -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#20
|
Гость ![]() |
1) у тебя список из памяти не удаляется - это достаточная ошибка?
2) в процедуре создания списка (чтения из файла, в смысле) лучше сделать цикл не до eof, а до seekeof: while not seekeof(x) do
begin
list_read(z);
list_add(m,z)
end:
, иначе пустые строки в конце будут мешать читать файл, будешь получать ошибки. А функция SeekEof их просто "не видит", поэтому здесь будет лучше использовать именно ее.3) прочитали список - вывели его. Что ты творишь при поиске? while q<>nil do
begin
k:=1;
while q^.Next^.Page.Tel=q^.Page.Tel do // <--- Вот здесь !!!
begin
k:=k+1;
q:=q^.Next
end;
if k>max then
begin
max:=k;
for i:=1 to 3 do
maxop[i]:=q^.page.tel[i]
end;
q:=q^.Next // <--- И здесь тоже !!!
end;
А если в какой-то момент в первом цикле Q^.next = nil, а ты дальше обращаешься к Q^.Next^.Page? Вылет... А ниже по тексту? Как вообще можно изменять значение указателя, не убедившись, что он валидный? В твоем случае - он должен быть хотя бы не NIL...Исправляй, дальше посмотрим... |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 8:46 |