Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2011, 10:53   #1
Aleksey1924
 
Регистрация: 25.04.2011
Сообщений: 6
По умолчанию Нужно вывести максимальное и минимальное значение из матрицы

Здравствуйте господа!

Подскажите пожалуйста, а то я застрял на этапе одном.
Описываю подробно.
1) Я создал небольшую форму на которой расположены 3 кнопки и текстовое поле.
Последняя кнопка (button3 ) выводит рандомные значения в матрице.

Нужно теперь чтобы после формирования матрицы, выводилось из нее максимальное число и минимальное. Т.е. нужен краткий алгоритм сравнения. (а вот как его написать я не знаю, т.к. с делфи незнаком)
Проще говоря:
1) Если число максимальное (самое большое) в массиве - то выводим на экран
2) Если число минимальное (самое маленькое) в массиве - то выводим на экран.

Собственно теперь сам код программы:

Код:
unit Project9;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    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;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Lines.Add('Студент');
memo1.Lines.Add('Информатика');

end;

procedure TForm1.Button2Click(Sender: TObject);
var i:integer; s:string;
begin

s:=''; //устанавливаем строку пустой

{формируем строку накапливая в ней  цифры и пробелы между ними}
for i:=1 to 5 do s:=s+'  '+IntToStr(i);

Memo1.Lines.Add(s); // выводим строку в Memo1 
end;



procedure TForm1.Button3Click(Sender: Tobject);
var 
I, j:word;//Определяем переменные целого типа индексирующие строку и столбец
massiv:array[1..3,1..4] of word; {Определяем двумерный массив(матрицу) целых чисел }
s:string; //Определяем строку для  заполнения её цифрами и последующего вывода

begin
Memo1.Clear;//Очищаем Memo1
randomize;// Инициализируем генератор случайных чисел
for i:=1 to 3 do //Делаем двойной цикл чтобы заполнить массив massiv[I,j]
for j:=1 to 4 do 
massiv[I,j]:=random(101);// случайными числами от 0 до 100 функцией random


for i:=1 to 3 do  begin // Цикл по строкам с индексом i
s:=''; // очищаем переменную s содержащую строку
for j:=1 to 4 do // Цикл по столбцам с индексом j
s:=s+'  '+IntToStr(massiv[I,j]);//Формируем строку s из столбцов j
Memo1.Lines.Add(s);//Выводим строку в Memo1


                	    end;

end;


end.
Фото программы


Помогите пожалуйста, реализовать этот алгоритм сравнения.

Последний раз редактировалось Stilet; 25.04.2011 в 11:52.
Aleksey1924 вне форума Ответить с цитированием
Старый 25.04.2011, 11:01   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

Код:
temp := massiv[1, 1];

for i:=1 to 3 do
 for j:=1 to 4 do 
   if (temp > massiv[i, j]) then
     temp := massiv[i, j];
в temp будет минимальный элемент матрицы

Код:
temp := massiv[1, 1];

for i:=1 to 3 do
 for j:=1 to 4 do 
   if (temp < massiv[i, j]) then
     temp := massiv[i, j];
в temp будет максимальный элемент матрицы
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 25.04.2011, 11:20   #3
Aleksey1924
 
Регистрация: 25.04.2011
Сообщений: 6
По умолчанию

Спасибо большое!

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

Получился код в итоге такой, но он не работает (ругается на переменную темп)

Конечный код

Цитата:
unit Project9;

interface

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

type
TForm1 = class(TForm)
Memo1: TMemo;
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;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Lines.Add('Студент');
memo1.Lines.Add('Информатика');

end;

procedure TForm1.Button2Click(Sender: TObject);
var i:integer; s:string;
begin

s:=''; //устанавливаем строку пустой

{формируем строку накапливая в ней цифры и пробелы между ними}
for i:=1 to 5 do s:=s+' '+IntToStr(i);

Memo1.Lines.Add(s); // выводим строку в Memo1
end;



procedure TForm1.Button3Click(Sender: Tobject);
var
I, j:word;//Определяем переменные целого типа индексирующие строку и столбец
massiv:array[1..3,1..4] of word; {Определяем двумерный массив(матрицу) целых чисел }
s:string; //Определяем строку для заполнения её цифрами и последующего вывода

begin
Memo1.Clear;//Очищаем Memo1
randomize;// Инициализируем генератор случайных чисел
for i:=1 to 3 do //Делаем двойной цикл чтобы заполнить массив massiv[I,j]
for j:=1 to 4 do
massiv[I,j]:=random(101);// случайными числами от 0 до 100 функцией random


