Страница 1 из 2

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

Добавлено: 03 июл 2008, 20:37
RiLL
На встроенном в С++ Ассемблере надо сделать(желателен графический интерфейс)

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

Заранее спасибо!Если что ася - 324605768

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

Добавлено: 03 июл 2008, 21:43
Vasilisk
Заранее пожалуйста! :p :p :p

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

Добавлено: 04 июл 2008, 02:02
RiLL
У меня получилось пока что только это набить

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

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

#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);
}

//---------------------------------------------------------------------------
дальше не стал пробовать с выводом суммы,т.к это даже не работает :(

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

Добавлено: 04 июл 2008, 08:14
airyashov
попробуйте так

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

int sum(int a, int b)
{
int n;
__asm
   {
     mov eax,a
     add eax,b
     mov n,eax
   }
return n;
}

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

Добавлено: 04 июл 2008, 09:00
RiLL
airyashov,спасибо,что откликнулись.но ничего не изменилось в работе.
это конечно смешно,у меня компилица,но я ничего не могу ввести в StringGrid ни в первый,ни в другой... :) )м-да уж...

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

Добавлено: 04 июл 2008, 09:22
Vasilisk
Чё-та я ничего не понимаю... Что делает ButtonClick - ввод? Тогда куда оно вводит, назовите переменную, которая получает значение и какое именно...

Вывод - тогда откуда? Откуда вызывается функция sum, та, которая на ассемблере?

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

Добавлено: 04 июл 2008, 09:39
airyashov
проверить функцию

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

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Edit2->Text = IntToStr(sum(2,5));
}

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

Добавлено: 04 июл 2008, 12:27
RiLL
по идее ButtonClick - это после того,как нажать на нее в Edit'ы выводятся минимальные элементы массивов x[5] и y[5]

а значения в сами массивы просто вводятся с клавиатуры(просто обычное заполнение StringGrid)

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

Добавлено: 04 июл 2008, 12:34
airyashov
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);

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

Добавлено: 04 июл 2008, 12:46
RiLL
ой да,вы правы.извиняюсь.этот 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);