Консультация № 194014
27.11.2018, 18:37
0.00 руб.
27.11.2018, 19:28
0 11 1
Помогите пожалуйста!
Началась сессия, а я болела долго и вообще не понимаю, что от меня хотят преподы(
Это все должно быть в Lazarus

Підрахувати середнє арифметичне всіх від’ємних елементів у даному одновимірному масиві.
Виконати сортування елементів масиву за спаданням, використовуючи метод обміну

Знайти найбільший елемент двовимірного масиву і поміняти його місцями з першим. Виконати
сортування непарних рядків за спаданням, а парних – за зростанням

Несколько задач, каждая отдельно:
Цитата: 402513
Підрахувати середнє арифметичне всіх від’ємних елементів у даному одновимірному масиві.

=
Цитата: Зенченко Константин Николаевич
Подсчитать среднее арифметическое всех отрицательных элементов в данном одномерном массиве.


Цитата: 402513
Виконати сортування елементів масиву за спаданням, використовуючи метод обміну

=
Цитата: Зенченко Константин Николаевич
Выполнить сортировку элементов массива по убыванию, используя метод обмена


Цитата: 402513
Знайти найбільший елемент двовимірного масиву і поміняти його місцями з першим. Виконати сортування непарних рядків за спаданням, а парних – за зростанням

=
Цитата: Зенченко Константин Николаевич
Найти наибольший элемент двумерного массива и поменять его местами с первым. выполнить сортировку нечетных строк по убыванию, а четных - по возрастанию


На Портале : задавайте вопросы на русском языке - оф.язык портала.

Обсуждение

давно
Старший Модератор
31795
6196
27.11.2018, 19:49
общий
1) что Вы уже знаете = синтаксис ЯВУ Pascal?
2) Ваши наброски, или как Вы представляете решение задач.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
27.11.2018, 21:22
общий
Адресаты:
1. Pascal уже выучили полностью
2. Посчитать среднее арифметическое отрицательных элементов одномерного массива по идее нужно сделать чтобы выводилось в поле Edit или подобно ему при нажатии кнопки.
Сортировать по убыванию так же при нажатии кнопки, и сортированный массив должен выводиться в еще одно поле StringGrid
Найти наибольший элемент двумерного массива и поменять его местами с первым. выполнить сортировку нечетных строк по убыванию, а четных - по возрастанию так же должно происходить по нажатию кнопки и выводиться в StringGrid
Простите за задания на украинском)
давно
Старший Модератор
31795
6196
27.11.2018, 22:24
общий
27.11.2018, 22:25
Стою на асфальте в лыжи обутый, ...

Форма, это не то, что Вы накидали на форму, а то, что визуально отображается для юзера. Разберитесь, что куда.
Прикрепленные файлы:
7579b766faa44a990001c5ab81f69e03.jpg
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
27.11.2018, 23:05
общий
Адресаты:
это я знаю
форма то тут к чему?
давно
Старший Модератор
31795
6196
28.11.2018, 20:25
общий
Цитата: 402513
одно поле StringGrid

Одно поле или одна ячейка StringGrid = строка.
В Execel использование StringGrid, оправдано, т.к. основная работа строится на визуализации, работы пользователя с данными, а вывод на экран производится только в символьном типе, а строка это массив символов. Авто-определение типа, происходит на уровне загрузки данных, также как и вычисление формул, не которое время тратится на вычисление, при изменении формул.
Вот, для постоянного быстрого вывода информации на экран, все данные в Excel хранятся в StringGrid.

Использование StringGrid, в качестве массива, это моветон, представьте, по заданию, вы работаете с массивами чисел, к которым можно применить операции сравнения, постоянно прыгать IntToStr и StrToInt. Разницу по времени выполнения можно проверить с помощью переменной функции FormatDateTime('hh:mm:ss-sss',Now());
Хотя применять операции сравнения к строкам, тоже допустимо, но не всегда это оправдано. Смотрите картинку.
Прикрепленные файлы:
1bd273dba19ee3ff1570a6390460d89c.jpg
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
28.11.2018, 20:31
общий
28.11.2018, 20:34
Забыл добавить, вот код Delphi, ну нет у меня на рабочем компе Лазаря.
[code lang=pascal h=250]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
a:string='123';
b:string='3456';
c:string='-123';
d:string='-3456';
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function x(i:integer;k,l:string):string;
var
y:string;
begin
y:=IntToStr(i)+') '+k+' > '+l+' ';
if k>l then y:=y+'true'else y:=y+'false';
y:=y+' right:=';
if StrToInt(k)>StrToInt(l)then y:=y+'true'else y:=y+'false';
x:=y+' ';
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Label1.Caption:=x(1,a,b)+x(2,a,c)+x(3,a,d)+x(4,b,c)+x(5,b,d)+x(6,c,d);
Form1.Label2.Caption:=x(7,'+'+a,'+'+b)+x(8,'+'+a,c)+x(9,'+'+a,d)+x(10,'+'+b,c)+x(11,'+'+b,d)+x(12,c,d);
end;
end.[/code]
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
29.11.2018, 00:25
общий
Адресаты:
Спасибо)
А использование StringGrid обязательно по условию задания
давно
Старший Модератор
31795
6196
29.11.2018, 01:23
общий
StringGrid - это визуальная часть, которая будет работать, при любом изменении значений массива. Об этом я писал:
Цитата: Зенченко Константин Николаевич
Форма, это не то, что Вы накидали на форму, а то, что визуально отображается для юзера.


