![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Мне нужно сделать вот такое: сформировать одномерный массив путем деления положительных элементов заданной таблицы на число К вывести полученный массив на экран
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls;
type
TForm1 = class(TForm)
mmo1: TMemo;
btn1: TButton;
btn2: TBitBtn;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
const n=10;
var
mass,A: array[1..n,1..n] of Integer;
B: array[1..30]of Integer;
K: Integer;
i, m, j: Integer;
begin
m:= 0;
randomize();
mmo1.Lines.Add('K= ');
for i:= 0 to n do
for j:= 0 to n do
begin
A[i,j]:= random(100);
end;
for i:= 0 to n do
for j:= 0 to n do
begin
if(A[i,j] > 0) then
begin
B[m] := a[i,j] div K;
m:= m+1;
end;
if (abs(A[i,j])<=k) and (abs(B[i])<=k) then
mmo1.Lines.Add(inttostr(A[i,j]));
mmo1.lines.Add(inttostr(B[m])) ;
end;
end;
end.Вывод происходит не правильный. Подскажите ребята плиз... Последний раз редактировалось nastya1993, 29.12.2022 в 16:59. |
|
#2
|
|||
|
|||
|
Очень странный код.
1 - индексация массива начинается с 1 а цикл с 0, access violation же, не? 2 - Массив mass как используется? 3 - Размер Массива B по-моему маловат, если я все правильно понял. 4 - Чему равно K? откуда берется значение? В общем чет как-нибудь так наверное: Код:
procedure TForm1.btn1Click(Sender: TObject);
const n=10;
var
mass{???},A: array[0..n,0..n] of Integer;
B: array[0..120]of Integer;
i, m, j, K: Integer;
begin
m:= 0;
K:=5;//???
randomize();
mmo1.Lines.Add('K= '+inttostr(K));
for i:= 0 to n do
for j:= 0 to n do
begin
A[i,j]:= random(100);
end;
for i:= 0 to n do
for j:= 0 to n do
begin
if(A[i,j] > 0) then
begin
B[m] := a[i,j] div K;
Inc(m);//m:= m+1; ???
end;
//if (abs(A[i,j])<=k) and (abs(B[i])<=k) then
//mmo1.Lines.Add(inttostr(A[i,j]));
//mmo1.lines.Add(inttostr(B[m]));
end;
for i:=0 to m do
mmo1.lines.Add(inttostr(B[i]));
end;Последний раз редактировалось Shaft, 30.12.2022 в 13:15. |
|
#3
|
|||
|
|||
|
Зачем использовать Целочисленное деление (DIV) если в условии задачи стоит просто деление?
Цитата:
тогда правильнее использовать просто деление и тогда массив В будет типа real. и тогда лучше указывать размерность массива B не как у вас Цитата:
Код:
B: array[0..n*n] of Real; И тогда при изменении константы n у вас сразу поменяются размерности массивов А и В. Далее у вас не выводиться значение K. Как у вас будет массив с отрицательными цифрами если у вас идет Цитата:
Со всеми исправлениями код будет выглядеть примерно так Код:
procedure TForm1.btn1Click(Sender: TObject);
const n=10;
var
A: array[0..n,0..n] of Integer;
B: array[0..n*n] of Real;
i, j: Integer; //для циклов массива
m: Integer; //количество положительных чисел
K: Integer; //делитель
begin
randomize();
m:= 0;
K:=5;// Будет вводиться каждый раз вручную? Он может быть только целочисленным или может быть отрицательным или даже дробным числом?
mmo1.Lines.Add('K= '+inttostr(k)); //что бы значение К выводилось
for i:= 0 to n do
for j:= 0 to n do A[i,j]:=-25+ random(50); //В данном случае у вас будут числа в диапазоне он -25 до +24 (Будут и положительные и отрицательные)
for i:= 0 to n do
for j:= 0 to n do
if(A[i,j] > 0) then
begin
B[m] := A[i,j]/K;
Inc(m);
end; //Вот здесь происходит поиск положительных чисел в массиве А, их деление и запись в массив В
for i:=0 to m do mmo1.lines.Add(Floattostr(B[i]));
end;
|
|
#4
|
||||
|
||||
|
Цитата:
Цитата:
Цитата:
Цитата:
Последний раз редактировалось Shaft, 30.12.2022 в 14:30. |