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

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

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

> Динамические структуры данных (список), Помогите решить задачу
Kaygour
сообщение 15.12.2005 12:16
Сообщение #1





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

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


Помогите решить задачу по теме «Динамические структуры данных» в паскале.

Задача звучит так:
Составить программу которая переносит в конец непустого списка L его первый элемент.

Я сделал чтобы первый элемент становился последним, а вот как проверить список на наличие того, пустой он или нет, не знаю.
Код

uses crt;
type
ap=^sp;
sp=record
  f,o:string[20];
   i:string[15];
    ss:ap;
end;
var
fio1,fio2,fio3,fio4:ap;
a,f,b:string;
begin
clrscr;
new(fio1);
write('Введите фамилию: ');
  readln(fio1^.f);
   write('Введите имя: ');
    readln(fio2^.i);
     write('Введите отчество: ');
      readln(fio3^.o);
a:=fio3^.o;
begin
fio3^.o:=fio1^.f;
  fio1^.f:=fio2^.i;
   fio2^.i:=a;
writeln('Поле1: ',fio1^.f);
  writeln('Поле2: ',fio2^.i);
   writeln('Поле3: ',fio3^.o);
  readkey;
end.


Прикрепленные файлы
Прикрепленный файл  1.rar ( 364 байт ) Кол-во скачиваний: 113
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 7)
volvo
сообщение 15.12.2005 12:23
Сообщение #2


Гость






Kaygour, эта программа не будет работать:
new(fio1); { Допустим, для Fio1 ты выделил память }
write('Введите фамилию: '); readln(fio1^.f); { <-- Все в порядке }

write('Введите имя: '); readln(fio2^.i); { <-- А вот тут - нет... Куда указывает fio2^ ... }
write('Введите отчество: '); readln(fio3^.o); { <-- ... и fio3 тоже ? }


В поиске смотрел? На списки решено достаточно много заданий, посмотри как организуется работа со списком...
 К началу страницы 
+ Ответить 
Kaygour
сообщение 15.12.2005 20:37
Сообщение #3





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

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


Цитата("volvo")
В поиске смотрел?

Cмотрел. И здесь тоже смотрел.
Мне плохо понятно как списки связываются, эта тема новая для меня. Ну вот на примере этой задачи я хочу объяснить как я понял эту тему и заодно выяснятся мои ошибки. Иначе мне с мертвой точки не сдвинутся. Начну с описания, если где ошибусь поправьте меня.
Да и еще я задачу решил переделать заново.
Код

type
ap=^sp;
sp=record
  dan:string[20];
    ss:ap; {<- я так понял, это поле является указателем на другой список?}
   end;
var
fio1,fio2,fio3:ap;
begin
new(fio1);

Я думаю этот кусок выше правильный.
А дальше для меня самое сложное место для понимания, не понимаю я как эти списки связать. Их наверное надо связывать по полю ss:ap?
Чето типа такого:
Код

fio1^ss:=fio2;
fio2^.ss:=fio3;
fio3^.ss:=nil;

Ну я думаю пока я не пойму этот кусок, продолжать дальше бессмысленно.
Я над этой задачей уже неделю бьюсь и никаких положительных результатов. mega_chok.gif

Сообщение отредактировано: Kaygour - 15.12.2005 20:38
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.12.2005 20:49
Сообщение #4


Гость






Стоп...
Объясни мне одну вещь: у тебя fio1, fio2, fio3 это 3 разных списка, или это те данные, которые ты хочешь чтобы они содержались в одном списке?

Если список один, то для его поддержки достаточно одного указателя (на первый элемент)...
 К началу страницы 
+ Ответить 
Kaygour
сообщение 16.12.2005 4:16
Сообщение #5





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

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


Вообщето мне нужен один список и несколько элементов, чтобы было что переставлять.
А fio1, fio2, fio3, это данные которые вносятся
fio1-Фамилия;
fio2-Имя;
fio3-Отчество;
Я понял что нужно так делать, хотя могу и ошибаться.

Сообщение отредактировано: Kaygour - 16.12.2005 4:19
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 16.12.2005 13:35
Сообщение #6


Гость






Нет, так как раз делать не нужно... Вот простая программка, иллюстрирующая создание списка и добавление элементов в конец списка:
type
{ Это - просто для удобства, легко изменить тип при надобности на любой другой }
ttype = string;

plist = ^tlist;
tlist = object
info: ttype;
next: plist;
end;

var
p, { Это - "рабочий" указатель на элемент списка }

{ И указатели на его начало и конец }
first, last: plist;
s: string;

begin
{ В начале обнуляем начало и конец списка }
first := nil; last := nil;

{ и нацинаем цикл добавления элементов: }
repeat

{ Читаем, что надо добавить (для выхода из цикла - ввод пустой строки) }
write('s = '); readln(s);
if s <> '' then begin
{ и если не введена пустая строка, то: }

{ берем память под очередной элемент списка... }
new(p);
{ в поле данных пишем сами данные }
p^.info := s;
{ этот 'лемент добавляется в конец, так что следующего ПОКА нет, заносим Nil }
p^.next := nil;

{ если это вообще первый элемент, то на него должен указывать First }
if first = nil then first := p
{
если в список уже что-то было внесено, то исправляем
поле next _бывшего_ последним элемента так,
чтобы оно указывало на добавляемый
}
else last^.next := p;

{
и переменная Last всегда должна содержать адрес
последнего внесенного в список элемента
}
last := p
end;

until s = ''; { если была введена пустая строка - выходим из цикла }

{
Вот тут список из любого количества элементов уже создан...
Можешь, например, его распечатать:
}
p := first;
while p <> nil do begin
writeln(p^.info);
p := p^.next;
end;
end.
 К началу страницы 
+ Ответить 
Kaygour
сообщение 17.12.2005 18:01
Сообщение #7





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

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


volvo спасибо тебе огромное!!! Очень хорошо расписал пояснялки к программе .
Прошу прощения за свою тупость, но у меня возникли некоторые вопросы.
Что такое object? Во всех книжках которые смотрел, писалось запись record.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.12.2005 20:45
Сообщение #8


Гость






Насчет Object - тебе сначала вот тут бы прочесть:
ООП. Объектно-ориентированное программирование -> Объекты
 К началу страницы 
+ Ответить 

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

 



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