Главная Главная страница форума Регистрация Вход
Новые сообщения Участники форума Правила форума Поиск
Страница 1 из 11
Модератор форума: Ekz 
Форум » Все о Delphi » Синтаксис » Обработка последовательности данных (in DELPHI or Pascal)
Обработка последовательности данных (in DELPHI or Pascal)
snuppyДата: Пятница, 05.12.2008, 23:54 | Сообщение # 1
Ранг 1
Группа: Проверенные
Сообщений: 3
Награды: 0
Репутация: 0
Статус: Offline
Вводиться последобательность целых чисел. Создать новую последовательность, которая содержит номера позиций, в которых начинаются подряд идущие значения в нисходящем порядке.

Пример:
Введено:....2...6...7...3...2...10...4...15...20...22...9
Результат:..2...5...9

Cпасибо !

P.S.

Position: 0...1...2...3...4...5....6....7.....8....9...10
Input:....2...6...7...3...2...10...4...15...20...2 2...9
Result:...2...5...9
Because:
2 (7; 3)
5 (10; 4)
9 (22; 9)

 
stalkerДата: Суббота, 06.12.2008, 01:28 | Сообщение # 2
Ранг 10
Группа: Пользователи
Сообщений: 146
Награды: 0
Репутация: 3
Статус: Offline
Извиняюсь - но малость не понятно!!!

Лучшие обои и заставки для рабочего стола
Самый выгодный тизерный заработок. Мы уже заработали, А вы?
Заработать на своем сайте реально
 
skycarДата: Суббота, 06.12.2008, 05:52 | Сообщение # 3
Ранг 6
Группа: Проверенные
Сообщений: 116
Награды: 5
Репутация: 31
Статус: Offline
Аха вообще непонятно
Ясно только, что это работа с массивами
 
AdminДата: Суббота, 06.12.2008, 10:41 | Сообщение # 4
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
А я вроде понял! smile
Вобщем разъясняю: Нужно найти номера позиций элементов, с которых начинается уменьшаться. Тоесть после этого элемента значения меньше этого. напримен 2 5 1 1. Тут второй элемент (пятерка) и есть результат. Потомучто с него начинается уменьшение.

Code
function Get(s:string): string;
var i:integer;
begin
   for i:=1 to length(s) do
   begin
     if i=1 then
       if s[i]>s[i+1] then result:=result+IntToStr(i-1)+' ';

     if (i>1)and(i<Length(s)) then
       if (s[i]>s[i+1])and(s[i]>s[i-1]) then result:=result+IntToStr(i-1)+' ';

   end;

end;

Вот быстренько набрасал код. Один недостаток - работает с числами записанными в строку без пробела, а соответственно и меньше 10. Думаю не будет проблемой запихнуть их все в массив и переделать код.


Не оказываю помощь через личные сообщения и ICQ
 
snuppyДата: Среда, 10.12.2008, 02:04 | Сообщение # 5
Ранг 1
Группа: Проверенные
Сообщений: 3
Награды: 0
Репутация: 0
Статус: Offline
Please modify To Delphi:

Code
unit pd1;

interface

uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls, Grids;

type
   TForm1 = class(TForm)
     ListBox2: TListBox;
     StringGrid1: TStringGrid;
     ListBox1: TListBox;
     Button1: TButton;
     Button2: TButton;
     Label1: TLabel;
     Button3: TButton;
     Button4: TButton;
     Edit1: TEdit;
     procedure ListBox2KeyDown(Sender: TObject; var Key: Word;
       Shift: TShiftState);
     procedure Button3Click(Sender: TObject);
     procedure Button4Click(Sender: TObject);
     procedure Button1Click(Sender: TObject);
   private
     { Private declarations }
   public
     { Public declarations }
   end;

var
   Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ListBox2KeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState);
begin
Caption:=inttostr(key);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
try
ListBox2.items.Add(inttostr(strtoint(Edit1.Text)));
Edit1.Text:='';
except
beep;
showmessage('Nekorekts ievads!');
end;
Edit1.SetFocus;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
ListBox2.Items.Clear;
end;

procedure TForm1.Button1Click(Sender: TObject);
var trigger:boolean;i:integer;
begin
trigger:=false;
if sender=button1 then
  ListBox1.Items.Clear
else
  begin
   StringGrid1.Cells[0,0]:='';
   StringGrid1.RowCount:=1;
  end;
for i:=0 to ListBox2.Items.Count-2 do
if strtoint(ListBox2.Items[i])>strtoint(ListBox2.Items[i+1])
  then
   if not trigger then
    begin
     trigger:=true;
     if sender=button1 then
      ListBox1.Items.add(inttostr(i))
     else
      begin
       if StringGrid1.Cells[0,StringGrid1.RowCount-1]<>'' then
        StringGrid1.RowCount:=StringGrid1.RowCount+1;
      StringGrid1.Cells[0,StringGrid1.RowCount-1]:=inttostr(i);
     end
    end
   else
  else
   trigger:=false;
Edit1.SetFocus;
end;

end.
 
skycarДата: Среда, 10.12.2008, 03:44 | Сообщение # 6
Ранг 6
Группа: Проверенные
Сообщений: 116
Награды: 5
Репутация: 31
Статус: Offline
Немного неясная просьба
Нужно переделать код под делфи? Так это и так делфийный код!
Или нужно просто покрасивше его оформить? Поискать ошибки?


Сообщение отредактировал skycar - Среда, 10.12.2008, 03:45
 
EkzДата: Среда, 10.12.2008, 16:21 | Сообщение # 7
Ранг 10
Группа: Пользователи
Сообщений: 164
Награды: 2
Репутация: 1
Статус: Offline
Как я понял надо это сделать..
Прикрепления: 0335506.zip(7Kb)
 
Форум » Все о Delphi » Синтаксис » Обработка последовательности данных (in DELPHI or Pascal)
Страница 1 из 11
Поиск:

Copyright DelphiDevelop.ru © 2008-2018
Хостинг от uCoz