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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2008, 00:12   #1
Cartman18
Пользователь
 
Регистрация: 10.12.2007
Сообщений: 28
По умолчанию Задача в паскале, работа со списком.

Воть есть такая задачка, помогите((( никак немогу решить..
Дан список, состоящий из 50 целых чисел. Составить программу для вычисления произведения элементов, кратных s, с одновременным исключением их из него. В конец списка добавить звено, содержащее итоговое значение произведения. Организовать вывод начальной и конечной последовательности значений в списке.
Заранее спасибо!
Cartman18 вне форума Ответить с цитированием
Старый 30.04.2008, 12:44   #2
Dreamer_Kherson
Новичок
Джуниор
 
Регистрация: 29.04.2008
Сообщений: 1
По умолчанию

Цитата:
Сообщение от Cartman18 Посмотреть сообщение
Воть есть такая задачка, помогите((( никак немогу решить..
Дан список, состоящий из 50 целых чисел. Составить программу для вычисления произведения элементов, кратных s, с одновременным исключением их из него. В конец списка добавить звено, содержащее итоговое значение произведения. Организовать вывод начальной и конечной последовательности значений в списке.
Заранее спасибо!
Вот такая вот зарисовочка есть:
Код:
Program List;
uses
  Crt;
const
  n=50;
type
  address=^element;
  element=record
    x:longint;
    p:address
  end;
var
  Top,p,buf:address;
  s,r:longint;
  b:boolean;
  Procedure Inp(var Top:address;n:longint);
  var
    p:address;
    i:longint;
    Procedure Add(var p:address);
    begin
      New(p);
      p^.x:=Random(9)+1 {p^.x:=Random(high(word))-high(longint)}
    end;
  begin
    if n>0 then
    begin
      Randomize;
      Add(Top);
      p:=Top;
      for i:=2 to n do
      begin
        Add(p^.p);
        p:=p^.p
      end;
      p^.p:=nil
    end
    else Top:=nil
  end;
  Procedure Out(p:address);
  var
    n:longint;
  begin
    n:=0;
    if p=nil then writeln('Список пуст!') else
    repeat
      write(p^.x:10);
      p:=p^.p;
      n:=n+1
    until p=nil;
    if n mod 8<>0 then writeln;
  end;
  Procedure Add(var p:address;r:longint);
    Procedure Adding(var p:address;r:longint);
    begin
      New(p);
      p^.x:=r;
      p^.p:=nil
    end;
  begin
    if p=nil then Adding(p,r) else
      if p^.p=nil then
      begin
        Adding(p^.p,r);
        p:=p^.p
      end
end;
begin
  Clrscr;
  Inp(Top,n);
  writeln('Список до преобразований:');
  Out(Top);
  write('Введите s: ');
  readln(s);
  b:=False;
  r:=1;
  p:=Top;
  if Top<>nil then
  repeat
    if Top^.x mod s=0 then
    begin
      b:=True;
      r:=r*Top^.x;
      Top:=Top^.p;
      Dispose(p);
      p:=Top
    end
    else
    p:=Top^.p
  until (Top<>p) or (Top=nil);
  buf:=Top;
  while p<>nil do
  begin
    if p^.x mod s=0 then
    begin
      b:=True;
      r:=r*p^.x;
      buf^.p:=p^.p;
      Dispose(p);
      p:=buf^.p
    end
    else
    begin
      buf:=p;
      p:=p^.p
    end
  end;
  if b then
  begin
    Add(buf,r);
    if Top=nil then Top:=buf
  end;
  writeln('Список после преобразований:');
  Out(Top);
  ReadKey
end.
Вложения
Тип файла: zip LIST.zip (6.8 Кб, 11 просмотров)

Последний раз редактировалось Dreamer_Kherson; 30.04.2008 в 12:51.
Dreamer_Kherson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со списком сетевых подключений zanneo Win Api 2 15.08.2008 10:51
Задача на Паскале stscolt Помощь студентам 1 29.04.2008 20:52