Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi] Обработка чисел.. TListBox 
:(
    Опции темы
pdiman58
Дата 27.4.2010, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 1.10.2009

Репутация: нет
Всего: нет



Задание таково:

"Необходимо произвести обработку 15 вешщественных чисел: найти среднее арифметическое отрицательных чисел и подсчитать количество чисел, входящих в диапазон от 0...5"

Проблема такая я не знаю как организовать ввод чисел..

Пробовал делать так..
на первой форме разместил кнопки 
1) Массив чисел;
2) Среднее арифметическое;
3) кол-во чисел в диапазоне;

при нажатии кнопке "Массив чисел"..
происходило переключении на вторую форму.. в которой было окно TListBox, в котором были записаны числа..
и рядом три кнопки добавить число, редактировать, и удалить число..

и вот никак не могу понять как мне работать с этим TListBox.. как забирать оттуда числа.. добавлять и удалять..

если кто сможет помогите\объясните..
PM MAIL   Вверх
ИванМ
Дата 1.5.2010, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 13
Всего: 23



Прикрепи исходник, подредактирую.
PM MAIL   Вверх
pdiman58
Дата 1.5.2010, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 1.10.2009

Репутация: нет
Всего: нет



Цитата(ИванМ @ 1.5.2010,  00:15)
Прикрепи исходник, подредактирую.

ок..

В моем файле у меня не получилось связать две формы.. 
пробую на кнопку повесить Form2.Show..
она выдает ошибку..

вроде бы сделал добавление редактирование и удаление записей в ListBox..


Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  prog.rar 2,95 Kb
PM MAIL   Вверх
ИванМ
Дата 3.5.2010, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 13
Всего: 23



pdiman58, нет, к сожалению помочь не смогу, так как пользуюсь Delphi 7, а у вас версия выше.
Если только на уровне исходного кода помогу. Но у вас никакого кода нет в проекте, поэтому подсказать нечего.

Это сообщение отредактировал(а) ИванМ - 3.5.2010, 20:00
PM MAIL   Вверх
pdiman58
Дата 3.5.2010, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 1.10.2009

Репутация: нет
Всего: нет



Цитата(ИванМ @ 3.5.2010,  19:59)
pdiman58, нет, к сожалению помочь не смогу, так как пользуюсь Delphi 7, а у вас версия выше.
Если только на уровне исходного кода помогу. Но у вас никакого кода нет в проекте, поэтому подсказать нечего.


делаю в Lazarus..

подскажи пожалуйста как сделать переключение между формами с первой на вторую.. поэтому то я и не могу дальше понять что да как..

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

TForm1.. 
здесь действительно ничего нет.. 
buttonclick1 отвечает за переключение на вторую форму (вот и вопрос как это сделать.. Form2.Show не срабатывает, говорит ошибка, в интернете где то видел что нужно добавить какойто компонент в раздел uses, но какой не нашел..).. 
buttonclick2 отвечает за подсчет среднеарифметического значения и количества чисел диапазона 0...5..
Код

unit Unit1; 

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  Form1: TForm1; 

implementation

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin

end;

procedure TForm1.Button2Click(Sender: TObject);
begin

end;

initialization
  {$I unit1.lrs}

end.
                       



TForm2
Button1click отвечает за добавление в ListBox чисел (добавление происходит через окно Edit1.Text)..
Button2click отвечает за редактирование числа в ListBox..
Button3Click отвечает за удаление числа из ListBox..
Код

unit Unit2; 

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm2 }

  TForm2 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  Form2: TForm2; 

implementation

{ TForm2 }

procedure TForm2.ListBox1Click(Sender: TObject);
begin
   Edit1.Text:= ListBox1.Items[ListBox1.ItemIndex];
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  ListBox1.Items.Add (Edit1.Text);
  ListBox1.Sorted:= true;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  ListBox1.Items[ListBox1.ItemIndex]:= Edit1.Text;
end;

procedure TForm2.Button3Click(Sender: TObject);
begin
  ListBox1.Items.Delete(1);
end;

initialization
  {$I unit2.lrs}

end.              


Это сообщение отредактировал(а) pdiman58 - 3.5.2010, 21:25
PM MAIL   Вверх
ИванМ
Дата 3.5.2010, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 13
Всего: 23



В 7м Delphi для этого нужно подключить соответствующий Unit второй формы в первом юните. Делается либо ручным способом (uses Unit2), либо автоматическим: File->Use unit...
Чтобы вызвать вторую форму просто надо вызвать метод Show или ShowModal.
PM MAIL   Вверх
pdiman58
Дата 3.5.2010, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 1.10.2009

Репутация: нет
Всего: нет



