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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Список с заглавным звеном, из текстового файла получить список из записей и по нему уже сделать з
Zigfried
сообщение 17.09.2010 9:43
Сообщение #1


Новичок
*

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

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


Структура записи:
-ФИО(40 знаков)
-Адрес:
-Улица(20 знаков)
-Номер дома
-Квартира
-Номер телефона(10 знаков)
-Баланс

Задание:Найти телефонную сеть(первые 3 цифры номера),имеющую наибольшее число абонентов.

Помогите пожалуйста с решением.Заранее спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 17.09.2010 10:38
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Zigfried, с чем конкретно проблема? что пробовал, что не получается?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zigfried
сообщение 17.09.2010 11:19
Сообщение #3


Новичок
*

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

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


я не знаю как из текстового файла сделать список из записей
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.09.2010 12:22
Сообщение #4


Гость






Для этого надо как минимум знать, что из себя представляет тот текстовый файл, с которым ты хочешь работать. Если там данные о каждой записи хранятся в строку, с каким-либо (определенным заранее) разделителем между полями - то вот так:
Заполнение полей записи из файла
читать данные в переменную типа "запись", а уж как эти записи объединить в список - тут на форуме было не десятки, а сотни раз. Точно так же, как и список целых, если что... Разницы, что именно хранится в списке, просто нет. Процедуры добавления элементов к списку совершенно одинаковые для любого типа данных.

Если же информация записана в txt-файл в другом виде - говори, в каком именно.
 К началу страницы 
+ Ответить 
Zigfried
сообщение 17.09.2010 12:50
Сообщение #5


Новичок
*

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

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


ну если не обговаривается это у меня в условии то наверно в строке)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.09.2010 13:23
Сообщение #6


Гость






Я догадки предпочитаю оставлять женщинам с картами Таро или с кофейной гущей. Если у тебя не сказано - это значит только то, что у тебя не сказано, и требует уточнения.

Цитата
наверно в строке
В таком случае, наверно тебе подойдет метод ссылку на который я тебе дал.
 К началу страницы 
+ Ответить 
Zigfried
сообщение 1.10.2010 9:24
Сообщение #7


Новичок
*

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

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


Уточнил у преподавателя данные записаны в строку через пробел
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 1.10.2010 9:33
Сообщение #8


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

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

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


Цитата(Zigfried @ 1.10.2010 10:24) *

Уточнил у преподавателя данные записаны в строку через пробел

Zigfried, ты просто приведи, как пример, фрагмент файла - и все станет всем ясно..

Код
Иванов Петр Сидорович Ленина 25 321 1234567890 15.44
Смит Мэри Джоновна Вашингтона 1234 1 2345678901 123.45
...

Так?


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


Новичок
*

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

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


да
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 1.10.2010 11:11
Сообщение #10


Гость






Цитата
да
В таком случае, в чем проблема использовать вышеприведенный метод? Или ты, извини, хочешь получить готовый код, сам поменять двоеточие на пробел (и добавить функцию strReal, которая как близнец похожа на strInt) - не в состоянии? Объясни, ПРОБЛЕМА в чем? В нежелании делать что-то самостоятельно? В нежелании пользоваться готовыми наработками? В чем?

P.S. Зачем нам весь этот хлам, все старые сообщения? Давайте удалим все это к едрене фене, и будем всё заново решать с чистого листа? Это как рацпредложение к админам.
 К началу страницы 
+ Ответить 
Lapp
сообщение 1.10.2010 11:30
Сообщение #11


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

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

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


смотри, вот тебе ТВОЯ примерная структура записи, вкупе с элементом списка..
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) и раскладывай по полям записи (как в той ссылке). При этом не забывай выделять память под каждый новый элемент.
Попробуй это реализовать и покажи, что получается.


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


Новичок
*

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

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


ok
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zigfried
сообщение 4.10.2010 9:54
Сообщение #13


Новичок
*

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

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


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.


Вот что получилось(начальный этап). Выдаёт ошибку.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 4.10.2010 18:06
Сообщение #14


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Цитата(Zigfried @ 4.10.2010 10:54) *

Вот что получилось(начальный этап). Выдаёт ошибку.

Какую и на каких данных? Лучше прикрепи свой текстовый файлик с данными.
Компилируется вроде нормально.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zigfried
сообщение 14.11.2010 13:02
Сообщение #15


Новичок
*

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

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


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


Новичок
*

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

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


и пожалуйста помогите с процедурой нахождения телефонной сети с наибольшим числом абонентов
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zigfried
сообщение 25.11.2010 9:55
Сообщение #17


Новичок
*

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

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


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


Прикрепленные файлы
Прикрепленный файл  input.txt ( 461 байт ) Кол-во скачиваний: 221
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 25.11.2010 10:30
Сообщение #18


Злостный любитель
*****

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

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


Перед копированием текста из дельфы выбирай русскую раскладку. Иначе винда не поймёт, какая там кодировка.
Поправь сообщение.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 25.11.2010 10:51
Сообщение #19


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


ну для начала - неплохо бы добавить проверку, что файл (из которого ты пытаешься загрузить данные) действительно существует.
прикрепи файл, на котором проверяешь...


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 25.11.2010 12:33
Сообщение #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...

Исправляй, дальше посмотрим...
 К началу страницы 
+ Ответить 

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

 

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