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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2015, 15:20   #1
armchair
Пользователь
 
Регистрация: 05.12.2015
Сообщений: 36
По умолчанию Delphi.Динамические структуры данных: однонаправленные списки.

Дан список, элементы которого являются целыми числами. Составить метод, вычисляющий сумму нечетных элементов второй половины списка.

Код:
unit lab_6un;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TList = ^node;
  node=record
    info: integer;
    index: integer;
    next: TList;
  end;
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Label4: TLabel;
    procedure form(elem: integer; j: integer; var L: TList);
    procedure print(L: TList; Lab: TLabel);
    function Count(L: TList): integer;
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

//const k=15;
var
  Form1: TForm1;
  k, code: integer;

implementation

{$R *.dfm}



var L: TList;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var i: integer;
begin
  Label2.Caption:='';
  Label3.Caption:='';
  if Key=#13 then begin
    val(Edit1.Text, k, code);
    if code=0 then begin
      randomize;
      L:=nil;
      for i:=1 to k do begin
       form(random(30)-10, i, L);
      end;
      print(L, Label2);
      if Count(L)<>0 then Label3.Caption:='Количество положительных элементов'+#13+'с четными индексами: '+IntToStr(Count(L))
      else Label3.Caption:='Нет подходящих элементов.';
    end
    else begin
     Edit1.Text:='';
     Edit1.SetFocus;
    end;
  end;
  k:=0;
end;

procedure TForm1.form(elem: integer; j: integer; var L: TList);
begin
  if L<>nil then form(elem, j, L^.next)
  else begin
    New(L);
    L^.info:=elem;
    L^.index:=j;
    L^.next:=nil;
  end;
end;

procedure TForm1.print(L: TList; Lab: TLabel);
var i: integer;
begin
  i:=1;
  while L<>nil do begin
    Lab.Caption:=Lab.Caption+
      IntToStr(i)+':  '+FloatToStrF(L^.info, ffGeneral, 0, 1);
    if (L^.info>0) and (i mod 2=0) then Lab.Caption:=Lab.Caption+'   +';
    Lab.Caption:=Lab.Caption+#13;
    L:=L^.next;
    i:=i+1;
  end;
  Lab.Caption:=Lab.Caption+'<--';
end;

function TForm1.Count(L: TList): integer;
var c, i: integer;
begin
  c:=0;
  i:=1;
  while L<>nil do begin
    if (L^.info>0) and (i mod 2=0) then c:=c+1;
    L:=L^.next;
    i:=i+1;
  end;
  Count:=c;
end;

end.
Этот шаблон для задачи, где нужно найти кол-во положительных элементов с чётными индексами. Какие конструкции можно оставить и что нужно изменить для моей задачи? Заранее спасибо.

Последний раз редактировалось Stilet; 26.12.2015 в 17:34.
armchair вне форума Ответить с цитированием
Старый 26.12.2015, 17:38   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Составить метод, вычисляющий сумму нечетных элементов второй половины списка.
Код:
procedure pro(l:TList);
var len,sum:integer; p:TList;
begin
 p:=l;len:=0; sum:=0;
 while p<>nil then begin p:=p^.next; inc(len);end;
 len:=len div 2;
 while len>0 do begin p:=p^.next; dec(len);end;
 while p<>nil then begin p:=p^.next; if(not odd(p^.info)) then sum:=sum+p^.info;end;
 Lab.Caption:=IntToStr(sum);
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические структуры данных. Списки TImRik Помощь студентам 0 22.12.2013 18:12
Динамические структуры данных. Списки. dmit365 Помощь студентам 1 20.12.2009 23:12
Динамические структуры данных - списки FoOtBaLiIsT Общие вопросы C/C++ 0 18.03.2009 22:10