Я могу Вам дать готовое решение, но это не цікаво для мну, я хочу, чтобы Вы:
1)
Цитата: 402513
а я болела долго и вообще не понимаю, что от меня хотят

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

У Вас всегда будет под рукой FormatDateTime('hh:mm:ss-sss',Now()), которая поможет Вам, хоть на долю секунду, но доказать, Ваше решение оптимально.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
03.12.2018, 14:42
общий
Что у Вас не получается?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
04.12.2018, 12:36
общий
Сразу говорю, код Delphi, первое задание, остальные решаются аналогично.
[code lang=pascal h=300]unit Unit1;

interface

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

type
TForm1 = class(TForm)
Label1: TLabel;
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure StringGridKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.StringGrid1.RowCount:=1;
Form1.StringGrid1.ColCount:=6;
Form1.StringGrid1.Height:=Form1.StringGrid1.RowCount*Form1.StringGrid1.DefaultRowHeight;
Form1.StringGrid1.Width:=Form1.StringGrid1.ColCount*Form1.StringGrid1.DefaultColWidth;
Form1.Width:=Form1.StringGrid1.Width;
Form1.Label1.Caption:='ONE: please enter array[1..'+IntToStr(Form1.StringGrid1.ColCount-1)+']';
end;
procedure TForm1.StringGridKeyPress(Sender: TObject; var Key: Char);
var
a:string;
b,c,d:integer;
begin
case Key of
'0'..'9':Form1.StringGrid1.Cells[Form1.StringGrid1.Col,0]:=Form1.StringGrid1.Cells[Form1.StringGrid1.Col,0]+Key;
#8:begin
a:=Form1.StringGrid1.Cells[Form1.StringGrid1.Col,0];
Delete(a,length(a),1);
Form1.StringGrid1.Cells[Form1.StringGrid1.Col,0]:=a;
end;
'-':if length(Form1.StringGrid1.Cells[Form1.StringGrid1.Col,0])=0then Form1.StringGrid1.Cells[Form1.StringGrid1.Col,0]:=Key else Key:=chr(0);
#13:if Form1.StringGrid1.Col<Form1.StringGrid1.ColCount-1 then Form1.StringGrid1.Col:=Form1.StringGrid1.Col+1
else
begin
b:=0;
c:=0;
for d:=0 to Form1.StringGrid1.ColCount-1 do
if StrToInt(Form1.StringGrid1.Cells[d,0])<0 then
begin
b:=b+StrToInt(Form1.StringGrid1.Cells[d,0]);
inc(c);
end;
Form1.Label1.Caption:='ONE : result:='+FloatToStr(b/c);
end;
else Key:=chr(0);
end;
end;
end.[/code]
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
06.12.2018, 23:17
общий
это ответ
Здравствуйте, dasha.voloshina37!

