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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.12.2011, 16:21
xrumas xrumas вне форума
Прохожий
 
Регистрация: 01.12.2011
Сообщения: 15
Репутация: 10
По умолчанию Программирование матричных операций



По заданию сделал 3 пункта, на 4ом больше часа тыркался, не получается.

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Memo1: TMemo;
    Label1: TLabel;
    Button2: TButton;
    Edit3: TEdit;
    Memo2: TMemo;
    Button3: TButton;
    Label3: TLabel;
    Edit2: TEdit;
    Button4: TButton;
    Label5: TLabel;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    Image1: TImage;
    Image2: TImage;
    Label2: TLabel;
    Label4: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    Image3: TImage;
    Label8: TLabel;
    Button5: TButton;
    Button6: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
//    procedure Button3Click(Sender: TObject);
//    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  a:array[1..1000,1..1000] of real;
  x:array[1..1000] of real;
  n,m,i,j:integer;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); //ïîñòðîèòü ìàòðèöó
begin
memo1.clear;
n:=strtoint(edit1.Text);
  for i:=1 to n do begin
  memo1.lines.add(' ');
    for j:=1 to n do begin
    a[i,j]:=(sqr(2*i+2*j))/(exp(1/3*ln(i+j+5)));
      memo1.text:=memo1.text+floattostrf(a[i,j],fffixed,8,3)+'  ';
    end;

  end;

end;


procedure TForm1.Button2Click(Sender: TObject);
var  maxj:integer;
maxv:real;
begin

 for i:=1 to n do
 begin
  maxv:=sqrt(a[i,1]);
  for j:=1 to n do begin
    if sqrt(a[i,j]) > maxv then maxv:=sqrt(a[i,j]);end;
  x[i]:=maxv
      end;
  for i:=1 to n do
      edit3.text:=edit3.text+floattostrf(X[i],fffixed,8,3)+'  ';
end;


procedure TForm1.Button3Click(Sender: TObject);  //ñîðòèðîâêà ïî óáûâàíèþ
var i,j,z,w :integer;
t:real;
begin
memo2.Clear;
  for i:=1 to n do
    for j:=i to n do
    begin
      if A[i,i] < A[j,j] then
          begin
           t:=A[i,i];
           A[i,i]:=A[j,j];
           A[j,j]:=t;
          end;
   end;

  for i:=1 to n do
  begin
  memo2.lines.add(' ');
    for j:=1 to n do
         memo2.text:=memo2.text+floattostrf(a[i,j],fffixed,8,3)+'  ';
    end;


end;
procedure TForm1.Button4Click(Sender: TObject);
var y1,y2:real;
begin
y1:=x[i];
y2:=0;
  for i:=1 to n do begin
     y1:=x[1]*x[1+2];

     for j:=1 to n do begin
      y2:=y2+y1;
end;

   edit4.Text:=floattostr(y1);
edit2.text:=floattostr(y2);
end;
END;
procedure TForm1.Button5Click(Sender: TObject);
begin
form1.Close;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
edit1.Text:=inttostr(3);
memo1.Clear;
memo2.Clear;
edit3.Clear;
edit2.clear;
end;

end.
Вложения
Тип файла: zip code3.zip (227.5 Кбайт, 5 просмотров)
Ответить с цитированием
  #2  
Старый 08.12.2011, 17:11
xrumas xrumas вне форума
Прохожий
 
Регистрация: 01.12.2011
Сообщения: 15
Репутация: 10
По умолчанию

Вот кусок с 4ым пунктом
Код:
procedure TForm1.Button4Click(Sender: TObject);
var y1,y2:real;
begin
y1:=x[i];
y2:=0;
  for i:=1 to n do begin
     y1:=x[1]*x[1+2];

     for j:=1 to n do begin
      y2:=y2+y1;
end;

   edit4.Text:=floattostr(y1);
edit2.text:=floattostr(y2);
end;
END;
Ответить с цитированием
  #3  
