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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2008, 22:37   #1
Black_Ak24
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 21
Восклицание переписать из массива в линейный двунаправленный список чётные элементы массива

всех с НОВЫМ ГОДОМ!!
ситуация такова
мне задали написать программу на паскале (нужно написать в ближайшие дни)
если не напишу - мне крышка((((
вот задание : задан массив из 40 случайных элементов, переписать из массива в линейный двунаправленный список чётные элементы массива,
добавить в начало списка среднее арифметическое элементов списка и в конец добавить среднее геометрическое элементов списка, програма должна быть оформлена в виде процедур и функций , также она должна иметь меню для выбора режимов её работы.
ОЧЕНЬ ПРОШУ ПОМОЧЬ!!! сам я её не напишу
ПОЖАЛУЙСТА если кто знает как делать то напишите мне пожалуйста
ЗАРАНЕЕ благодарен!!!
Надеюсь что всё-таки найдётся мудрое решение
Black_Ak24 вне форума Ответить с цитированием
Старый 03.01.2008, 00:50   #2
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

С этой просьбой лучше обратиться в раздел Фриланс. Но это уже будет не бесплатно.
Jeni вне форума Ответить с цитированием
Старый 03.01.2008, 01:24   #3
Black_Ak24
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 21
По умолчанию

да мне хотя бы знать как переписать из массива в линейный двунаправленный список чётные элементы массива, а также как добавлять в начало и конец списка (если уже известно среднее арифм. и среднее геометр.)
я бы и на фриланс обратился, только вот я с webmoney не дружу((
поэтому помогите пожалуйста
пробую пока что сам написать но ничего не получается(((((((((((

Последний раз редактировалось Black_Ak24; 03.01.2008 в 01:28.
Black_Ak24 вне форума Ответить с цитированием
Старый 03.01.2008, 03:14   #4
student_63
Пользователь
 
Аватар для student_63
 
Регистрация: 07.11.2007
Сообщений: 92
По умолчанию

напиши математическим языком что такое линейный двунаправленный список?тебя тоже с НГ! очень хороший праздник
Я уверен, вы согласитесь со мной... что если
со страницей 534 мы встречаемся во второй главе, то первая глава должна быть невыносимо длинной.
- ШЕРЛОК ХОЛМС
student_63 вне форума Ответить с цитированием
Старый 03.01.2008, 12:24   #5
Black_Ak24
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 21
По умолчанию

вот как в разделе type оно должно было бы выглядеть
type
a=array[1..n] of integer; (сам сассив)
p_TList=^TList; (линейный список(двунаправленный, потому что есть next и prev)
TList=record
data:real;
next:^p_TList;
prev:^p_TList;
end;

Но я сам точно не знаю правильно ли это, по крайней мере должно быть примерно так
Black_Ak24 вне форума Ответить с цитированием
Старый 03.01.2008, 23:38   #6
Black_Ak24
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 21
По умолчанию

всё
написал я сам программу
пришло просветление))))
Black_Ak24 вне форума Ответить с цитированием
Старый 04.01.2008, 01:10   #7
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,239
По умолчанию

Интересно будет её увидеть . Для общего развития, это не только мне интересно будет.
Alter вне форума Ответить с цитированием
Старый 04.01.2008, 15:16   #8
Black_Ak24
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 21
По умолчанию

да вот
пожалуйста
процедура самого построения списка
всё остальное - примитив
думаю писать не надо
включил в него также средн. ар.(начало) и средн. геом. (конец)

Procedure List(mas:a; SerA,SerG:integer);
var sList,temp_TList;
begin
clrscr;
new(sList);
sList^.data:=SerA;
sList^.next:=nil;
sList^.prev:=nil;
for i:=1 to n do begin
if (mas[i] mod 2 = 0) then begin
new(temp);
temp^.data:=mas[i];
temp^.next:=nil;
temp^.prev:=sList;
sList^.next:=temp;
sList:=sList^.next; end;
end;
new(temp);
temp^.data:=SerA;
temp^.next:=nil;
temp^.prev:=sList;
sList^.next:=temp;
sList:=sList^.next;
sList^.next:=nil;

while (sList^.prev<>nil) do begin
writeln('Element -> ',sList^.data);
sList:=sList^.prev;
end;
new(temp);
temp^.data:=SerG;
temp^.next:=nil;
temp^.prev:=sList;
writeln('Element -> ',temp^.data);
writeln;
writeln;
while (sList^.next<>nil) do begin
writeln('Element -> ',sList^.data);
sList:=sList^.next; end;
new(temp);
temp^.data:=SerG;
temp^.next:=nil;
temp^.prev:=sList;
writeln('Element -> ',temp^.data);
end;

вот так
я так понимаю он разбивается на 2 части
сначала идет в один конец
потом в другой
на этих "концах" я и разместил ср.ар. и ср. геом.

мне кажется что именно так всё должно быть
и всё работает
проверял
Black_Ak24 вне форума Ответить с цитированием
Старый 05.01.2008, 00:59   #9
FliPP
 
Аватар для FliPP
 
Регистрация: 03.01.2008
Сообщений: 9
По умолчанию

Я кстати тож кой че написал... правда без выбора режима работы (тупо не знаю что имеется ввиду )
Код:
Program list;
uses crt;

type
TPList= ^TList;

TList= record
Data: real;
Next: TPList;
Prev: TPList;
end;

const
n=40;  {эт так, чтоб проверять легче было ))}

var
Head, Curr, PrevEl: TPList;
i, kol: byte;
SrAr, SrGeom, sum, prod: real;
ElArr: array [1..n] of real;


procedure Add_el; {добавляет очередную запись в список}
begin
  if i=2 then
  begin
    new(Head);
    Head^.Data:= ElArr[i];
    PrevEl:=Head;
  end
  else
  begin
    new(Curr);
    Curr^.Data:=ElArr[i];
    Curr^.Prev:=PrevEl;
    PrevEl^.Next:=Curr;
    PrevEl:=Curr;
  end;
end;

procedure Add_SrAr; {добавляет в начало среднее арифметическое}
begin
  new(Curr);
  Curr^.Data:=SrAr;
  Curr^.Next:=Head;
  Head^.Prev:=Curr;
  Head:=Curr;
end;

procedure Add_SrGeom; {и, соответственно, среднее пропорцианальное}
begin
  new(Curr);
  Curr^.Data:=SrGeom;
  Curr^.Prev:=PrevEl;
  PrevEl^.Next:=Curr;
  PrevEl:=Curr;
end;

procedure Main;
begin
  randomize;
  for i:=1 to n do ElArr[i]:=random;

  sum:=0; prod:=1;
  for i:=1 to n do
  if not odd(i) then
  begin
    Add_el;
    sum:=sum+ElArr[i];
    prod:=prod*ElArr[i];
    inc(kol);
  end;

  SrAr:=sum/kol;
  Add_SrAr;
  SrGeom:=sqrt(prod);
  Add_SrGeom;
end;


begin
clrscr;
Main
end.
проверял...вроде работает... для меня это новая тема, поэтому если кто найдет ошибки - напишите, плиз, буду благодарен!!!

Последний раз редактировалось FliPP; 05.01.2008 в 02:20.
FliPP вне форума Ответить с цитированием
Старый 05.01.2008, 08:02   #10
Black_Ak24
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 21
По умолчанию

незнаю как насчёт самой программы (имею ввиду работает она или нет, и компилируется ли вообще),
но что будет выводиться на экран ??
я здесь не видел ни одного write или writeln

П.С.
среднее геометрическое насколько я знаю ищется не так
если через експоненту то (n - число элементов)
S:=exp((1/n) * ln(a1*a2*a3*...*an)
если нормально то это x^y=e^y*ln(x)
по-моему так должно быть

Последний раз редактировалось Black_Ak24; 05.01.2008 в 08:13.
Black_Ak24 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Линейный двунаправленный список Seg_62 Паскаль, Turbo Pascal, PascalABC.NET 4 28.08.2008 21:02
Повторяющиеся элементы массива Stanislav Общие вопросы Delphi 10 23.05.2008 12:31
Элементы массива и старшие цифры logistics Помощь студентам 4 22.04.2008 00:12
Именовать элементы массива не цифрами, а словами. Air Общие вопросы Delphi 15 07.03.2008 18:49
Как удалять элементы массива в Паскале? Антонова Анна Помощь студентам 2 08.12.2007 17:01