Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2009, 15:36   #1
sergeykl
 
Регистрация: 01.08.2009
Сообщений: 3
По умолчанию списки

{Ввести последовательность натуральных чисел.
Если в последовательности нет ни одного числа,
содержащего две одинаковых цифры, упорядочить
последовательность по невозрастанию (убыванию) последней цифры числа.
В противном случае удалить из последовательности числа,
начинающиеся четной цифрой и продублировать остальные числа.
Последовательность хранить в односвязном списке.
Перед завершением программы очистить динамическую память
с помощью процедуры Dispose.}
uses
SysUtils;

type
t_cifri=0..9;
P_List=^T_List;
T_List=record
Data,Data1 : integer;
Next : P_List;
end;
function eqilcifri(a:integer):boolean;
var p:array[1..1000] of t_cifri;
n,j,i,x:integer;
begin
x:=a;
n:=0;
while x>0 do begin
n:=n+1;
p[n]:=x mod 10;
x:=x div 10;
end;
for i:=1 to n-1 do begin
for j:=i+1 to n do begin
if p[i]=p[j] then begin
eqilcifri:=true;
exit;
end;
end;
end;
eqilcifri:=false;
end;

function poscifra(var a: integer):P_List;
begin
a:=a mod 10;
end;

var
top,p,p1,pp,p2,p3: P_List;
x,y,tmp1:integer;
tmp:boolean;
begin
reset(input,'input.txt');
rewrite(output,'output.txt');
{1) создаём список как очередь}
top:=nil;
while not SEEKEof do begin
read(x);
new(p);
p^.Data:=x;
if top=nil then top:=p
else p1^.Next:=p;
p1:=p;
end;
{2) проверяем есть ли в последовательности числа
с равными цифрами;
заодно создаём копию списка для procedure poscifra}

while not SEEKEof do begin
read(x);
new(p);
p^.Data:=x;
if top=nil then top:=p
else p1^.Next:=p;
p1:=p;
end;
writeln;
write('p^.Data: ');
p:=top;
while p<>nil do begin
write(p^.Data,' ');
p:=p^.Next;
end;


while not SEEKEof do begin
read(x);
new(p2);
p2^.Data:=x;
if top=nil then top:=p2
else p1^.Next:=p2;
p1:=p2;
end;
writeln;
write('p2^.Data: ');
p2:=top;
while p2<>nil do begin
write(p2^.Data,' ');
p2:=p^.Next;
end;



writeln;
write('p1^.Data: ');
p1:=top;
p:=top;
while p<>nil do begin
p1^.Data:=p^.Data;
write(p1^.Data,' ');
if eqilcifri(p^.Data) then tmp:=false;
p:=p^.Next;
end;

writeln;
write('p1^.Data: ');
p1:=top;
while p1<>nil do begin
write(p1^.Data,' ');
p1:=p1^.Next;
end;

writeln;
write('p^.Data: ');
p:=top;
while p<>nil do begin
write(p^.Data,' ');
p:=p^.Next;
end;



writeln;
write('p2^.Data: ');
p2:=top;
p1:=top;
while p1<>nil do begin
p2^.Data:=p1^.Data;
write(p1^.Data,' ');
p1:=p1^.Next;
end;



writeln;
write('p^.Data: ');
p:=top;
while p<>nil do begin
write(p^.Data,' ');
p:=p^.Next;
end;


p1:=top;
while p1^.Next<>nil do begin
p2:=p1^.Next;
while p2<>nil do begin
if p1^.Data>p2^.Data then begin
tmp1:=p1^.Data;
p1^.Data:=p2^.Data;
p2^.Data:=tmp1;
end;
p2:=p2^.Next;
end;
p1:=p1^.Next;
end;

writeln;
p1:=top;
while p1<>nil do begin
write(p1^.Data,' ');
p1:=p1^.Next;
end;


end.

1) Проблема: не знаю как сортировать последовательность по последней цифре числа в списках (без списка знаю). Когда начинаю в списке находить последнюю цифру числа, у меня изменяется весь список.