Старый 08.12.2011, 23:11
xrumas xrumas вне форума
Прохожий
 
Регистрация: 01.12.2011
Сообщения: 15
Репутация: 10
По умолчанию

После создания вектора Х, элемент х[i] почему то оказываеться последним, как считать с 1го элемента?
Ответить с цитированием
  #4  
Старый 08.12.2011, 23:14
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Это как понять?
Код:
procedure TForm1.Button4Click(Sender: TObject);
var y1,y2:real;
begin
y1:=x[i];
y2:=0;
  for i:=1 to n do begin
     y1:=x[1]*x[1+2];

     for j:=1 to n do begin
      y2:=y2+y1;
end;

   edit4.Text:=floattostr(y1);
edit2.text:=floattostr(y2);
end;
END;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 09.12.2011, 15:45
xrumas xrumas вне форума
Прохожий
 
Регистрация: 01.12.2011
Сообщения: 15
Репутация: 10
По умолчанию

Изначально было y1=1, потом менял, пробывал по другому несколько раз.
Ответить с цитированием
  #6  
Старый 10.12.2011, 14:30
xrumas xrumas вне форума
Прохожий
 
Регистрация: 01.12.2011
Сообщения: 15
Репутация: 10
По умолчанию

Цитата:
Файл, содержащая произвольный русский текст, состоит не более чем из 200 символов. Написать, какие буквы и сколько раз встречаются в этом тексте. Ответ должен приводиться в грамматически правильной форме, например а — 25 раз, к — 3 раза и т.д.
По примерам, найденым сдесь написал программу, считает все правельно, НО, как сделать что бы был вывод правильный Ответ должен приводиться в грамматически правильной форме, например а — 25 раз, к — 3 раза ?
Код:
unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   Button1: TButton;
   OpenDialog1: TOpenDialog;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
 //buffer, inache zavisaet
BLenMax = 100000;
 //mnozhestvo russkih bukv
 D = ['À'..'Ï', 'Ð'..'ß', '¨'];
var
 F : File;
 Buff : array of Char;
 AStat : array[Char] of Integer;
 Ch : Char;
 i, BLenRes : Integer;
 razi : string;
begin
 if OpenDialog1.InitialDir = '' then
   OpenDialog1.InitialDir := ExtractFilePath( Application.ExeName )
 ;
 if not OpenDialog1.Execute then Exit;
 if not FileExists(Opendialog1.FileName) then begin
   MessageDlg(
     'ôàéë ñ òàêèì èìåíåì íå íàéäåí',
     mtWarning, [mbOk], 0
   );
   Exit;
 end;

 //obnilyaem massiv
 for Ch := #0 to #255 do AStat[Ch] := 0;
 SetLength(Buff, BLenMax);
 
 //Open and read selected file
 AssignFile(F, OpenDialog1.FileName);
 Reset(F, 1);
 while not Eof(F) do begin
   BlockRead(F, Pointer(Buff)^, BLenMax, BLenRes);
   for i := 0 to BLenRes - 1 do begin
     Ch := AnsiUpperCase(Buff[i])[1];
     Inc(AStat[Ch]);
   end;
 end;
 CloseFile(F);

 //vivod v memo1
 Memo1.Lines.Add('Èñïîëüçîâà 37;û áóêâû:');
 for Ch := #0 to #255 do begin
   if not (Ch in D) then Continue;
   Memo1.Lines.Add('Буква: "' + Ch + '", использована = ' + IntToStr(AStat[Ch]));
 end;
end;

end.
Ответить с цитированием
  #7  
Старый 10.12.2011, 21:15
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от xrumas
...Ответ должен приводиться в грамматически правильной форме, например а — 25 раз, к — 3 раза...
Довольно старая задача. Имеется простое решение, пишутся в массив все окончания и подставляются в соответствии последней цифры.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 10.12.2011, 22:14
xrumas xrumas вне форума
Прохожий
 
