Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 15.11.2015
Сообщений: 99

Создать приложение

07.03.2016, 17:39. Показов 4762. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создать приложение, в рамках которого реализуется возможность перемещения элементов главной диагонали квадратной матрицы на первое или на последнее место соответствующих столбцов. Порядок следования остальных элементов в столбцах не должен меняться. Процедуры ввода элементов матрицы , перемещения элементов должны распологаться в модуле пользователя, который подключается к проекту. Размерность матрицы вводится функцией InputBox.
Интерфейс приложения включает в себя два компонента Memo для отображения исходной и результирующей матрицы и четыре стандартные кнопки, позволяющие вводить матрицу, задавать направление перемещения и завершать приложение.
-Для ввода матрицы я вроде всё написал, но при написании программы дома вылезла какая-то ошибка. Также не знаю как написать перемещение элементов нажатием на кнопку (а именно как работать с той же матрицей). А ещё не знаю какая функция завершает программу, нажатием на кнопку. Помогите пожалуйста, пояснения очень даже приветствуются))
Миниатюры
Создать приложение   Создать приложение   Создать приложение  

0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.03.2016, 17:39
Ответы с готовыми решениями:

Создать приложение
1.Создать приложение с таблицей размером 12*10.При нажатий кнопки Максимум,в компоненте Edit отражается максимальный элемент таблицы. ...

Создать приложение
Помогите, пожалуйста написать программу. Даже не понимаю с чего можно начать. Препод почти ничего не объясняет, а сдать рубежный контроль...

Создать простейшее приложение
Создать простейшее приложение в Lazarus. Форма должна содержать три взаимосвязанных компонента различных страниц...

14
0 / 0 / 0
Регистрация: 15.11.2015
Сообщений: 99
07.03.2016, 17:41  [ТС]
Перепечатанный текст после implementation:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
var
   a:mas;
     n:integer;
     procedure input(var a:mas; var n:integer);
     var
         i,j:integer;
         begin
           for i:=1 to n do
           begin
             for j:=1 to n do
             begin
             a[i,j]:=random(100);
           end;
         end;
         end;
 
              { TForm1 }
 
     Procedure TForm1.Button1Click(Sender: TObject);
         var
             i,j:integer;
             s,s1:string;
         begin
       n:=strtoint(inputbox('kol-vo elementov','vvedite chislo',' '));
       input(a,n);
       memo1.lines.add('ishodn matr');
       for i:=1 to n do
       begin
         s1:=' ';
         for j:=1 to n do
         begin
         STR(a[i,j]:4,s);
         s1:=s1+s;
         end;
        memo1.lines.add(s1);
       end;
     end;     
end.
0
446 / 374 / 133
Регистрация: 09.09.2011
Сообщений: 1,346
08.03.2016, 00:12
1. can't create object file: project.exe - такая ошибка у меня была, когда я жал RUN а предыдущий запуск приложения еще не завершился. Т.е. нажал F9 -> программа запустилась, я закрыл окно, но приложение еще не завершилось (можно увидеть project1.exe в диспетчере задач) -> F9 -> ошибка (из-за того, что windows не дает удалить/перезаписать exe-файл запущенного приложения, т.к. он отображается в память. на linux такой ошибке не возникнет).

2. под массив можно динамический массив взять.
3. Для вывода/отображения массива TStringGrid использовать удобнее.

Добавлено через 8 минут
для закрытия/завершения приложения можно:

1. закрыть окно главной формы:
Delphi
1
Form1.Colse;
2. вызвать метод глобального объекта Application:
Delphi
1
Application.terminate;
не уверен что это сработает, без дополнительного кода...
3. Вызвать процедуру Halt
Delphi
1
Halt(0);
Добавлено через 2 минуты
А TMemo - явно указан в задании, тогда ок.

Добавлено через 6 минут
перемещение на первый столбец:

