Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.04.2008, 22:05
overclocker01 overclocker01 вне форума
Прохожий
 
Регистрация: 20.04.2008
Сообщения: 6
Репутация: 10
По умолчанию Помогите, пожалуйста, сделать лабу по массивам

1. Задать два исходных одномерных массива (шифр забойного двигателя (ЗД) и параметр) с помощью инициализации. Вывести исходную информацию через компонент Label.
2. Обработать одномерный массив согласно варианту задания. Для обработки массива создать подпрограмму. Использовать передачу параметров по значению. Результат обработки вывести на форму.
3. В соответствии с заданным критерием отфильтровать шифры забойных двигателей и сформировать третий массив, содержащий порядковые номера отобранных забойных двигателей.
4. Вывести результаты отбора в виде таблицы, содержащей шифр забойного двигателя и соответствующий параметр.
(*) Вывод результатов осуществить через компонент StringGrid.
(**) Реализовать задание с использованием компонента MainMenu.

Вот что сделал:
http://rapidshare.com/files/109043045/____5.rar.html

Третий и четвертый пункт сделать не могу.. не знаю как..
спасибо заранее =)
Ответить с цитированием
  #2  
Старый 20.04.2008, 23:38
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Не могу скачать архив - совсем рапидшара офонарела со своими кодами.
Должно быть что-то типа того (инициализация для простоты случайным образом)

Форма:
Код:
object Form1: TForm1
  Left = 192
  Top = 114
  Width = 696
  Height = 480
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 8
    Top = 8
    Width = 22
    Height = 13
    Caption = 'Исх:'
  end
  object Label2: TLabel
    Left = 168
    Top = 8
    Width = 53
    Height = 13
    Caption = 'Фильтр.'
  end
  object StringGrid1: TStringGrid
    Left = 8
    Top = 24
    Width = 137
    Height = 409
    ColCount = 2
    FixedCols = 0
    RowCount = 1
    FixedRows = 0
    TabOrder = 0
  end
  object Button1: TButton
    Left = 328
    Top = 24
    Width = 75
    Height = 25
    Caption = 'Go'
    TabOrder = 1
    OnClick = Button1Click
  end
  object StringGrid2: TStringGrid
    Left = 168
    Top = 24
    Width = 137
    Height = 409
    ColCount = 2
    FixedCols = 0
    RowCount = 1
    FixedRows = 0
    TabOrder = 2
  end
end

Собственно программа:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    StringGrid2: TStringGrid;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    ar1 : Array Of String; // шифры
    ar2 : Array Of Double; // параметры

    ar3 : Array Of Integer; // индексы отфильтровки

    procedure Init; // инициализация. Для простоты - случайным образом.
    procedure PrintOut; // вывод
    procedure Filtr; // фидьрация
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Init;
  Filtr;
  PrintOut;
end;

procedure TForm1.Filtr;
var
  I : Integer;
begin
  SetLength(Ar3,0); // длинна массива = 0

  For I := Low(Ar2) To High(Ar2) Do // перебираем все параметры
    If Ar2[i] > 0.5 Then //твое условие отбора. здесь - парам. > 0.5
      Begin
        SetLength(Ar3,Length(ar3)+1); // увеличить длинну массива на 1
        Ar3[High(Ar3)] := I; // сохранить в новом элементе текущий индекс
      End;
end;

procedure TForm1.Init;
var
  N : Integer;
  I : Integer;
begin
  // Сколько будет исходный данных
  Randomize;
  N := 1 + Round(20 * Random);

  // Ставим длинну
  SetLength(Ar1,N);
  SetLength(Ar2,N);

  // инициализируем массивы
  For I := Low(Ar1) To High(Ar1) Do
    begin
      Ar1[i] := Chr(Round(26 * Random) + 65) + IntToStr(I); // буква + номер
      Ar2[i] := Random;
    end;

  // Выводим для наглядности
  StringGrid1.RowCount := N + 1; // 1- заголовок
  StringGrid1.Cells[0,0] := 'Шифр';
  StringGrid1.Cells[1,0] := 'Парам.';
  For I := 0 To Length(Ar1) - 1 Do
    Begin
      StringGrid1.Cells[0,I+1] := Ar1[i];
      StringGrid1.Cells[1,I+1] := FloatToStr(Ar2[i]);
    End;
end;

procedure TForm1.PrintOut;
var
  I : Integer;
begin
  StringGrid2.RowCount := Length(Ar3) + 1; // 1- заголовок
  StringGrid2.Cells[0,0] := 'Шифр';
  StringGrid2.Cells[1,0] := 'Парам.';
  For I := 0 To Length(Ar3) - 1 Do
    Begin
      StringGrid2.Cells[0,I+1] := Ar1[Ar3[i]];
      StringGrid2.Cells[1,I+1] := FloatToStr(Ar2[Ar3[i]]);
    End;
end;

end.
Ответить с цитированием
  #3  
Старый 21.04.2008, 12:53
overclocker01 overclocker01 вне форума
Прохожий
 
Регистрация: 20.04.2008
Сообщения: 6
Репутация: 10
По умолчанию

