Форум программистов, компьютерный форум, киберфорум
Наши страницы

Pascal (Паскаль)

Войти
Регистрация
Восстановить пароль
 
Hardip
1 / 1 / 0
Регистрация: 24.08.2010
Сообщений: 44
#1

Копирование из списка в массив - Pascal

24.08.2010, 21:01. Просмотров 872. Ответов 3
Метки нет (Все метки)

Есть двусвязный список с вносимыми в него данными простым вводом чисел

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
type
  plist = ^tlist;
  tlist = record
          data : double;
          next, prev : plist;
  end;
  p2list = ^plist;
 
 
procedure Add (list : p2list; d : double);
var
  l : plist;
begin
   if list^ = nil then
   begin
      AddToEnd (list, d);
      exit
   end;
 
   New (l);
   l^.data := d;
   l^.prev := list^;
   l^.next := list^^.next;
   (list^)^.next := l
end;
Нужно перенести дынные из списка который тоже выводится на экран по процедуре

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure Display (list : plist);
var
  p : plist;
begin
  if list = nil then
     writeLn ('Spisok pust')
  else
  begin
    p := list;
 
    while p^.prev <> nil do
       p := p^.prev;
 
    while p <> nil do
    begin
       if p = list then
         write ('*');
       write (p^.data, #32);
       p := p^.next;
    end;
  end;
end;
в массив.. Делаю вот так
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
procedure PerenosIsSpiskavMassiv (list : plist);
var
  p : plist;
  var A: array [0..10] of double;
  i:integer;
begin
 
  if list = nil then
     writeLn ('Spisok pust')
  else
    begin
     p := list;
    { "перематываем" список, что бы list стал последним элементом }
     for i:=0 to 10 do
 
      while p^.next <> nil do
      begin
         p := p^.next;
         a[i]:=p^.data;
         writeln(a[i]);
         end;
    end;
 
  end;
но ничего путёвого не получается... Прошу помочь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2010, 21:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Копирование из списка в массив (Pascal):

Создание списка, печать списка на экран, добавления элемента в начало списка, конец списка - Pascal
Построить динамическую структуру типа список . Необходимо реализовать следующие процедуры: 1. создание списка. 2. печать списка на...

Копирование элементов 1 и 2-го массивов, которых нет в 3-м в 4-й массив - PascalABC.NET
Массивы A,B,C задаются рандомно, причём количество элементов массива выбирает пользователь, при этом нужно скопировать элементы массивов A...

Ассемблерная вставка: копирование содержимого массива типа char в n-раз больший массив - Turbo Pascal
Собственно задание: Написать программу, осуществляющую копирование содержимого массива типа char в n-раз больший массив, при этом каждый...

Добавление и удаление элементов списка, очистка списка, просмотр списка - Pascal ABC
Добрый вечер! помогите пожалуйста с решением не простой задачи. Предусмотреть меню, позволяющее выполнять основные операции со...

Ввод данного списка из файла в массив записей - Pascal ABC
Помогите мне пожалуйста. Вот моё задание: 1. Занести список , содержащий не менее 10 записей, из Работки 11 в текстовый файл TEXT.TXT...

Копирование списка в массив без лишних телодвижений - Visual Basic .NET
Помогите плиз! Мне надо чтобы каждый массив по порядку заносился элемент Listbox'a. я написал вот такой код Public mas() Private...

3
Puporev
Модератор
52823 / 40634 / 13883
Регистрация: 18.05.2008
Сообщений: 94,253
24.08.2010, 21:24 #2
Непонятно для чего массив, если его просто вывести. Если нужно создать массив для каких-то действий с ним, то примерно в этом направлении
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
type mass=array[1..100] of double;
procedure PerenosIsSpiskavMassiv (list : plist;var a:mass;var n:byte);
//передаем в программу созданный массив и его размер, мы же заранее можем и не знать сколько 
//элементов в списке
var
  p : plist;
  i:integer;
begin
   if list = nil then
     writeLn ('Spisok pust')
  else
    begin
     p := list;
    { "перематываем" список, что бы list стал последним элементом }
    n:=0;
    while p^.next <> nil do
      begin
         n:=n+1;
         p := p^.next;
         a[n]:=p^.data;
         writeln(a[n]:0:2,' ');
         end;
   end;
1
Hardip
1 / 1 / 0
Регистрация: 24.08.2010
Сообщений: 44
24.08.2010, 22:30  [ТС] #3
Да, спасибо! Понятно почему так! Массив будет использоваться дальше. Ещё есть оператор case of в конце, который в меню позволяет выбрать нужную процедуру например

Pascal
1
2
3
4
5
 1: begin
            write ('Vvedite chislo: ');
            readLn (i);
            Add (@list, i);
          end;
который добавляет элемент. А вот при выборе моей функции

Pascal
1
11:PerenosIsSpiskavMassiv (@list, i);
пишет что - Types of actual and formal var parameters must be identical. Что там может не хватать?

Если var-ы перенести во внутрь, то работает, но список всё равно не выводит.

Добавлено через 45 минут
На самом деле, ошибка кроется где-то в цикле
Pascal
1
while p^.next <> nil do
потому что добавив простую строку
Pascal
1
2
3
4
    while p^.next <> nil do
      begin
      writeln('PRIVET');
         n:=n+1;...
он не выводит слова привет, хотя если добавить до цикла то всё ок.
0
Puporev
Модератор
52823 / 40634 / 13883
Регистрация: 18.05.2008
Сообщений: 94,253
25.08.2010, 06:10 #4
У меня в процедуре объявлено 3 параметра, три и должно быть фактически, при чем типы должны совпадать

Pascal
1
11:PerenosIsSpiskavMassiv (list, a,n);
0
25.08.2010, 06:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2010, 06:10
Привет! Вот еще темы с ответами:

Копирование списка - C++
Кто может помочь? У меня есть функция которая на основе изначального списка создает список (задом наперед). В итоге мне нужно иметь 2...

Рекурсивное копирование списка - F#
Я новенький в F#. Стал вопрос рекурсивного копирования списка в другой список. Помогите, пожалуйста, написать программу. Спасибо

Копирование односвязного списка - C++
в классе содержится односвязный список. соответственно пишу для него оператор присваивания. подскажите, как можно скопировать односвязный...

Копирование текста из списка файлов - CMD/BAT
Всем привет! 1. есть где-то 2000 файлов без расширений вида, строки Name2 и Name3 во всех файлах находятся на одном и том же...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.