Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Micren
Статус: Практикант
Рейтинг: 247
∙ повысить рейтинг >>
Пупорев Юрий Борисович
Статус: Специалист
Рейтинг: 217
∙ повысить рейтинг >>
Тимошенко Дмитрий
Статус: Студент
Рейтинг: 158
∙ повысить рейтинг >>

∙ / КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 898 от 03.06.2009, 04:35
Администратор рассылки: Калашников О.А., Руководитель
В рассылке: подписчиков - 337, экспертов - 146
В номере: вопросов - 2, ответов - 2

Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке:
оценить выпуск >>

Вопрос № 168450: Дан линейный связный список содержащий вещественные числа: 1 задание.Найти элемент с заданным значением и вывести его номер. 2 задание.Найти самое минимальное значение четных элементов списка...


Вопрос № 168452: Даны матрицы х(6,10),y(10,8) действительных чисел.Найти сумму и количество элементов,удовлетворяющих условию 0<=х[i,j]=<1, 0<=y[i,j]=<1. Для вычислений использовать процедуру.????...

Вопрос № 168450:

Дан линейный связный список содержащий вещественные числа:
1 задание.Найти элемент с заданным значением и вывести его номер.
2 задание.Найти самое минимальное значение четных элементов списка

Отправлен: 28.05.2009, 17:13
Вопрос задал: dmi_5116, Посетитель
Всего ответов: 1
Страница вопроса >>


Отвечает Micren, Практикант :
Здравствуйте, dmi_5116.
Программа:
Код:

program Pascal_168450;

type
{ Узел списка }
PNode=^TNode;
TNode=object
private
prev,next:PNode;
data:Integer;
end;

{ База для установки текущей позиции списка }
TSeekPosition=(head,tail,current);

{ Список }
TList=object
public
constructor Init;
destructor Done;virtual;
procedure Remove;
procedure Add(value: Integer);
function Get(var item: Integer):Boolean;
function Seek(base: TSeekPosition; offset: Integer):Boolean;
function Size: Integer;
private
myhead:TNode;
count:Integer;
currentptr:PNode;
end;

{ Конструктор списка }
constructor TList.Init;
begin
myhead.next:=@myhead ;
myhead.prev:=@myhead;
currentptr:=@myhead;
count:=0;
end;

{ Удаляет элемент в текущей позиции }
procedure TList.Remove;
var
node:PNode;
begin
if currentptr<>@myhead then begin
node:=currentptr;
currentptr^.prev^.next:=currentptr^.next;
currentptr^.next^.prev:=currentptr^.prev;
currentptr:=currentptr^.next;
Dispose(node);
Dec(count);
end;
end;

{ Устанавливает указатель в требуемую позицию относительно базы }
function TList.Seek(base: TSeekPosition; offset: Integer):Boolean;
var
step:Integer;
begin
Seek:=false;
if count<>0 then begin
offset:=offset mod count;
case base of
head: currentptr:=myhead.next;
tail: currentptr:=myhead.prev;
current:;
end;
if offset<0 then step:=-1 else step:=1;
while offset<>0 do begin
case step of
-1:currentptr:=currentptr^.prev;
+1:currentptr:=currentptr^.next; end;
if currentptr<>@myhead then offset:=offset-step
else Exit;
end;
Seek:=true;
end;
end;

{ Добавляет элемент в конец списка }
procedure TList.Add(value: Integer);
var
node:PNode;
begin
New(node);
node^.data:=value;
node^.next:=@myhead;
node^.prev:=myhead.prev;
myhead.prev^.next:=node;
myhead.prev:=node;
Inc(count);
end;

{ Возвращает размер списка }
function TList.Size: Integer;
begin
Size:=count;
end;

{ Деструктор }
destructor TList.Done;
begin
while count>0 do begin
currentptr:=myhead.next;
Remove;
end;
end;

{ Возвращает значение в текущей позиции списка }
function TList.Get(var item: Integer):Boolean;
begin
if currentptr<>@myhead then begin
item:=currentptr^.data;
Get:=true;
end else Get:=false;
end;

const
NumCount=20; { Количество элементов которое будем загонять в список }< br>
var
list:TList;
i,val,num,no,cnt,min:Integer;
flag:Boolean;
begin
{ Вызовем конструктор списка }
list.Init;
{ Заполним список случайными значениями и распечатаем его }
Randomize;
WriteLn('List contain:');
for i := 1 to NumCount do begin
val:=Random(50)-25;
list.Add(val);
Write(val,',');
end;
WriteLn(#08,' ');
{ Установим указатель на начало списка }
if list.Seek(head,0) then begin
{ Вводим искомый элемент }
Write('num=');ReadLn(num);
no:=0; { Номер элемента }
min:=(1 shl (SizeOf(Integer)*8-1))-1; { Минимальный четный }
cnt:=0; { Просто счетчик }
flag:=false; { true если есть четные }
{ Идем по списку }
{ Извлекаем элемент пока есть что извлекать }
while list.Get(val) do begin
{ Увеличим счетчик }
Inc(cnt);
{ Если нашли запомним номер }
if (no=0) and (val=num) then no:=cnt;
{ Если четное и меньше найденного }
if (not Odd(val)) and (val<min) then begin
min:=val;
flag:=true;
end;
{ Указатель на следующий элемент }
list.Seek(current,1);
end;
{ Если нашли печатаем номер }
if no<>0 then WriteLn('Index of ',num,' is ',no)
else WriteLn(num,' not found');
{ Если есть четные печатаем минимальный элемент }
if flag then WriteLn('Even the minimal element is ',min)
else WriteLn('Even items not found');
end;
{ Уничтожим список }
list.Done;
ReadLn;
END.

Пример работы:
Код:

List contain:
-7,-18,10,22,-6,21,-25,6,-12,20,22,18,-11,9,-12,5,-24,-9,11,-12
num=-11
Index of -11 is 13
Even the minimal element is -24

Ответ отправил: Micren, Практикант
Ответ отправлен: 28.05.2009, 22:41

Оценка ответа: 5

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 249991 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!



    Вопрос № 168452:

    Даны матрицы х(6,10),y(10,8) действительных чисел.Найти сумму и количество элементов,удовлетворяющих условию 0<=х[i,j]=<1, 0<=y[i,j]=<1.
    Для вычислений использовать процедуру.????

    Отправлен: 28.05.2009, 17:45
    Вопрос задал: Rudikbndr, Посетитель
    Всего ответов: 1
    Страница вопроса >>


    Отвечает Пупорев Юрий Борисович, Специалист :
    Здравствуйте, Rudikbndr!
    Решение задачи в приложении.

    Приложение:

    Ответ отправил: Пупорев Юрий Борисович, Специалист
    Ответ отправлен: 28.05.2009, 22:42

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 249992 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!



    Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке:
    оценить выпуск >>

    подать вопрос экспертам этой рассылки >>

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.0 beta от 24.05.2009

    В избранное