че-т я не могу разобраться.. =((
Вот что я смог сделать вчера..

Для Form:
Код:
object Form1: TForm1
  Left = 193
  Top = 134
  Width = 673
  Height = 480
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  Menu = MainMenu1
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 3
    Top = 72
    Width = 3
    Height = 13
  end
  object Label2: TLabel
    Left = 144
    Top = 72
    Width = 3
    Height = 13
  end
  object Label3: TLabel
    Left = 0
    Top = 48
    Width = 207
    Height = 13
    Caption = 'Шифр                  Максимальный перепад давления'
  end
  object Label4: TLabel
    Left = 0
    Top = 288
    Width = 3
    Height = 13
  end
  object StringGrid1: TStringGrid
    Left = 296
    Top = 64
    Width = 201
    Height = 153
    ColCount = 3
    FixedCols = 0
    RowCount = 6
    TabOrder = 0
    RowHeights = (
      24
      24
      24
      24
      24
      24)
  end
  object MainMenu1: TMainMenu
    object N1: TMenuItem
      Caption = 'Файл'
      object N3: TMenuItem
        Caption = 'Исходные данные'
        OnClick = N3Click
      end
      object max1: TMenuItem
        Caption = 'max перепад давления'
        Enabled = False
        OnClick = max1Click
      end
      object N51: TMenuItem
        Caption = Перепад давления 5Мпа'
      end
    end
    object N2: TMenuItem
      Caption = 'Выход'
      OnClick = N2Click
    end
  end
end

Программа:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    max1: TMenuItem;
    N51: TMenuItem;
    StringGrid1: TStringGrid;
    procedure N3Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure max1Click(Sender: TObject);
    procedure N51Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  max:real;
  n:real;
  i:integer;
  shifr:array[1..16] of string=('А6ГТШ','А7ГТШ','А7ГТШ-ТЛ','А7Ш','А9ГТШ-ТЛ','А09Ш','ЗТСШ1-172','ЗТСШ1-195','ЗТСШ1-195ТЛ','ЗТСШ-195','ЗТСШ-240','Т12МЗБ-195','Т12МЗБ-215','Т12МЗБ-240','Т12МЗЕ-172','ТС5Е-172');
  pressure:array[1..16] of real=(5,7,5,10,5,8.5,7.5,4.5,4,6,6,4.5,3,5,4,5);
implementation

{$R *.dfm}



procedure TForm1.N3Click(Sender: TObject);
var a:integer;
b:integer;
begin
for b:=1 to 16 do
label2.Caption:=label2.caption+FloatToStr(pressure[b])+#13;
for a:=1 to 16 do
label1.Caption:=label1.caption+shifr[a]+#13;
max1.Enabled:=true;
end;

procedure TForm1.N2Click(Sender: TObject);
begin
close;
end;

procedure TForm1.max1Click(Sender: TObject);
begin
max:=pressure[1];   n:=1;
for i:= 2 to 16 do
if max<pressure[i] then
begin
max:=pressure[i];   n:=i;
end;
label4.Caption:='Максимальный перепад давления:' +FloatToStr(max);
end;

procedure TForm1.N51Click(Sender: TObject);
begin
//не знаю, что сюда писать
end;

end.
Ответить с цитированием
  #4  
Старый 21.04.2008, 14:48
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну смотри.
Мои массивы Ar1 и Ar2 - это твои shifr и pressure. Только я опять же воспользовался динамическими, т.к. руками просто лень забивать.
Маленькая ремарка - динамические массивы всегда начинаются с 0.

Далее, как я понимаю, во втором массиве расположены значения перепада давления. Соответсвенно, в моей процке Filtr условие для твоих массивов должно выглядеть как
Код:
If pressure[i] >= 5 Then ...
Тут ты также можешь сделать статический массив + счетчик использованных в ном ячеек (мой массив Ar3).
Допустим:
Код:
var 
  pressure5Count : Integer;
  pressure5 : Array [1..16] Of Integer;

procedure TForm1.Filtr;
var
  I : Integer;
begin
  pressure5Count := 0; // пока массив не заполнен

  For I := 1 To 16 Do // перебираем все параметры
    If pressure[i] >= 5 Then //твое условие отбора. здесь - парам. > 5
      Begin
        pressure5Count := pressure5Count + 1; // используем следующую ячейку
        pressure5[pressure5Count] := I; // сохранить в новом элементе текущий индекс
      End;
end;

Таким образом, при запуску Filtr тмеем переменную pressure5Count, в которой находится кол-во насосов с перепадом давления 5 или больше МПа и заполненный массив с номерами насосов pressure5.

Про вывод. Фактически, мы имеем в pressure5Count кол-во нужных нам насосов. В StringGrid1 мы должны создать соотв. кол-во строк (+1 на заголовок). Нумерация у них начинается с 0. И заголовок тоже надо заполнить. Для твоего случая будет что-то в этом роде:
Код:
procedure TForm1.PrintOut;
var
  I : Integer;
begin
  StringGrid1.RowCount := pressure5Count + 1; // 1я - заголовок
  StringGrid1.Cells[0,0] := 'Шифр';
  StringGrid1.Cells[1,0] := 'Парам.';
  For I := 1 To pressure5Count Do
    Begin
      StringGrid1.Cells[0,I] := shifr[pressure5[i]];
      StringGrid1.Cells[1,I] := FloatToStr(pressure[pressure5[i]]);
    End;
end;

здесь, вроде, все понятно.
Ответить с цитированием
  #5  
Старый 21.04.2008, 23:03
overclocker01 overclocker01 вне форума
Прохожий
 
Регистрация: 20.04.2008
Сообщения: 6
Репутация: 10
По умолчанию

спасибо огромное =) все сделал, но чуть по-другому..
Ответить с цитированием
  #6  
Старый 09.12.2009, 17:32
slee slee вне форума
Прохожий
 
Регистрация: 09.12.2009
Сообщения: 2
Репутация: 10
По умолчанию помогите пожалуйста

Задан массив А, вывести из него массив В который будет содержать все числа из А, за исключением максимального
Ответить с цитированием
  #7  
Старый 09.12.2009, 17:35
slee slee вне форума
Прохожий
 
Регистрация: 09.12.2009
Сообщения: 2
Репутация: 10
По умолчанию

если не трудно и есть возможность - напишите вконтакт на id3903580
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:53.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025