Убедительная просьба ко всем, кто выкладывает исходники: 1. Обязательно пользуйтесь тэгом code (иначе очень трудно читать)
2. Старайтесь делать отступы
Если вы хотите чтобы вам помогли в написании программы, внятно излагайте задание!
Прежде чем задать вопрос, воспользуйтесь учебником
Возможно, что нужная вам программа уже написана, поэтому советую просмотреть список здесь и здесь Отредактировано куратором: Lord_of_Darkness. Дата: 07.07.2006 19:36
Куратор темы Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
MiHan@
Цитата:
Исходный список : элемент1>элемент2>элемент3>элемент1>.... обработанный: элемент3>элемент2>элемент1>элемент3>....
Хм, странные у вас задания. Ведь сказано, что список цикличный, двухсвязный, т.е. можно и в лево и в право по нему идти, так смысл его переворачивать???
ЗЫ лана, попозже сделаю.
_________________ Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)
Куратор темы Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
MiHan@ Дождался
Код:
uses crt; type TPtr = ^TElem; TElem = record Inf : Real; {Inf может быть любого типа} LinkLeft : TPtr; LinkRight : TPtr; end; const k=10; var BegL, EndL, BegL2, EndL2, P, P2, Pk : TPtr; Value : Real; i : byte; procedure OutputList(k:byte); begin P:=BegL; i:=0; while (i<k) and (P<>nil) do begin writeln('Value= ',P^.Inf:6:2); P:=P^.LinkLeft; i:=i+1; end; end; procedure OutputList2(k:byte); begin P:=BegL2; i:=0; while (i<k) and (P<>nil) do begin writeln('Value= ',P^.Inf:6:2); P:=P^.LinkLeft; i:=i+1; end; end; begin clrscr; { Создание первого списка } BegL := nil; EndL := nil; Pk:=nil; for i:=1 to k do begin New(P); P^.Inf:=i; P^.LinkLeft:=nil; if EndL = nil then begin BegL := P; end else begin EndL^.LinkLeft := P; P^.LinkRight:=Pk; end; EndL:=P; Pk:=P; end; P^.LinkLeft:=BegL^.LinkLeft; P:=BegL; P^.LinkRight:=EndL; { Создание второго списка и заполнение его элементами первого в обратном порядке. } BegL2 := nil; EndL2 := nil; Pk:=nil; P2:=EndL; for i:=1 to k do begin New(P); P^.Inf:=P2^.Inf; P^.LinkLeft:=nil; if EndL2 = nil then begin BegL2 := P; end else begin EndL2^.LinkLeft := P; P^.LinkRight:=Pk; end; EndL2:=P; Pk:=P; P2:=P2^.LinkRight; end; P^.LinkLeft:=BegL2^.LinkLeft; P:=BegL2; P^.LinkRight:=EndL2;
{ Удаление первого списка } P:=BegL; for i:=1 to k do begin P:=P^.LinkLeft; Dispose(BegL); BegL:=P; end; { Удаление второго списка } P2:=BegL2; for i:=1 to k do begin P2:=P2^.LinkLeft; Dispose(BegL2); BegL2:=P2; end;
readln; end.
ЗЫ Убери в первой Dispose(EndL2); и Dispose(EndL); вообще. Они там не нужны.
ЗЫ ЗЫ подправлю щас текст первой лабы.
_________________ Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)
Последний раз редактировалось Lord_of_Darkness 13.10.2005 0:25, всего редактировалось 1 раз.
Куратор темы Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
MiHan@ BegL - указатель на начало списка (первого, а BegL2 - соответственно второго)
EndL - указатель на конец списка
P - временный указатель, используется для выделения памяти под новый элемент списка, а т.ж. как вспомогательный при "переворачивании" списка.
Pk - вспомогательный указатель, используется при "переворачивании" списка.
i - ну тут совсем просто, это счетчик.
(k - кол-во элементов списка)
Все ясно?
_________________ Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)
Куратор темы Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
MiHan@
Цитата:
i:=i+1
и
Цитата:
inc (i)
одно и тоже. Уж поверь моему опыту Вообще то присваивание идет с права на лево, т.е. сначала к i прибавиться единица, а уже после полученное значение буде занесено в переменную i.
ЗЫ забыл про P2 написать, его назначение такое же как и Pk.
_________________ Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)
Куратор темы Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
m2 А x в каких пределах изменяется и по какому условию вычисление завершается? До бесконечности то полюбому не посчитаешь. Если есть мат. формула - то лучше приведи ее, иначе трудно понять, что именно нужно.
_________________ Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)
Куратор темы Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
m2 Примерно так выглядеть будет.
Код:
uses crt; function stepen(num: real; step: integer):extended; var tmp: extended; i: integer; begin if step = 0 then stepen:=1 else begin tmp:=1; for i:=1 to step do tmp:=tmp*num; stepen:=tmp; end; end;
function factorial(num: integer): extended; var tmp : extended; i: integer; begin if num = 0 then factorial:=1 else begin tmp:=1; for i:=1 to num do tmp:=tmp*i; factorial:=tmp; end; end;
var sum, E, x: extended; k: integer; begin clrscr; E:=1E-5; sum:=0; k:=0; repeat x:=(stepen(-1,k)*stepen(4,4*k+3))/(factorial(2*k+1)*(4*k+3)); sum:=sum+x; inc(k); until abs(x) <= E; writeln('x = ',x); writeln('sum = ',sum); readln; end.
Можно без доп. функций сделать для экономии памяти, т.е. вычислять степень и факториал по шагам и на каждом шаге выполнять деление. Правда делать в таком духе уже вломак. (Если интересно - можешь посмотреть в помощи по домашним и курсовым, я там именно так прогу делал для Gektor-2k )
_________________ Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)
Member
Статус: Не в сети Регистрация: 21.10.2003 Откуда: Брест Фото: 47
.THEPRODUCT вот
Chr (function) ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ Returns a character with a specified ordinal number.
Declaration: function Chr(X: Byte): Char;
Target: Windows, Real, Protected
Remarks: Chr returns the character with the ordinal value (ASCII value) of the byte-type expression, X. Раз это возаращает символ из таблицы по номеру, то должно быть ORD будет делать наоборот:
Ord (function) ▀▀▀▀▀▀▀▀▀▀▀▀▀▀ Returns the ordinal value of an ordinal-type expression.
Declaration: function Ord(X): Longint;
Target: Windows, Real, Protected
Remarks: X is an ordinal-type expression. The result is of type Longint and its value is the ordinality of X.
см в хелпе пример по ord..
_________________ А ещё недавно ждали AMD Steamroller на AM3+
Последний раз редактировалось AlexZerg 13.11.2005 22:26, всего редактировалось 2 раз(а).
Куратор темы Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
m2 Мдя, у нас поразному сделано, но в принципе похоже. Просто я задание немножко подругому понял + доп. функции отдельно написал, а ты прямо в проге считаешь.
_________________ Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения