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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2007, 16:25   #1
Mr.User
Пользователь
 
Аватар для Mr.User
 
Регистрация: 11.11.2007
Сообщений: 45
По умолчанию Операции над данными в ListBox

Вот описал процедуру выполняющую требуемое задание.
Задание:
В лист-боксе имеется последовательность целых чисел. Во втором лист-боке показать те числа из первого лист-бокса, которые являются простыми числами.
Процедура:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var s: string;
    a,i,del: integer;
begin
for i:=0 to ListBox1.Items.Count-1 do
begin
a:=StrToInt(ListBox1.Items[i]);
del:=2;
while a mod del <>0 do
inc(del);
if a=del then
ListBox2.Items.Add(ListBox1.Items[i]);
end;
end;
Просьба такая:
Помогите пожалуйста переделать данный код, для выполнения следующей задачи:
Задача:
Дана последовательность чисел. Построить последовательность номеров позиций, откуда начинаются подряд идущие значения, расположенные в порядке убывания.
Спасибо!
end;
end.

Mr.User вне форума Ответить с цитированием
Старый 18.11.2007, 18:37   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Поскольку Ваша задача не имеет ничего общего с приведенным кодом, то переделывать его нет смысла. Лучше написать новый. Зачем Вам ListBox? Задача в три действия 1. Создать массив. 2.Выполнить условие задачи. Вывести результат. На форме нужны 1 кнопка, и три эдита (лабеля, мемо) . И такой код:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{найти номера элементов, с которых начинается убывание на 1}
procedure TForm1.Button1Click(Sender: TObject);
var a:array[1..100] of integer;
n,i:integer;
begin
   n:=strtoint(edit1.Text);
for i:=1 to n do
   a[i]:=random(4);
for i:=1 to n do
   edit2.Text:=edit2.Text+inttostr(a[i])+' ';
for i:=1 to n-1 do
     if (a[i]-a[i+1])=1 then
        edit3.Text:=edit3.Text+inttostr(i)+'  ';
end;
puporev вне форума Ответить с цитированием
Старый 18.11.2007, 18:58   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Если вам по условию нужны именно листбоксы, то:
Код:
procedure TMyForm.Button1Click(Sender: TObject);
var i: integer;
    flag: boolean;
begin
ListBox2.Clear;
flag:=False;
for i:=0 to ListBox1.Items.Count-2 do
begin
if (StrToInt(ListBox1.Items[i])-1=StrToInt(ListBox1.Items[i+1])) then
begin
if not flag then
begin
flag:=True;
ListBox2.Items.Add(IntToStr(i));
end;
ListBox2.Items.Add(IntToStr(i+1));
end else
flag:=False;
end;
mihali4 вне форума Ответить с цитированием
Старый 18.11.2007, 23:24   #4
Mr.User
Пользователь
 
Аватар для Mr.User
 
Регистрация: 11.11.2007
Сообщений: 45
По умолчанию

Вот честно сказать, - никак не пойму как можно эту задачу решить первым из предложеных вариантов! Зачем целых три эдита и три лэйбла? В тексте обработчиков событий и близко речь не идёт о выводе результатов в лэйблы!
В обоих вышепредложенных вариантах решения задачи, программа запускается, но результатов нет!
Может я не так понимаю формулировку задачи!?
Дана последовательность чисел.(В лист-боксе1. имеется столбец из целых чисел!) Построить последовательность номеров позиций, откуда начинаются подряд идущие значения, расположенные в порядке убывания. (В лист-боксе2. сделать такой столбец, который будет являтся столбцом из лист-бокса1. но уже отсортированым в порядке убывания!)
Хотелось бы всё-таки разобраться с этой задачей!
end;
end.

Mr.User вне форума Ответить с цитированием
Старый 18.11.2007, 23:55   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Может я не так понимаю формулировку задачи!
Похоже на то.
"Построить последовательность номеров позиций, откуда начинаются подряд идущие значения, расположенные в порядке убывания."
Это означает не отсортировать значения из первого листбокса ("В лист-боксе2. сделать такой столбец, который будет являтся столбцом из лист-бокса1. но уже отсортированым в порядке убывания!"), а построить столбец из строк, в который войдут индексы (опять-таки не значения, а номера позиций, т.е. индексы значений из первого листбокса) строк первого листбокса, в которых находятся числа, идущие подряд в порядке убывания.
То есть, если в 1-ом листбоксе последовательность строк такая:
3,5,1,2,5,7,9,6,5,4,3
то во второй листбокс будут записаны следующие строки:
7,8,9,10 (индексы строк 6,5,4,3)
И все...
Потому что только помеченные красным числа
- идут подряд, то есть различаются на 1
- убывают
Что непонятного???
Мой вариант именно это и делает. Проверил, все чудненько...
Уточню - возможно, "подряд" имеется в виду просто последовательность чисел, каждое следующее из которых меньше предыдущего, тогда в моем варианте строка
if (StrToInt(ListBox1.Items[i])-1=StrToInt(ListBox1.Items[i+1])) then
заменяется на
if (StrToInt(ListBox1.Items[i])>StrToInt(ListBox1.Items[i+1])) then
mihali4 вне форума Ответить с цитированием
Старый 19.11.2007, 01:33   #6
Mr.User
Пользователь
 
Аватар для Mr.User
 
Регистрация: 11.11.2007
Сообщений: 45
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Что непонятного???
Вот теперь всё ясно и понятно! Большое спасибо за помощь и пояснения!
Сама задача была сформулирована и описана довольно-таки скудно и запутано! Поэтому я её неправильно понял!
Но теперь я во всём разобрался!
end;
end.

Mr.User вне форума Ответить с цитированием
Старый 19.11.2007, 01:38   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Поздравляю. Успехов!
mihali4 вне форума Ответить с цитированием
Старый 19.11.2007, 01:51   #8
Mr.User
Пользователь
 
Аватар для Mr.User
 
Регистрация: 11.11.2007
Сообщений: 45
По умолчанию

Спасибо! И Вам успехов!
end;
end.

Mr.User вне форума Ответить с цитированием
Старый 19.11.2007, 05:31   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Читать немного учитесь. В программе только Едиты. А в скобках написано, что эдиты можно заменить или лабелями или мемо или, как ты сделал, листбоксами. Т.е. в твоей задаче можно использовать любые компоненты, в которых можно вводить и выводить текст. А программа у меня прекрасно работает и выводит индексы, с которых НАЧИНАЕТСЯ убывание на единицу, т.е. то, что записано в условии задачи.
puporev вне форума Ответить с цитированием
Старый 21.11.2007, 02:21   #10
Mr.User
Пользователь
 
Аватар для Mr.User
 
Регистрация: 11.11.2007
Сообщений: 45
По умолчанию

Хорошо, буду более внимательно и вдумчиво читать условия задач да и вообще любых текстов!
У меня тут появилась необходимость немного модернезировать свои праграммки, а именно сделать дополнительный вывод результатов в StringGrid!
Добавил на форму компоненту StringGrid, добавил новую кнопку и описал процедуру:
Код:
procedure TForm1.Button5Click(Sender: TObject);
var s: string;
    a,i,k,del: integer;
begin
k:=0;
for i:=0 to ListBox1.Items.Count-1 do
begin
a:=StrToInt(ListBox1.Items[i]);
del:=2;
while a mod del <>0 do
inc(del);
if a=del then
begin
StringGrid1.RowCount:=k+1;
StringGrid1.Cells[0,k]:=s;
inc(k);
end;
end;
end;
Программа запускается, но в место результата выводятся просто пустые ячейки!
Выглядит это так:

Где-то я сделал что-то неверно!
Помогите пожалуйста разобраться!
P.S. В StringGrid поменял значения на:
ColCount=1,
RowCount=1,
FixedRows=0,
FixedCols=0.
end;
end.


Последний раз редактировалось Mr.User; 21.11.2007 в 02:29.
Mr.User вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
непонятки с данными KiSH333 БД в Delphi 5 01.09.2008 08:36
Файл с данными werser БД в Delphi 1 24.05.2008 23:40
Обмен данными по сети Altera Работа с сетью в Delphi 2 23.02.2008 00:13
Операции над данными yulia БД в Delphi 24 21.05.2007 01:18
обмен данными с сервером BioS Работа с сетью в Delphi 15 12.02.2007 15:32