Код Delphi последовательно выполняет все задания:
[code lang=pascal h=300]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure StringGridKeyPress(Sender: TObject; var Key: Char);
private { Private declarations }
public { Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.StringGrid1.RowCount:=1;
Form1.StringGrid1.ColCount:=6;
Form1.StringGrid1.Height:=(Form1.StringGrid1.RowCount+1)*Form1.StringGrid1.DefaultRowHeight;
Form1.StringGrid1.Width:=(Form1.StringGrid1.ColCount+1)*Form1.StringGrid1.DefaultColWidth;
Form1.Width:=Form1.StringGrid1.Width+20;
Form1.Height:=Form1.Label1.Top+Form1.Label1.Height+10+ Form1.StringGrid1.Top+Form1.StringGrid1.Height+10;
Form1.Label1.Caption:='1) please enter array[1..'+IntToStr(Form1.StringGrid1.ColCount-1)+']';
end;
procedure TForm1.StringGridKeyPress(Sender: TObject; var Key: Char);
var
a:string;
b,c,d,e:integer;
begin
case Key of
'0'..'9':Form1.StringGrid1.Cells[Form1.StringGrid1.Col,Form1.StringGrid1.Row]:=Form1.StringGrid1.Cells[Form1.StringGrid1.Col,Form1.StringGrid1.Row]+Key;
#8:begin
a:=Form1.StringGrid1.Cells[Form1.StringGrid1.Col,Form1.StringGrid1.Row];
Delete(a,length(a),1);
Form1.StringGrid1.Cells[Form1.StringGrid1.Col,Form1.StringGrid1.Row]:=a;
end;
'-':if length(Form1.StringGrid1.Cells[Form1.StringGrid1.Col,Form1.StringGrid1.Row])=0then Form1.StringGrid1.Cells[Form1.StringGrid1.Col,Form1.StringGrid1.Row]:=Key else Key:=chr(0);
#13:if Form1.StringGrid1.Col<Form1.StringGrid1.ColCount-1 then Form1.StringGrid1.Col:=Form1.StringGrid1.Col+1
else if Form1.StringGrid1.Row<Form1.StringGrid1.RowCount-1 then
begin
Form1.StringGrid1.Row:=Form1.StringGrid1.Row+1;
Form1.StringGrid1.Col:=0;
end
else
begin
a:=Form1.Label1.Caption;
case a[1] of
'1':begin
b:=0;
c:=0;
for d:=0 to Form1.StringGrid1.ColCount-1 do if StrToInt(Form1.StringGrid1.Cells[d,0])<0 then
begin
b:=b+StrToInt(Form1.StringGrid1.Cells[d,0]);
inc(c);
end;
if c>0 then
begin
Form1.Label1.Caption:='1) result:='+FloatToStr(b/c);
repeat
a:='';
for c:=0 to Form1.StringGrid1.ColCount-2 do
if StrToInt(Form1.StringGrid1.Cells[c,0])<StrToInt(Form1.StringGrid1.Cells[c+1,0])then
begin
a:=Form1.StringGrid1.Cells[c,0];
Form1.StringGrid1.Cells[c,0]:=Form1.StringGrid1.Cells[c+1,0];
Form1.StringGrid1.Cells[c+1,0]:=a;
end;
Form1.Refresh;
Sleep(5000);
until length(a)=0;
Form1.StringGrid1.RowCount:=5;
Form1.StringGrid1.Height:=(Form1.StringGrid1.RowCount+1)*Form1.StringGrid1.DefaultRowHeight;
Form1.Height:=Form1.Label1.Top+Form1.Label1.Height+10+ Form1.StringGrid1.Top+Form1.StringGrid1.Height+10;
Form1.Label1.Caption:='2) please enter matrix['+IntToStr(Form1.StringGrid1.RowCount)+'x'+IntToStr(Form1.StringGrid1.ColCount)+']'
end else Form1.Label1.Caption:='1) no negative numbers, please again';
Form1.StringGrid1.Row:=0;
Form1.StringGrid1.Col:=0;
for c:=0 to Form1.StringGrid1.ColCount-1 do Form1.StringGrid1.Cells[c,0]:='';
Form1.Refresh;
sleep(5000);
end;
'2':begin
d:=0;
e:=0;
for b:=0 to Form1.StringGrid1.RowCount-1 do
for c:=0 to Form1.StringGrid1.ColCount-1 do
if StrToInt(Form1.StringGrid1.Cells[c,b])>StrToInt(Form1.StringGrid1.Cells[d,e])then
begin
d:=c;
e:=b;
end;
a:=Form1.StringGrid1.Cells[0,0];
Form1.StringGrid1.Cells[0,0]:=Form1.StringGrid1.Cells[d,e];
Form1.StringGrid1.Cells[d,e]:=a;
Form1.Refresh;
Form1.StringGrid1.Refresh;
Sleep(9000);
for b:=0 to Form1.StringGrid1.RowCount-1 do
begin
repeat
a:='';
d:=1-2*(b mod 2);
for c:=0 to Form1.StringGrid1.ColCount-2 do
if (d*StrToInt(Form1.StringGrid1.Cells[c,b]))<(d*StrToInt(Form1.StringGrid1.Cells[c+1,b]))then
begin
a:=Form1.StringGrid1.Cells[c,b];
Form1.StringGrid1.Cells[c,b]:=Form1.StringGrid1.Cells[c+1,b];
Form1.StringGrid1.Cells[c+1,b]:=a;
end;
Form1.Refresh;
Sleep(5000);
until length(a)=0;
end;
Form1.Label1.Caption:='job stoped';
end;
end;
end;
else Key:=chr(0);
end;
end;
end.[/code]

Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа