Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/30: Рейтинг темы: голосов - 30, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 27.04.2009
Сообщений: 17
1

Чтение из файла чисел и запись в список

13.07.2009, 15:43. Показов 6148. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
задание создать прогу читающую из файла числа и записывающая их в список (а не в файл- очепятка)
прогу создал , работает правильно , но остались непонятные моменты , хотелось бы прояснить ситуацию..)
p
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
rogram laba5_1;
uses Crt;
const
 n = 9;
type
 pt = ^elem;
 elem =
  record
   data: integer;
   next: pt;
  end;
var
 i,v,w,k,ii: integer;
 t,first,last,list: pt;
 f:text ;
 ch:char ;
 s:string ;
 
begin
 ClrScr;
 assign(f,'C:\f3.txt') ;
 reset(f) ;
 s:='' ;
 while not eof(f) do
 begin
  read(f,ch) ;
  if (ord(ch)>=48) and (ord(ch)<=57) then
   s:=s+ch ;
  if (ord(ch)<=48) or (ord(ch)>=57)  then
   if s<>'' then 
    begin
     val(s,v,w) ;
     delete(s,1,length(s)) ;
     if i=0 then 
     begin
      new(t);
      t^.data:=v;
      t^.next:=nil;
      list:=t;
      last:=t;
      i:=1;
     end;
     if i<>0 then 
     begin
      new(t);
      t^.data:=v;
      t^.next:=nil ;
      last^.next:=t ;
      last:=t;
     end;
    end;
  end;
  if s<>'' then
  begin
   val(s,v,w) ;
   new(t);
   t^.data:=v;
   t^.next:=nil ;
   if list=nil then 
    list:=t;
   last^.next:= t ;
  end;
  t:= list ;
  repeat
   writeln(t^.data) ;
   t:=t^.next ;
  until t=nil ;
end.
написал программу по примеру процедуры, создающей список , к-ю нашел в своем учебнике. Вопрос состоит вот в чем : в начале программы мы создаем елемент и определяем обозначить ли его как начало списка ,

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   if s<>'' then begin
         val(s,v,w) ;
         delete(s,1,length(s)) ;
        if list=nil then begin
        new(t);
        t^.data:=v;
        t^.next:=nil;
        list:=t; {вот тут присваиваем листу знач. перем. Т.,т.е. теперь лист содержит в себе 2 поля 
данных т.е list^.data:=v list^.next:=nil теперь если посмотреть на фрагмент кода, следующим за 
этим ,то... } 
        last:=t;
        i:=1   ;
        end;
 
  repeat
  writeln(t^.data) ;
  t:=t^.next ;
  until t=nil ;
