• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Срочно нужна помощь по Delphi не позднее 25.04

  • Автор темы Автор темы Ciber
  • Дата начала Дата начала

Ciber

Ученик
Регистрация
18 Апр 2010
Сообщения
9
Реакции
0
Баллы
0
Срочно нужна помощь по Delphi не позднее 25.04

Составьте программу, проверяющую, можно ли, меняя местами элементы одномерного массива А, получить одномерный массив B.
Дана вещественная матрица размером NxM. Упорядочить ее строки по неубыванию суммы их элементов.
 
Составьте программу, проверяющую, можно ли, меняя местами элементы одномерного массива А, получить одномерный массив B.
Можно. И безо всякой программы. Меняйте местами, что хотите - массив всё равно останется одномерным.
А если серьезно - то что это, извините, за ахинея? Конечно, можно строить всякие предположения - например, что требуется составить алгоритм получения из массива А УПОРЯДОЧЕННОГО (напр. по возрастанию) массива В путем перестановки ПАР СОСЕДНИХ ЭЛЕМЕНТОВ. Ну или еще что-нибудь в этом роде. Но, поскольку Вы не считаете нужным ХОТЯ БЫ ВНИМАТЕЛЬНО ПРОЧИТАТЬ то, что вываливаете на форум, то и с нас спрос не велик - разгадывать шарады типа "а что имел в виду автор вопроса?" мы не обязаны.
 
Я конечно согласен по поводу точности задания, и шарад. Как я понял задание: вводятся два массива, А и В. Надо определить, можно ли перестановкой элементов в массиве А сделать его равным массиву В
 
Я конечно согласен по поводу точности задания, и шарад. Как я понял задание: вводятся два массива, А и В. Надо определить, можно ли перестановкой элементов в массиве А сделать его равным массиву В
Пожалуй. Скорее всего, так. Однако, всё равно не понятно. Очень странная формулировка задачи - не "разработать алгоритм", а "определить, можно ли...". Совершенно очевидно, что да, можно.
 
Подозреваю, что при следующем наборе тестовых данных:
А=(1,2,3,4,5);
В=(5,4,1,2,3);
программа должна сообщить, что "можно", а при
А=(2,3,1);
В=(1 4,3);
"нельзя"
 
Подозреваю, что при следующем наборе тестовых данных:
А=(1,2,3,4,5);
В=(5,4,1,2,3);
программа должна сообщить, что "можно", а при
А=(2,3,1);
В=(1 4,3);
"нельзя"

если я понял, то так он должен быть
 
Сортируем первый и второй массивы. Сравниваем. Финиш.
 
Вот 1 задача, а вторая очень лёгкая попробуйте сами её сделать(если что мы поможем:tehnari_ru_674:)
Код:
unit Unit2;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
 var j, m ,x, k: Integer;
     a,b:array[1..10]of integer;
     i:byte;
     s1,s2:string;
 begin
   randomize;
   form1.Panel1.Caption:='';
   form1.Panel2.Caption:='';
   form1.Panel3.Caption:='';
     for i:=1 to 10 do
         begin
         a[i]:=random(10);
         b[i]:=random(10);
         s1:=IntToStr(a[i]);
         s2:=IntToStr(b[i]);
         form1.Panel1.Caption:=form1.Panel1.Caption+s1+'  ';
         form1.Panel2.Caption:=form1.Panel2.Caption+s2+'  ';
         end;
{сортируем массив а}
   for i := 1 to 9 do
        begin
          m := i;
          x := A[i];
          for j := i + 1 to 10 do
            if x > A[j] then
              begin
                m := j;
                x := A[j];
              end;
            A[m] := A[i];
            A[i] := x;
        end;

{сортируем массив b}
   for i := 1 to 9 do
        begin
          m := i;
          x := b[i];
          for j := i + 1 to 10 do
            if x > b[j] then
              begin
                m := j;
                x := b[j];
              end;
            b[m] := b[i];
            b[i] := x;
        end;
 k:=0;
 for i:=1 to 10 do
    if a[i]=b[i] then inc(k);
 if k=10 then form1.Panel3.Caption:=' Можно '
         else form1.Panel3.Caption:=' Нельзя '
end;

end.
 