Цитата(ИванМ @ 3.5.2010,  21:12)
В 7м Delphi для этого нужно подключить соответствующий Unit второй формы в первом юните. Делается либо ручным способом (uses Unit2), либо автоматическим: File->Use unit...
Чтобы вызвать вторую форму просто надо вызвать метод Show или ShowModal.

спасибо..
вроде на второй форме все заработало..
если можешь объясни пожалуйста еще вкратце как оперировать числами из ListBox..
PM MAIL   Вверх
ИванМ
Дата 3.5.2010, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 13
Всего: 23



pdiman58, чтобы обратиться к нужной строке ListBox используй свойство Items. Чтобы преобразовать строку в вещ. число, используй функцию StrToFloat. Чтобы преобразовать вещ. число в строку, используй FloatToStr.
PM MAIL   Вверх
pdiman58
Дата 9.5.2010, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 1.10.2009

Репутация: нет
Всего: нет





[TForm1]
Код

unit Unit1; 

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, Unit2;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  Form1: TForm1; 

implementation

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
   var a,i:integer;
         c: real;
begin
  a:=0;
  a:=Form2.ListBox1.Count;
   for i:=0 to a do
    begin
     if (strtoint(Form2.ListBox1.Items[i]) > 0) then
     c:=c+strtoint(Form2.ListBox1.Items[i]);
     end;
   Edit1.Text:=FloattoStr(c);
end;

initialization
  {$I unit1.lrs}

end.                           




[TForm2]
Код

unit Unit2; 

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm2 }

  TForm2 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: char);
    procedure ListBox1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  Form2: TForm2; 

implementation

{ TForm2 }

procedure TForm2.ListBox1Click(Sender: TObject);
begin
   Edit1.Text:= ListBox1.Items[ListBox1.ItemIndex];
end;

procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  case key of
  'A'..'Z':key:=#0;
  'a'..'z':key:=#0;
  'А'..'Я':key:=#0;
  'а'..'я':key:=#0;
  '!', '@' , '.' , '/', '\', '$', '^', '&', '*', '(', ')':key:=#0;
end;
end;


procedure TForm2.Button1Click(Sender: TObject);
 var d, p, i: integer;
 begin
  d:=0;
  p:=0;
  for i:=1 to length(Edit1.Text) do
    begin
     if Edit1.Text[i]='-' then d:=d+1;
    end;
  for i:=1 to length(Edit1.Text) do
    begin
     if Edit1.Text[i]=',' then p:=p+1;
    end;
  if d>1 then Edit1.Text:='Неверно' else
   if p>1 then Edit1.Text:='Неверно' else
   begin
     ListBox1.Items.Add (Edit1.Text);
     ListBox1.Sorted:= true;
   end;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  ListBox1.Items[ListBox1.ItemIndex]:= Edit1.Text;
end;

procedure TForm2.Button3Click(Sender: TObject);
begin
  ListBox1.Items.Delete(1);
end;

initialization
  {$I unit2.lrs}

end.                                      




Вот мои коды.. на второй форме все нормально..
проблемы с первой формой.. с первой кнопкой..
почему то выкидывает ошибку..
PM MAIL   Вверх
ИванМ
Дата 10.5.2010, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 13
Всего: 23



правильно не
Код

a:=Form2.ListBox1.Count;

а
Код

a:=Form2.ListBox1.Count-1;

PM MAIL   Вверх
pdiman58
Дата 10.5.2010, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 1.10.2009

Репутация: нет
Всего: нет



спасибо.. среднеарифметическое сделал..

а как можно записать насчет чисел диапазона 0..5..??


я попробовал вот так.. но в ответе всегда получаете 'ноль'...


Код

procedure TForm1.Button2Click(Sender: TObject);
   var a,i,g:integer;
         c,h,k: real;
begin
  a:=0;
  c:=0;
  k:=0;
  g:=0;
  a:=Form2.ListBox1.Count-1;
   for i:=0 to a do
     begin
      if (strtoint(Form2.ListBox1.Items[i]) < 0) then
       begin
        k:=k+1;
        c:=c+strtoint(Form2.ListBox1.Items[i]);
       end;
     end;
     h:=c/k;
     Edit1.Text:=FloattoStr(h);
   for i:=0 to a do if ((strtoint(Form2.ListBox1.Items[i]) > 0) and (strtoint(Form2.ListBox1.Items[i]) < 5)) then g:=g+1;
     Edit2.Text:=Inttostr(g);
     
end; 

PM MAIL   Вверх
ИванМ
Дата 10.5.2010, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 13
Всего: 23



pdiman58, почему вы используете strtoint, если у вас в списке вещественные числа? Нужно использовать strtofloat.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0813 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.