... то когда мы создали успешно список и хотим прочитать его ,указатель переносим
на начало списка
t:= list ;{присвоили перем. т. знач. указателя лист , т.е t^.data:=list^.data(что равно какому-то
числу) и t^.next:=nil (то как можно дальше осуществить просмотр элементов списка ,если
t^.next:=nil! получается что программа должна вывести только первый элемент списка а выводит
все , как надо .



вроде все, хеппи энд и все такое , но хотелось бы понять логику компилятора , а то крышу сносит порой он...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.07.2009, 15:43
Ответы с готовыми решениями:

Запись и чтение из файла в реализованный список
Нужно записать в файл. И после закрытия и открытия проги считать из файла в реализованный лист....

Динамические структуры: список. Запись/чтение файла
Здравствуйте. Нужно написать программу для работы со списком. Функции: создание списка, печать...

Линейный односвязный (однонаправленный) список, запись и чтение из файла
нужна помощь в организации чтения и записи списка из файла, #include &lt;iostream&gt; #include &lt;string&gt;...

Чтение целочисленного файла и запись его в список в обратном порядке
Как мне это реализовать? я уже все перепробовал

7
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
13.07.2009, 16:12 2
Хотелось бы Вас поправить ,Вы немного не правы были говоря про этот кусок кода:
Pascal
1
2
3
list:=t; {вот тут присваиваем листу знач. перем. Т., т.е. теперь лист содержит в себе 2 
поля данных т.е list^.data:=v list^.next:=nil теперь если посмотреть на фрагмент кода, следующим
за этим ,то... }
Давайте я поправлю Ваш код (я говорю про отступы), я надеюсь Вам всё сразу станет ясно.

Добавлено через 7 минут 39 секунд
Наведу Вас на мысль у Вас основное создание списка происходит после вот этих 2-х проверок:
Pascal
1
if i=0 then
и после вот этой:
Pascal
1
if i<>0 then
Впринципе код всё-равно корявенький, можно было написать проще и понятнее.
0
0 / 0 / 0
Регистрация: 27.04.2009
Сообщений: 17
13.07.2009, 20:58  [ТС] 3
я так и не понял как связываются между собой указатели если list^.data=(какое-то знач.)и list^.next=nil(!) и
вот в этом участке кода :
Pascal
1
2
3
4
5
  t:= list ;(т.е. t^.data=list^.data а T^.next=List^.next=nil !!)
  repeat     (представим компилятор первый раз выполняет цикл) 
   writeln(t^.data) ;(здесь он выводит значение list^.data ) 
   t:=t^.next ;( a здесь t^.next должен быть равен nil , ведь перед циклом мы присвоили t:=list (!) ) 
  until t=nil ; ( и соответственно цикл должен выполянться один раз , а получается что выводит все элементы, но как?))
то по идее на экран ведь должен вывестись 1 элемент , который первый ! а выводится все как надо ! хотелось бы понять!

из определения списка указатель типа записи содержит в себе указатель на значение переменной и указатель на следующий элемент списка .
0
149 / 139 / 57
Регистрация: 05.06.2009
Сообщений: 310
13.07.2009, 21:32 4
Для того чтобы вывести первый элемент, поставьте указатель на первый элемент списка и выведите этот элемент на экран с помощью процедуры write(t^.data); для этого никакие циклы не нужны.
0
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
13.07.2009, 21:35 5
EvgeniiSp, Нет, Вы немного не понимаете его вопроса, товарищ bearus не может понять как у него в его программе строятся связи между элементами, а мне не хочется направлять его на поиск по форуму.
0
149 / 139 / 57
Регистрация: 05.06.2009
Сообщений: 310
13.07.2009, 22:15 6
Я и сам никогда не задумывался над этим..
Указатель в Паскале - это переменная, которая содержит адрес объекта определенного базового типа.
Как я понимаю, так связи строятся с помощью этой конструкции.
Pascal
1
2
3
4
5
6
7
type
 pt = ^elem;     // указатель на запись
 elem =
  record
   data: integer;    // это базовый тип
   next: pt;          // это указатель на следущую запись
  end;
и вот этой:
создаем список
Pascal
1
2
3
4
5
6
New(ser);  // создаем первую запись
   ser^.next:=nil;     // так как второй записи нет, то указатель ни на что не
                           // указывает, поэтому мы присваеваем ему значени nil
                           // для обозначения конца списка
   ser^.numb:=random(40)-10; // заносим значения в первую запись
   start:=ser; // переменная указывающая на начало списка
заполняем список в цикле
Pascal
1
2
3
4
5
6
7
New(ser^.next); //выделяем память под следущую запись
//и наш прошлый указатель, которому мы дали значение nil
// теперь должен содержать адрес созданной записи
     ser:=ser^.next; //  переводим наш указатель на только что созданную запись
     ser^.next:=nil;  // указатель, только что созданной записи, на след. запись 
        //равен nil т.к. нет еще след. записи
     ser^.numb:=random(40)-10; // заносим значения в созданую запись
Добавлено через 8 минут 36 секунд
http://www.pascaler.ru/pascal/dynamics/spisok/1/ - здесь достаточно подробно описано создание списка и некоторые примеры работы с ними(списками).
0
0 / 0 / 0
Регистрация: 27.04.2009
Сообщений: 17
14.07.2009, 19:41  [ТС] 7
ладно, буду думать), просто бывает напишешь вроде все верно а компилятор такое выдает, что просто не могу понять где ошибка, приходится писать тоже самое только слегка изменив код, и тогда, бывает все работает нормально,вообщем спс за участие )
0
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
14.07.2009, 21:01 8
Нет, знаете, если бы Вы полностью выложили задание, мне было бы не сложно Вам помочь.
0
14.07.2009, 21:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2009, 21:01
Помогаю со студенческими работами здесь

Чтение чисел из файла и их запись в коллекцию
Здравствуйте! Помогите, пожалуйста!!! Нужно прочитать 3 числа из заранее подготовленного файла....

Чтение чисел из файла и запись в массив
Дан файл с 20 строками типа: &quot;C=219-02,OU=comps,C=su,C=su,C=ru,20111129105801.0Z&quot; необходимо...

Запись - чтение чисел с файл - из файла
Собственно задача. Пример Пример ввода: 3 4 0 -5

Чтение чисел из файла и запись в файл
Ранее программировал в Delphi и С++, там можно было читать числа. Недавно увлёкся питоном, а тут,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru