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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2013, 21:37   #1
vovjkee
Пользователь
 
Регистрация: 07.06.2013
Сообщений: 17
По умолчанию Массив(непарный и парный)

Добрый день, помогите пожалуйста, есть программа рабочая, но выдает не правильный результат, нужно получить - Значения элементов одномерного массива состоят из произведения положительных значений элементов столбцов двумерного массива, а выдает не понятную фигню...
Отблагодарю WMZ!
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    StringGrid2: TStringGrid;
    Label4: TLabel;
    Button6: TButton;
    Button7: TButton;
    ADOTable1: TADOTable;
    ADOConnection1: TADOConnection;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
   
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  SG1 : Array[1..4,1..5] Of Real;
  SG2 : Array[1..4] Of Real;
  i, j, k, buf : Integer;
  max : Real;
  f:Text;
implementation

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
begin
  k := 1;
  For i:=1 To 4 Do
  For j:=1 To 5 Do
    Begin
      If ((k Mod 2) <> 0) Then
        StringGrid1.Cells[j-1,i-1] := FloatToStr(k - 1)
      Else
        StringGrid1.Cells[j-1,i-1] := FloatToStr(k + 1);
      k := k + 1;
    End;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Randomize;
  For i:=1 To 4 Do
  For j:=1 To 5 Do
    StringGrid1.Cells[j-1,i-1] := FloatToStr(50 - Random(101));
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  i, j, k, p, index : Integer;
  res : Real;
begin
  for i := 1 to 4 do {столбцы}
    for j := 1 to 5 do { строки }
      if  StringGrid1.Cells[j - 1, i - 1] = '' then  {  StringGrid1.Cells[строка,столбец]}
        SG1[i, j] := 0  { SG1[столбец,строка] }
      else
        SG1[i, j] := StrToFloat(StringGrid1.Cells[j - 1, i - 1]);
 
  for i := 1 to 4 do {столбцы}
  begin
    SG2[i] := 1;
    for j := 1 to 5 do { строки }
    begin
      p := -1; { парность неопределена}
      index := j; {фиксируем index}
      for k := 1 to 5 do
      begin
        if k <> index then
        begin
          if SG1[i, k] = SG1[i, index] then
            p := 1 {элемент парный}
          else
            p := 0; {элемент непарный}
        end;
      end;
 
      if p = 1 then
        res := 3.2 + SG1[i, j] { непарный 3.2+i }
      else
      begin
        if p = 0 then
          res := 6.4 - SG1[i, j]; { парный 6.4+i }
          { else ошибка}
      end;
      { значения элементов одномерного массива StringGrid2.Cells
        состоят из произведения положительных значений элементов
        столбцов двухмерного массива }
      if res > 0 then
      begin
        SG2[i] := SG2[i] * res;
      end;
    end;
  end;
 
  for i := 1 to 4 do
    StringGrid2.Cells[0, i - 1] := FloatToStr(SG2[i]);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  For i:=1 To 4 Do
  For j:=1 To 5 Do
    StringGrid1.Cells[j-1,i-1] := ' ';

  For i:=1 To 4 Do
    Begin
      StringGrid2.Cells[0,i-1] := ' ';
      SG2[i] := 0;
    End;
end;

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

procedure TForm1.Button6Click(Sender: TObject);
begin
  AssignFile(f,GetCurrentDir+'\F.txt');
  Reset(f);
  For i:=1 To 4 Do
  For j:=1 To 5 Do
    Begin
      Read(f,buf);
      StringGrid1.Cells[j-1,i-1] := IntToStr(buf);
    End;
   CloseFile(f);
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
  With ADOTable1 Do
    Begin
      Active:=True;
      First;
      For i:=1 To 4 Do
      For j:=1 To 5 Do
        begin
          StringGrid1.Cells[j-1,i-1] := IntToStr(Integer(FieldValues['chislo']));
          Next;
        End;
    end;
  AdoConnection1.Close;
end;

end.
Изображения
Тип файла: jpg Безымянный.jpg (41.6 Кб, 62 просмотров)

Последний раз редактировалось vovjkee; 12.06.2013 в 22:13.
vovjkee вне форума Ответить с цитированием
Старый 13.06.2013, 10:56   #2
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Произведение положительных элементов столбцов можно получить так
Код:
procedure TForm1.Button3Click(Sender: TObject);
Var
  proizv : Real;
  IsFound : Boolean;
begin
   for I := 1 to 5 do
   Begin
     IsFound := false;
     proizv := 1;
     for j := 1 to 4 do
     Begin
       if (SG1[j, i] > 0) then
       Begin
         proizv := proizv * SG1[j, i];
         if not IsFound then
           IsFound := true;
       End;
     End;
     if IsFound then
       Sg2[i] := proizv;
   End;

   for I := 0 to StringGrid2.RowCount - 1 do
    StringGrid2.Cells[0, i] := FloatToStrF(SG2[i+1],ffFixed, 4, 2);
end;
Не понял что означают выражения "парный" и "непарный". Приведите пример.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681

Последний раз редактировалось GetMax; 13.06.2013 в 11:01.
GetMax вне форума Ответить с цитированием
Старый 13.06.2013, 11:27   #3
vovjkee
Пользователь
 
Регистрация: 07.06.2013
Сообщений: 17
По умолчанию

Цитата:
Не понял что означают выражения "парный" и "непарный". Приведите пример.
На картинке показано значение непарного элемент = 3.2+i и парного элемента = 6.4-i, осталось только понять куда это запихнуть...

Есть готовый и рабочий код с этим значением, только результат считает немного не правильно, вот код:

Код:
procedure TForm1.Button3Click(Sender: TObject);
var
  i, j, k, p, index : Integer;
  res : Real;
begin
  for i := 1 to 4 do {столбцы}
    for j := 1 to 5 do { строки }
      if  StringGrid1.Cells[j - 1, i - 1] = '' then  {  StringGrid1.Cells[строка,столбец]}
        SG1[i, j] := 0  { SG1[столбец,строка] }
      else
        SG1[i, j] := StrToFloat(StringGrid1.Cells[j - 1, i - 1]);
 
  for i := 1 to 4 do {столбцы}
  begin
    SG2[i] := 1;
    for j := 1 to 5 do { строки }
    begin
      p := -1; { парность неопределена}
      index := j; {фиксируем index}
      for k := 1 to 5 do
      begin
        if k <> index then
        begin
          if SG1[i, k] = SG1[i, index] then
            p := 1 {элемент парный}
          else
            p := 0; {элемент непарный}
        end;
      end;
 
      if p = 1 then
        res := 3.2 + SG1[i, j] { непарный 3.2+i }
      else
      begin
        if p = 0 then
          res := 6.4 - SG1[i, j]; { парный 6.4+i }
          { else ошибка}
      end;
      { значения элементов одномерного массива StringGrid2.Cells
        состоят из произведения положительных значений элементов
        столбцов двухмерного массива }
      if res > 0 then
      begin
        SG2[i] := SG2[i] * res;
      end;
    end;
  end;
 
  for i := 1 to 4 do
    StringGrid2.Cells[0, i - 1] := FloatToStr(SG2[i]);
end;
vovjkee вне форума Ответить с цитированием
Старый 13.06.2013, 11:49   #4
vovjkee
Пользователь
 
Регистрация: 07.06.2013
Сообщений: 17
По умолчанию

Вот программа, идет как пример для своего индивидуального задания
Вложения
Тип файла: rar программа.rar (290.7 Кб, 6 просмотров)
vovjkee вне форума Ответить с цитированием
Старый 13.06.2013, 12:14   #5
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Проверяйте
Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
  i, j, k : Integer;
  proizv : Real;
  IsTwin : Boolean; //флаг парного элемента
  IsFound : Boolean; //флаг нахождения положительного элемента
begin
  for j := 1 to 5 do
  Begin
    proizv := 1;
    IsFound := false;
    for i := 1 to 4 do
    Begin
      if (SG1[i, j] > 0) then
      Begin
        if not IsFound then IsFound := true;
        //ищем пару для элемента
        IsTwin := false;
        for k := 1 to 4 do
        Begin
          if (SG1[i, j] = SG1[k, j]) and (k <> i) then  //если значения равны, то
          Begin
            IsTwin := true; //элемент ппарный
            break
          End;
        End;
        if (isTwin) then
          proizv := proizv * (6.4 - SG1[i , j])
        else
          proizv := proizv * (3.2 + SG1[i, j])
      End;
    End;
    if IsFound then
      StringGrid2.Cells[0, j - 1] := FloatToStr(proizv);
  End;
end;
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 13.06.2013, 12:30   #6
vovjkee
Пользователь
 
Регистрация: 07.06.2013
Сообщений: 17
По умолчанию

Цитата:
Сообщение от GetMax Посмотреть сообщение
Проверяйте
Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
  i, j, k : Integer;
  proizv : Real;
  IsTwin : Boolean; //флаг парного элемента
  IsFound : Boolean; //флаг нахождения положительного элемента
begin
  for j := 1 to 5 do
  Begin
    proizv := 1;
    IsFound := false;
    for i := 1 to 4 do
    Begin
      if (SG1[i, j] > 0) then
      Begin
        if not IsFound then IsFound := true;
        //ищем пару для элемента
        IsTwin := false;
        for k := 1 to 4 do
        Begin
          if (SG1[i, j] = SG1[k, j]) and (k <> i) then  //если значения равны, то
          Begin
            IsTwin := true; //элемент ппарный
            break
          End;
        End;
        if (isTwin) then
          proizv := proizv * (6.4 - SG1[i , j])
        else
          proizv := proizv * (3.2 + SG1[i, j])
      End;
    End;
    if IsFound then
      StringGrid2.Cells[0, j - 1] := FloatToStr(proizv);
  End;
end;
Запускает, но не показывает результат
http://i.piccy.info/i7/36397d13dc916...zymiannyi6.png
vovjkee вне форума Ответить с цитированием
Старый 13.06.2013, 12:41   #7
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

У меня всё работает. Прикрепил файл.
Вложения
Тип файла: rar работа.rar (523.4 Кб, 10 просмотров)
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 13.06.2013, 12:52   #8
vovjkee
Пользователь
 
Регистрация: 07.06.2013
Сообщений: 17
По умолчанию

Цитата:
Сообщение от GetMax Посмотреть сообщение
У меня всё работает. Прикрепил файл.
А можете скинуть только код, я подставлю в свою программу, просто я скачал архив, саму программу открывает, а код не показывает, Делфи не отвечает.
Я запуска dpr файл, выскакивает сверху делфи и не грузит, запуска приложения запускает только саму программу
http://i.piccy.info/i7/30f975c1327cc...zymiannyi7.jpg

Последний раз редактировалось vovjkee; 13.06.2013 в 12:58.
vovjkee вне форума Ответить с цитированием
Старый 13.06.2013, 13:18   #9
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Код:
procedure TForm1.Button3Click(Sender: TObject);
Var
  proizv : Real;
  IsFound : Boolean;
  IsTwin : Boolean;
begin
for j := 1 to 5 do
  Begin
    proizv := 1;
    IsFound := false;
    for i := 1 to 4 do
    Begin
      if (SG1[i, j] > 0) then
      Begin
        if not IsFound then IsFound := true;
        //ищем пару для элемента
        IsTwin := false;
        for k := 1 to 4 do
        Begin
          if (SG1[i, j] = SG1[k, j]) and (k <> i) then  //если значения равны, то
          Begin
            IsTwin := true; //элемент ппарный
            break
          End;
        End;
        if (isTwin) then
          proizv := proizv * (6.4 - SG1[i , j])
        else
          proizv := proizv * (3.2 + SG1[i, j])
      End;
    End;
    if IsFound then
      StringGrid2.Cells[0, j-1] := FloatToStr(proizv);
  End;
end;
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 13.06.2013, 13:32   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
//ищем пару для элемента
я, конечно, приношу свои извинения, но,
на мой взгляд, тут типичное языковое взаимонепонимание.

имхо, на украинском, слова "парный" / "непарный" означают исключительно "чётный" / "нечётный".
Никакую пару, на мой взгляд, в данной задаче искать не нужно!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан одномерный массив, сформировать новый массив по заданному правилу {Delphi} Nickolai47 Помощь студентам 5 16.12.2012 14:51
С# задан массив 5х5. сформировать массивы А и В. в массив А поместить элементы с четными индексами, в массив В с нечетны Koksa Помощь студентам 0 10.10.2011 11:26
Массив - Нужно написать массив и распечатать на экран с конца в начало(язык С++) econ Помощь студентам 1 29.05.2011 22:02
Как определить элемент массива парный или не парный ВДПУ Помощь студентам 1 27.02.2011 20:34
найти наибольший элемент из элементов одномерного массива,которые имеют парный номер soblaznitel Помощь студентам 0 26.05.2010 22:02