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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.12.2022, 16:57
nastya1993 nastya1993 вне форума
Прохожий
 
Регистрация: 29.12.2022
Сообщения: 1
Версия Delphi: Delphi 7
Репутация: 10
Печаль Подскажите пожалуйста по коду. Задачка вроде простая

Мне нужно сделать вот такое: сформировать одномерный массив путем деления положительных элементов заданной таблицы на число К вывести полученный массив на экран

Код:
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
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.

Вывод происходит не правильный. Подскажите ребята плиз...
Изображения
Тип файла: png Безымянный.png (8.0 Кбайт, 4 просмотров)

Последний раз редактировалось nastya1993, 29.12.2022 в 16:59.
Ответить с цитированием
  #2  
Старый 30.12.2022, 12:24
Shaft Shaft вне форума
Новичок
 
Регистрация: 15.05.2013
Сообщения: 74
Версия Delphi: 7/10.4
Репутация: 12
По умолчанию

Очень странный код.
1 - индексация массива начинается с 1 а цикл с 0, access violation же, не?
2 - Массив mass как используется?
3 - Размер Массива B по-моему маловат, если я все правильно понял.
4 - Чему равно K? откуда берется значение?

В общем чет как-нибудь так наверное:

Код:
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
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  
Старый 30.12.2022, 13:25
Vladimr Vladimr вне форума
Прохожий
 
Регистрация: 17.03.2021
Сообщения: 46
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Зачем использовать Целочисленное деление (DIV) если в условии задачи стоит просто деление?

Цитата:
Сообщение от Shaft
Код:
1
B[m] := a[i,j] div K;

тогда правильнее использовать просто деление и тогда массив В будет типа real.

и тогда лучше указывать размерность массива B не как у вас
Цитата:
Сообщение от Shaft
Код:
1
B: array[0..120] of Integer;
а
Код:
1
B: array[0..n*n] of Real;

И тогда при изменении константы n у вас сразу поменяются размерности массивов А и В.

Далее у вас не выводиться значение K.

Как у вас будет массив с отрицательными цифрами если у вас идет
Цитата:
Сообщение от Shaft
Код:
1
A[i,j]:= random(100);
и в вашем случае они будут всегда положительными?


Со всеми исправлениями код будет выглядеть примерно так
Код:
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
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  
Старый 30.12.2022, 13:40
Shaft Shaft вне форума
Новичок
 
Регистрация: 15.05.2013
Сообщения: 74
Версия Delphi: 7/10.4
Репутация: 12
По умолчанию

Цитата:
Сообщение от Vladimr
Зачем использовать Целочисленное деление (DIV) если в условии задачи стоит просто деление?
Так как ТС задал формируемый массив как целочисленный. Поскольку по всему видно что мы имеем не все данные я предположил что так и надо.

Цитата:
Сообщение от Vladimr
тогда лучше указывать размерность массива B не как у вас
Да, это имеет смысл.

Цитата:
Сообщение от Vladimr
Далее у вас не выводиться значение K.
Ага, это я 20 минут назад увидел и исправил.

Цитата:
Сообщение от Vladimr
Как у вас будет массив с отрицательными цифрами если у вас идет
Не увидел в задании что они должны быть и положительными и отрицательными, думаю что там за странные проверки

Последний раз редактировалось Shaft, 30.12.2022 в 14:30.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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