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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi] ООП, ООП 
:(
    Опции темы
aleksandrfnsv1
Дата 3.5.2008, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



помогите разобраться что же у меня выводится , иначе никак не пойму, и что нужно исправить, кидаю сам проект

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  new.rar 162,07 Kb
PM MAIL   Вверх
THandle
Дата 3.5.2008, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Один модуль(3) очень странной. Просто в него подключены все нужные модули и все, больше никакого кода. Не понятно зачем он вообще нужен. В основном же модуле проблема в том что там вообще ничего не подключено smile 

И вот такое:
Код


unit Unit2;
    uses Forms;
interface



просто невозможно. Uses надо писать либо в секции interface, либо в секции implementation.

То есть этот кусок должен выглядеть так:

Код


unit Unit2;
   
interface

 uses Forms;


Ну и подключаешь все остальные модули, которые требуется. Кстати Forms в этом юните не нужен так как не используется smile 

И вообще где собственно говоря в архиве находится главный модуль? ( Unit1)? Его там нет. Давай выкладывай полностью проект, посмотрим.
PM   Вверх
aleksandrfnsv1
Дата 3.5.2008, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



по сути unit2  это главный , так как в нем идёт вся реализация, unit1  это диалог,  а  unit3 пока не нужен .
Собственно сам проект здесь. 

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  new.rar 165,17 Kb
PM MAIL   Вверх
THandle
Дата 3.5.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Ну вот так вот выводится. Хотя код, мягко говоря странный.

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  new.rar 180,36 Kb
PM   Вверх
aleksandrfnsv1
Дата 3.5.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а что странного, я только не пойму что я создаю каждый раз массивы или всё таки добавляю элементы в один и тот же массив, но тогда почему их там больше 18, когда размер массива у меня ограничен.
PM MAIL   Вверх
THandle
Дата 4.5.2008, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



aleksandrfnsv1, каждый раз добавляешь в один, в самом начале созданный.

Немного прокомментирую код:


Код

type
  TPismo = class
  private
    kolp,size,prioritet:integer;
  public
    constructor Create;
     //   constructor Create (akolp,asize,aprioritet:integer);
    function Getkolp:integer;
    function getsize:integer;
    function getprioritet:integer;
  end;



Это у тебя элемент массива.


Код

  TMas = class
  private
    count : integer;
    mas : array [1..18] of TPismo;
  public
    constructor Create;
    procedure add;
    procedure del;
    // procedure masview;
    function view : string;
  end;


Это сам массив. Хотя использование довольно странное. Я бы взял обычный TList(или любой другой ему подобный список). Ну или в крайнем случае взял бы просто массив:

Код

mas : array [1..18] of TPismo;



Дальше у тебя идет:

Код

constructor TPismo.Create;
begin
  kolp:=random(4)+1;
  size:=random(14000)+10;
  prioritet:=random(3)+1;
end;


Создает элемент массива, и заполняет поля случайными значениями. Хотя вообще конечно поля лучше называть начиная с буквы F, ну да ладно.

Код

function  TPismo.Getkolp:integer;  //TInf.GetFam: string;
begin
  Result := random(5)+1;
end;


Честно скажу - непонятное действие. Зачем тогда заполняли поля в констукторе если тамошние значения никому не нужны?
А так тут и в последующих двух функциях возвращаем в результате рандомное значение.

Код

function TPismo.getsize:integer;  //TInf.GetName: string;
begin
  Result := random(14000)+10;
end;

function TPismo.getprioritet:integer;   //TInf.GetFam: string;
begin
  Result := random(3)+1;
end;


То же самое.

Код

constructor TMas.Create;
begin
  count:=1;
  Mas[1]:=TPismo.Create;
end;



Создаем "массив", создаем в нем первый элемент.

Код

procedure Tmas.add;
var
  NewElem:TPismo;
begin
  if Count <= 18 then
    begin
      newElem := TPismo.Create;     //Tinf.Create(aFam,aName);
      count := count + 1;
      mas[count] := newelem;
    end;
end;


Если число элементов в массиве меньше 18(сделал проверку чтобы не лез не в свою память), то тогда добавляем новый элемент в массив.

Код

procedure TMas.del;
var
  i : integer;
begin
  for i:=1 to count-1 do
    mas[i] := mas[i+1];
  count:=count-1;
end;


Удаляет элемент.

Код

function TMas.view : string;   //function Tmas.masview;
var
  i : integer;
  s : string;
begin
  s := '';
  for i:=1 to count do
    begin
      s:=s + inttostr(mas[i].Getkolp) +  ' aba  '  + inttostr(mas[i].getsize) + ' aba  '  +  inttostr(mas[i].getprioritet)  +  #13#10;
      result:=s;
    end;
end;



Эта функция возвращает все рандомные значения всех трёх полей каждого созданного элемента "массива" в виде строки.



Далее чуть чуть объясню что мы делаем во время работы программы:

Код

procedure TForm1.FormCreate(Sender: TObject);
begin
  memo1.Clear;
  Mas1 := TMas.Create;
  memo1.Lines.Add(mas1.view);
end;


При создании формы очищаем компонент Memo, создаем массив, и добавляем в Memo то, что находится в масссиве.

По таймеру делаем следующее:

Код

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Mas1.add;
  memo1.Lines.Add(mas1.view);
end;


Добавляем новый элемент в массив, если конечно можно добавить, недаром я там проверку делал.
После чего выводим всё содержимое массива в Memo.

Что конкретно не понятно?

PM   Вверх
aleksandrfnsv1
Дата 4.5.2008, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



почему в memo у меня выводится так как будто я создаю много массивов, в которых каждый раз свои элементы. я хочу чтобы выводился один массив который я создаю и в него добавлялись элементы. smile 
PM MAIL   Вверх
THandle
Дата 4.5.2008, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Цитата(aleksandrfnsv1 @  4.5.2008,  17:15 Найти цитируемый пост)
почему в memo у меня выводится так как будто я создаю много массивов, в которых каждый раз свои элементы. я хочу чтобы выводился один массив который я создаю и в него добавлялись элементы.



Вывод происходит по таймеру. 

Попробую угадать:


1 юнит:
Код


unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Mas1:TMas;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  memo1.Clear;
  Mas1 := TMas.Create;
  memo1.Lines.Add(mas1.view);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Mas1.add;
  Memo1.Clear;
  memo1.Lines.Add(mas1.view);
end;



end.



Второй юнит:

Код


unit Unit2;

interface

uses SysUtils;

type
  TPismo = class
  private
    kolp,size,prioritet:integer;
  public
    constructor Create;
     //   constructor Create (akolp,asize,aprioritet:integer);
    function Getkolp:integer;
    function getsize:integer;
    function getprioritet:integer;
  end;

  TMas = class
  private
    count : integer;
    mas : array [1..18] of TPismo;
  public
    constructor Create;
    procedure add;
    procedure del;
    // procedure masview;
    function view : string;
  end;

implementation

constructor TPismo.Create;
begin
  kolp:=random(4)+1;
  size:=random(14000)+10;
  prioritet:=random(3)+1;
end;


function  TPismo.Getkolp:integer;  //TInf.GetFam: string;
begin
  Result := kolp;
end;

function TPismo.getsize:integer;  //TInf.GetName: string;
begin
  Result := size;
end;

function TPismo.getprioritet:integer;   //TInf.GetFam: string;
begin
  Result := prioritet;
end;

constructor TMas.Create;
begin
  count:=1;
  Mas[1]:=TPismo.Create;
end;

procedure Tmas.add;
var
  NewElem:TPismo;
begin
  if Count <= 18 then
    begin
      newElem := TPismo.Create;     //Tinf.Create(aFam,aName);
      count := count + 1;
      mas[count] := newelem;
    end;
end;

procedure TMas.del;
var
  i : integer;
begin
  for i:=1 to count-1 do
    mas[i] := mas[i+1];
  count:=count-1;
end;

function TMas.view;   //function Tmas.masview;
var
  i : integer;
  s : string;
begin
  s := '';
  for i:=1 to count do
    begin
      s:=s + inttostr(mas[i].Getkolp) +  ' aba  '  + inttostr(mas[i].getsize) + ' aba  '  +  inttostr(mas[i].getprioritet)  +  #13#10;
      result:=s;
    end;
end;


end.



Оно? Или полностью, внятно опиши что тебе надобно smile 
PM   Вверх
aleksandrfnsv1
Дата 5.5.2008, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я разобрался с выводом, спасибо. Теперь есть проблемы с сортировкой массива, не пойму почему прога вылетает когда пытаюсь сортировать массив

Код

unit Unit2;
    interface
 uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
    type
  TPismo = class
         private
         kolp,size,prioritet:integer;
         public
      // constructor Create(kolp,size,pprioritet:integer);
       constructor Create (akolp,asize,aprioritet:integer);
     //destructor Destroy;
        function Getkolp:integer;
        function getsize:integer;
        function getprioritet:integer;
    end;

  TMas = class
  private
      count:integer;
      mas:array of TPismo;
      v:integer;
  public
      constructor Create ;
      //procedure add;
      function getpismo:TPismo;
      procedure add(aKolp,aSize,aPrioritet:integer);// count:integer);
      procedure del;
      procedure sort;
      function view:string;
  end;

implementation

//constructor TPismo.Create(kolp,size,pprioritet:integer);
//begin
//kolp:=random(10)+1;
//size:=random(14000)+10;
//prioritet:=random(3)+1;
//end;

constructor TPismo.Create (akolp,asize,aprioritet:integer);
begin
    kolp:=akolp;
    size:=asize;
    prioritet:=aprioritet;
end;

function  TPismo.Getkolp:integer;  //TInf.GetFam: string;
begin
 Result := kolp;//kolp;
end;

function TPismo.getsize:integer;  //TInf.GetName: string;
begin
 Result := size;//size;
end;

function TPismo.getprioritet:integer;   //TInf.GetFam: string;
begin
 Result := prioritet;
end;

constructor TMas.Create;
begin
      V:=17;
      count:=0;
      SetLength(Mas,V);
      Mas[0]:=TPismo.Create(0,0,0);
end;

function tmas.getpismo:TPismo;
begin
   result:= mas[0]; //TPismo.Create(random(5),random(5),random(3)+1);
end;

procedure  TMas.add(aKolp,aSize,aPrioritet:integer);//; count:integer); //TStack.Push(aFam,aName: string);
 var NewElem:TPismo;//i:integer;
  begin
       newElem:= TPismo.Create(aKolp,aSize,aPrioritet);
      if count<=v then
     begin
   //  setlength(mas,v);
     count:=count+1;
     mas[count]:=newelem;
     end;
end;


procedure TMas.sort;
var i,j:integer; tmp:TPismo;
//begin
//if mas[i].getprioritet > mas[i+1].getprioritet  then
begin
for i:=2 to v do
begin
for j:=v downto i do
  if mas[j-1].getprioritet<mas[j].getprioritet then
  begin
  tmp:=mas[j-1];
  mas[j-1]:=mas[j];
  mas[j]:=tmp;
  end;
end;
 // end;
end;

procedure TMas.del;
var i:integer;
  begin
  if count>0 then
      begin
      for i:=1 to 18 do
      mas[i]:=mas[i+1];
      count:=count-1;
      end;
  end;

function TMas.view;   //function Tmas.masview;
var i:integer;s:string;
begin
s:='';
  for i:=1 to count do
  begin

  s:=s+ inttostr(mas[i].Getkolp)+' '+''+inttostr(mas[i].getsize)+' '+''+inttostr(mas[i].getprioritet)+#13#10;//+' '+ inttostr(count)+#13#10;
   result:=s;
  end;
end;


end.

 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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