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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2011, 17:28   #1
Serjik-ahaha
Пользователь
 
Регистрация: 12.06.2011
Сообщений: 13
По умолчанию Задание по Delphi

Задана матрица размером NxM. Определить k - количество "особых" элементов матрицы, считая элемент “особым”, если в его строке слева от него находятся элементы меньшие его, а справа – большие.

Вот что я нахимичил. короче основа сделана, но именно с самим алгоритмом работы поставленной задачи разобраться не могу. в конце проги написал от себя бред, помогите сделать прогу рабочей)
Код:
unit Lab4;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    StringGrid1: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    Edit2: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  Nmax = 10; 
type
  TMas = array[1..Nmax, 1..Nmax] of Extended;

var
  Form1: TForm1;
  A : TMas;       // Îáúÿâëåíèå äâóìåðíîãî ìàññèâà
  N, M, i, j : integer;
  O : extended;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

  N := 3;
  M := 3;
  Edit1.Text := IntToStr(N);
  Edit2.Text := IntToStr(M);

  StringGrid1.RowCount := N + 1;
  StringGrid1.ColCount := M + 1;

  StringGrid1.Cells[0, 0] := 'Ìàññèâ NxM';

  for i:=1 to N do
  begin
    StringGrid1.Cells[0, i] := 'i='+ IntToStr(i);
  end;

  for i:=1 to M do
  begin
    StringGrid1.Cells[i, 0] := 'j='+ IntToStr(i);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  N := StrToInt(Edit1.Text);
  M := StrToInt(Edit2.Text);

  StringGrid1.RowCount := N + 1;
  StringGrid1.ColCount := M + 1;

  for i:=1 to N do
  begin
    StringGrid1.Cells[0, i] := 'i='+ IntToStr(i);
  end;

  for i:=1 to M do
  begin
    StringGrid1.Cells[i, 0] := 'j='+ IntToStr(i);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  s : extended;
begin

  for i:=1 to N do
  for j:=1 to M do
    A[i, j] := StrToFloat(StringGrid1.Cells[j, i]);

  if (A[i][j]>A[i][j-1]) and (A[i][j]<A[i][j+1])
  then O := A[i][j];

    Label5.caption := FloatToStr(O);
  end;

end.
Serjik-ahaha вне форума Ответить с цитированием
Старый 13.06.2011, 12:41   #2
was3110
Форумчанин
 
Аватар для was3110
 
Регистрация: 25.04.2010
Сообщений: 254
По умолчанию

всегда готов... пишите на ящик
помогать студентам - моя вторая профессия
was3110 вне форума Ответить с цитированием
Старый 13.06.2011, 13:30   #3
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Цитата:
Задана матрица размером NxM. Определить k - количество "особых" элементов матрицы, считая элемент “особым”, если в его строке слева от него находятся элементы меньшие его, а справа – большие.
Для решения нам потребуются следующие константы:

1. Размерность массива:

Код:
Const
  Nmax = 10; 
  Mmax = 10;
Для решения нам потребуются следующие переменные:

1. Двумерный массив, тип Integer.

Код:
Mas : Array [1..Nmax, 1..Mmax] Of Integer;
2. Счётчики циклов, тип Integer.

Код:
i, j : Integer;
3. Кол-во особых элементов, тип Integer.

Код:
k : Integer;
--------------------------------------------

Что касается поиска то надо в цикле пройтись так:

Код:
For i := 2 To NMax - 1 Do Begin ...
Нам не надо проверять крайние элементы, потому что слева/справа от них нет ничего.

Кароче както так:

Код:
Procedure TForm1.Button2Click(Sender: TObject);
Begin

StringGrid1.RowCount := 10;
StringGrid1.ColCount := 10;

Randomize;
For i := 1 To 10 Do
For j := 1 To 10 Do
  Begin
    A[i, j] := Random(10);
    StringGrid1.Cells[j, i] := IntToStr(A[i, j]);
  End;

k := 0;
For i := 1 To N Do
For j := 2 To M - 1 Do
  Begin
    If (A[i, j] >A [i, j-1]) And (A[i, j] < A[i, j + 1]) Then Inc(k);
  End;

Label5.caption := IntToStr(k);
// End
End;
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 13.06.2011, 13:38   #4
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Цитата:
Сообщение от was3110 Посмотреть сообщение
всегда готов... пишите на ящик
Это раздел "Помощь студентам". Раздел фриланс в другой стороне и явных причин туда перемещать тему я не вижу.

Прошу модераторов убрать сообщение пользователя was3110, так как в данной теме это спам и самореклама.

И даже если этот пост к фрилансу не относится, то смысл было его постить.
Сливочное масло Valio - компиляция как по маслу

Последний раз редактировалось Valio; 13.06.2011 в 13:42.
Valio вне форума Ответить с цитированием
Старый 13.06.2011, 14:03   #5
was3110
Форумчанин
 
Аватар для was3110
 
Регистрация: 25.04.2010
Сообщений: 254
По умолчанию

я согласен с valio, но хотелось бы обратить внимание, что тема простояла без ответа более 20 часов. И если бы я не обновил ее, так бы и умерла...
помогать студентам - моя вторая профессия
was3110 вне форума Ответить с цитированием
Старый 14.06.2011, 02:02   #6
Serjik-ahaha
Пользователь
 
Регистрация: 12.06.2011
Сообщений: 13
По умолчанию

Valio, спасибо за хорошее объяснение и помощь!)
только есть один нюанс... я сделал вроде все как надо, ну то есть ctrl+c, ctrl+v))))))) и вот на моменте
Код:
StringGrid1.Cells[j, i] := IntToStr(A[i, j]);
пишет вот такую ошубку:
Код:
[Error] Lab4.pas(98): There is no overloaded version of 'IntToStr' that can be called with these arguments
я растерян)))) что делать?
Serjik-ahaha вне форума Ответить с цитированием
Старый 14.06.2011, 09:20   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

IntToStr - переводит ЦЕЛЫЕ числа в строку.
У Вас же матрица вещественная!
Цитата:
Код:
type
  TMas = array[1..Nmax, 1..Nmax] of Extended;
var
  A : TMas;
попробуйте так:
Код:
StringGrid1.Cells[j, i] := FloatToStr(A[i, j]);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.06.2011, 14:26   #8
Serjik-ahaha
Пользователь
 
Регистрация: 12.06.2011
Сообщений: 13
По умолчанию

а елки-палки))) а я смотрю на числа i и j, и думаю они ведь интежер, все верно)) кароче я не выучил и гнать меня надо с универа))) извините за глупые вопросы) и всем огромное спасибо) правда работоспособность программы еще не проверял, но надеюсь все покатит)
Serjik-ahaha вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задание по Delphi viper92 Помощь студентам 1 01.12.2010 15:12
Задание в Delphi St1mkA Помощь студентам 7 26.02.2010 08:27
delphi задание Saka Помощь студентам 4 24.02.2010 10:43
Задание по Delphi. Sfera Помощь студентам 0 14.02.2010 09:51
Задание на Delphi Bimmer71 Помощь студентам 1 10.12.2009 23:02