Модераторы: Poseidon
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Двумерные массивы 
V
    Опции темы
katerinchic
  Дата 10.5.2008, 03:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 10.5.2008

Репутация: 1
Всего: 1



Помогите пожалуйста отредактировать задачу в Delphi6,а то она у меня почему-то не работает=(( 
Решала в Delphi6 с помощью компонента StringGrid.
Задача такая:
Дана целочисленная квадратная матрица порядка n. Найти номера строк: а) все элементы которых - нули; б) все элементы которых чётны. 

И eщё вопрос: как в этой задаче сделать так,чтобы в ответе выдавался не один номер строки,а несколько номеров строк для того случая,когда мы вводим несколько строк,которые сосотят из нулей или из чётных чисел...?))
Заранее большое спасибо =)
Вот полностью моя неработающая программа: )))

Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit; // поле для ввода значения размерности матрицы
    Button1: TButton; // кнопка "номера строк,все элементы которых - нули"
    Button2: TButton; // кнопка "номера строк,все элементы которых - чётны"
    Button4: TButton; // кнопка "Выход"
    Label3: TLabel; //
    Label4: TLabel; //
    StringGrid1: TStringGrid;
    Button3: TButton; // кнопка "Новые данные"
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Edit1Exit(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    M:array [1..100,1..100] of Extended;
    N:Integer;
    N1:Extended;

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Var i:Integer;
    j:Integer;
begin
For i:=1 to StringGrid1.RowCount-1 do
For j:=1 to StringGrid1.ColCount-1 do
begin
M[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
end;
for i:=1 to n do
begin
n1:=0;
for j:=1 to n do
begin
n1:=n1+M[i][j];
if(n1<>0)then exit;
end;
if(n1=0)then Label3.Caption:='Номера строк,все элементы которых - нули: '+IntToStr(i);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Edit1.Clear;
Label3.Caption:='';
Label4.Caption:='';
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Form1.Close
end;
procedure TForm1.Edit1Exit(Sender: TObject);
Var i:Integer;
    j:Integer;
begin
N:=StrToInt(Edit1.Text);
StringGrid1.RowCount:=N+1;
StringGrid1.ColCount:=N+1;
For i:=1 to StringGrid1.RowCount do
StringGrid1.Cells[i,0]:=IntToStr(i);
For j:=1 to StringGrid1.ColCount do
StringGrid1.Cells[0,j]:=IntToStr(j);
StringGrid1.Options:=StringGrid1.Options+[goEditing];
end;
procedure TForm1.Button2Click(Sender: TObject);
Var i:Integer;
    j:Integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
if n mod 2=0 then Label4.Caption:='Номера строк, все элементы которых - чётны'+IntToStr(i);
end;
end;

end.


user posted image

Моя программа в Delphi:


Это сообщение отредактировал(а) katerinchic - 10.5.2008, 13:20

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  programma__.rar 189,97 Kb
PM MAIL   Вверх
v1rtu0z
Дата 10.5.2008, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 21.4.2008
Где: Воронеж

Репутация: нет
Всего: нет



я не совсем уверен в правильности строк 47, 48. в стрингГриде точно элементы не с нуля начинаются?
далее, строка 50. почему элементу матрицы [i,j] присваивается элемент сетки [j,i]?
про несколько строк можно так:
Код


Label3.Caption:='Номера строк,все элементы которых - нули: ';
Label3.Caption:=Label3.Caption + IntToStr(i) + ' ';

ну то бишь приплюсовывать конец каждый раз
PM MAIL ICQ   Вверх
THandle
Дата 10.5.2008, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



katerinchic, выложи пожалуйста полностью проект, подредактирую. smile 
Просто воспроизводить у себя все кнопки и тд. не хочется smile 
PM   Вверх
Rodman
Дата 10.5.2008, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 26
Всего: 122




M
Rodman
Модератор: Название темы должно содержать язык написания!

PM MAIL WWW Skype GTalk YIM MSN   Вверх
katerinchic
Дата 10.5.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 10.5.2008

Репутация: 1
Всего: 1



Цитата(THandle @ 10.5.2008,  09:38)
выложи пожалуйста полностью проект, подредактирую. smile 
Просто воспроизводить у себя все кнопки и тд. не хочется smile


THandle, выложила,в своё первое сообщение=)) Подредактируй пожалуйста)) Буду оч. благодарна =)) 
PM MAIL   Вверх
THandle
Дата 10.5.2008, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Так... подправил. теперь все находит. smile 
правда могут быть ошибки преобразования устой строки в число, но это попробуй сама пофиксить TryStrToInt, try..except..end smile 

Вот эта функция вычисляет все ли числа в строке нули?
Код


function Cleared(numb : integer) : boolean;
var
  i : integer;
begin
  result := true;
  for i := 1 to N - 1do
    if M[numb, i] <> 0 then
      begin
        result := false;
        exit;
      end;
end;


Эта вычисляет четные ли числа. Числа округляются.

Код

function Even(numb : integer) : boolean;
var
  i : integer;
begin
  result := true;
  for i := 1 to n - 1do
    if round(M[numb, i]) mod 2 <> 0 then
      begin
        result := false;
        exit;
      end;
end;




Вот весь код:

Код

unit Unit1;

interface

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

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

var
  Form1: TForm1;
  M : array [1..100, 1..100] of Extended;
  N : Integer;
  N1 : Extended;
implementation

{$R *.dfm}

function Cleared(numb : integer) : boolean;
var
  i : integer;
begin
  result := true;
  for i := 1 to N - 1do
    if M[numb, i] <> 0 then
      begin
        result := false;
        exit;
      end;
end;

function Even(numb : integer) : boolean;
var
  i : integer;
begin
  result := true;
  for i := 1 to n - 1do
    if round(M[numb, i]) mod 2 <> 0 then
      begin
        result := false;
        exit;
      end;
end;

procedure TForm1.Button1Click(Sender: TObject);
Var
  i:Integer;
  j:Integer;
begin
  For i := 1 to StringGrid1.RowCount - 1 do
    For j := 1 to StringGrid1.ColCount - 1 do
      M[i,j] := StrToFloat(StringGrid1.Cells[j,i]);
  Label1.Caption := 'Строки в которых все числа = 0:';
  for i := 1 to n - 1 do
    if Cleared(i) then
      Label1.Caption := Label1.Caption + IntToStr(i) + ',';
end;

procedure TForm1.Button2Click(Sender: TObject);
Var
  i:Integer;
  j:Integer;
begin
  For i := 1 to StringGrid1.RowCount-1 do
    For j := 1 to StringGrid1.ColCount-1 do
      M[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
  Label2.Caption := 'Строки в которых все числа четные:';
  for i := 1 to n - 1 do
    if Even(i) then
      Label2.Caption := Label2.Caption + IntToStr(i) + ',';
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Edit1.Clear;
  Label3.Caption:='';
  Label4.Caption:='';
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  Form1.Close
end;

procedure TForm1.Edit1Change(Sender: TObject);
Var
  i:Integer;
  j:Integer;
begin
  N:=StrToInt(Edit1.Text);
  StringGrid1.RowCount:=N;
  StringGrid1.ColCount:=N;
  For i:=1 to StringGrid1.RowCount - 1 do
    StringGrid1.Cells[i,0]:=IntToStr(i);
  For j:=1 to StringGrid1.ColCount - 1 do
    StringGrid1.Cells[0,j]:=IntToStr(j);
  StringGrid1.Options:=StringGrid1.Options + [goEditing];
end;

end.




Советую формочку сделать покрасивееsmile
И еще...
Зачем тут использовать такой массив? 100x100?
Почему бы не взять динамический?


Проект прикрепляю к сообщению.

Удачи! smile 

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  prg.rar 193,57 Kb
PM   Вверх
katerinchic
Дата 10.5.2008, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 10.5.2008

Репутация: 1
Всего: 1



THandle, огромное тебе спасибо!! =) всё работает =)) А насчёт формы: я её сначала сделала аккуратно,а потом когда проект раз 10 переделывала,чтоб каждый раз заново не писать, уже просто примерно делала)) сейчас всё приведу в нормальный вид=))
PM MAIL   Вверх
THandle
Дата 10.5.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



katerinchic, если вопрос исчерпан, то пожалуйста пометь тему как решенную smile 

Удачи smile 
PM   Вверх
katerinchic
Дата 10.5.2008, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 10.5.2008

Репутация: 1
Всего: 1



Хорошо,сейчас помечу =)) 
PM MAIL   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0945 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.