Регистрация: 01.12.2011
Сообщения: 15
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Довольно старая задача. Имеется простое решение, пишутся в массив все окончания и подставляются в соответствии последней цифры.

Предложили вставить вот такую функцию, но с ней всегда пишет раз

Код:
function EhRazEscheRazEscheMnogoMnogoRaz(N: cardinal): string;
begin
 if (N in [5..21]) or ((N mod 10) in [0, 1, 5..9]) then
   Result := 'раз';
 else
   Result := 'раза';
end;

Вот что получилось, может где ошибься.

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  
private
  function RaziliRazi(N: cardinal): string;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.RaziliRazi(N: cardinal): string;
begin
 if (N in [5..21]) or ((N mod 10) in [0, 1, 5..9]) then
   Result := 'раз'
 else
   Result := 'раза';
end;


procedure TForm1.Button1Click(Sender: TObject);
const
  //buffer, inache zavisaet
 BLenMax = 100000;
  //mnozhestvo russkih bukv
  D = ['À'..'Ï', 'Ð'..'ß', '¨'];
var
  F : File;
  Buff : array of Char;
  AStat : array[Char] of Integer;
  Ch : Char;
  n, i, BLenRes : Integer;

begin
  if OpenDialog1.InitialDir = '' then
    OpenDialog1.InitialDir := ExtractFilePath( Application.ExeName )
  ;
  if not OpenDialog1.Execute then Exit;
  if not FileExists(Opendialog1.FileName) then begin
    MessageDlg(
      'нет файла',
      mtWarning, [mbOk], 0
    );
    Exit;
  end;

  //obnilyaem massiv
  for Ch := #0 to #255 do AStat[Ch] := 0;
  SetLength(Buff, BLenMax);
  
  //Open and read selected file
  AssignFile(F, OpenDialog1.FileName);
  Reset(F, 1);
  while not Eof(F) do begin
    BlockRead(F, Pointer(Buff)^, BLenMax, BLenRes);
    for i := 0 to BLenRes - 1 do begin
      Ch := AnsiUpperCase(Buff[i])[1];
      Inc(AStat[Ch]);
    end;
  end;
  CloseFile(F);
 
  //vivod v memo1
  Memo1.Lines.Add('Èñïîëüçîâàíû áóêâû:');
  for Ch := #0 to #255 do begin
   if not (Ch in D) then Continue;

    Memo1.Lines.Add('Буква: "' + Ch + '", использована = ' + IntToStr(AStat[Ch])+' '+RaziliRazi(N));

  end;
end;

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

procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Clear;
end;

end.
Изображения
Тип файла: jpg Image 1.jpg (92.1 Кбайт, 3 просмотров)
Ответить с цитированием
  #9  
Старый 10.12.2011, 22:26
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Возможно я что то не понимаю, но где вычисляется переменная N:
Код:
   Memo1.Lines.Add('Буква: "' + Ch + '", использована = ' + IntToStr(AStat[Ch])+' '+RaziliRazi(N));
а так как она глобальная, то всегда иницирована 0, т.е. всегда будет подставляться 'раз'.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 10.12.2011 в 22:28.
Ответить с цитированием
  #10  
Старый 10.12.2011, 22:40
xrumas xrumas вне форума
Прохожий
 
Регистрация: 01.12.2011
Сообщения: 15
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Возможно я что то не понимаю, но где вычисляется переменная N:
Код:
   Memo1.Lines.Add('Буква: "' + Ch + '", использована = ' + IntToStr(AStat[Ch])+' '+RaziliRazi(N));
а так как она глобальная, то всегда иницирована 0, т.е. всегда будет подставляться 'раз'.

Что то я не пойму как я вычеслять, то есть после чего цикл вставить.
Ответить с цитированием
  #11  
Старый 10.12.2011, 22:57
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Надеюсь не напутал:
Код:
  //obnilyaem massiv
//  for Ch := #0 to #255 do AStat[Ch] := 0;
  // так проще
  FillChar(AStat, SizeOf(AStat), 0);
...
    Memo1.Lines.Add('Буква: "' + Ch + '", использована = ' + IntToStr(AStat[Ch]) + ' ' + RaziliRazi(AStat[Ch]));
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #12  
Старый 10.12.2011, 23:06
xrumas xrumas вне форума
Прохожий
 
Регистрация: 01.12.2011
Сообщения: 15
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Надеюсь не напутал:
Код:
  //obnilyaem massiv
//  for Ch := #0 to #255 do AStat[Ch] := 0;
  // так проще
  FillChar(AStat, SizeOf(AStat), 0);
...
    Memo1.Lines.Add('Буква: "' + Ch + '", использована = ' + IntToStr(AStat[Ch]) + ' ' + RaziliRazi(AStat[Ch]));

Спасибо большое, теперь будем разбираться и дальше читать книги.

Все работает.
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private

    function RaziliRazi(N: cardinal): string;

    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.RaziliRazi(N: cardinal): string;
begin
 if (N in [5..21]) or ((N mod 10) in [0, 1, 5..9]) then
   Result := 'раз'
 else
   Result := 'раза';
end;

procedure TForm1.Button1Click(Sender: TObject);
const
  //buffer, inache zavisaet
 BLenMax = 100000;
  //mnozhestvo russkih bukv
  D = ['А'..'П', 'Р'..'Я', 'Ё'];
  battle: array[0..2] of string=(' ðàç',' ðàç',' ðàçà');
var
  F : File;
  Buff : array of Char;
  AStat : array[Char] of Integer;
  Ch : Char;
  i, BLenRes : Integer;

begin
  if OpenDialog1.InitialDir = '' then
    OpenDialog1.InitialDir := ExtractFilePath( Application.ExeName )
  ;
  if not OpenDialog1.Execute then Exit;
  if not FileExists(Opendialog1.FileName) then begin
    MessageDlg(
      'Файл не найден',
      mtWarning, [mbOk], 0
    );
    Exit;
  end;

  //obnгlyaem massiv
  for Ch := #0 to #255 do AStat[Ch] := 0;
  SetLength(Buff, BLenMax);
  
  //Open and read selected file
  AssignFile(F, OpenDialog1.FileName);
  Reset(F, 1);
  while not Eof(F) do begin
    BlockRead(F, Pointer(Buff)^, BLenMax, BLenRes);
    for i := 0 to BLenRes - 1 do begin
      Ch := AnsiUpperCase(Buff[i])[1];
      Inc(AStat[Ch]);
    end;
  end;
  CloseFile(F);
 
  //vivod v memo1
  Memo1.Lines.Add('Использованы буквы:');
  for Ch := #0 to #255 do begin
   if not (Ch in D) then Continue;
    Memo1.Lines.Add('Буква: "' + Ch + '", использована = ' + IntToStr(AStat[Ch]) + ' ' + RaziliRazi(AStat[Ch]));

 end;
  end;


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

procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Clear;
end;

end.
Ответить с цитированием
  #13  
Старый 10.12.2011, 23:09
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Замени:
Код:
  for Ch := #0 to #255 do AStat[Ch] := 0;
на
Код:
  FillChar(AStat, SizeOf(AStat), 0);
второй код понятнее и удобнее.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #14  
Старый 10.12.2011, 23:41
xrumas xrumas вне форума
Прохожий
 
Регистрация: 01.12.2011
Сообщения: 15
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Замени:
Код:
  for Ch := #0 to #255 do AStat[Ch] := 0;
на
Код:
  FillChar(AStat, SizeOf(AStat), 0);
второй код понятнее и удобнее.

Читал про эту процедуру и забыл пост обновить c программой
Ответить с цитированием
  #15  
Старый 12.11.2012, 23:41
Serge Serge вне форума
Прохожий
 
Регистрация: 12.11.2012
Сообщения: 1
Репутация: 10
По умолчанию

не подскажите, как продолжить этот код, чтобы он показывал % использования каждой буквы от общей суммы
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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