for i:=1 to 3 do begin // Цикл по строкам с индексом i
s:=''; // очищаем переменную s содержащую строку
for j:=1 to 4 do // Цикл по столбцам с индексом j
s:=s+' '+IntToStr(massiv[I,j]);//Формируем строку s из столбцов j
Memo1.Lines.Add(s);//Выводим строку в Memo1

// Добавленное сравнение на минимум
temp := massiv[1, 1];

for i:=1 to 3 do
for j:=1 to 4 do
if (temp > massiv[i, j]) then
temp := massiv[i, j];
// Добавленное сравнение на максимум
temp := massiv[1, 1];

for i:=1 to 3 do
for j:=1 to 4 do
if (temp < massiv[i, j]) then
temp := massiv[i, j];
Memo1.Lines.Add(temp);//Выводим максимальное и минимальное

end;

end;


end.
В конце не получается вывести в поле на экран это теперь
Aleksey1924 вне форума Ответить с цитированием
Старый 25.04.2011, 11:26   #4
Азамат Казанчев
Форумчанин
 
Регистрация: 25.04.2011
Сообщений: 110
По умолчанию

1 - опиши temp в var,а то я не вижу его (его нет вот он и глючит)
2 - желательно, до Memo1.Lines.Add(temp) очисть мемо через clear (избежишь неразберихи)
Азамат Казанчев вне форума Ответить с цитированием
Старый 25.04.2011, 11:43   #5
Aleksey1924
 
Регистрация: 25.04.2011
Сообщений: 6
По умолчанию

1)В var описал только вот чую (присвоил не тому типу , в даном случае word)
2) Поле очистил
Теперь снова ругается на циклы
Вот конечный код для кнопки 3
Цитата:
procedure TForm1.Button3Click(Sender: Tobject);
var
I, j,temp:word;//Îïðåäåëÿåì ïåðåìåííûå öåëîãî òèïà èíäåêñèðóþùèå ñòðîêó è ñòîëáåö
massiv:array[1..3,1..4] of word; {Îïðåäåëÿåì äâóìåðíûé ìàññèâ(ìàòðèöó) öåëûõ ÷èñåë }
s:string; //Îïðåäåëÿåì ñòðîêó äëÿ çàïîëíåíèÿ å¸ öèôðàìè è ïîñëåäóþùåãî âûâîäà

begin
Memo1.Clear;//Î÷èùàåì Memo1
randomize;// Èíèöèàëèçèðóåì ãåíåðàòîð ñëó÷àéíûõ ÷èñåë
for i:=1 to 3 do //Äåëàåì äâîéíîé öèêë ÷òîáû çàïîëíèòü ìàññèâ massiv[I,j]
for j:=1 to 4 do
massiv[I,j]:=random(101);// ñëó÷àéíûìè ÷èñëàìè îò 0 äî 100 ôóíêöèåé random


for i:=1 to 3 do begin // Öèêë ïî ñòðîêàì ñ èíäåêñîì i
s:=''; // î÷èùàåì ïåðåìåííóþ s ñîäåðæàùóþ ñòðîêó
for j:=1 to 4 do // Öèêë ïî ñòîëáöàì ñ èíäåêñîì j
s:=s+' '+IntToStr(massiv[I,j]);//Ôîðìèðóåì ñòðîêó s èç ñòîëáöîâ j
Memo1.Lines.Add(s);//Âûâîäèì ñòðîêó â Memo1

// Минимум
temp := massiv[1, 1];

for i:=1 to 3 do
for j:=1 to 4 do
if (temp > massiv[i, j]) then
temp := massiv[i, j];
// Максимум
temp := massiv[1, 1];

for i:=1 to 3 do
for j:=1 to 4 do
if (temp < massiv[i, j]) then
temp := massiv[i, j];
Memo1.Clear;//Очищаем поле перед выводом мин и макс
Memo1.Lines.Add(temp);//Выводим переменную темп

end;

end;


end.
В итоге не выводится ругается на это
Aleksey1924 вне форума Ответить с цитированием
Старый 25.04.2011, 11:59   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:

for i:=1
to 3 do begin
s:='';
for j:=1 to 4 do s:=s+' '+IntToStr(massiv[I,j]);
Memo1.Lines.Add(s);
// Минимум
temp := massiv[1, 1];
for i:=1 to 3 do...
Ничего не замечаешь? В вложенном цикле FOR нельзя использовать переменную-счетчик, используемую в цикле, в котором он вложен.

Но если по русски - ты просто end-ом не закрыл один из циклов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.04.2011, 12:10   #7
Aleksey1924
 
Регистрация: 25.04.2011
Сообщений: 6
По умолчанию

Закрыл цикл, теперь надеюсь последняя проблема осталась, в последней строке, ее устранить и должно заработать.
Конечный код
Цитата:
procedure TForm1.Button3Click(Sender: Tobject);
var
I, j,temp:word;//Îïðåäåëÿåì ïåðåìåííûå öåëîãî òèïà èíäåêñèðóþùèå ñòðîêó è ñòîëáåö
massiv:array[1..3,1..4] of word; {Îïðåäåëÿåì äâóìåðíûé ìàññèâ(ìàòðèöó) öåëûõ ÷èñåë }
s:string; //Îïðåäåëÿåì ñòðîêó äëÿ çàïîëíåíèÿ å¸ öèôðàìè è ïîñëåäóþùåãî âûâîäà

begin
Memo1.Clear;//Î÷èùàåì Memo1
randomize;// Èíèöèàëèçèðóåì ãåíåðàòîð ñëó÷àéíûõ ÷èñåë
for i:=1 to 3 do //Äåëàåì äâîéíîé öèêë ÷òîáû çàïîëíèòü ìàññèâ massiv[I,j]
for j:=1 to 4 do
massiv[I,j]:=random(101);// ñëó÷àéíûìè ÷èñëàìè îò 0 äî 100 ôóíêöèåé random


for i:=1 to 3 do begin // Öèêë ïî ñòðîêàì ñ èíäåêñîì i
s:=''; // î÷èùàåì ïåðåìåííóþ s ñîäåðæàùóþ ñòðîêó
end; (здесь закрыл end-ом)
for j:=1 to 4 do // Öèêë ïî ñòîëáöàì ñ èíäåêñîì j
s:=s+' '+IntToStr(massiv[I,j]);//Ôîðìèðóåì ñòðîêó s èç ñòîëáöîâ j
Memo1.Lines.Add(s);//Âûâîäèì ñòðîêó â Memo1

// Äîáàâëåííîå ñðàâíåíèå íà ìèíèìóì
temp := massiv[1, 1];

for i:=1 to 3 do
for j:=1 to 4 do
if (temp > massiv[i, j]) then
temp := massiv[i, j];
// Äîáàâëåííîå ñðàâíåíèå íà ìàêñèìóì
temp := massiv[1, 1];

for i:=1 to 3 do
for j:=1 to 4 do
if (temp < massiv[i, j]) then
temp := massiv[i, j];
Memo1.Clear;//Î÷èùàåì Memo1 äëÿ âûâîäà çíà÷åíèé min è max
Memo1.Lines.Add(temp);//Âûâîäèì ìàêñèìàëüíîå è ìèíèìàëüíîå

end;

end;


end.
Ругается теперь на это (я как понял он не понимает что это за переменная temp а точнее ее тип ,т.к. я ее присвоил word (а какому типу присваивать эту переменную, точно не знаю)

Вот на что ругается
Aleksey1924 вне форума Ответить с цитированием
Старый 25.04.2011, 12:36   #8
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

на скрине ошибки видишь - внизу окна тебе компилятор на которые указывает?

Incompatibles types: String and Word >> несовместимые типы: строка и число

чтобы вывести число как строку, его (число) сначала нужно преобразовать в строку
в делфи это конструкция IntToStr(...)

в твоем примере это так будет
Код:
Memo1.Lines.Add(IntToStr(temp));
можно так
Код:
Memo1.Lines.Add(Format('%u', [temp]));
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 25.04.2011, 12:46   #9
Aleksey1924
 
Регистрация: 25.04.2011
Сообщений: 6
По умолчанию

Спасибо большое Вам теперь все работает!!! Я обратил внимание на какую ошибку отладчик выдает, только вот команды сами не знал к какому типу приписать temp.
Еще раз спасибо!
Aleksey1924 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Минимальное и максимальное значение в массиве. С++ Enigmya Помощь студентам 3 17.10.2011 16:07
максимальное и минимальное значение заданных чисел солнышко777 Паскаль, Turbo Pascal, PascalABC.NET 1 28.09.2010 16:29
эксель. найти максимальное и минимальное значение функции alex(21) Помощь студентам 2 07.03.2010 12:22
excel Определить максимальное и минимальное значение длины слов в таблице Nibbler Помощь студентам 0 05.12.2009 22:42
Определить максимальное/минимальное значение функции y=f(x) astrozombie Помощь студентам 2 16.02.2009 13:52