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

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

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

> Списки, не могу разобраться
Людмила
сообщение 12.03.2005 17:31
Сообщение #1


Новичок
*

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

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


:molitva: Ребята объясните мне необходимо решить задачу (я только учусь, если вопросы глупые извините):
Из динамического списка, содержащего последовательность символов, удалить все одинаковые символы, кроме одного.

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

Код

Uses Crt;

Var I,J : Integer;
   Si,So : String;

Begin
    TextColor(White);
    WriteLn('‚введите строку символов -');
    TextColor(LightGray);
    ReadLn(Si);
    For I := Length(Si) DownTo 1 Do
    For J := I-1 DownTo 1 Do Begin
        If Si[I] = Si[J] Then Si[J] := CHR(27);
    End;
    So := '';
    For I := 1 To Length(Si) Do
        If Si[I] <> CHR(27) Then So := So + Si[I];
    TextColor(White);
    WriteLn('Заданная строка после обработки:');
    TextColor(LightGray);
    WriteLn(Si);
    TextColor(White);
    WriteLn('полученная строка содержащия только последние вхождения символов:');
    TextColor(LightGray);
    WriteLn(So);
End.


:p2: прошу не закрывайте эту тему, сильно нужен ответ, сама не могу разобраться.


--------------------
хороших людей мало... полезных ещё меньше....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Людмила
сообщение 15.03.2005 18:11
Сообщение #2


Новичок
*

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

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


Помогите хотя бы советом... :p2:


--------------------
хороших людей мало... полезных ещё меньше....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.03.2005 18:48
Сообщение #3


Гость






Вот, смотрите... Я набросал программку, но предупреждаю сразу: она на всегда корректно работает... Посмотрите, как реализуется работа со списком...
Исходный код
Type
ref=^node;
node=record
next:ref;
lit:char;
end;

tlist = record
first, last: ref;
end;

{ Процедура добавления символа к списку }
procedure append(var list: tlist; ch: char);
var pt: ref;
begin
new(pt);
pt^.lit := ch;
pt^.next := nil;

if list.first = nil then
list.first := pt
else list.last^.next := pt;

list.last := pt;
end;

{ процедура удаления символа из списка }
function remove(from: ref; ch: char): integer;
var
T, prv, pt: ref;
count: integer;
begin
pt := from;
count := 0;

while (pt <> nil) and (pt^.lit = ch) do
begin
T := pt^.next;
dispose(pt);
inc(count);
pt := T;
end;

prv := pt; pt := pt^.next;
while pt <> nil do
begin
if pt^.lit = ch then
begin
prv^.next := pt^.next;
dispose(pt);
inc(count);
pt := prv^.next
end
else
begin
prv := pt;
pt := pt^.next;
end;
end;
remove := count
end;

{ процедура печати содержимого списка }
procedure print(list: tlist);
var p: ref;
begin
p := list.first;
while p <> nil do
begin
write(p^.lit);
p := p^.next
end
end;

var
a:char;

list: tlist;
p: ref;
begin
with list do
begin
first := nil;
last := nil;
end;

repeat
readln(a);
if a <> '.' then
append(list, a);
until a = '.';

p := list.first;
while p <> nil do
begin
if p^.next <> nil then
begin
remove(p^.next, p^.lit);
end;
p := p^.next;
end;

print(list);
end.


Цитата(Людмила @ 15.03.05 17:11)
Помогите хотя бы советом...  :p2:

А вот и совет: "Не пытайтесь объять необъятное" (С) К. Прутков
В смысле, не нужно пытаться ВСЕ действия производить в основной программе. Так очень легко запутаться. Разбейте программу на процедуры, и будет гораздо легче...
 К началу страницы 
+ Ответить 
Людмила
сообщение 15.03.2005 19:05
Сообщение #4


Новичок
*

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

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


Цитата(volvo @ 15.03.05 21:48)
Вот, смотрите... Я набросал программку, но предупреждаю сразу: она на всегда корректно работает... Посмотрите, как реализуется работа со списком...

Огромное спасибо!!!! :flowers:
Я посмотрела, только в паскале не могу результат получить, безконечно ввожу символы, а строка не заканчивается... хоть сколько точек ставь. Может я что не так делаю? huh.gif


--------------------
хороших людей мало... полезных ещё меньше....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Людмила   Списки   12.03.2005 17:31
volvo   Вот это прочтите: FAQ: Динамические структуры дан...   12.03.2005 17:39
Людмила   Это уже тоже читала... :( ну ни как не пойму к...   12.03.2005 18:19
volvo   Приведите, пожалуйста, Вашу программу. Возможно ош...   12.03.2005 18:35
Людмила   это ввод, формирование и вывод списка... ещё воп...   12.03.2005 19:01
Людмила   Помогите хотя бы советом... :p2:   15.03.2005 18:11
volvo   Вот, смотрите... Я набросал программку, но предупр...   15.03.2005 18:48
Людмила   Огромное спасибо!!!! :flowers: ...   15.03.2005 19:05
volvo   Там стоит ReadLn, т.е. после каждого символа надо ...   15.03.2005 19:10
Людмила   :p1: точно :) только теперь выдало ошибку после ...   15.03.2005 19:14
volvo   Людмила Я проверял вот на такой последовательности...   15.03.2005 19:41
Людмила   да с цифрами работает, а если вводить различные с...   15.03.2005 19:45
Людмила   там почемуто если после первого символа нет ente...   15.03.2005 20:11
volvo   Вот полностью рабочая программа (без тех ограничен...   15.03.2005 20:11
Людмила   Супер, я до этого так же сама тыталась моя ошибк...   15.03.2005 20:53


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

 



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