Delphi
1
2
3
4
5
6
7
8
var 
  tmp: integer;
{...}
for i:=2 to n do begin // c 2 строки, т.к. в первой ничего менять не надо
  tmp:= a[i,i];
  a[i,i]:= a[i, 1];
  a[i, 1]:= tmp;
end;
для переноса главной диагонали в правый столбец - твое домашнее задание.
1
0 / 0 / 0
Регистрация: 15.11.2015
Сообщений: 99
08.03.2016, 23:29  [ТС]
А в процедуре перемещения что вы подразумеваете под многоточием?

Добавлено через 50 минут
Описание массива и счётчика?
0
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
09.03.2016, 08:59
Лучший ответ Сообщение было отмечено dimasik tut как решение

Решение

Цитата Сообщение от dimasik tut Посмотреть сообщение
Порядок следования остальных элементов в столбцах не должен меняться.
Я так понял что нужно не просто поменять элемент главной диагонали с первым или с последним элементом столбца, а произвести циклический сдвиг элементов столбца вверх или вниз.
Для того чтобы можно было при одном запуске программы сделать оба сдвига, ввел вспомогательный массив, если это не нужно, можно лишнее выкинуть из программы.
Текст модуля
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
unit Unit2;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Dialogs, StdCtrls;
type mtr=array of array of integer;
 
procedure print(a:mtr;n:integer;m:TMemo;t:string);
procedure vvod(var a:mtr;var n:integer;m:TMemo);
procedure sdv_up(a:mtr;n:integer;m:TMemo);
procedure sdv_down(a:mtr;n:integer;m:TMemo);
 
implementation
function copy_mtr(a:mtr;n:integer):mtr;
var i,j:integer;
begin
setlength(result,n,n);
for i:=0 to n-1 do
for j:=0 to n-1 do
result[i,j]:=a[i,j];
end;
procedure print(a:mtr;n:integer;m:TMemo;t:string);
var i,j:integer;
    s,s1:string;
begin
  m.Font.Name:='Courier New';//установим моноширный шрифт
  m.Font.Size:=8;
  m.Clear;
  m.Lines.Add(t);
  for i:=0 to n-1 do
   begin
    s:='';
    for j:=0 to n-1 do
     begin
      str(a[i,j]:3,s1);
      s:=s+s1;
     end;
    m.Lines.Add(s);
   end;
end;
procedure vvod(var a:mtr;var n:integer;m:TMemo);
var i,j:integer;
begin
randomize;
repeat
n:=strtoint(inputbox('Размер матрицы','Введите размер матрицы от 2 до 15','0'))
until n in [2..15];
setlength(a,n,n);
for i:=0 to n-1 do
for j:=0 to n-1 do
a[i,j]:=10+random(50);
print(a,n,m,'    Исходная матрица');
end;
 
procedure sdv_up(a:mtr;n:integer;m:TMemo);
var i,j,k,x:integer;
    a1:mtr;
begin
a1:=copy_mtr(a,n);
for j:=1 to n-1 do
 begin
  for k:=0 to j-1 do
    begin
     x:=a1[0,j];
     for i:=0 to n-2 do
     a1[i,j]:=a1[i+1,j];
     a1[n-1,j]:=x;
    end;
 end;
print(a1,n,m,'  Перемещение элементов главной диагонали вверх');
end;
procedure sdv_down(a:mtr;n:integer;m:TMemo);
var i,j,k,x:integer;
    a1:mtr;
begin
a1:=copy_mtr(a,n);
for j:=0 to n-2 do
 begin
  for k:=1 to n-j-1 do
    begin
     x:=a1[n-1,j];
     for i:=n-1 downto 1 do
     a1[i,j]:=a1[i-1,j];
     a1[0,j]:=x;
    end;
 end;
print(a1,n,m,'  Перемещение элементов главной диагонали вниз');
end;
 
end.
Текст программы
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
  StdCtrls, Unit2;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  a,a1:mtr;
  n: integer;
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
begin
vvod(a,n,Memo1);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
sdv_up(a,n,Memo2);
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
sdv_down(a,n,Memo2);
end;
 