Вот 1 задача, а вторая очень лёгкая попробуйте сами её сделать(если что мы поможем:tehnari_ru_674:)
Код:
unit Unit2;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
 var j, m ,x, k: Integer;
     a,b:array[1..10]of integer;
     i:byte;
     s1,s2:string;
 begin
   randomize;
   form1.Panel1.Caption:='';
   form1.Panel2.Caption:='';
   form1.Panel3.Caption:='';
     for i:=1 to 10 do
         begin
         a[i]:=random(10);
         b[i]:=random(10);
         s1:=IntToStr(a[i]);
         s2:=IntToStr(b[i]);
         form1.Panel1.Caption:=form1.Panel1.Caption+s1+'  ';
         form1.Panel2.Caption:=form1.Panel2.Caption+s2+'  ';
         end;
{сортируем массив а}
   for i := 1 to 9 do
        begin
          m := i;
          x := A[i];
          for j := i + 1 to 10 do
            if x > A[j] then
              begin
                m := j;
                x := A[j];
              end;
            A[m] := A[i];
            A[i] := x;
        end;

{сортируем массив b}
   for i := 1 to 9 do
        begin
          m := i;
          x := b[i];
          for j := i + 1 to 10 do
            if x > b[j] then
              begin
                m := j;
                x := b[j];
              end;
            b[m] := b[i];
            b[i] := x;
        end;
 k:=0;
 for i:=1 to 10 do
    if a[i]=b[i] then inc(k);
 if k=10 then form1.Panel3.Caption:=' Можно '
         else form1.Panel3.Caption:=' Нельзя '
end;

end.

Спасибо за прогу))) но почему то он не разу не выдал сообщение "Можно", как его реализовать с помощью StringGrid?
 
Не сразу выдал "можно", т.к. заполнение массива идет случайным образом и, следовательно, они не с первой попытки заполнились одинаково.
Со StringGrid сделаю, а со второй задачей Вы разобрались?
 
Код:
unit Unit2;

interface

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

type
  TForm1 = class(TForm)
    SG1: TStringGrid;
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
Form1: TForm1;
j, m ,x, k: Integer;
a,b:array[1..5]of integer;
i:byte;
s1,s2:string;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin
for i:=1 to 5 do
  if Length(SG1.Cells[i-1, 0]) <>0
     then a[i] := StrToInt(SG1.Cells[i-1,0])
     else a[i] := 0;
{сортируем массив а}
   for i := 1 to 4 do
        begin
          m := i;
          x := A[i];
          for j := i + 1 to 5 do
            if x > A[j] then
              begin
                m := j;
                x := A[j];
              end;
            A[m] := A[i];
            A[i] := x;
        end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 for i:=1 to 5 do
  if Length(SG1.Cells[i-1, 0]) <>0
     then b[i] := StrToInt(SG1.Cells[i-1,0])
     else b[i] := 0;
     {сортируем массив b}
 for i := 1 to 4 do
        begin
          m := i;
          x := b[i];
          for j := i + 1 to 5 do
            if x > b[j] then
              begin
                m := j;
                x := b[j];
              end;
            b[m] := b[i];
            b[i] := x;
        end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  k:=0;
 for i:=1 to 5 do
    if a[i]=b[i] then inc(k);
 if k=5 then form1.Panel1.Caption:=' Можно '
         else form1.Panel1.Caption:=' Нельзя '
end;

end.
Я сделал со StringGrid вот так. Кнопка 1 для ввода 1-го массива, кнопка 2 для ввода 2 массива, кнопка 3 для выдачи результата.
 
Последнее редактирование:
Со StringGrid сделаю, а со второй задачей Вы разобрались?
Написал программу, но почему то не работает, вот код проги

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
Label3: TLabel;
Label4: TLabel;
Button1: TButton;
CheckBox1: TCheckBox;
procedure Edit1Change(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
var m,n:integer;
procedure TForm1.Edit1Change(Sender: TObject);
begin
if edit1.Text='' then n:=1
else n:=strToint(Edit1.Text);
StringGrid1.RowCount:=n+1;
StringGrid2.RowCount:=n+1;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
if edit2.Text='' then n:=1
else n:=strToint(Edit2.Text);
StringGrid1.ColCount:=n+1;
StringGrid2.ColCount:=n+1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var x:array [1..100, 1..100] of real;
s:array [1..100] of real;
i,j:integer;
begin
For i:=1 to n do
For j:=1 to m do
If CheckBox1.Checked:=True
then
begin
x[i,j]:=strToFloat (stringgrid1.Cells[j,i]);
StringGrid1.Enabled:=true;
end;
else
begin
x[i,j]:=random (11);
stringgrid1.Cells [j,i]:=FloatToStr (x[i,j]);
end;
For j:=1 to m do
begin
s[j]:=0;
for i:=1 to n do s[j]:=s[j]+x[i,j];
end;
For j:=1 to m do
Stringgrid2.Cells [j,i]:=FloatToStr [s[j]);
end;
end;

end.

что у меня не правильно никак не пойму, если можно напишите правильную версию проги)))
 
Назад
Сверху