|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.08.2009, 15:36 | #1 |
Регистрация: 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) По второй задаче мне не совсем ясно как вводить двусвязный циклический список. И если есть у кого нибудь какая то литература по спискам, подскажите, пожалуйста, где её можно взять. |
03.08.2009, 20:26 | #2 |
Форумчанин
Регистрация: 26.04.2009
Сообщений: 270
|
Мне так кажеться...ты не правильный метод взял.....
ты усложнил себе задачу... 1) Нужно...чаще пользываться процедурами... 2) Для изучения задачи...не нужно экономить место прибегая к Динамической памяти...(это же просто учения). 3) тебе нужно просто понять КАК работает...тот или иной алгоритм.... Поверь не кто не оценит твою программку...эли она написанна в текстовом режиме... попонктам разберись....и наступай на следущии темы... ЭТО МОё МНЕНИЕ....... |
03.08.2009, 21:03 | #3 | |||
Программист
Форумчанин
Регистрация: 23.07.2009
Сообщений: 101
|
Цитата:
Цитата:
Цитата:
причем тут текстовой или не текстовой режим?
Если вы верите, что можете или не можете
сделать что-то, вы правы в обоих случаях. ______________________________(С) Г.Форд |
|||
03.08.2009, 21:21 | #4 |
Форумчанин
Регистрация: 26.04.2009
Сообщений: 270
|
не буду спорить...одно знаю...я все учу по отдельности....не путаю "кашу в голове"...мне так кажеться проще...и, кодга уже ученик будет видить(утрирую) всю картину....ядра програмирования...он, сам все расставит на свои места....
на счет текстового режима....не соглашусь...можно в текстовом режиме созать к примеру....программу..... "Траекторию полета неуправляемого снаряда" ...да хоть она самая самая точнейшая будет...она не будет востребовательная.... опять же...это мое мнение... |
03.08.2009, 22:22 | #5 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Doholyan,
1) а когда Вам задачу по физике или математике дают, Вы тоже отказываетесь её решать, потому что она "не будет востребовательная" ?.. Это же 100% учебная задача. 2) красивый графический интерфейс - это очень нужно и хорошо. Но на подобных задачах изучается как работать с указателями, что такое динамическая память, как создать и работать со списком... А эти знания и умения, поверьте мне, в реальной жизни очень даже востребованы. сорри за флуд... |
03.08.2009, 22:28 | #6 |
Регистрация: 01.08.2009
Сообщений: 3
|
У меня не получается в этой задаче упорядочить последовательность по последней цифре числа. Как это сделать?
Задача для первого курса прикладной математики. |
03.08.2009, 22:40 | #7 |
Программист
Форумчанин
Регистрация: 23.07.2009
Сообщений: 101
|
Код:
Если вы верите, что можете или не можете
сделать что-то, вы правы в обоих случаях. ______________________________(С) Г.Форд |
03.08.2009, 23:30 | #8 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
sergeykl, а просто сортировать получается?
Там, где идёт сравнение чисел заменить на сравнение последнего разряда числа т.е. вместо if Число(i)>Число(j) then написать if (Число(i) mod 10) > (Число(j) mod 10) then ... всё остальное без изменений... |
04.08.2009, 23:05 | #9 |
Пользователь
Регистрация: 07.11.2007
Сообщений: 91
|
Насчет "текстового режима" - алгоритм отличаться не будет, отличия - только в интерфейсе.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Списки 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 |