procedure TForm1.Button4Click(Sender: TObject);
begin
  Close;
end;
 
end.
Вложения
Тип файла: rar Сдвиги в столбцах матрицы.rar (4.9 Кб, 27 просмотров)
1
446 / 374 / 133
Регистрация: 09.09.2011
Сообщений: 1,346
09.03.2016, 22:33
Соглашусь с Puporev, именно циклический сдвиг скорее всего имеется в виду. Я не внимательно прочитал задание.
0
0 / 0 / 0
Регистрация: 15.11.2015
Сообщений: 99
15.03.2016, 01:00  [ТС]
А как бы выглядела эта программа с использованием TStringGrid?
0
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.03.2016, 08:27
Лучший ответ Сообщение было отмечено dimasik tut как решение

Решение

StringGrid
Вложения
Тип файла: rar Сдвиги в столбцах матрицы StringGrid.rar (4.9 Кб, 27 просмотров)
1
0 / 0 / 0
Регистрация: 15.11.2015
Сообщений: 99
19.03.2016, 23:45  [ТС]
Немного не так. Там нужно, чтобы другие элементы не меняли порядок следования. Т.е. таким образом:
Миниатюры
Создать приложение  
0
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
20.03.2016, 08:10
Так у меня как раз так и сделано.
Миниатюры
Создать приложение  
0
0 / 0 / 0
Регистрация: 15.11.2015
Сообщений: 99
21.03.2016, 19:39  [ТС]
Исходя из вашей матрицы, вот что должно получиться... Тоесть, допустим, возьмём 3 слева столбец, 56 перетаскиваем наверх, а 29 и 23, не меняя порядка следования(29 идёт после 23) сдвигаются на одну позицию вниз
Миниатюры
Создать приложение  
0
0 / 0 / 0
Регистрация: 15.11.2015
Сообщений: 99
21.03.2016, 19:40  [ТС]
накалякал матрицу 7*7, если не понятно) Для примера рассмотрел один из столбцов
0
0 / 0 / 0
Регистрация: 15.11.2015
Сообщений: 99
21.03.2016, 19:41  [ТС]
вот...
Миниатюры
Создать приложение   Создать приложение  
0
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
21.03.2016, 20:10
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
procedure sdv_up(a:mtr;n:integer;s:TStringGrid);
var i,j,x:integer;
    a1:mtr;
begin
a1:=copy_mtr(a,n);
for j:=1 to n-1 do
 begin
  x:=a1[j,j];
  for i:=j downto 1 do
  a1[i,j]:=a1[i-1,j];
  a1[0,j]:=x;
 end;
print(a1,n,s);
end;
procedure sdv_down(a:mtr;n:integer;s:TStringGrid);
var i,j,x:integer;
    a1:mtr;
begin
a1:=copy_mtr(a,n);
for j:=0 to n-2 do
 begin
  x:=a1[j,j];
  for i:=j to n-2 do
  a1[i,j]:=a1[i+1,j];
  a1[n-1,j]:=x;
 end;
print(a1,n,s);
end;
0
0 / 0 / 0
Регистрация: 15.11.2015
Сообщений: 99
23.03.2016, 00:30  [ТС]
Спасибо вам!))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.03.2016, 00:30
Помогаю со студенческими работами здесь

Создать приложение, рисующее Циклоиду
Не могли бы вы составить приложение рисующие самую обыкновенную циклоиду.Ну то есть катящаяся окружность рисующая циклоиду. Уравнение в...

Создать приложение, в котором построить графики
Создать приложение, в котором с помощью компонента Chart построить графики. Вариант 4.

Создать приложение, меняющее местами наибольший и наименьший элементы
Создать приложение, меняющее местами наибольший и наименьший элементы.

Создать приложение форма которого показана на этом рисунке
Создать приложение форма которого показана на этом рисунке. Приложение должно включать контрольные окна типа CheckBox, кнопки выбора...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru