Встроенный в С++ Ассемблер.Решите задачку?

RiLL
Сообщения: 10
Зарегистрирован: 03 июл 2008, 02:41

На встроенном в С++ Ассемблере надо сделать(желателен графический интерфейс)

Даны 2 массива X[5] и Y[5].
Надо:а)найти минимумы каждого из этих массивов и вывести на экран
б) сложить эти минимумы и вывести на экран.

Заранее спасибо!Если что ася - 324605768
Vasilisk
Сообщения: 116
Зарегистрирован: 13 фев 2004, 18:43

Заранее пожалуйста! :p :p :p
RiLL
Сообщения: 10
Зарегистрирован: 03 июл 2008, 02:41

У меня получилось пока что только это набить

Код: Выделить всё

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

int sum(int a, int b)
{
int n;
asm
   {
     mov eax,a
     add eax,b
   }
return n;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int x[5];
int y[5];
int i,j;
int min = 0;
for(j=0;j<5;j++)
   {
    if (StringGrid1->Cells[j][0] == "")
       x[j]=0;
    else
       x[j]=StrToInt(StringGrid1->Cells[j][0]);
    if(x[j] < min)
      min = x[j];
   }
  Edit1->Text = IntToStr(min);
for(i=0;i<5;i++)
  {
    if (StringGrid1->Cells[0][i] == "")
       z[i]=0;
    else
       z[i]=StrToInt(StringGrid1->Cells[0][i]);
    if(z[i] < min)
      min = z[i];
   }
  Edit2->Text = IntToStr(min);
}

//---------------------------------------------------------------------------
дальше не стал пробовать с выводом суммы,т.к это даже не работает :(
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

попробуйте так

Код: Выделить всё

int sum(int a, int b)
{
int n;
__asm
   {
     mov eax,a
     add eax,b
     mov n,eax
   }
return n;
}
RiLL
Сообщения: 10
Зарегистрирован: 03 июл 2008, 02:41

airyashov,спасибо,что откликнулись.но ничего не изменилось в работе.
это конечно смешно,у меня компилица,но я ничего не могу ввести в StringGrid ни в первый,ни в другой... :) )м-да уж...
Vasilisk
Сообщения: 116
Зарегистрирован: 13 фев 2004, 18:43

Чё-та я ничего не понимаю... Что делает ButtonClick - ввод? Тогда куда оно вводит, назовите переменную, которая получает значение и какое именно...

Вывод - тогда откуда? Откуда вызывается функция sum, та, которая на ассемблере?
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

проверить функцию

Код: Выделить всё

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Edit2->Text = IntToStr(sum(2,5));
}
RiLL
Сообщения: 10
Зарегистрирован: 03 июл 2008, 02:41

по идее ButtonClick - это после того,как нажать на нее в Edit'ы выводятся минимальные элементы массивов x[5] и y[5]

а значения в сами массивы просто вводятся с клавиатуры(просто обычное заполнение StringGrid)
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int x[5];
int y[5];
int i,j;
int min = 0;
for(j=0;j<5;j++)// по столбцу грида
{
if (StringGrid1->Cells[j][0] == "")
x[j]=0;
else
x[j]=StrToInt(StringGrid1->Cells[j][0]);
if(x[j] < min)
min = x[j];
}
Edit1->Text = IntToStr(min);
for(i=0;i<5;i++)//по строке грида
{
if (StringGrid1->Cells[0] == "")
z=0;//!!!!!!!!!!!!!!!!!!!!!!!!! что за Z
else
z=StrToInt(StringGrid1->Cells[0]);
if(z < min)
min = z;
}
Edit2->Text = IntToStr(min);
RiLL
Сообщения: 10
Зарегистрирован: 03 июл 2008, 02:41

ой да,вы правы.извиняюсь.этот z на y надо исправить.сорри
вот

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int x[5];
int y[5];
int i,j;
int min = 0;
for(j=0;j<5;j++)// по столбцу грида
{
if (StringGrid1->Cells[j][0] == "")
x[j]=0;
else
x[j]=StrToInt(StringGrid1->Cells[j][0]);
if(x[j] < min)
min = x[j];
}
Edit1->Text = IntToStr(min);
for(i=0;i<5;i++)//по строке грида
{
if (StringGrid2->Cells[0] == "")
y=0;
else
y=StrToInt(StringGrid2->Cells[0]);
if(y < min)
min = y;
}
Edit2->Text = IntToStr(min);
Ответить