И как сделать похожую задачу с другим списком:
Ввести последовательность натуральных чисел. Если последовательность упорядочена по неубыванию первой или последней цифры, удалить из последовательности числа состоящие только из цифр 1,2,3,4,5, и продублировать числа, содержащие цифры 6 или 8. В противном случае упорядочить последовательность по невозрастанию. Последовательность хранить в двусвязном циклическом списке с фиктивным элементом. Перед завершением программы очистить динамическую память с помощью процедуры Dispose.
2) По второй задаче мне не совсем ясно как вводить двусвязный циклический список. И если есть у кого нибудь какая то литература по спискам, подскажите, пожалуйста, где её можно взять.
sergeykl вне форума Ответить с цитированием
Старый 03.08.2009, 20:26   #2
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

Мне так кажеться...ты не правильный метод взял.....
ты усложнил себе задачу...
1) Нужно...чаще пользываться процедурами...
2) Для изучения задачи...не нужно экономить место прибегая
к Динамической памяти...(это же просто учения).
3) тебе нужно просто понять КАК работает...тот или иной алгоритм....

Поверь не кто не оценит твою программку...эли она написанна в текстовом режиме...


попонктам разберись....и наступай на следущии темы...
ЭТО МОё МНЕНИЕ.......
Doholyan вне форума Ответить с цитированием
Старый 03.08.2009, 21:03   #3
TAVulator
Программист
Форумчанин
 
Аватар для TAVulator
 
Регистрация: 23.07.2009
Сообщений: 101
По умолчанию

Цитата:
2) Для изучения задачи...не нужно экономить место прибегая
к Динамической памяти...(это же просто учения).
вообще-то это в условии задачи написано:
Цитата:
Последовательность хранить в односвязном списке.
Цитата:
Поверь не кто не оценит твою программку...эли она написанна в текстовом режиме...
ой... а вот с этим категорически не соглашусь...
причем тут текстовой или не текстовой режим?
Если вы верите, что можете или не можете
сделать что-то, вы правы в обоих случаях.

______________________________(С) Г.Форд
TAVulator вне форума Ответить с цитированием
Старый 03.08.2009, 21:21   #4
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

не буду спорить...одно знаю...я все учу по отдельности....не путаю "кашу в голове"...мне так кажеться проще...и, кодга уже ученик будет видить(утрирую) всю картину....ядра програмирования...он, сам все расставит на свои места....

на счет текстового режима....не соглашусь...можно в текстовом режиме созать к примеру....программу..... "Траекторию полета неуправляемого снаряда" ...да хоть она самая самая точнейшая будет...она не будет востребовательная....

опять же...это мое мнение...
Doholyan вне форума Ответить с цитированием
Старый 03.08.2009, 22:22   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Doholyan,
1) а когда Вам задачу по физике или математике дают, Вы тоже отказываетесь её решать, потому что она "не будет востребовательная" ?..
Это же 100% учебная задача.

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

сорри за флуд...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.08.2009, 22:28   #6
sergeykl
 
Регистрация: 01.08.2009
Сообщений: 3
По умолчанию

У меня не получается в этой задаче упорядочить последовательность по последней цифре числа. Как это сделать?
Задача для первого курса прикладной математики.
sergeykl вне форума Ответить с цитированием
Старый 03.08.2009, 22:40   #7
TAVulator
Программист
Форумчанин
 
Аватар для TAVulator
 
Регистрация: 23.07.2009
Сообщений: 101
По умолчанию

Код:
упорядочить последовательность по последней цифре числа
как это понять? можешь показать на примере? (меня смущает часть про "по последней цифре числа).
Если вы верите, что можете или не можете
сделать что-то, вы правы в обоих случаях.

______________________________(С) Г.Форд
TAVulator вне форума Ответить с цитированием
Старый 03.08.2009, 23:30   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

sergeykl, а просто сортировать получается?
Там, где идёт сравнение чисел заменить на сравнение последнего разряда числа
т.е. вместо if Число(i)>Число(j) then
написать
if (Число(i) mod 10) > (Число(j) mod 10) then ...
всё остальное без изменений...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.08.2009, 23:05   #9
Ulagay700
Пользователь
 
Регистрация: 07.11.2007
Сообщений: 91
По умолчанию

Насчет "текстового режима" - алгоритм отличаться не будет, отличия - только в интерфейсе.
Ulagay700 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Списки C++ Katya Melody Помощь студентам 0 07.05.2009 23:32
Списки? Chainic Microsoft Office Excel 13 06.05.2009 22:53
Списки С++ Vikylik Помощь студентам 0 08.04.2009 16:31
Списки Вилен Общие вопросы C/C++ 3 22.05.2008 00:40